/** * @see UserFilterField::__construct */ public function __construct($typeparam, $fieldId = '') { $this->validCompareOperators = array('>=' => _('mindestens'), '<=' => _('höchstens'), '=' => _('gleich'), '!=' => _('ungleich')); if ($fieldId) { $this->id = $fieldId; $this->load(); } else { $this->id = $this->generateId(); $this->datafield_id = $typeparam; } $df = DataField::find($this->datafield_id); if ($df) { $this->datafield_name = $df->name; } else { throw new UnexpectedValueException('datafield not found, id: ' . $typeparam); } $typed_df = DataFieldEntry::createDataFieldEntry($df); if ($typed_df instanceof DataFieldBoolEntry) { $this->validValues = array(1 => _('Ja'), 0 => _('Nein')); unset($this->validCompareOperators['>=']); unset($this->validCompareOperators['<=']); unset($this->validCompareOperators['!=']); $this->null_yields = 0; } else { if ($typed_df instanceof DataFieldSelectboxEntry) { list($valid_values, $is_assoc) = $typed_df->getParams(); if (!$is_assoc) { $valid_values = array_combine($valid_values, $valid_values); } $this->validValues = $valid_values; $this->null_yields = $typed_df instanceof DataFieldSelectboxMultipleEntry ? '' : key($valid_values); } else { $this->null_yields = ''; } } }
/** * returns matching "old-style" DataFieldEntry object * * @return DataFieldEntry */ public function getTypedDatafield() { $range_id = $this->sec_range_id ? array($this->range_id, $this->sec_range_id) : $this->range_id; $df = DataFieldEntry::createDataFieldEntry($this->datafield, $range_id, $this->getValue('content')); $self = $this; $observer = function ($event, $object, $user_data) use($self) { if ($user_data['changed']) { $self->restore(); } }; NotificationCenter::addObserver($observer, '__invoke', 'DatafieldDidUpdate', $df); return $df; }
/** * Caching for the datafields * @param type $member * @param type $fieldID * @return null */ private function getDatafield($member, $fieldID) { if (strlen($fieldID) == 32) { if (!array_key_exists($fieldID, $this->datafieldCache)) { $this->datafieldCache[$fieldID] = DataField::find($fieldID); } if (isset($this->datafieldCache[$fieldID])) { if ($this->datafieldCache[$fieldID]->object_type == 'usersemdata') { $field = current(DatafieldEntryModel::findByModel($member, $fieldID)); } if ($this->datafieldCache[$fieldID]->object_type == 'user') { $field = current(DatafieldEntryModel::findByModel(User::find($member->user_id), $fieldID)); } if ($field) { $range_id = $field->sec_range_id ? array($field->range_id, $field->sec_range_id) : $field->range_id; $typed_df = DataFieldEntry::createDataFieldEntry($field->datafield, $range_id, $field->getValue('content')); return array($field->name => $typed_df); } } } }
/** * Stores the statusgruppen of a user. */ public function store_action($type, $id) { if ($type === 'institute') { if ($status = Request::option('status')) { $query = "SELECT inst_perms FROM user_inst WHERE user_id = ? AND Institut_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user->user_id, $id)); $perms = $statement->fetchColumn(); if ($status != $perms && in_array($status, $this->about->allowedInstitutePerms())) { $query = "UPDATE user_inst SET inst_perms = ? WHERE user_id = ? AND Institut_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($status, $this->user->user_id, $id)); log_event('INST_USER_STATUS', $id, $this->user->user_id, $perms . ' -> ' . $status); $this->reportSuccess(_('Der Status wurde geändert!')); } } if ($this->shallChange('', 'institute_data')) { $query = "UPDATE user_inst\n SET raum = ?, sprechzeiten = ?, Telefon = ?, Fax = ?\n WHERE Institut_id = ? AND user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array(Request::get('raum'), Request::get('sprech'), Request::get('tel'), Request::get('fax'), $id, $this->user->user_id)); if ($statement->rowCount() > 0) { $this->reportSuccess(_('Ihre Daten an der Einrichtung %s wurden geändert.'), Request::get('name')); setTempLanguage($this->user->user_id); $this->postPrivateMessage(_("Ihre Daten an der Einrichtung %s wurden geändert.\n"), Request::get('name')); restoreLanguage(); } } if ($default_institute = Request::int('default_institute', 0)) { $query = "UPDATE user_inst SET externdefault = 0 WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user->user_id)); } $query = "UPDATE user_inst\n SET externdefault = ?, visible = ?\n WHERE Institut_id = ? AND user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($default_institute, Request::int('invisible', 0) ? 0 : 1, $id, $this->user->user_id)); } if (in_array($type, words('institute role'))) { if ($datafields = Request::getArray('datafields')) { $errors = array(); foreach ($datafields as $key => $value) { $struct = new DataField($key); $entry = DataFieldEntry::createDataFieldEntry($struct, array($this->user->user_id, $id)); $entry->setValueFromSubmit($value); if ($entry->isValid()) { $entry->store(); } else { $errors[] = sprintf(_('Fehlerhafter Eintrag im Feld <em>%s</em>: %s (Eintrag wurde nicht gespeichert)'), $entry->getName(), $entry->getDisplayValue()); } } } if (!empty($errors)) { $this->reportErrorWithDetails(_('Bitte überprüfen Sie Ihre Eingabe.'), $errors); } } $this->redirect('settings/statusgruppen#' . $id); }
<?php echo _('ja'); ?> </label> <label> <input type="radio" name="<?php echo $datafield->id; ?> " value="0" <? if ($user[$datafield->id] === '0') echo 'checked'; ?>> <?php echo _('nein'); ?> </label> </section> <? elseif ($datafield->type === 'selectbox' || $datafield->type === 'radio') : ?> <? $datafield_entry = DataFieldEntry::createDataFieldEntry($datafield);?> <select name="<?php echo $datafield->id; ?> "> <option value="---ignore---"><?php echo _('alle'); ?> </option> <? foreach ($datafield_entry->type_param as $pkey => $pval) :?> <? $value = $datafield_entry->is_assoc_param ? (string) $pkey : $pval; ?> <option value="<?php echo $value; ?> " <?php echo $user[$datafield->id] === $value ? 'selected' : '';
function checkData() { global $invalidEntries; // check the standard role data if (!Request::get('new_name') && Request::get('presetName') != 'none') { $this->name = remove_magic_quotes(Request::get('presetName')); } else { $this->name = remove_magic_quotes(Request::get('new_name')); } $this->size = (int) Request::int('new_size'); // check if we have to remove the self_assign_exclusive-flag $this->selfassign = SetSelfAssign($this->statusgruppe_id, Request::quoted('new_selfassign') ? 1 : 0); /*if (Request::quoted('new_selfassign')) { if ($this->selfassign == 0) { $this->selfassign = 1; } } else { if ($this->selfassign == 2) { if ($GLOBALS['SessSemName']) { SetSelfAssignExclusive($GLOBALS['SessSemName'][1], false); } } $this->selfassign = 0; }*/ if (Request::get('groupfolder')) { // check if there already exists a folder $stmt = DBManager::get()->prepare("SELECT COUNT(*) as c FROM folder WHERE range_id = ?"); $stmt->execute(array($this->statusgruppe_id)); if ($folder = $stmt->fetch(PDO::FETCH_ASSOC)) { if ($folder['c'] == 0) { // if no folder exists, we create one $title = _("Dateiordner der Gruppe:") . ' ' . $this->name; $description = _("Ablage für Ordner und Dokumente dieser Gruppe"); $permission = 15; create_folder(addslashes($title), $description, $this->statusgruppe_id, $permission); $this->messages['msg'][] = _("Es wurde ein Gruppenordner angelegt."); } } } if (!$this->isSeminar()) { // check the datafields foreach (Request::quotedArray('datafields') as $id => $data) { $struct = DataField::find($id); $entry = DataFieldEntry::createDataFieldEntry($struct, array($this->range_id, $this->statusgruppe_id)); $entry->setValueFromSubmit($data); if ($entry->isValid()) { $entry->store(); } else { $invalidEntries[$struct->id] = $entry; } } // a group cannot be its own vather! if (Request::get('vather') == $this->statusgruppe_id) { $this->messages['error'][] = _("Sie könne diese Gruppe nicht sich selbst unterordnen!"); } else { // check if the group shall be moved if (Request::get('vather') != 'nochange') { if (Request::option('vather') == 'root') { $vather_id = $GLOBALS['range_id']; } else { $vather_id = Request::option('vather'); } if (!isVatherDaughterRelation($this->statusgruppe_id, $vather_id)) { $this->range_id = $vather_id; //$db->query("UPDATE statusgruppen SET range_id = '$vather_id' WHERE statusgruppe_id = '{$this->statusgruppe_id}'"); } else { $this->messages['error'][] = _("Sie können diese Gruppe nicht einer ihr untergeordneten Gruppe zuweisen!"); } } } } if (!$this->isSeminar() && is_array($invalidEntries)) { $this->messages['error'][] = _("Korrigieren Sie die fehlerhaften Eingaben!"); return false; } return true; }
/** * Enter description here... * * @param unknown_type $range_id * @param unknown_type $object_type * @param unknown_type $object_class_hint * @return unknown */ public static function getDataFieldEntries($range_id, $object_type = '', $object_class_hint = '') { if (!$range_id) { return false; // we necessarily need a range ID } $parameters = array(); if (is_array($range_id)) { // rangeID may be an array ("classic" rangeID and second rangeID used for user roles) $secRangeID = $range_id[1]; $rangeID = $range_id[0]; // to keep compatible with following code if ('usersemdata' !== $object_type && 'roleinstdata' !== $object_type) { $object_type = 'userinstrole'; } $clause1 = "AND sec_range_id= :sec_range_id"; $parameters[':sec_range_id'] = $secRangeID; } else { $rangeID = $range_id; } if (!$object_type) { $object_type = get_object_type($rangeID); } if ($object_type) { switch ($object_type) { case 'sem': if ($object_class_hint) { $object_class = SeminarCategories::GetByTypeId($object_class_hint); } else { $object_class = SeminarCategories::GetBySeminarId($rangeID); } $clause2 = "object_class = :object_class OR object_class IS NULL"; $parameters[':object_class'] = (int) $object_class->id; break; case 'inst': case 'fak': if ($object_class_hint) { $object_class = $object_class_hint; } else { $query = "SELECT type FROM Institute WHERE Institut_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($rangeID)); $object_class = $statement->fetchColumn(); } $object_type = "inst"; $clause2 = "object_class = :object_class OR object_class IS NULL"; $parameters[':object_class'] = (int) $object_class; break; case 'roleinstdata': //hmm tja, vermutlich so $clause2 = '1'; break; case 'user': case 'userinstrole': case 'usersemdata': $object_class = is_object($GLOBALS['perm']) ? DataField::permMask($GLOBALS['perm']->get_perm($rangeID)) : 0; $clause2 = "((object_class & :object_class) OR object_class IS NULL)"; $parameters[':object_class'] = (int) $object_class; break; } $query = "SELECT a.*, content\n FROM datafields AS a\n LEFT JOIN datafields_entries AS b\n ON (a.datafield_id = b.datafield_id AND range_id = :range_id {$clause1})\n WHERE object_type = :object_type AND ({$clause2})\n ORDER BY priority"; $parameters[':range_id'] = $rangeID; $parameters[':object_type'] = $object_type; $rs = DBManager::get()->prepare($query); $rs->execute($parameters); $entries = array(); while ($data = $rs->fetch(PDO::FETCH_ASSOC)) { $datafield = DataField::buildExisting($data); $entries[$data['datafield_id']] = DataFieldEntry::createDataFieldEntry($datafield, $range_id, $data['content']); } } return $entries; }
/** * Configures a datafield * * @param String $datafield_id Datafield id */ public function config_action($datafield_id) { $datafield = DataField::find($datafield_id); if (Request::get('typeparam')) { $datafield->typeparam = Request::get('typeparam'); } if (Request::isPost() && Request::submitted('store')) { $datafield->store(); PageLayout::postSuccess(_('Die Parameter wurden übernommen.')); $this->redirect('admin/datafields/index/' . $datafield_id->object_type . '#item_' . $datafield_id); } $this->struct = $datafield; if (Request::submitted('preview')) { $this->preview = DataFieldEntry::createDataFieldEntry($datafield); $this->render_action('preview'); } }