protected function getRelationTableFields()
 {
     $table = rex_xform_manager_table::get($this->getElement('relation_table'));
     $source = $table->getRelationsTo($this->params['main_table']);
     $target = $table->getRelationsTo($this->getElement('table'));
     if (!empty($source) && !empty($target)) {
         return array('source' => reset($source)->getName(), 'target' => reset($target)->getName());
     }
     return array('source' => null, 'target' => null);
 }
 public static function setTableField($table_name, array $table_field)
 {
     unset($table_field['id']);
     if ($table_name == '') {
         throw new Exception('table_name must be set');
     }
     if (count($table_field) == 0) {
         throw new Exception('field must be a filled array');
     }
     $fieldIdentifier = array('type_id' => $table_field['type_id'], 'type_name' => $table_field['type_name'], 'name' => $table_field['name']);
     $currentFields = rex_xform_manager_table::get($table_name)->getFields($fieldIdentifier);
     // validate specials
     if ($table_field['type_id'] == 'validate') {
         $table_field['list_hidden'] = 1;
         $table_field['search'] = 0;
     }
     self::createMissingFieldColumns($table_field);
     if (count($currentFields) > 1) {
         throw new Exception('more than one field found for table: ' . $table_name . ' with Fieldidentifier: ' . implode(', ', $fieldIdentifier) . '');
     } elseif (count($currentFields) == 0) {
         // Insert
         $field_insert = new rex_sql();
         $field_insert->debugsql = self::$debug;
         $field_insert->setTable(rex_xform_manager_field::table());
         $field_insert->setValue('table_name', $table_name);
         foreach ($table_field as $field_name => $field_value) {
             $field_insert->setValue($field_name, $field_value);
         }
         if (!isset($table['prio'])) {
             $field_insert->setValue('prio', rex_xform_manager_table::get($table_name)->getMaximumPrio() + 1);
         }
         $field_insert->insert();
     } else {
         // Update
         $currentField = $currentFields[0]->toArray();
         foreach ($table_field as $field_name => $field_value) {
             $currentField[$field_name] = $field_value;
         }
         $field_update = new rex_sql();
         $field_update->debugsql = self::$debug;
         $field_update->setTable(rex_xform_manager_field::table());
         $add_where = array();
         foreach ($fieldIdentifier as $field => $value) {
             $add_where[] = '`' . mysql_real_escape_string($field) . '`="' . mysql_real_escape_string($table_name) . '"';
         }
         $where = 'table_name="' . mysql_real_escape_string($table_name) . '"';
         if (count($add_where) > 0) {
             $where .= ' and (' . implode(' and ', $add_where) . ') ';
         }
         $field_update->setWhere($where);
         foreach ($table_field as $field_name => $field_value) {
             $field_update->setValue($field_name, $field_value);
         }
         $field_update->update();
     }
 }
    public function getDataPage()
    {
        global $REX, $I18N;
        rex_register_extension_point('XFORM_MANAGER_DATA_PAGE', $this);
        // ********************************************* DATA ADD/EDIT/LIST
        $func = rex_request('func', 'string', '');
        $data_id = rex_request('data_id', 'int', '');
        $show_list = true;
        // -------------- rex_xform_manager_filter and sets
        $rex_xform_filter = rex_request('rex_xform_filter', 'array');
        $rex_xform_set = rex_request('rex_xform_set', 'array');
        // -------------- opener - popup for selection
        $popup = false;
        $rex_xform_manager_opener = rex_request('rex_xform_manager_opener', 'array');
        if (count($rex_xform_manager_opener) > 0) {
            if (isset($rex_xform_manager_opener['id']) && $rex_xform_manager_opener['id'] != '') {
                $popup = true;
                // id, field, multiple
            }
        }
        // -------------- filter - popup for selection
        if (count($rex_xform_filter) > 0) {
            $popup = true;
        }
        if (is_bool($p = rex_request('popup', 'bool', null))) {
            $popup = $p;
            $this->setLinkVars(array('popup' => $p ? 1 : 0));
        }
        // SearchObject
        $searchObject = new rex_xform_manager_search($this->table);
        $searchObject->setLinkVars(array("list" => rex_request('list', 'string', '')));
        $searchObject->setLinkVars(array("start" => rex_request('start', 'string', '')));
        $searchObject->setLinkVars(array("sort" => rex_request('sort', 'string', '')));
        $searchObject->setLinkVars(array("sorttype" => rex_request('sorttype', 'string', '')));
        $searchObject->setLinkVars($this->getLinkVars());
        if (count($rex_xform_filter) > 0) {
            foreach ($rex_xform_filter as $k => $v) {
                if (is_array($v)) {
                    foreach ($v as $k2 => $v2) {
                        $searchObject->setLinkVars(array('rex_xform_filter[' . $k . '][' . $k2 . ']' => $v2));
                    }
                } else {
                    $searchObject->setLinkVars(array('rex_xform_filter[' . $k . ']' => $v));
                }
            }
        }
        if (count($rex_xform_set) > 0) {
            foreach ($rex_xform_set as $k => $v) {
                if (is_array($v)) {
                    foreach ($v as $k2 => $v2) {
                        $searchObject->setLinkVars(array('rex_xform_set[' . $k . '][' . $k2 . ']' => $v2));
                    }
                } else {
                    $searchObject->setLinkVars(array('rex_xform_set[' . $k . ']' => $v));
                }
            }
        }
        if (count($rex_xform_manager_opener) > 0) {
            foreach ($rex_xform_manager_opener as $k => $v) {
                $searchObject->setLinkVars(array('rex_xform_manager_opener[' . $k . ']' => $v));
            }
        }
        $searchform = '';
        if ($this->hasDataPageFunction('search')) {
            $searchform = '<div class="rex-addon-output">
                             <h3 class="rex-hl2">' . $I18N->msg('xform_manager_search') . '</h3>
                             <div class="rex-addon-content">
                            <div class="xform" id="rex-xform">' . $searchObject->getForm() . '</div>
                          </div>
                          </div>';
        }
        // -------------- DEFAULT - LISTE AUSGEBEN
        $link_vars = '';
        foreach ($this->getLinkVars() as $k => $v) {
            $link_vars .= '&' . urlencode($k) . '=' . urlencode($v);
        }
        rex_title($I18N->msg('xform_table') . ': ' . rex_translate($this->table->getName()) . ' <span class="table-name">[' . $this->table->getTablename() . ']</span>', '');
        echo rex_register_extension_point('XFORM_MANAGER_REX_INFO', '');
        $show_editpage = true;
        $show_editpage = rex_register_extension_point('XFORM_MANAGER_DATA_EDIT_FUNC', $show_editpage, array('table' => $this->table, 'link_vars' => $this->getLinkVars()));
        if ($show_editpage) {
            // -------------- DB FELDER HOLEN
            $field_names = array();
            foreach ($this->table->getValueFields() as $field) {
                $field_names[] = $field->getName();
            }
            // -------------- DB DATA HOLEN
            $data = array();
            if ($data_id != '') {
                $gd = rex_sql::factory();
                $gd->setQuery('select * from ' . $this->table->getTableName() . ' where id=' . $data_id);
                if ($gd->getRows() == 1) {
                    $datas = $gd->getArray();
                    $data = current($datas);
                } else {
                    $data_id = '';
                }
            }
            // -------------- Opener
            foreach ($rex_xform_manager_opener as $k => $v) {
                $link_vars .= '&rex_xform_manager_opener[' . $k . ']=' . urlencode($v);
            }
            // -------------- Searchfields / Searchtext
            $link_vars .= '&' . http_build_query($searchObject->getSearchVars());
            // -------------- FILTER UND SETS PR†FEN
            $em_url_filter = '';
            if (count($rex_xform_filter) > 0) {
                foreach ($rex_xform_filter as $k => $v) {
                    if (!in_array($k, $field_names)) {
                        unset($rex_xform_filter[$k]);
                    }
                }
                $em_url_filter .= '&' . http_build_query(compact('rex_xform_filter'));
            }
            $em_url_set = '';
            if (count($rex_xform_set) > 0) {
                foreach ($rex_xform_set as $k => $v) {
                    if (!in_array($k, $field_names)) {
                        unset($rex_xform_set[$k]);
                    }
                }
                $em_url_filter .= '&' . http_build_query(compact('rex_xform_set'));
            }
            $em_url = $em_url_filter . $em_url_set;
            $em_rex_list = '';
            $em_rex_list .= '&list=' . urlencode(rex_request('list', 'string'));
            $em_rex_list .= '&sort=' . urlencode(rex_request('sort', 'string'));
            $em_rex_list .= '&sorttype=' . urlencode(rex_request('sorttype', 'string'));
            $em_rex_list .= '&start=' . urlencode(rex_request('start', 'string'));
            // ---------- Popup - no menue, header ...
            if ($popup) {
                echo '<link rel="stylesheet" type="text/css" href="../files/addons/xform/popup.css" media="screen, projection, print" />';
            }
            // -------------- Import
            if (!$popup && $func == 'import' && $this->hasDataPageFunction('import')) {
                include $REX['INCLUDE_PATH'] . '/addons/xform/plugins/manager/pages/data_import.inc.php';
                echo rex_content_block('<a href="index.php?' . $link_vars . $em_url . $em_rex_list . '"><b>&laquo; ' . $I18N->msg('xform_back_to_overview') . '</b></a>');
            }
            // -------------- delete entry
            if ($func == 'delete' && $data_id != '' && $this->hasDataPageFunction('delete')) {
                $delete = true;
                if (rex_register_extension_point('XFORM_DATA_DELETE', $delete, array('id' => $data_id, 'value' => $data, 'table' => $this->table))) {
                    $query = 'delete from ' . $this->table->getTablename() . ' where id=' . $data_id;
                    $delsql = new rex_sql();
                    $delsql->debugsql = self::$debug;
                    $delsql->setQuery($query);
                    echo rex_info($I18N->msg('xform_datadeleted'));
                    $func = '';
                    $this->table->removeRelationTableRelicts();
                    rex_register_extension_point('XFORM_DATA_DELETED', '', array('id' => $data_id, 'value' => $data, 'table' => $this->table));
                }
            }
            // -------------- delete dataset
            if ($func == 'dataset_delete' && $this->hasDataPageFunction('truncate_table')) {
                $delete = true;
                $query = 'delete from `' . $this->table->getTablename() . '` ' . $this->getDataListQueryWhere($rex_xform_filter, $searchObject);
                if (rex_register_extension_point('XFORM_DATA_DATASET_DELETE', $delete, array('table' => $this->table, 'query' => &$query))) {
                    $delsql = new rex_sql();
                    $delsql->debugsql = self::$debug;
                    $delsql->setQuery($query);
                    echo rex_info($I18N->msg('xform_dataset_deleted'));
                    $func = '';
                    $this->table->removeRelationTableRelicts();
                    rex_register_extension_point('XFORM_DATA_DATASET_DELETED', '', array('table' => $this->table));
                }
            }
            // -------------- truncate table
            if ($func == 'truncate_table' && $this->hasDataPageFunction('truncate_table')) {
                $truncate = true;
                if (rex_register_extension_point('XFORM_DATA_TABLE_TRUNCATE', $truncate, array('table' => $this->table))) {
                    $query = 'truncate table ' . $this->table->getTablename();
                    $trunsql = new rex_sql();
                    $trunsql->setQuery($query);
                    echo rex_info($I18N->msg('xform_table_truncated'));
                    $func = '';
                    $this->table->removeRelationTableRelicts();
                    rex_register_extension_point('XFORM_DATA_TABLE_TRUNCATED', '', array('table' => $this->table));
                }
            }
            // -------------- export dataset
            if ($func == 'dataset_export' && $this->hasDataPageFunction('export')) {
                ob_end_clean();
                $sql = $this->getDataListQuery($rex_xform_filter, $searchObject);
                $data = '';
                $fields = array();
                $g = rex_sql::factory();
                $g->setQuery($sql);
                foreach ($g->getArray() as $d) {
                    if ($data == '') {
                        foreach ($d as $a => $b) {
                            $fields[] = '"' . $a . '"';
                        }
                        $data = implode(';', $fields);
                    }
                    foreach ($d as $a => $b) {
                        $d[$a] = '"' . str_replace('"', '""', $b) . '"';
                    }
                    $data .= "\n" . implode(';', $d);
                }
                // ----- download - save as
                $filename = 'export_data_' . date('YmdHis') . '.csv';
                $filesize = strlen($data);
                $filetype = 'application/octetstream';
                $expires = 'Mon, 01 Jan 2000 01:01:01 GMT';
                $last_modified = 'Mon, 01 Jan 2000 01:01:01 GMT';
                header('Expires: ' . $expires);
                // Date in the past
                header('Last-Modified: ' . $last_modified);
                // always modified
                header('Cache-Control: no-store, no-cache, must-revalidate');
                // HTTP/1.1
                header('Cache-Control: post-check=0, pre-check=0', false);
                header('Pragma: no-cache');
                header('Pragma: private');
                header('Cache-control: private, must-revalidate');
                header('Content-Type: ' . $filetype . '; name="' . $filename . '"');
                header('Content-Disposition: attachment; filename="' . $filename . '"');
                header('Content-Description: "' . $filename . '"');
                header('Content-Length: ' . $filesize);
                echo $data;
                exit;
            }
            // -------------- form
            if ($func == 'add' && $this->hasDataPageFunction('add') || $func == 'edit') {
                $back = rex_content_block('<a href="index.php?' . $link_vars . $em_url . $em_rex_list . '"><b>&laquo; ' . $I18N->msg('xform_back_to_overview') . '</b></a>');
                $xform = new rex_xform();
                $xform->setDebug(self::$debug);
                foreach ($this->getLinkVars() as $k => $v) {
                    $xform->setHiddenField($k, $v);
                }
                if (count($rex_xform_manager_opener) > 0) {
                    foreach ($rex_xform_manager_opener as $k => $v) {
                        $xform->setHiddenField('rex_xform_manager_opener[' . $k . ']', $v);
                    }
                }
                if (count($rex_xform_filter) > 0) {
                    foreach ($rex_xform_filter as $k => $v) {
                        if (is_array($v)) {
                            foreach ($v as $k2 => $v2) {
                                $xform->setHiddenField('rex_xform_filter[' . $k . '][' . $k2 . ']', $v2);
                            }
                        } else {
                            $xform->setHiddenField('rex_xform_filter[' . $k . ']', $v);
                        }
                    }
                }
                if (count($rex_xform_set) > 0) {
                    foreach ($rex_xform_set as $k => $v) {
                        if (is_array($v)) {
                            foreach ($v as $k2 => $v2) {
                                $xform->setHiddenField('rex_xform_set[' . $k . '][' . $k2 . ']', $v2);
                            }
                        } else {
                            $xform->setHiddenField('rex_xform_set[' . $k . ']', $v);
                        }
                    }
                }
                foreach ($searchObject->getSearchVars() as $s_var => $values) {
                    foreach ($values as $k => $v) {
                        $xform->setHiddenField($s_var . '[' . $k . ']', $v);
                    }
                }
                // for rexlist
                $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'));
                foreach ($this->table->getFields() as $field) {
                    $classname = rex_xform::includeClass($field->getType(), $field->getTypeName());
                    $cl = new $classname();
                    $definitions = $cl->getDefinitions();
                    $values = array();
                    $i = 1;
                    foreach ($definitions['values'] as $key => $_) {
                        $key = $this->getFieldName($key, $field->getType());
                        /*if ($field->getElement($key)) {
                              $values[] = $field->getElement($key);
                          } elseif ($field->getElement('f' . $i)) {
                              $values[] = $field->getElement('f' . $i);
                          } else {
                              $values[] = '';
                          }*/
                        $values[] = $field->getElement($key);
                        $i++;
                    }
                    if ($field->getType() == 'value') {
                        if (in_array($values[1], $this->getFilterFields())) {
                            // Feld vorhanden -> ignorieren -> hidden feld machen
                            // TODO: Feld trotzdem noch aufnehmen, damit validierungen etc noch funktionieren
                        } else {
                            $xform->setValueField($field->getTypeName(), $values);
                        }
                    } elseif ($field->getType() == 'validate') {
                        $xform->setValidateField($field->getTypeName(), $values);
                    } elseif ($field->getType() == 'action') {
                        $xform->setActionField($field->getTypeName(), $values);
                    }
                }
                if (rex_request('rex_xform_show_formularblock', 'string') != '') {
                    // Optional .. kann auch geloescht werden. Dient nur zu Hilfe beim Aufbau
                    // von XForm-Formularen über php
                    // Textblock gibt den formalarblock als text aus, um diesen in das xform modul einsetzen zu können.
                    //  rex_xform_show_formularblock=1
                    $text_block = '';
                    foreach ($this->table->getFields() 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->getType());
                            if (isset($field[$key])) {
                                $values[] = $field[$key];
                            } elseif (isset($field['f' . $i])) {
                                $values[] = $field['f' . $i];
                            } else {
                                $values[] = '';
                            }
                            $i++;
                        }
                        if ($field->getType() == 'value') {
                            $text_block .= "\n" . '$xform->setValueField("' . $field->getTypeName() . '",array("' . implode('","', $values) . '"));';
                        } else {
                            if ($field->getType() == 'validate') {
                                $text_block .= "\n" . '$xform->setValidateField("' . $field->getTypeName() . '",array("' . implode('","', $values) . '"));';
                            } else {
                                if ($field->getType() == 'action') {
                                    $text_block .= "\n" . '$xform->setActionField("' . $field->getTypeName() . '",array("' . implode('","', $values) . '"));';
                                }
                            }
                        }
                        // $text_block .= "\n".$field["type_name"].'|'.implode("|",$values);
                    }
                    echo '<pre>' . $text_block . '</pre>';
                }
                $xform->setObjectparams('main_table', $this->table->getTablename());
                // für db speicherungen und unique abfragen
                $xform->setObjectparams('rex_xform_set', $rex_xform_set);
                $xform_clone = clone $xform;
                $xform->setHiddenField('func', $func);
                // damit es neu im clone gesetzt werden kann
                if ($func == 'edit') {
                    $xform->setHiddenField('data_id', $data_id);
                    $xform->setActionField('db', array($this->table->getTablename(), "id={$data_id}"));
                    $xform->setObjectparams('main_id', $data_id);
                    $xform->setObjectparams('main_where', "id={$data_id}");
                    $xform->setObjectparams('getdata', true);
                    $xform->setValueField('submits', array("name" => "submit", "labels" => $I18N->msg('xform_save') . "," . $I18N->msg('xform_save_apply'), "values" => "1,2", "no_db" => true, "css_classes" => ",submit_short"));
                } elseif ($func == 'add') {
                    $xform->setActionField('db', array($this->table->getTablename()));
                    //$xform->setValueField('submits', array("name"=>"submit", "labels" => $I18N->msg('xform_add').",".$I18N->msg('xform_add_apply'), "values"=>"1,2", "no_db" => true, "css_classes" => ",submit_short"));
                    $xform->setValueField('submits', array("name" => "submit", "labels" => $I18N->msg('xform_add') . "," . $I18N->msg('xform_add_apply'), "values" => "1,2", "no_db" => true, "css_classes" => ",submit_short"));
                }
                if ($func == 'edit') {
                    $xform = rex_register_extension_point('XFORM_DATA_UPDATE', $xform, array('table' => $this->table, 'data_id' => $data_id, 'data' => $data));
                } elseif ($func == 'add') {
                    $xform = rex_register_extension_point('XFORM_DATA_ADD', $xform, array('table' => $this->table));
                }
                $xform->executeFields();
                $submit_type = 1;
                // normal, 2=apply
                foreach ($xform->objparams["values"] as $f) {
                    if ($f->getName() == "submit") {
                        if ($f->getValue() == 2) {
                            // apply
                            $xform->setObjectparams('form_showformafterupdate', 1);
                            $xform->executeFields();
                            $submit_type = 2;
                        }
                    }
                }
                $form = $xform->executeActions();
                if ($xform->objparams['actions_executed']) {
                    if ($func == 'edit') {
                        echo rex_info($I18N->msg('xform_thankyouforupdate'));
                        $xform = rex_register_extension_point('XFORM_DATA_UPDATED', $xform, array('table' => $this->table, 'data_id' => $data_id, 'data' => $data));
                    } elseif ($func == 'add') {
                        echo rex_info($I18N->msg('xform_thankyouforentry'));
                        $xform = rex_register_extension_point('XFORM_DATA_ADDED', $xform, array('table' => $this->table));
                        if ($submit_type == 2) {
                            $data_id = $xform->objparams['main_id'];
                            $func = "edit";
                            $xform = $xform_clone;
                            $xform->setHiddenField('func', $func);
                            $xform->setHiddenField('data_id', $data_id);
                            $xform->setActionField('db', array($this->table->getTablename(), "id={$data_id}"));
                            $xform->setObjectparams('main_id', $data_id);
                            $xform->setObjectparams('main_where', "id={$data_id}");
                            $xform->setObjectparams('getdata', true);
                            $xform->setValueField('submits', array("name" => "submit", "labels" => $I18N->msg('xform_save') . "," . $I18N->msg('xform_save_apply'), "values" => "1,2", "no_db" => true, "css_classes" => ",submit_short"));
                            $xform->setObjectparams('form_showformafterupdate', 1);
                            $xform->executeFields();
                            $form = $xform->executeActions();
                        }
                    }
                }
                if ($xform->objparams['form_show'] || $xform->objparams['form_showformafterupdate']) {
                    echo $back;
                    if ($func == 'edit') {
                        echo '
                         <div class="rex-addon-output">
                             <h3 class="rex-hl2">' . $I18N->msg('xform_editdata') . '</h3>
                             <div class="rex-addon-content">' . $form . '</div>
                         </div>';
                    } else {
                        echo '
                         <div class="rex-addon-output">
                             <h3 class="rex-hl2">' . $I18N->msg('xform_adddata') . '</h3>
                             <div class="rex-addon-content">' . $form . '</div>
                         </div>';
                    }
                    echo rex_register_extension_point('XFORM_DATA_FORM', '', array('form' => $form, 'func' => $func, 'this' => $this, 'table' => $this->table));
                    echo $back;
                    $show_list = false;
                }
            }
            // ********************************************* LIST
            if ($show_list) {
                $sql = $this->getDataListQuery($rex_xform_filter, $searchObject);
                // ---------- LISTE AUSGEBEN
                /** @type rex_list $list */
                $list = rex_list::factory($sql, $this->table->getListAmount());
                $list->setColumnFormat('id', 'Id');
                foreach ($this->getLinkVars() as $k => $v) {
                    $list->addParam($k, $v);
                }
                $list->addParam('table_name', $this->table->getTablename());
                if (count($rex_xform_filter) > 0) {
                    foreach ($rex_xform_filter as $k => $v) {
                        if (is_array($v)) {
                            foreach ($v as $k2 => $v2) {
                                $list->addParam('rex_xform_filter[' . $k . '][' . $k2 . ']', $v2);
                            }
                        } else {
                            $list->addParam('rex_xform_filter[' . $k . ']', $v);
                        }
                    }
                }
                if (count($rex_xform_set) > 0) {
                    foreach ($rex_xform_set as $k => $v) {
                        if (is_array($v)) {
                            foreach ($v as $k2 => $v2) {
                                $list->addParam('rex_xform_set[' . $k . '][' . $k2 . ']', $v2);
                            }
                        } else {
                            $list->addParam('rex_xform_set[' . $k . ']', $v);
                        }
                    }
                }
                if (count($rex_xform_manager_opener) > 0) {
                    foreach ($rex_xform_manager_opener as $k => $v) {
                        $list->addParam('rex_xform_manager_opener[' . $k . ']', $v);
                    }
                }
                foreach ($searchObject->getSearchVars() as $s_var => $values) {
                    foreach ($values as $k => $v) {
                        $list->addParam($s_var . '[' . $k . ']', $v);
                    }
                }
                $list->setColumnParams('id', array('data_id' => '###id###', 'func' => 'edit'));
                $list->setColumnSortable('id');
                $list->setColumnLabel('id', 'ID');
                foreach ($this->table->getFields() as $field) {
                    if (!$field->isHiddenInList() && $field->getTypeName()) {
                        if (!class_exists('rex_xform_' . $field->getTypeName())) {
                            rex_xform::includeClass($field->getType(), $field->getTypeName());
                        }
                        if (method_exists('rex_xform_' . $field->getTypeName(), 'getListValue')) {
                            $list->setColumnFormat($field->getName(), 'custom', array('rex_xform_' . $field->getTypeName(), 'getListValue'), array('field' => $field->toArray(), 'fields' => $this->table->getFields()));
                        }
                    }
                    if ($field->getType() == 'value') {
                        if ($field->isHiddenInList()) {
                            $list->removeColumn($field->getName());
                        } else {
                            $list->setColumnSortable($field->getName());
                            $list->setColumnLabel($field->getName(), $field->getLabel());
                        }
                    }
                }
                if (isset($rex_xform_manager_opener['id'])) {
                    $list->addColumn($I18N->msg('xform_data_select'), '');
                    $list->setColumnFormat($I18N->msg('xform_data_select'), 'custom', function ($params) {
                        global $I18N;
                        $value = '';
                        list($table_name, $field_name) = explode(".", $params["params"]["opener_field"]);
                        $table = rex_xform_manager_table::get($table_name);
                        if ($table) {
                            $fields = $table->getValueFields(array("name" => $field_name));
                            if (isset($fields[$field_name])) {
                                $target_table = $fields[$field_name]->getElement('table');
                                $target_field = $fields[$field_name]->getElement('field');
                                $values = rex_xform_be_manager_relation::getListValues($target_table, $target_field);
                                $value = $values[$params['list']->getValue('id')];
                            }
                        }
                        return '<a href="javascript:xform_manager_setData(' . $params["params"]["opener_id"] . ',###id###,\'' . htmlspecialchars($value) . ' [id=###id###]\',' . $params["params"]["opener_multiple"] . ')">' . $I18N->msg('xform_data_select') . '</a>';
                    }, array("opener_id" => $rex_xform_manager_opener["id"], "opener_field" => $rex_xform_manager_opener["field"], "opener_multiple" => $rex_xform_manager_opener["multiple"]));
                } else {
                    $list->addColumn($I18N->msg('xform_edit'), $I18N->msg('xform_edit'));
                    $list->setColumnParams($I18N->msg('xform_edit'), array('data_id' => '###id###', 'func' => 'edit', 'start' => rex_request('start', 'string'), 'sort' => rex_request('sort', 'string'), 'sorttype' => rex_request('sorttype', 'string'), 'list' => rex_request('list', 'string')));
                    if ($this->hasDataPageFunction('delete')) {
                        $list->addColumn($I18N->msg('xform_delete'), $I18N->msg('xform_delete'));
                        $list->setColumnParams($I18N->msg('xform_delete'), array('data_id' => '###id###', 'func' => 'delete', 'start' => rex_request('start', 'string'), 'sort' => rex_request('sort', 'string'), 'sorttype' => rex_request('sorttype', 'string'), 'list' => rex_request('list', 'string')));
                        $list->addLinkAttribute($I18N->msg('xform_delete'), 'onclick', 'return confirm(\' id=###id### ' . $I18N->msg('xform_delete') . ' ?\')');
                    }
                }
                // *********************************************
                $list = rex_register_extension_point('XFORM_DATA_LIST', $list, array('table' => $this->table));
                if ($rex_xform_filter) {
                    $filter = array();
                    $getFilter = function (rex_xform_manager_field $field, $value) {
                        if ('be_manager_relation' == $field->getTypeName()) {
                            $listValues = rex_xform_be_manager_relation::getListValues($field->getElement('table'), $field->getElement('field'), array('id' => $value));
                            if (isset($listValues[$value])) {
                                $value = $listValues[$value];
                            }
                        }
                        return '<b>' . rex_translate($field->getLabel()) . ':</b> ' . $value;
                    };
                    foreach ($rex_xform_filter as $key => $value) {
                        if (is_array($value)) {
                            $relTable = rex_xform_manager_table::get($this->table->getValueField($key)->getElement('table'));
                            foreach ($value as $k => $v) {
                                $filter[] = $getFilter($relTable->getValueField($k), $v);
                            }
                        } else {
                            $filter[] = $getFilter($this->table->getValueField($key), $value);
                        }
                    }
                    echo rex_content_block(implode('<br>', $filter));
                }
                $data_links = array();
                if ($this->hasDataPageFunction('add')) {
                    $data_links['add'] = '<a href="index.php?' . $link_vars . '&func=add&' . $em_url . $em_rex_list . '">' . $I18N->msg('xform_add') . '</a>';
                }
                if ($this->table->isSearchable() && $this->hasDataPageFunction('search')) {
                    $data_links['search'] = '<a href="#" id="searchtoggler">' . $I18N->msg('xform_search') . '</a>';
                }
                echo '
                 <div class="rex-addon-output">
                     <div class="rex-hl2" style="font-size:12px;font-weight:bold;">';
                if (count($data_links) > 0) {
                    echo '<span style="float:left;">' . $I18N->msg('xform_data') . ': ' . implode(" | ", $data_links) . '</span>';
                }
                // INFO LINK
                echo '<span style="float:right;">';
                $dataset_links = array();
                if ($this->hasDataPageFunction('truncate_table')) {
                    $dataset_links[] = '<a href="index.php?' . $link_vars . '&func=dataset_delete&' . $em_url . $em_rex_list . '" id="dataset-delete" onclick="return confirm(\'' . $I18N->msg('xform_dataset_delete_confirm') . '\');">' . $I18N->msg('xform_delete') . '</a>';
                }
                if ($this->table->isExportable() == 1 && $this->hasDataPageFunction('export')) {
                    $dataset_links[] = '<a href="index.php?' . $link_vars . '&func=dataset_export&' . $em_url . $em_rex_list . '">' . $I18N->msg('xform_export') . '</a>';
                }
                if (count($dataset_links) > 0) {
                    echo " " . $I18N->msg('xform_dataset') . ': ' . implode(' | ', $dataset_links) . '';
                }
                $table_links = array();
                if (!$popup && $this->table->isImportable() && $this->hasDataPageFunction('import')) {
                    $table_links[] = '<a href="index.php?' . htmlspecialchars($link_vars) . '&amp;func=import">' . $I18N->msg('xform_import') . '</a>';
                }
                if ($this->hasDataPageFunction('truncate_table')) {
                    $table_links[] = '<a href="index.php?' . $link_vars . '&func=truncate_table&' . $em_url . $em_rex_list . '" id="truncate-table" onclick="return confirm(\'' . $I18N->msg('xform_truncate_table_confirm') . '\');">' . $I18N->msg('xform_truncate_table') . '</a>';
                }
                if ($REX['USER']->isAdmin()) {
                    $table_links[] = '<a href="index.php?page=xform&subpage=manager&table_id=' . $this->table->getId() . '&func=edit">' . $I18N->msg('xform_edit') . '</a>';
                }
                if (count($table_links) > 0) {
                    echo ' ' . $I18N->msg('xform_table') . ': ' . implode(' | ', $table_links);
                }
                $field_links = array();
                if ($REX['USER']->isAdmin()) {
                    $field_links[] = '<a href="index.php?page=xform&subpage=manager&tripage=table_field&table_name=' . $this->table->getTableName() . '">' . $I18N->msg('xform_edit') . '</a>';
                }
                if (count($field_links) > 0) {
                    echo ' ' . $I18N->msg('xform_manager_fields') . ': ' . implode(' | ', $field_links);
                }
                echo '</span><br style="clear:both;" /></div></div>';
                // SEARCHBLOCK
                $searchVars = $searchObject->getSearchVars();
                $display = count($searchVars["rex_xform_searchvars"]) > 0 ? 'block' : 'none';
                echo '<div id="searchblock" style="display:' . $display . ';">' . $searchform . '</div>';
                echo $list->get();
                echo '

                 <script type="text/javascript">/* <![CDATA[ */
                     jQuery("#searchtoggler").click(function(){jQuery("#searchblock").slideToggle("fast");});
                     jQuery("#xform_help_empty_toggler").click(function(){jQuery("#xform_help_empty").slideToggle("fast");});
                     jQuery("#xform_search_reset").click(function(){window.location.href = "index.php?page=xform&subpage=manager&tripage=data_edit&table_name=' . $this->table->getTableName() . '";});
                     jQuery("#truncate-table").click(function(){if(confirm("' . $I18N->msg('xform_truncate_table_confirm') . '")){return true;} else {return false;}});
                     jQuery("#dataset-delete").click(function(){if(confirm("' . $I18N->msg('xform_dataset_delete_confirm') . '")){return true;} else {return false;}});
                 /* ]]> */</script>';
            }
        }
        // end: $show_editpage
    }
Ejemplo n.º 4
0
                if ($xform->objparams['form_show']) {
                    if ($func == 'edit') {
                        echo '<div class="rex-addon-output"><h3 class="rex-hl2">' . $I18N->msg('xform_manager_edit_table') . '</h3><div class="rex-addon-content">';
                    } else {
                        echo '<div class="rex-addon-output"><h3 class="rex-hl2">' . $I18N->msg('xform_manager_add_table') . '</h3><div class="rex-addon-content">';
                    }
                    echo $form;
                    echo '</div></div>';
                    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 {
                    if ($func == 'edit') {
                        echo rex_info($I18N->msg('xform_manager_table_updated'));
                    } elseif ($func == 'add') {
                        $table_name = $xform->objparams['value_pool']['sql']['table_name'];
                        $table = rex_xform_manager_table::get($table_name);
                        if ($table) {
                            $t = new rex_xform_manager();
                            $t->setTable($table);
                            $t->generateAll();
                            echo rex_info($I18N->msg('xform_manager_table_added'));
                        }
                    }
                }
            }
        }
    }
}
if ($func == 'delete' && $REX['USER']->isAdmin()) {
    $table_name = rex_request('table_name', 'string');
    echo rex_xform_manager_table_api::removeTable($table_name);