Writing /home/k4ml/webapps/drupal5/wiki/data/cache/2/21b0e5ad833455052983ce9dec89ac67.i failed
Writing /home/k4ml/webapps/drupal5/wiki/data/cache/2/21b0e5ad833455052983ce9dec89ac67.i failed
Writing /home/k4ml/webapps/drupal5/wiki/data/cache/2/21b0e5ad833455052983ce9dec89ac67.xhtml failed

phpHtmllib: Automatically generate form from database tables

Just experimenting, inspired by rubyonrails.

class gemilang_standardform_auto extends gemilang_standardform {
    var $_my_elements = array();
    var $_my_tablename;
 
    function setup_auto_init_elements() {
        $db = &$GLOBALS['db'];
        $rs = $db->Execute("select * from $this->_my_tablename limit 1");
        while (!$rs->EOF) {
            $fld = array();
            while ($count < $rs->_numOfFields) {
                $fld[] = $rs->FetchField($count);
                $count++;
            }
        $rs->MoveNext();
        }
 
        $this->my_elements = array();
        foreach ($fld as $field) {
            $attr = array();
            $attr['name'] = $field->name;
            $attr['type'] = $field->type;
            $attr['length'] = $field->max_length;
            if (!isset($this->_my_elements[$field->name]['control'])) {
                $attr['control'] = 'text';
            } else {
                $attr['control'] = $this->_my_elements[$field->name]['control'];
            }
 
            if (!isset($this->_my_elements[$field->name]['data'])) {
                $attr['data'] = array();
            } else {
                $attr['data'] = $this->_my_elements[$field->name]['data'];
            }
            $this->_my_elements[$field->name] = $attr;
        }
    }
 
    function auto_init_elements() {
        foreach ($this->_my_elements as $element) {
            switch($element['control']) {
                case 'listbox':
                    $this->add_element(new FEListBox($element['name'], False, Null, Null, $element['data']));
                    if (!isset($this->description[$element['name']])) {
                        $this->description[$element['name']] = $element['name'];
                    }
                    break;
                default:
                    $this->add_element(new FEText($element['name'], False, $element['length']));
                    if (!isset($this->description[$element['name']])) {
                        $this->description[$element['name']] = $element['name'];
                    }
            }
        }
    }
 
    function set_description($element_name, $description) {
        $this->description[$element_name] = $description;
    }
 
    function set_control($element_name, $control, $data = Null) {
        $this->_my_elements[$element_name]['control'] = $control;
        if (is_array($data)) {
            $this->_my_elements[$element_name]['data'] = $data;
        }
    }