public static function getAll() { if (self::$loadedAllTables) { return self::$tables; } self::$loadedAllTables = true; $table_array = rex_sql::factory(); if (self::$debug) { $table_array->setDebug(); } $table_array = $table_array->getArray('select * from ' . self::table() . ' order by prio'); self::$tables = array(); foreach ($table_array as $t) { self::$tables[$t['table_name']] = new self($t); } return self::$tables; }
static function checkMediaInUse($params) { $warning = $params['subject']; $sql = rex_sql::factory(); $sql->setQuery('SELECT `table_name`, `type_name`, `name` FROM `' . rex_yform_manager_field::table() . '` WHERE `type_id`="value" AND `type_name` IN("be_medialist","be_mediapool","mediafile")'); $rows = $sql->getRows(); if ($rows == 0) { return $warning; } $where = array(); $filename = addslashes($params['filename']); while ($sql->hasNext()) { $table = $sql->getValue('table_name'); switch ($sql->getValue('type_name')) { case 'be_mediapool': case 'mediafile': $where[$table][] = $sql->getValue('name') . '="' . $filename . '"'; break; case 'be_medialist': $where[$table][] = 'FIND_IN_SET("' . $filename . '", ' . $sql->getValue('name') . ')'; break; default: trigger_error('Unexpected fieldtype "' . $sql->getValue('type_name') . '"!', E_USER_ERROR); } $sql->next(); } $tupel = ''; foreach ($where as $table => $cond) { $sql->setQuery('SELECT id FROM ' . $table . ' WHERE ' . implode(' OR ', $cond)); while ($sql->hasNext()) { $sql_tupel = rex_sql::factory(); $sql_tupel->setQuery('SELECT name FROM `' . rex_yform_manager_table::table() . '` WHERE `table_name`="' . $table . '"'); $tupel .= '<li><a href="javascript:openPage(\'index.php?page=yform/manager/data_edit&table_name=' . $table . '&data_id=' . $sql->getValue('id') . '&func=edit\')">' . $sql_tupel->getValue('name') . ' [id=' . $sql->getValue('id') . ']</a></li>'; $sql->next(); } } if ($tupel != '') { $warning[] = 'Tabelle<br /><ul>' . $tupel . '</ul>'; } return $warning; }
$list->setColumnLayout(rex_i18n::msg('yform_edit'), ['<th class="rex-table-action" colspan="3">###VALUE###</th>', '<td class="rex-table-action">###VALUE###</td>']); $list->setColumnParams(rex_i18n::msg('yform_edit'), array('table_id' => '###id###', 'func' => 'edit')); $list->addColumn(rex_i18n::msg('yform_delete'), '<i class="rex-icon rex-icon-delete"></i> ' . rex_i18n::msg('yform_delete')); $list->setColumnLayout(rex_i18n::msg('yform_delete'), ['', '<td class="rex-table-action">###VALUE###</td>']); $list->setColumnParams(rex_i18n::msg('yform_delete'), array('table_name' => '###table_name###', 'func' => 'delete')); $list->addLinkAttribute(rex_i18n::msg('yform_delete'), 'onclick', 'return confirm(\' [###table_name###] ' . rex_i18n::msg('yform_delete') . ' ?\')'); $list->addColumn(rex_i18n::msg('yform_editfields'), rex_i18n::msg('yform_editfields')); $list->setColumnLayout(rex_i18n::msg('yform_editfields'), ['', '<td class="rex-table-action">###VALUE###</td>']); $list->setColumnParams(rex_i18n::msg('yform_editfields'), array('page' => 'yform/manager/table_field', 'table_name' => '###table_name###')); $content = $list->get(); $fragment = new rex_fragment(); $fragment->setVar('title', rex_i18n::msg('yform_table_overview')); $fragment->setVar('options', $panel_options, false); $fragment->setVar('content', $content, false); $content = $fragment->parse('core/page/section.php'); echo $content; } // ********************************************* LISTE OF TABLES TO EDIT FOR NOt ADMINS if (!rex::getUser()->isAdmin()) { echo '<div class="rex-addon-output">'; echo '<h2 class="rex-hl2">' . rex_i18n::msg('yform_table_overview') . '</h2>'; echo '<div class="rex-addon-content"><ul>'; $tables = rex_yform_manager_table::getAll(); foreach ($tables as $table) { if ($table->isActive() && !$table->isHidden() && (rex::getUser()->isAdmin() || rex::getUser()->hasPerm($table->getPermKey()))) { echo '<li><a href="index.php?page=yform/manager/data_edit&table_name=' . $table->getTableName() . '">' . rex_i18n::translate($table->getName()) . '</a></li>'; } } echo '</ul></div>'; echo '</div>'; }
<?php /** * yform * @author jan.kristinus[at]redaxo[dot]org Jan Kristinus * @author <a href="http://www.yakamara.de">www.yakamara.de</a> */ // echo rex_view::title(rex_i18n::msg('yform')); $table_name = rex_request('table_name', 'string'); $table = rex_yform_manager_table::get($table_name); if ($table && rex::getUser() && (rex::getUser()->isAdmin() || rex::getUser()->hasPerm('yform[table:' . $table_name . ']'))) { try { $page = new rex_yform_manager(); $page->setTable($table); $page->setLinkVars(array('page' => 'yform/manager/data_edit', 'table_name' => $table->getTableName())); echo $page->getDataPage(); } catch (Exception $e) { $message = nl2br($e->getMessage() . "\n" . $e->getTraceAsString()); echo rex_view::warning($message); } } else { if (!$table) { echo rex_view::warning(rex_i18n::msg('yform_table_not_found')); } }
protected function getRelationTableFields() { $table = rex_yform_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); }
static function generateTablesAndFields($delete_old = false) { rex_yform_manager_table::reload(); $types = rex_yform::getTypeArray(); foreach (rex_yform_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'] . '` '); } } } } }
<?php /** * yform * @author jan.kristinus[at]redaxo[dot]org Jan Kristinus * @author <a href="http://www.yakamara.de">www.yakamara.de</a> */ echo rex_view::title(rex_i18n::msg('yform')); $page = rex_request('page', 'string', ''); $yform_tables = array(); foreach (rex_yform_manager_table::getAll() as $g_table) { $table_name = $g_table->getTableName(); if ('[translate:' . $table_name . ']' != rex_i18n::msg($table_name)) { $table_name = rex_i18n::msg($table_name); } $yform_tables[$g_table->getTableName()] = $table_name . ' [' . $g_table->getTableName() . ']'; } $yform = new rex_yform(); $yform->setHiddenField('page', $page); $yform->setObjectparams('real_field_names', true); $yform->setObjectparams('hide_top_warning_messages', true); $yform->setValueField('select', array('table_names', rex_i18n::msg('yform_manager_tables'), $yform_tables, 'multiple' => 1)); $yform->setValidateField('empty', array('table_names', '')); $form = $yform->getForm(); if ($yform->objparams['actions_executed']) { try { $table_names = rex_request("table_names"); $return = rex_yform_manager_table_api::exportTablesets($table_names); $file_name = 'yform_manager_tableset_export_tables_' . date("YmdHis") . '.json'; ob_end_clean(); header('Content-Type: application/json');