/**
  * Creates the inline editor
  */
 protected function inline_editor()
 {
     // silently fail when editing not possible
     if (!$this->initFromInput()) {
         return;
     }
     if (auth_quickaclcheck($this->pid) < AUTH_EDIT) {
         return;
     }
     if (!$this->schemadata->getSchema()->isEditable()) {
         return;
     }
     if (checklock($this->pid)) {
         return;
     }
     // lock page
     lock($this->pid);
     // output the editor
     $value = $this->schemadata->getDataColumn($this->column);
     echo '<label data-column="' . hsc($this->column->getFullQualifiedLabel()) . '">';
     echo $value->getValueEditor('entry');
     echo '</label>';
     $hint = $this->column->getType()->getTranslatedHint();
     if ($hint) {
         echo '<div class="hint">';
         echo hsc($hint);
         echo '</div>';
     }
     // csrf protection
     formSecurityToken();
 }
 /**
  * Sort by lookup table
  *
  * @param QueryBuilder $QB
  * @param string $tablealias
  * @param string $colname
  * @param string $order
  */
 public function sort(QueryBuilder $QB, $tablealias, $colname, $order)
 {
     if (!$this->usesLookup()) {
         parent::sort($QB, $tablealias, $colname, $order);
         return;
     }
     $schema = 'data_' . $this->schema->getTable();
     $field = $this->column->getColName();
     $rightalias = $QB->generateTableAlias();
     $QB->addLeftJoin($tablealias, $schema, $rightalias, "{$tablealias}.{$colname} = {$rightalias}.pid");
     $this->column->getType()->sort($QB, $rightalias, $field, $order);
 }
 /**
  * Validate a single value
  *
  * @param Column $col the column of that value
  * @param mixed &$rawvalue the value, will be fixed according to the type
  * @return bool
  */
 public function validateValue(Column $col, &$rawvalue)
 {
     // fix multi value types
     $type = $col->getType();
     $trans = $type->getTranslatedLabel();
     if ($type->isMulti() && !is_array($rawvalue)) {
         $rawvalue = $type->splitValues($rawvalue);
     }
     // strip empty fields from multi vals
     if (is_array($rawvalue)) {
         $rawvalue = array_filter($rawvalue, array($this, 'filter'));
         $rawvalue = array_values($rawvalue);
         // reset the array keys
     }
     // validate data
     return $this->validateField($type, $trans, $rawvalue);
 }
 /**
  * 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';
     $html = "<tr class=\"{$class}\">";
     $html .= '<td class="sort">';
     $html .= '<input type="text" name="' . $base . '[sort]" value="' . hsc($col->getSort()) . '" size="3">';
     $html .= '</td>';
     $html .= '<td class="label">';
     $html .= '<input type="text" name="' . $base . '[label]" value="' . hsc($col->getType()->getLabel()) . '">';
     $html .= '</td>';
     $html .= '<td class="ismulti">';
     $checked = $col->getType()->isMulti() ? 'checked="checked"' : '';
     $html .= '<input type="checkbox" name="' . $base . '[ismulti]" value="1" ' . $checked . '>';
     $html .= '</td>';
     $html .= '<td class="config">';
     $config = json_encode($col->getType()->getConfig(), JSON_PRETTY_PRINT);
     $html .= '<textarea name="' . $base . '[config]" cols="45" rows="10" class="config">' . hsc($config) . '</textarea>';
     $html .= '</td>';
     $types = Column::allTypes();
     $html .= '<td class="class">';
     $html .= '<select name="' . $base . '[class]">';
     foreach ($types as $type) {
         $selected = $col->getType()->getClass() == $type ? 'selected="selected"' : '';
         $html .= '<option value="' . hsc($type) . '" ' . $selected . '>' . hsc($type) . '</option>';
     }
     $html .= '</select>';
     $html .= '</td>';
     $html .= '<td class="isenabled">';
     $checked = $col->isEnabled() ? 'checked="checked"' : '';
     $html .= '<input type="checkbox" name="' . $base . '[isenabled]" value="1" ' . $checked . '>';
     $html .= '</td>';
     $html .= '</tr>';
     return $html;
 }