schema = $schema; $this->hlp = plugin_load('helper', 'struct_config'); } /** * Returns the Admin Form to edit the schema * * This data is processed by the SchemaBuilder class * * @return string the HTML for the editor form * @see SchemaBuilder */ public function getEditor() { $form = new Form(['method' => 'POST', 'id' => 'plugin__struct_editor']); $form->setHiddenField('do', 'admin'); $form->setHiddenField('page', 'struct_schemas'); $form->setHiddenField('table', $this->schema->getTable()); $form->setHiddenField('schema[id]', $this->schema->getId()); $form->addHTML(''); $form->addHTML(""); foreach ($this->schema->getColumns() as $col) { $form->addHTML($this->adminColumn($col->getColref(), $col)); } // Add one new field at the end $form->addHTML($this->adminColumn('new1', new Column($this->schema->getMaxsort() + 10, new Text()), 'new')); $form->addHTML('
{$this->hlp->getLang('editor_sort')} {$this->hlp->getLang('editor_label')} {$this->hlp->getLang('editor_multi')} {$this->hlp->getLang('editor_conf')} {$this->hlp->getLang('editor_type')} {$this->hlp->getLang('editor_enabled')}
'); $form->addFieldsetOpen(); $config = json_encode($this->schema->getConfig(), JSON_PRETTY_PRINT); $form->addHTML( '' ); $form->addFieldsetClose(); $form->addButton('save', 'Save')->attr('type', 'submit'); return $form->toHTML() . $this->initJSONEditor(); } /** * Gives the code to attach the JSON editor to the config field * * We do not use the "normal" way, because this is rarely used code and there's no need to always load it. * @return string */ protected function initJSONEditor() { $html = ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; return $html; } /** * Returns the HTML to edit a single column definition of the schema * * @param string $column_id * @param Column $col * @param string $key The key to use in the form * @return string * @todo this should probably be reused for adding new columns via AJAX later? */ protected function adminColumn($column_id, Column $col, $key = 'cols') { $base = 'schema[' . $key . '][' . $column_id . ']'; // base name for all fields $class = $col->isEnabled() ? '' : 'disabled'; if ($key === 'new') $class .= ' new'; $html = ""; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $checked = $col->getType()->isMulti() ? 'checked="checked"' : ''; $html .= ''; $html .= ''; $html .= ''; $config = json_encode($col->getType()->getConfig(), JSON_PRETTY_PRINT); $html .= ''; $html .= ''; $types = array_keys(Column::allTypes()); $html .= ''; $html .= ''; $html .= ''; $html .= ''; $checked = $col->isEnabled() ? 'checked="checked"' : ''; $html .= ''; $html .= ''; $html .= ''; return $html; } }