/**
  * @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;
 }
Example #3
0
 /**
  * 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);
             }
         }
     }
 }
Example #4
0
 /**
  * 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);
 }
Example #5
0
                    <?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' : '';
Example #6
0
 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;
 }
Example #7
0
 /**
  * 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;
 }
Example #8
0
 /**
  * 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');
     }
 }