function generateAll($f = array())
 {
     global $REX;
     $types = rex_xform::getTypeArray();
     foreach ($this->getTables() as $table) {
         // ********** Table schon vorhanden ?, wenn nein, dann anlegen
         $c = rex_sql::factory();
         // $c->debugsql = 1;
         $c->setQuery('CREATE TABLE IF NOT EXISTS `' . $table["table_name"] . '` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY )');
         // Felder merken, erstellen und eventuell loeschen
         $c->setQuery('SHOW COLUMNS FROM `' . $table["table_name"] . '`');
         $saved_columns = $c->getArray();
         foreach ($this->getTableFields($table["table_name"]) as $field) {
             $type_name = $field["type_name"];
             $type_id = $field["type_id"];
             if ($type_id == "value") {
                 $type_label = $field["f1"];
                 $dbtype = $types[$type_id][$type_name]['dbtype'];
                 if ($dbtype != "none" && $dbtype != "") {
                     // Column schon vorhanden ?
                     $add_column = TRUE;
                     foreach ($saved_columns as $uu => $vv) {
                         if ($vv["Field"] == $type_label) {
                             $add_column = FALSE;
                             unset($saved_columns[$uu]);
                             break;
                         }
                     }
                     // Column erstellen
                     if ($add_column) {
                         $c->setQuery('ALTER TABLE `' . $table["table_name"] . '` ADD `' . $type_label . '` ' . $dbtype);
                     }
                 }
             }
         }
         if (isset($f["delete_fields"]) && $f["delete_fields"] === TRUE) {
             foreach ($saved_columns as $uu => $vv) {
                 if ($vv["Field"] != "id") {
                     $c->setQuery('ALTER TABLE `' . $table["table_name"] . '` DROP `' . $vv["Field"] . '` ');
                 }
             }
         }
     }
 }
<?php

// ********************************************* TABLE ADD/EDIT/LIST
$table = $REX['TABLE_PREFIX'] . 'em_table';
$table_field = $REX['TABLE_PREFIX'] . 'em_field';
$bezeichner = "Tabelle";
$func = rex_request("func", "string", "");
$page = rex_request("page", "string", "");
$subpage = rex_request("subpage", "string", "");
$table_id = rex_request("table_id", "int");
$show_list = TRUE;
// ********************************************* FORMULAR
if ($func == "add" || $func == "edit") {
    $xform = new rex_xform();
    // $xform->setDebug(TRUE);
    $xform->setHiddenField("page", $page);
    $xform->setHiddenField("subpage", $subpage);
    $xform->setHiddenField("func", $func);
    $xform->setActionField("showtext", array("", "Vielen Dank fuer die Eintragung"));
    $xform->setObjectparams("main_table", $table);
    // für db speicherungen und unique abfragen
    $xform->setValueField("text", array("prio", "Priorit&auml;t"));
    if ($func == "edit") {
        $xform->setValueField("showvalue", array("table_name", "Name"));
        $xform->setHiddenField("table_id", $table_id);
        $xform->setActionField("db", array($table, "id={$table_id}"));
        $xform->setObjectparams("main_id", $table_id);
        $xform->setObjectparams("main_where", "id={$table_id}");
        $xform->setObjectparams('getdata', true);
        // Datein vorher auslesen
    } elseif ($func == "add") {
    if (isset($types['action'])) {
        ksort($types['action']);
        foreach ($types['action'] as $k => $v) {
            echo '<p class="rex-button">"<a href="' . $link . 'type_id=action&type_name=' . $k . '">' . $k . '</a>" - ' . $v['description'] . '</p>';
        }
    }
    ?>
</p>
</div>
</div>

<?php 
}
// ********************************************* FORMULAR
if (($func == "add" || $func == "edit") && isset($types[$type_id][$type_name])) {
    $xform = new rex_xform();
    // $xform->setDebug(TRUE);
    foreach ($this->getLinkVars() as $k => $v) {
        $xform->setHiddenField($k, $v);
    }
    $xform->setHiddenField("func", $func);
    $xform->setHiddenField("table_name", $table["table_name"]);
    $xform->setValueField("hidden", array("table_name", $table["table_name"]));
    $xform->setValueField("hidden", array("type_name", $type_name, "REQUEST"));
    $xform->setValueField("hidden", array("type_id", $type_id, "REQUEST"));
    $xform->setValueField("text", array("prio", "Prioritaet"));
    $i = 0;
    foreach ($types[$type_id][$type_name]['values'] as $v) {
        $i++;
        switch ($v['type']) {
            case "name":
    function getFieldPage()
    {
        global $REX, $I18N;
        // ********************************************* FIELD ADD/EDIT/LIST
        $func = rex_request('func', 'string', 'list');
        $page = rex_request('page', 'string', '');
        $subpage = rex_request('subpage', 'string', '');
        $tripage = rex_request('tripage', 'string', '');
        $type_id = rex_request('type_id', 'string');
        $type_name = rex_request('type_name', 'string');
        $field_id = rex_request('field_id', 'int');
        $show_list = true;
        $link_vars = '';
        foreach ($this->getLinkVars() as $k => $v) {
            $link_vars .= '&' . urlencode($k) . '=' . urlencode($v);
        }
        $TYPE = array('value' => $I18N->msg('xform_values'), 'validate' => $I18N->msg('xform_validates'), 'action' => $I18N->msg('xform_action'));
        // ********************************** TABELLE HOLEN
        $table = $this->table;
        $table_info = '<b>' . rex_translate($table->getName()) . ' [' . $table->getTableName() . ']</b> ';
        echo rex_content_block($table_info);
        // ********************************************* Missing Fields
        $mfields = $table->getMissingFields();
        // ksort($mfields);
        $type_real_field = rex_request('type_real_field', 'string');
        if ($type_real_field != '' && !array_key_exists($type_real_field, $mfields)) {
            $type_real_field = '';
        }
        if ($type_real_field != '') {
            ?>
            <div class="rex-addon-output"><h2 class="rex-hl2">Folgendes Feld wird verwendet: <?php 
            echo $type_real_field;
            ?>
</h2><div class="rex-addon-content"><p class="rex-tx1"><?php 
            $rfields = $this->table->getColumns();
            foreach ($rfields[$type_real_field] as $k => $v) {
                echo '<b>' . $k . ':</b> ' . $v . '<br />';
            }
            ?>
</p></div></div><?php 
        }
        // ********************************************* CHOOSE FIELD
        $types = rex_xform::getTypeArray();
        if ($func == 'choosenadd') {
            // type and choose !!
            $link = 'index.php?' . $link_vars . '&table_name=' . $table->getTableName() . '&func=add&';
            if (!$table->hasId()) {
                ?>
                <div class="rex-addon-output" id="xform-choosenadd"><h2 class="rex-hl2"><?php 
                echo $I18N->msg('xform_id_is_missing');
                ?>
</h2><div class="rex-addon-content">
                        <p class="rex-tx1"><?php 
                echo $I18N->msg('xform_id_missing_info');
                ?>
</p>
                    </div></div>
            <?php 
            } else {
                ?>
                <div class="rex-addon-output" id="xform-choosenadd"><h2 class="rex-hl2"><?php 
                echo $I18N->msg('xform_choosenadd');
                ?>
</h2><div class="rex-addon-content">
                        <p class="rex-tx1"><?php 
                echo $I18N->msg('xform_choosenadd_description');
                ?>
</p>
                    </div></div>
                <?php 
                if ($type_real_field == '' && count($mfields) > 0) {
                    ?>
                    <div class="rex-addon-output"><h2 class="rex-hl2">Es gibt noch Felder in der Tabelle welche nicht zugewiesen sind.</h2><div class="rex-addon-content">
                            <?php 
                    $d = 0;
                    foreach ($mfields as $k => $v) {
                        $d++;
                        $l = 'index.php?' . $link_vars . '&table_name=' . $table->getTableName() . '&func=choosenadd&type_real_field=' . $k . '&type_layout=t';
                        echo '<a href="' . $l . '">' . $k . '</a>, ';
                    }
                    ?>
</div></div>

                <?php 
                }
                ?>


                <div class="rex-addon-output xform-table_field">
                    <div class="rex-area-col-2">

                        <div class="rex-area-col-a">
                            <h3 class="rex-hl2">beliebte <?php 
                echo $TYPE['value'];
                ?>
</h3>
                            <div class="rex-area-content"><p class="rex-tx1"><?php 
                if (isset($types['value'])) {
                    ksort($types['value']);
                    foreach ($types['value'] as $k => $v) {
                        if (isset($v['famous']) && $v['famous']) {
                            echo '<p class="rex-button"><a class="rex-button" href="' . $link . 'type_id=value&type_name=' . $k . '&type_real_field=' . $type_real_field . '">' . $k . '</a> <span>' . $v['description'] . '</span></p>';
                        }
                    }
                }
                ?>
</p></div></div>

                        <div class="rex-area-col-b"><h3 class="rex-hl2">beliebte <?php 
                echo $TYPE['validate'];
                ?>
</h3><div class="rex-area-content"><p class="rex-tx1"><?php 
                if (isset($types['validate'])) {
                    ksort($types['validate']);
                    foreach ($types['validate'] as $k => $v) {
                        if (isset($v['famous']) && $v['famous']) {
                            echo '<p class="rex-button"><a class="rex-button" href="' . $link . 'type_id=validate&type_name=' . $k . '">' . $k . '</a> <span>' . $v['description'] . '</span></p>';
                        }
                    }
                }
                ?>
</p></div></div>

                    </div></div>

                <div class="rex-addon-output xform-table_field">
                    <div class="rex-area-col-2">

                        <div class="rex-area-col-a"><h3 class="rex-hl2"><?php 
                echo $TYPE['value'];
                ?>
</h3><div class="rex-area-content"><p class="rex-tx1"><?php 
                if (isset($types['value'])) {
                    ksort($types['value']);
                    foreach ($types['value'] as $k => $v) {
                        if (!isset($v['famous']) || $v['famous'] !== true) {
                            echo '<p class="rex-button"><a class="rex-button" href="' . $link . 'type_id=value&type_name=' . $k . '&type_real_field=' . $type_real_field . '">' . $k . '</a> <span>' . $v['description'] . '</span></p>';
                        }
                    }
                }
                ?>
</p></div></div>

                        <div class="rex-area-col-b"><h3 class="rex-hl2"><?php 
                echo $TYPE['validate'];
                ?>
</h3><div class="rex-area-content"><p class="rex-tx1"><?php 
                if (isset($types['validate'])) {
                    ksort($types['validate']);
                    foreach ($types['validate'] as $k => $v) {
                        if (!isset($v['famous']) || $v['famous'] !== true) {
                            echo '<p class="rex-button"><a class="rex-button" href="' . $link . 'type_id=validate&type_name=' . $k . '">' . $k . '</a> <span>' . $v['description'] . '</span></p>';
                        }
                    }
                }
                ?>
</p></div></div>

                    </div></div>

                <!--
             <div class="rex-addon-output">
             <h2 class="rex-hl2"><?php 
                echo $TYPE['action'];
                ?>
</h2>
             <div class="rex-addon-content">
             <p class="rex-tx1"><?php 
                if (isset($types['action'])) {
                    ksort($types['action']);
                    foreach ($types['action'] as $k => $v) {
                        echo '<p class="rex-button">"<a href="' . $link . 'type_id=action&type_name=' . $k . '">' . $k . '</a>" - ' . $v['description'] . '</p>';
                    }
                }
                ?>
</p>
             </div>
             </div>
             -->

            <?php 
            }
            $table_echo = '<a href="index.php?' . $link_vars . '&amp;table_name=' . $table->getTableName() . '"><b>&laquo; ' . $I18N->msg('xform_back_to_overview') . '</b></a>';
            echo rex_content_block($table_echo);
        }
        // ********************************************* FORMULAR
        if (($func == 'add' || $func == 'edit') && isset($types[$type_id][$type_name])) {
            $xform = new rex_xform();
            $xform->setDebug(false);
            foreach ($this->getLinkVars() as $k => $v) {
                $xform->setHiddenField($k, $v);
            }
            $xform->setHiddenField('func', $func);
            $xform->setHiddenField('table_name', $table->getTableName());
            $xform->setHiddenField('type_real_field', $type_real_field);
            $xform->setHiddenField('list', rex_request('list', 'string'));
            $xform->setHiddenField('sort', rex_request('sort', 'string'));
            $xform->setHiddenField('sorttype', rex_request('sorttype', 'string'));
            $xform->setHiddenField('start', rex_request('start', 'string'));
            $xform->setValueField('hidden', array('table_name', $table->getTableName()));
            $xform->setValueField('hidden', array('type_name', $type_name, 'REQUEST'));
            $xform->setValueField('hidden', array('type_id', $type_id, 'REQUEST'));
            $xform->setValueField('prio', array('prio', 'Prioritaet', array('name', 'type_id', 'type_name'), array('table_name')));
            $selectFields = array();
            $i = 1;
            foreach ($types[$type_id][$type_name]['values'] as $k => $v) {
                $field = $this->getFieldName($k, $type_id);
                $selectFields['f' . $i] = $field;
                $i++;
                switch ($v['type']) {
                    case 'name':
                        if ($func == 'edit') {
                            $xform->setValueField('showvalue', array($field, 'Name'));
                        } else {
                            if (!isset($v['value']) && $type_real_field != '') {
                                $v['value'] = $type_real_field;
                            } elseif (!isset($v['value'])) {
                                $v['value'] = '';
                            }
                            $xform->setValueField('text', array($field, 'Name', $v['value']));
                            $xform->setValidateField('notEmpty', array($field, $I18N->msg('xform_validatenamenotempty')));
                            $xform->setValidateField('preg_match', array($field, "/(([a-zA-Z])+([a-zA-Z0-9\\_])*)/", $I18N->msg('xform_validatenamepregmatch')));
                            $xform->setValidateField('customfunction', array($field, 'rex_xform_manager_checkField', array('table_name' => $table->getTableName()), $I18N->msg('xform_validatenamecheck')));
                        }
                        break;
                    case 'no_db':
                        if (!isset($v['default']) || $v['default'] != 1) {
                            $v['default'] = 0;
                        }
                        $xform->setValueField('checkbox', array($field, $I18N->msg('xform_donotsaveindb'), 'no_db', $v['default']));
                        break;
                    case 'boolean':
                        // checkbox|check_design|Bezeichnung|Value|1/0|[no_db]
                        if (!isset($v['default'])) {
                            $v['default'] = '';
                        }
                        $xform->setValueField('checkbox', array($field, $v['label'], '', $v['default']));
                        break;
                    case 'select':
                        // select|gender|Geschlecht *|Frau=w;Herr=m|[no_db]|defaultwert|multiple=1
                        $xform->setValueField('select', array($field, $v['label'], $v['options'], '', $v['default'], 0));
                        break;
                    case 'table':
                        // ist fest eingetragen, damit keine Dinge durcheinandergehen
                        if ($func == 'edit') {
                            $xform->setValueField('showvalue', array($field, $v['label']));
                        } else {
                            $_tables = rex_xform_manager_table::getAll();
                            $_options = array();
                            if (isset($v['empty_option']) && $v['empty_option']) {
                                $_options[0] = '–=';
                            }
                            foreach ($_tables as $_table) {
                                $_options[$_table['table_name']] = str_replace('=', '-', rex_translate($_table['name']) . ' [' . $_table['table_name'] . ']') . '=' . $_table['table_name'];
                                $_options[$_table['table_name']] = str_replace(',', '.', $_options[$_table['table_name']]);
                            }
                            if (!isset($v['default'])) {
                                $v['default'] = '';
                            }
                            $xform->setValueField('select', array($field, $v['label'], implode(',', $_options), '', $v['default'], 0));
                        }
                        break;
                    case 'textarea':
                        $xform->setValueField('textarea', array($field, $v['label']));
                        break;
                    case 'table.field':
                        // Todo:
                    // Todo:
                    case 'select_name':
                        $_fields = array();
                        foreach ($table->getValueFields() as $_k => $_v) {
                            $_fields[] = $_k;
                        }
                        $xform->setValueField('select', array($field, $v['label'], implode(',', $_fields), '', '', 0));
                        break;
                    case 'select_names':
                        $_fields = array();
                        foreach ($table->getValueFields() as $_k => $_v) {
                            $_fields[] = $_k;
                        }
                        $xform->setValueField('select', array($field, $v['label'], implode(',', $_fields), '', '', 1, 5));
                        break;
                    default:
                        // nur beim "Bezeichnungsfeld"
                        if ($field == 'label' && $type_real_field != '' && !isset($v['value'])) {
                            $v['value'] = $type_real_field;
                        } elseif (!isset($v['value'])) {
                            $v['value'] = '';
                        }
                        $xform->setValueField('text', array($field, $v['label'], $v['value']));
                }
            }
            $xform->setActionField('showtext', array('', '<p>' . $I18N->msg('xform_thankyouforentry') . '</p>'));
            $xform->setObjectparams('main_table', rex_xform_manager_field::table());
            if ($func == 'edit') {
                $xform->setObjectparams('submit_btn_label', $I18N->msg('xform_save'));
                $xform->setHiddenField('field_id', $field_id);
                $xform->setActionField('manage_db', array(rex_xform_manager_field::table(), "id={$field_id}"));
                $xform->setObjectparams('main_id', $field_id);
                $xform->setObjectparams('main_where', "id={$field_id}");
                $sql = rex_sql::factory();
                $sql->setQuery('SELECT * FROM ' . rex_xform_manager_field::table() . " WHERE id={$field_id}");
                foreach ($selectFields as $alias => $field) {
                    if ($alias != $field) {
                        if ((!$sql->hasValue($field) || null === $sql->getValue($field) || '' === $sql->getValue($field)) && $sql->hasValue($alias)) {
                            $sql->setValue($field, $sql->getValue($alias));
                        }
                        $xform->setValueField('hidden', array($alias, ''));
                    }
                }
                $xform->setObjectparams('sql_object', $sql);
                $xform->setObjectparams('getdata', true);
            } elseif ($func == 'add') {
                $xform->setObjectparams('submit_btn_label', $I18N->msg('xform_add'));
                $xform->setActionField('manage_db', array(rex_xform_manager_field::table()));
            }
            if ($type_id == 'value') {
                $xform->setValueField('checkbox', array('list_hidden', $I18N->msg('xform_hideinlist'), 1, '1'));
                $xform->setValueField('checkbox', array('search', $I18N->msg('xform_useassearchfieldalidatenamenotempty'), 1, '1'));
            } elseif ($type_id == 'validate') {
                $xform->setValueField('hidden', array('list_hidden', 1));
            }
            $form = $xform->getForm();
            if ($xform->objparams['form_show']) {
                if ($func == 'add') {
                    echo '<div class="rex-addon-output"><h3 class="rex-hl2">' . $I18N->msg('xform_addfield') . ' "' . $type_name . '"</h3><div class="rex-addon-content">';
                } else {
                    echo '<div class="rex-addon-output"><h3 class="rex-hl2">' . $I18N->msg('xform_editfield') . ' "' . $type_name . '"</h3><div class="rex-addon-content">';
                }
                echo $form;
                echo '</div></div>';
                $table_echo = '<a href="index.php?' . $link_vars . '&amp;table_name=' . $table->getTableName() . '"><b>&laquo; ' . $I18N->msg('xform_back_to_overview') . '</b></a>';
                echo rex_content_block($table_echo);
                $func = '';
            } else {
                if ($func == 'edit') {
                    $this->generateAll();
                    echo rex_info($I18N->msg('xform_thankyouforupdate'));
                } elseif ($func == 'add') {
                    $this->generateAll();
                    echo rex_info($I18N->msg('xform_thankyouforentry'));
                }
                $func = 'list';
            }
        }
        // ********************************************* LOESCHEN
        if ($func == 'delete') {
            $sf = new rex_sql();
            $sf->debugsql = self::$debug;
            $sf->setQuery('select * from ' . rex_xform_manager_field::table() . ' where table_name="' . $table->getTableName() . '" and id=' . $field_id);
            $sfa = $sf->getArray();
            if (count($sfa) == 1) {
                $query = 'delete from ' . rex_xform_manager_field::table() . ' where table_name="' . $table->getTableName() . '" and id=' . $field_id;
                $delsql = new rex_sql();
                $delsql->debugsql = self::$debug;
                $delsql->setQuery($query);
                echo rex_info($I18N->msg('xform_tablefielddeleted'));
                $this->generateAll();
            } else {
                echo rex_warning($I18N->msg('xform_tablefieldnotfound'));
            }
            $func = 'list';
        }
        // ********************************************* CREATE/UPDATE FIELDS
        if ($func == 'updatetable') {
            $this->generateAll();
            echo rex_info($I18N->msg('xform_tablesupdated'));
            $func = 'list';
        }
        if ($func == 'updatetablewithdelete') {
            $this->generateAll(array('delete_fields' => true));
            echo rex_info($I18N->msg('xform_tablesupdated'));
            $func = 'list';
        }
        if ($func == 'show_form_notation') {
            $formbuilder_fields = $table->getFields();
            $notation_php = '';
            $notation_pipe = '';
            $notation_email = '';
            $notation_php_pre = array('$xform = new rex_xform();', '$xform->setObjectparams(\'form_skin\', \'default\');', '$xform->setObjectparams(\'form_showformafterupdate\', 0);', '$xform->setObjectparams(\'real_field_names\', true);');
            $notation_php .= implode("\n", $notation_php_pre) . "\n";
            $notation_pipe_pre = array('objparams|form_skin|default', 'objparams|form_showformafterupdate|0', 'objparams|real_field_names|true');
            $notation_pipe .= implode("\n", $notation_pipe_pre) . "\n";
            foreach ($formbuilder_fields as $field) {
                $classname = rex_xform::includeClass($field['type_id'], $field['type_name']);
                $cl = new $classname();
                $definitions = $cl->getDefinitions();
                $values = array();
                $i = 1;
                foreach ($definitions['values'] as $key => $_) {
                    $key = $this->getFieldName($key, $field['type_id']);
                    if (isset($field[$key])) {
                        $values[] = $field[$key];
                    } elseif (isset($field['f' . $i])) {
                        $values[] = $field['f' . $i];
                    } else {
                        $values[] = '';
                    }
                    $i++;
                }
                if ($field['type_id'] == 'value') {
                    $notation_php .= "\n" . '$xform->setValueField(\'' . $field['type_name'] . '\', array("' . rtrim(implode('","', $values), '","') . '"));';
                    $notation_pipe .= "\n" . $field['type_name'] . '|' . rtrim(implode('|', $values), '|') . '|';
                    $notation_email .= "\n" . $field['label'] . ': ###' . $field['name'] . '###';
                } elseif ($field['type_id'] == 'validate') {
                    $notation_php .= "\n" . '$xform->setValidateField(\'' . $field['type_name'] . '\', array("' . rtrim(implode('","', $values), '","') . '"));';
                    $notation_pipe .= "\n" . $field['type_id'] . '|' . $field['type_name'] . '|' . rtrim(implode('|', $values), '|') . '|';
                } elseif ($field['type_id'] == 'action') {
                    $notation_php .= "\n" . '$xform->setActionField(\'' . $field['type_name'] . '\', array("' . rtrim(implode('","', $values), '","') . '"));';
                    $notation_pipe .= "\n" . $field['type_id'] . '|' . $field['type_name'] . '|' . rtrim(implode('|', $values), '|') . '|';
                }
            }
            $notation_php .= "\n\n" . '$xform->setActionField(\'db2email\', array(\'emailtemplate\', \'emaillabel\', \'email@domain.de\'));';
            $notation_php .= "\n" . 'echo $xform->getForm();';
            $notation_pipe .= "\n\n" . 'action|db2email|emailtemplate|emaillabel|email@domain.de';
            echo '<div class="rex-addon-output">';
            echo '<h2 class="rex-hl2">PHP</h2>';
            echo '<div class="rex-addon-content">';
            echo '<pre class="rex-code"><code>' . $notation_php . '</code></pre>';
            echo '</div></div>';
            echo '<div class="rex-addon-output">';
            echo '<h2 class="rex-hl2">Pipe</h2>';
            echo '<div class="rex-addon-content">';
            echo '<pre class="rex-code"><code>' . $notation_pipe . '</code></pre>';
            echo '</div></div>';
            echo '<div class="rex-addon-output">';
            echo '<h2 class="rex-hl2">E-Mail</h2>';
            echo '<div class="rex-addon-content">';
            echo '<pre class="rex-code"><code>' . $notation_email . '</code></pre>';
            echo '</div></div>';
            $func = 'list';
        }
        // ********************************************* LIST
        if ($func == 'list') {
            // ****** EP XFORM_MANAGER_TABLE_FIELD_FUNC
            $show_list = true;
            $show_list = rex_register_extension_point('XFORM_MANAGER_TABLE_FIELD_FUNC', $show_list, array('table' => $table, 'link_vars' => $this->getLinkVars()));
            if ($show_list) {
                function rex_xform_list_format($p, $value = '')
                {
                    if ($value != '') {
                        $p['value'] = $value;
                    }
                    switch ($p['list']->getValue('type_id')) {
                        case 'validate':
                            $style = 'color:#aaa;';
                            // background-color:#cfd9d9;
                            break;
                        case 'action':
                            $style = 'background-color:#cfd9d9;';
                            break;
                        default:
                            $style = 'background-color:#eff9f9;';
                            break;
                    }
                    return '<td style="' . $style . '">' . $p['value'] . '</td>';
                }
                function rex_xform_list_edit_format($p)
                {
                    global $REX, $I18N;
                    return rex_xform_list_format($p, $p['list']->getColumnLink($I18N->msg('xform_edit'), $I18N->msg('xform_edit')));
                }
                function rex_xform_list_delete_format($p)
                {
                    global $REX, $I18N;
                    return rex_xform_list_format($p, $p['list']->getColumnLink($I18N->msg('xform_delete'), $I18N->msg('xform_delete')));
                }
                $table_echo = '
                     <div class="rex-area-col-2">
                             <div class="rex-area-col-a">
                                     <a href="index.php?' . $link_vars . '&table_name=' . $table->getTableName() . '&func=choosenadd"><b>+ ' . $I18N->msg('xform_addtablefield') . '</b></a>
                             </div>
                             <div class="rex-area-col-b rex-algn-rght">
                                <ul class="rex-navi-piped">
                                    <li><a href="index.php?' . $link_vars . '&table_name=' . $table->getTableName() . '&func=show_form_notation">' . $I18N->msg('xform_manager_show_form_notation') . '</a></li><li><a href="index.php?' . $link_vars . '&table_name=' . $table->getTableName() . '&func=updatetable">' . $I18N->msg('xform_updatetable') . '</a></li><li><a href="index.php?' . $link_vars . '&table_name=' . $table->getTableName() . '&func=updatetablewithdelete" onclick="return confirm(\'' . $I18N->msg('xform_updatetable_with_delete_confirm') . '\')">' . $I18N->msg('xform_updatetable_with_delete') . '</a></li>
                                </ul>
                             </div>
                     </div>
                     <div class="rex-clearer"></div>
                     ';
                echo rex_content_block($table_echo);
                $sql = 'select id, prio, type_id, type_name, name from ' . rex_xform_manager_field::table() . ' where table_name="' . $table->getTableName() . '" order by prio';
                $list = rex_list::factory($sql, 30);
                // $list->debug = 1;
                $list->setColumnFormat('id', 'Id');
                foreach ($this->getLinkVars() as $k => $v) {
                    $list->addParam($k, $v);
                }
                $list->addParam('start', rex_request('start', 'int'));
                $list->addParam('table_name', $table->getTableName());
                $list->removeColumn('id');
                $list->setColumnLabel('prio', $I18N->msg('xform_manager_table_prio_short'));
                $list->setColumnLabel('type_id', $I18N->msg('xform_manager_type_id'));
                $list->setColumnLabel('type_name', $I18N->msg('xform_manager_type_name'));
                $list->setColumnLabel('name', $I18N->msg('xform_manager_name'));
                $list->setColumnLayout('prio', array('<th>###VALUE###</th>', '###VALUE###'));
                $list->setColumnFormat('prio', 'custom', 'rex_xform_list_format');
                $list->setColumnLayout('type_id', array('<th>###VALUE###</th>', '###VALUE###'));
                $list->setColumnFormat('type_id', 'custom', 'rex_xform_list_format');
                $list->setColumnLayout('type_name', array('<th>###VALUE###</th>', '###VALUE###'));
                $list->setColumnFormat('type_name', 'custom', 'rex_xform_list_format');
                $list->setColumnLayout('name', array('<th>###VALUE###</th>', '###VALUE###'));
                // ###VALUE###
                $list->setColumnFormat('name', 'custom', 'rex_xform_list_format');
                $list->addColumn($I18N->msg('xform_edit'), $I18N->msg('xform_edit'));
                $list->setColumnParams($I18N->msg('xform_edit'), array('field_id' => '###id###', 'func' => 'edit', 'type_name' => '###type_name###', 'type_id' => '###type_id###'));
                $list->setColumnLayout($I18N->msg('xform_edit'), array('<th>###VALUE###</th>', '###VALUE###'));
                $list->setColumnFormat($I18N->msg('xform_edit'), 'custom', 'rex_xform_list_edit_format');
                $list->addColumn($I18N->msg('xform_delete'), $I18N->msg('xform_delete'));
                $list->setColumnParams($I18N->msg('xform_delete'), array('field_id' => '###id###', 'func' => 'delete'));
                $list->setColumnLayout($I18N->msg('xform_delete'), array('<th>###VALUE###</th>', '###VALUE###'));
                $list->setColumnFormat($I18N->msg('xform_delete'), 'custom', 'rex_xform_list_delete_format');
                $list->addLinkAttribute($I18N->msg('xform_delete'), 'onclick', 'return confirm(\' [###type_id###, ###type_name###, ###name###] ' . $I18N->msg('xform_delete') . ' ?\')');
                echo $list->get();
            }
        }
    }
Beispiel #5
0
/**
 * XForm
 * @author jan.kristinus[at]redaxo[dot]org Jan Kristinus
 * @author <a href="http://www.yakamara.de">www.yakamara.de</a>
 */
// ********************************************* TABLE ADD/EDIT/LIST
$table = $REX['TABLE_PREFIX'] . 'xform_table';
$table_field = $REX['TABLE_PREFIX'] . 'xform_field';
$func = rex_request('func', 'string', '');
$page = rex_request('page', 'string', '');
$subpage = rex_request('subpage', 'string', '');
$table_id = rex_request('table_id', 'int');
$show_list = true;
// ********************************************* FORMULAR
if (($func == 'add' || $func == 'edit') && $REX['USER']->isAdmin()) {
    $xform = new rex_xform();
    // $xform->setDebug(TRUE);
    $xform->setHiddenField('page', $page);
    $xform->setHiddenField('subpage', $subpage);
    $xform->setHiddenField('func', $func);
    $xform->setActionField('showtext', array('', $I18N->msg('xform_manager_table_entry_saved')));
    $xform->setObjectparams('main_table', $table);
    $xform->setValueField('text', array('prio', $I18N->msg('xform_manager_table_prio')));
    if ($func == 'edit') {
        $xform->setObjectparams('submit_btn_label', $I18N->msg('save'));
        $xform->setValueField('showvalue', array('table_name', $I18N->msg('xform_manager_table_name')));
        $xform->setHiddenField('table_id', $table_id);
        $xform->setActionField('db', array($table, "id={$table_id}"));
        $xform->setObjectparams('main_id', $table_id);
        $xform->setObjectparams('main_where', "id={$table_id}");
        $xform->setObjectparams('getdata', true);
 static function generateTablesAndFields($delete_old = false)
 {
     rex_xform_manager_table::reload();
     $types = rex_xform::getTypeArray();
     foreach (rex_xform_manager_table::getAll() as $table) {
         $c = rex_sql::factory();
         $c->debugsql = self::$debug;
         $c->setQuery('CREATE TABLE IF NOT EXISTS `' . $table['table_name'] . '` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY )');
         // remember fields, create and in case delete
         $c->setQuery('SHOW COLUMNS FROM `' . $table['table_name'] . '`');
         $saved_columns = $c->getArray();
         foreach ($table->getFields() as $field) {
             $type_name = $field['type_name'];
             $type_id = $field['type_id'];
             if ($type_id == 'value') {
                 $type_label = $field['name'];
                 $dbtype = $types[$type_id][$type_name]['dbtype'];
                 if ($dbtype != 'none' && $dbtype != '') {
                     if (isset($types[$type_id][$type_name]['hooks']['preCreate'])) {
                         $result = call_user_func($types[$type_id][$type_name]['hooks']['preCreate'], $field);
                         if (false === $result) {
                             continue;
                         } elseif (is_string($result)) {
                             $dbtype = $result;
                         }
                     }
                     $add_column = true;
                     foreach ($saved_columns as $uu => $vv) {
                         if ($vv['Field'] == $type_label) {
                             $add_column = false;
                             unset($saved_columns[$uu]);
                             break;
                         }
                     }
                     if ($add_column) {
                         $null = isset($types[$type_id][$type_name]['null']) && $types[$type_id][$type_name]['null'];
                         $null = $null ? '' : ' NOT NULL';
                         $c->setQuery('ALTER TABLE `' . $table['table_name'] . '` ADD `' . $type_label . '` ' . $dbtype . $null);
                     }
                 }
             }
         }
         if ($delete_old === true) {
             foreach ($saved_columns as $uu => $vv) {
                 if ($vv['Field'] != 'id') {
                     $c->setQuery('ALTER TABLE `' . $table['table_name'] . '` DROP `' . $vv['Field'] . '` ');
                 }
             }
         }
     }
 }
         echo rex_content_block('<a href="index.php?page=' . $page . '&amp;subpage=' . $subpage . '"><b>&laquo; ' . $I18N->msg('xform_back_to_overview') . '</b></a>');
         $show_list = false;
     } else {
         $table_name = $xform->objparams['value_pool']['sql']['table_name'];
         $convert_id = $xform->objparams['value_pool']['sql']['convert_id'];
         try {
             rex_xform_manager_table_api::migrateTable($table_name, $convert_id);
             // with convert id / auto_increment finder
             echo rex_info($I18N->msg('xform_manager_table_migrated_success'));
         } catch (Exception $e) {
             echo rex_warning($I18N->msg('xform_manager_table_migrated_failed', $table_name, $e->getMessage()));
         }
     }
 } else {
     if (($func == 'add' || $func == 'edit') && $REX['USER']->isAdmin()) {
         $xform = new rex_xform();
         // $xform->setDebug(TRUE);
         $xform->setHiddenField('page', $page);
         $xform->setHiddenField('subpage', $subpage);
         $xform->setHiddenField('func', $func);
         $xform->setHiddenField('list', rex_request('list', 'string'));
         $xform->setHiddenField('sort', rex_request('sort', 'string'));
         $xform->setHiddenField('sorttype', rex_request('sorttype', 'string'));
         $xform->setHiddenField('start', rex_request('start', 'string'));
         $xform->setActionField('showtext', array('', $I18N->msg('xform_manager_table_entry_saved')));
         $xform->setObjectparams('main_table', rex_xform_manager_table::table());
         $xform->setValueField('prio', array('prio', $I18N->msg('xform_manager_table_prio'), 'name'));
         if ($func == 'edit') {
             $xform->setObjectparams('submit_btn_label', $I18N->msg('xform_save'));
             $xform->setValueField('showvalue', array('table_name', $I18N->msg('xform_manager_table_name')));
             $xform->setHiddenField('table_id', $table_id);
	<h2 class="rex-hl2">Beschreibung</h2>
	<div class="rex-addon-content">
	<p>
	
	Im Modul sind vor allem die Felddefinitionen wichtig, die sich in 3 Bereiche
	aufteilen.
	
	<br /><br /><b>Value Felder</b> - Das sind die Felder die im Formular normalerweise
	direkt auftauchen. Das können einerseits einfache Textfelder, Selectfelder,
	Checkboxen etc. sein, aber genauso auch Versteckte Felder, Geburtsdatum, 
	Datenbankselectfelder etc. sein.
	
	<br /><br /><b>Validate Felder</b> - sind Felder zum überprüfen der Werte in den Value
	Felder. D.h. damit kann man z.B. überprüfen ob ein Wert eingetragen worden 
	ist (notEmpty) oder ob es ein String, Integer oder sonstiges Feld ist. Genauso
	kann aber auch überprüft werden ob ein Datenbankfeld mit diesem Wert schon
	existiert etc.
	
	<br /><br /><b>Action Felder</b> - sind für die späteren Verwendungen wichtig. Soll
	eine E-Mail verschickt werden und/oder ein Eintrag in die Datenbank geschehen...

	<br /><br />

	</p>
	<hr />
<?php 
rex_xform::showHelp();
?>
	</div>
</div>
Beispiel #9
0
$table = 'rex_xform_table';
$table_field = 'rex_xform_field';
$func = rex_request("func", "string", "");
$page = rex_request("page", "string", "");
$subpage = rex_request("subpage", "string", "");
$table_id = rex_request("table_id", "int");
$show_list = TRUE;
if ($func == "update" && $REX['USER']->isAdmin()) {
    $t = new rex_xform_manager();
    $t->generateAll();
    echo rex_info($I18N->msg("xform_manager_table_updated"));
    $func = "";
}
// ********************************************* FORMULAR
if (($func == "add" || $func == "edit") && $REX['USER']->isAdmin()) {
    $xform = new rex_xform();
    // $xform->setDebug(TRUE);
    $xform->setHiddenField("page", $page);
    $xform->setHiddenField("subpage", $subpage);
    $xform->setHiddenField("func", $func);
    $xform->setActionField("showtext", array("", $I18N->msg("xform_manager_table_entry_saved")));
    $xform->setObjectparams("main_table", $table);
    // fŸr db speicherungen und unique abfragen
    $xform->setValueField("text", array("prio", $I18N->msg("xform_manager_table_prio")));
    if ($func == "edit") {
        $xform->setValueField("showvalue", array("table_name", "Name"));
        $xform->setHiddenField("table_id", $table_id);
        $xform->setActionField("db", array($table, "id={$table_id}"));
        $xform->setObjectparams("main_id", $table_id);
        $xform->setObjectparams("main_where", "id={$table_id}");
        $xform->setObjectparams('getdata', true);
Beispiel #10
0
<?php

rex_title("XForm", $REX['ADDON'][$page]['SUBPAGES']);
echo '<div class="rex-addon-output">
	<h2 class="rex-hl2">Beschreibung</h2>
	<div class="rex-addon-content">
	<div class="xform-description">' . $I18N->msg('xform_description_all') . '</div>';
echo rex_xform::showHelp(true, true);
echo '
	</div>
</div>';
 function getQueryFilterArray()
 {
     if (!$this->table->isSearchable()) {
         return array();
     }
     $queryFilter = array();
     $vars = $this->getSearchVars();
     foreach ($this->table->getFields() as $field) {
         if (array_key_exists($field->getName(), $vars['rex_xform_searchvars']) && $field->getType() == 'value' && $field->isSearchable()) {
             rex_xform::includeClass($field->getType(), $field->getTypeName());
             if (method_exists('rex_xform_' . $field->getTypeName(), 'getSearchFilter')) {
                 $qf = call_user_func('rex_xform_' . $field->getTypeName() . '::getSearchFilter', array('field' => $field, 'fields' => $this->table->getFields(), 'value' => $vars['rex_xform_searchvars'][$field->getName()]));
                 if ($qf != '') {
                     $queryFilter[] = $qf;
                 }
             }
         }
     }
     return $queryFilter;
 }
Beispiel #12
0
 // -------------- truncate table
 if ($func == "truncate_table" && $this->hasDataPageFunction("truncate_table")) {
     $truncate = TRUE;
     if (rex_register_extension_point('XFORM_DATA_TABLE_TRUNCATE', $truncate, array())) {
         $query = 'truncate table ' . $table["table_name"];
         $trunsql = new rex_sql();
         $trunsql->setQuery($query);
         echo rex_info($I18N->msg("table_truncated"));
         $func = "";
         rex_register_extension_point('XFORM_DATA_TABLE_TRUNCATED', "", array());
     }
 }
 // -------------- form
 if ($func == "add" && $this->hasDataPageFunction("add") || $func == "edit") {
     $back = '<table cellpadding="5" class="rex-table"><tr><td><a href="index.php?' . $link_vars . $em_url . $em_rex_list . '"><b>&laquo; ' . $I18N->msg('back_to_overview') . '</b></a></td></tr></table>';
     $xform = new rex_xform();
     // $xform->setDebug(TRUE);
     foreach ($this->getLinkVars() as $k => $v) {
         $xform->setHiddenField($k, $v);
     }
     $xform->setHiddenField("func", $func);
     if (count($rex_xform_manager_opener) > 0) {
         foreach ($rex_xform_manager_opener as $k => $v) {
             $xform->setHiddenField('rex_xform_manager_opener[' . $k . ']', $v);
         }
     }
     // TODO
     if (count($rex_xform_filter) > 0) {
         foreach ($rex_xform_filter as $k => $v) {
             $xform->setHiddenField('rex_xform_filter[' . $k . ']', $v);
         }
 function generateAll()
 {
     global $REX;
     $types = rex_xform::getTypeArray();
     foreach ($this->getTables() as $table) {
         $c = rex_sql::factory();
         $c->setQuery('CREATE TABLE IF NOT EXISTS `' . $table["table_name"] . '` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY )');
         $c->setQuery('SHOW COLUMNS FROM `' . $table["table_name"] . '`');
         $current_columns = array();
         foreach ($c->getArray() as $field) {
             if ($field["Field"] != "id") {
                 $current_columns[$field["Field"]] = $field["Type"];
             }
         }
         $new_columns = array();
         foreach ($this->getTableFields($table["table_name"]) as $field) {
             $type_id = $field["type_id"];
             $type_name = $field["type_name"];
             $f1 = $field["f1"];
             $f2 = $field["f2"];
             $f3 = $field["f3"];
             if ($type_id == "validate" && $type_name == "type") {
                 $new_columns[$f1] = $f2;
                 rex_xform::includeClass("validate", "type");
                 if ($f3 != "" || ($f3 = rex_xform_validate_type::getDefaultTypeValue($f2))) {
                     $new_columns[$f1] .= '(' . $f3 . ')';
                 }
             } elseif ($type_id == "value" && !isset($new_columns[$f1])) {
                 $new_columns[$f1] = $types[$type_id][$type_name]['dbtype'];
             }
         }
         $c = rex_sql::factory();
         foreach ($new_columns as $field => $type) {
             if (!array_key_exists($field, $current_columns)) {
                 $c->setQuery('ALTER TABLE `' . $table["table_name"] . '` ADD `' . $field . '` ' . $type . '  NOT NULL ;');
                 unset($current_columns[$field]);
             } elseif ($current_columns[$field] == $type) {
                 unset($current_columns[$field]);
             } else {
                 $c->setQuery('ALTER TABLE `' . $table["table_name"] . '` CHANGE `' . $field . '` `' . $field . '` ' . $type . ' NOT NULL;');
                 unset($current_columns[$field]);
             }
         }
         foreach ($current_columns as $field => $type) {
             $c->setQuery('ALTER TABLE `' . $table["table_name"] . '` DROP `' . $field . '` ');
         }
     }
     return;
 }