public function afterStoreCallback()
 {
     if (!$this->material['host_id'] && $this->material['user_id'] !== $GLOBALS['user']->id) {
         PersonalNotifications::add($this->material['user_id'], URLHelper::getURL("plugins.php/lernmarktplatz/market/details/" . $this->material->getId() . "#review_" . $this->getId()), $this->isNew() ? sprintf(_("%s hat ein Review zu '%s' geschrieben."), $this['host_id'] ? LernmarktplatzUser::find($this['user_id'])->name : get_fullname($this['user_id']), $this->material['name']) : sprintf(_("%s hat ein Review zu '%s' verändert."), $this['host_id'] ? LernmarktplatzUser::find($this['user_id'])->name : get_fullname($this['user_id']), $this->material['name']), "review_" . $this->getId(), Icon::create("support", "clickable"));
     }
     //only push if the comment is from this server and the material-server is different
     if ($this->material['host_id'] && !$this['host_id'] && $this->isDirty()) {
         $remote = new LernmarktplatzHost($this->material['host_id']);
         $myHost = LernmarktplatzHost::thisOne();
         $data = array();
         $data['host'] = array('name' => $myHost['name'], 'url' => $myHost['url'], 'public_key' => $myHost['public_key']);
         $data['data'] = $this->toArray();
         $data['data']['foreign_review_id'] = $data['data']['review_id'];
         unset($data['data']['review_id']);
         unset($data['data']['id']);
         unset($data['data']['user_id']);
         unset($data['data']['host_id']);
         $user_description_datafield = DataField::find(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")) ?: DataField::findOneBySQL("name = ?", array(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")));
         if ($user_description_datafield) {
             $datafield_entry = DatafieldEntryModel::findOneBySQL("range_id = ? AND datafield_id = ?", array($this['user_id'], $user_description_datafield->getId()));
         }
         $data['user'] = array('user_id' => $this['user_id'], 'name' => get_fullname($this['user_id']), 'avatar' => Avatar::getAvatar($this['user_id'])->getURL(Avatar::NORMAL), 'description' => $datafield_entry ? $datafield_entry['content'] : null);
         if (!$remote->isMe()) {
             $remote->pushDataToEndpoint("add_review/" . $this->material['foreign_material_id'], $data);
         }
     }
 }
 public function map($format, $value)
 {
     switch ($format) {
         case "number":
             $course = Course::findOneBySQL("VeranstaltungsNummer = ?", array($value));
             if ($course) {
                 return $course->getId();
             }
             break;
         case "name":
             $course = Course::findOneBySQL("name = ?", array($value));
             if ($course) {
                 return $course->getId();
             }
             break;
         default:
             //Datenfeld:
             $datafield = DataField::find($format);
             if ($datafield && $datafield['object_type'] === "sem") {
                 $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ?", array($datafield->getId(), $value));
                 if ($entry) {
                     return $entry['range_id'];
                 }
             }
     }
 }
 public function afterStoreCallback()
 {
     if ($this->isDirty()) {
         //add notification to writer of review
         if (!$this->review['host_id'] && $this->review['user_id'] !== $this['user_id']) {
             PersonalNotifications::add($this->review['user_id'], URLHelper::getURL("plugins.php/lernmarktplatz/market/discussion/" . $this['review_id'] . "#comment_" . $this->getId()), sprintf(_("%s hat einen Kommentar zu Ihrem Review geschrieben."), $this['host_id'] ? LernmarktplatzUser::find($this['user_id'])->name : get_fullname($this['user_id'])), "comment_" . $this->getId(), Icon::create("support", "clickable"));
         }
         //add notification to all users of this servers who discussed this review but are neither the new
         //commentor nor the writer of the review
         $statement = DBManager::get()->prepare("\n                SELECT user_id\n                FROM lernmarktplatz_comments\n                WHERE review_id = :review_id\n                    AND host_id IS NULL\n                GROUP BY user_id\n            ");
         $statement->execute(array('review_id' => $this->review->getId()));
         foreach ($statement->fetchAll(PDO::FETCH_COLUMN, 0) as $user_id) {
             if (!in_array($user_id, array($this->review['user_id'], $this['user_id']))) {
                 PersonalNotifications::add($user_id, URLHelper::getURL("plugins.php/lernmarktplatz/market/discussion/" . $this['review_id'] . "#comment_" . $this->getId()), sprintf(_("%s hat auch einen Kommentar geschrieben."), $this['host_id'] ? LernmarktplatzUser::find($this['user_id'])->name : get_fullname($this['user_id'])), "comment_" . $this->getId(), Icon::create("support", "clickable"));
             }
         }
         //only push if the comment is from this server and the material-server is different
         if (!$this['host_id']) {
             $myHost = LernmarktplatzHost::thisOne();
             $data = array();
             $data['host'] = array('name' => $myHost['name'], 'url' => $myHost['url'], 'public_key' => $myHost['public_key']);
             $data['data'] = $this->toArray();
             $data['data']['foreign_comment_id'] = $data['data']['comment_id'];
             unset($data['data']['comment_id']);
             unset($data['data']['id']);
             unset($data['data']['user_id']);
             unset($data['data']['host_id']);
             $user_description_datafield = DataField::find(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")) ?: DataField::findOneBySQL("name = ?", array(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")));
             if ($user_description_datafield) {
                 $datafield_entry = DatafieldEntryModel::findOneBySQL("range_id = ? AND datafield_id = ?", array($this['user_id'], $user_description_datafield->getId()));
             }
             $data['user'] = array('user_id' => $this['user_id'], 'name' => get_fullname($this['user_id']), 'avatar' => Avatar::getAvatar($this['user_id'])->getURL(Avatar::NORMAL), 'description' => $datafield_entry ? $datafield_entry['content'] : null);
             $statement = DBManager::get()->prepare("\n                    SELECT host_id\n                    FROM lernmarktplatz_comments\n                    WHERE review_id = :review_id\n                        AND host_id IS NOT NULL\n                    GROUP BY host_id\n                ");
             $statement->execute(array('review_id' => $this->review->getId()));
             $hosts = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
             if ($this->review['host_id'] && !in_array($this->review['host_id'], $hosts)) {
                 $hosts[] = $this->review['host_id'];
             }
             if ($this->review->material['host_id'] && !in_array($this->review->material['host_id'], $hosts)) {
                 $hosts[] = $this->review->material['host_id'];
             }
             foreach ($hosts as $host_id) {
                 $remote = new LernmarktplatzHost($host_id);
                 if (!$remote->isMe()) {
                     $review_id = $this->review['foreign_review_id'] ?: $this->review->getId();
                     if ($this->review['foreign_review_id']) {
                         if ($this->review->host_id === $remote->getId()) {
                             $host_hash = null;
                         } else {
                             $host_hash = md5($this->review->host['public_key']);
                         }
                     } else {
                         $host_hash = md5($myHost['public_key']);
                     }
                     $remote->pushDataToEndpoint("add_comment/" . $review_id . "/" . $host_hash, $data);
                 }
             }
         }
     }
 }
 public function map($format, $value)
 {
     switch ($format) {
         case "username":
             $user = User::findOneByUsername($value);
             if ($user) {
                 return $user->getId();
             }
             break;
         case "email":
             $user = User::findOneByEmail($value);
             if ($user) {
                 return $user->getId();
             }
             break;
         default:
             //Datenfeld:
             $datafield = DataField::find($format);
             if ($datafield && $datafield['object_type'] === "user") {
                 $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ?", array($datafield->getId(), $value));
                 if ($entry) {
                     return $entry['range_id'];
                 }
             }
     }
 }
Пример #5
0
 /**
  * 
  * returns the datafields
  * @return list of datafields
  */
 public function getFields()
 {
     if (sizeOf($this->fields) == 0) {
         $this->fields = DataField::getByDataType($this);
     }
     return $this->fields;
 }
 public function map($format, $value)
 {
     switch ($format) {
         case "name":
             $inst = Institute::findOneBySQL("Name = ?", array($value));
             if ($inst) {
                 return $inst->getId();
             }
             break;
         default:
             //Datenfeld:
             $datafield = DataField::find($format);
             if ($datafield && $datafield['object_type'] === "inst") {
                 $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ?", array($datafield->getId(), $value));
                 if ($entry) {
                     return $entry['range_id'];
                 }
             }
     }
 }
Пример #7
0
 /**
  * Edit or create a rule
  *
  * @param md5 $edit_id
  */
 function edit_action($id = null)
 {
     //get data
     $user_field = 'user';
     $semdata_field = 'usersemdata';
     $this->semFields = AuxLockRules::getSemFields();
     $this->entries_user = DataField::getDataFields($user_field);
     $this->entries_semdata = DataField::getDataFields($semdata_field);
     $this->rule = is_null($id) ? false : AuxLockRules::getLockRuleByID($id);
     if ($GLOBALS['perm']->have_perm('root') && count($this->entries_semdata) == 0) {
         $this->flash['info'] = sprintf(_('Sie müssen zuerst im Bereich %sDatenfelder%s in der Kategorie ' . '<i>Datenfelder für Personenzusatzangaben in Veranstaltungen</i> einen neuen Eintrag erstellen.'), '<a href="' . URLHelper::getLink('dispatch.php/admin/datafields') . '">', '</a>');
     }
     // save action
     if (Request::submitted('erstellen') || Request::submitted('uebernehmen')) {
         //checking for errors
         $errors = array();
         if (!Request::get('rulename')) {
             array_push($errors, _("Bitte geben Sie der Regel mindestens einen Namen!"));
         }
         if (!AuxLockRules::checkLockRule(Request::getArray('fields'))) {
             array_push($errors, _('Bitte wählen Sie mindestens ein Feld aus der Kategorie "Zusatzinformationen" aus!'));
         }
         if (!empty($errors)) {
             $this->flash['error'] = _("Ihre Eingaben sind ungültig.");
             $this->flash['error_detail'] = $errors;
             // save
         } else {
             //new
             if (is_null($id)) {
                 AuxLockRules::createLockRule(Request::get('rulename'), Request::get('description'), Request::getArray('fields'), Request::getArray('order'));
                 //edit
             } else {
                 AuxLockRules::updateLockRule($id, Request::get('rulename'), Request::get('description'), Request::getArray('fields'), Request::getArray('order'));
             }
             $this->flash['success'] = sprintf(_('Die Regel "%s" wurde erfolgreich gespeichert!'), htmlReady(Request::get('rulename')));
             $this->redirect('admin/specification');
         }
     }
 }
Пример #8
0
 /**
  * @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 = '';
         }
     }
 }
Пример #9
0
:

            <select multiple size="<?php 
echo count($controller->user_status);
?>
" name="object_class[]" id="object_class" required>
                <option value="0" <? if ($item->object_class === null) echo 'selected'; ?>>
                    <?php 
echo _('alle');
?>
                </option>
            <? foreach ($controller->user_status as $key => $value): ?>
                <option value="<?php 
echo $value;
?>
" <? if ($item->object_class & DataField::permMask($key)) echo 'selected'; ?>>
                    <?php 
echo $key;
?>
                </option>
            <? endforeach; ?>
            </select>
        <? endif; ?>
        </label>

        <label>
            <?php 
echo _('Benötigter Status zum Bearbeiten');
?>

            <select name="edit_perms" id="edit_perms">
Пример #10
0
 /**
  * returns an array containing all lockable attributes for
  * given entity type
  * 
  * @param string $type entity type, one of [sem,inst,user]
  * @return array
  */
 public static function getLockRuleConfig($type)
 {
     $groups['basic'] = _("Grunddaten");
     $groups['personnel'] = _("Personen und Einordnung");
     $groups['misc'] = _("weitere Daten");
     $groups['room_time'] = _("Zeiten/Räume");
     $groups['access'] = _("Zugangsberechtigungen");
     $groups['actions'] = _("spezielle Aktionen");
     $attributes['sem']['veranstaltungsnummer'] = array('name' => _("Veranstaltungsnummer"), 'group' => 'basic');
     $attributes['sem']['seminar_inst'] = array('name' => _("beteiligte Einrichtungen"), 'group' => 'basic');
     $attributes['sem']['name'] = array('name' => _("Name"), 'group' => 'basic');
     $attributes['sem']['untertitel'] = array('name' => _("Untertitel"), 'group' => 'basic');
     $attributes['sem']['status'] = array('name' => _("Status"), 'group' => 'basic');
     $attributes['sem']['beschreibung'] = array('name' => _("Beschreibung"), 'group' => 'basic');
     $attributes['sem']['ort'] = array('name' => _("Ort"), 'group' => 'basic');
     $attributes['sem']['art'] = array('name' => _("Veranstaltungstyp"), 'group' => 'basic');
     $attributes['sem']['ects'] = array('name' => _("ECTS-Punkte"), 'group' => 'basic');
     $attributes['sem']['admission_turnout'] = array('name' => _("Teilnehmerzahl"), 'group' => 'basic');
     $attributes['sem']['dozent'] = array('name' => _("Lehrende"), 'group' => 'personnel');
     $attributes['sem']['tutor'] = array('name' => _("Tutor/-innen"), 'group' => 'personnel');
     $attributes['sem']['institut_id'] = array('name' => _("Heimateinrichtung"), 'group' => 'personnel');
     $attributes['sem']['sem_tree'] = array('name' => _("Studienbereiche"), 'group' => 'personnel');
     $attributes['sem']['participants'] = array('name' => _("Personen hinzufügen/löschen"), 'group' => 'personnel');
     $attributes['sem']['groups'] = array('name' => _("Gruppen hinzufügen/löschen"), 'group' => 'personnel');
     $attributes['sem']['sonstiges'] = array('name' => _("Sonstiges"), 'group' => 'misc');
     $attributes['sem']['teilnehmer'] = array('name' => _("Beschreibung des Teilnehmerkreises"), 'group' => 'misc');
     $attributes['sem']['voraussetzungen'] = array('name' => _("Teilnahmevoraussetzungen"), 'group' => 'misc');
     $attributes['sem']['lernorga'] = array('name' => _("Lernorganisation"), 'group' => 'misc');
     $attributes['sem']['leistungsnachweis'] = array('name' => _("Leistungsnachweis"), 'group' => 'misc');
     $attributes['sem']['room_time'] = array('name' => _("Zeiten/Räume"), 'group' => 'room_time');
     $attributes['sem']['cancelled_dates'] = array('name' => _("Termine ausfallen lassen"), 'group' => 'room_time');
     $attributes['sem']['admission_endtime'] = array('name' => _("Zeit/Datum des Losverfahrens/Kontingentierung"), 'group' => 'access');
     $attributes['sem']['admission_disable_waitlist'] = array('name' => _("Aktivieren/Deaktivieren der Warteliste"), 'group' => 'access');
     $attributes['sem']['admission_binding'] = array('name' => _("Verbindlichkeit der Anmeldung"), 'group' => 'access');
     $attributes['sem']['admission_type'] = array('name' => _("Typ des Anmeldeverfahrens"), 'group' => 'access');
     $attributes['sem']['admission_prelim'] = array('name' => _("zugelassenene Studiengänge"), 'group' => 'access');
     $attributes['sem']['admission_prelim_txt'] = array('name' => _("Vorläufigkeit der Anmeldungen"), 'group' => 'access');
     $attributes['sem']['admission_disable_waitlist'] = array('name' => _("Hinweistext bei Anmeldungen"), 'group' => 'access');
     $attributes['sem']['admission_starttime'] = array('name' => _("Startzeitpunkt der Anmeldemöglichkeit"), 'group' => 'access');
     $attributes['sem']['admission_endtime_sem'] = array('name' => _("Endzeitpunkt der Anmeldemöglichkeit"), 'group' => 'access');
     $attributes['sem']['lesezugriff'] = array('name' => _("Lesezugriff"), 'group' => 'access');
     $attributes['sem']['schreibzugriff'] = array('name' => _("Schreibzugriff"), 'group' => 'access');
     $attributes['sem']['passwort'] = array('name' => _("Passwort"), 'group' => 'access');
     $attributes['sem']['user_domain'] = array('name' => _("Nutzerdomänen zuordnen"), 'group' => 'access');
     $attributes['sem']['seminar_copy'] = array('name' => _("Veranstaltung kopieren"), 'group' => 'actions');
     $attributes['sem']['seminar_archive'] = array('name' => _("Veranstaltung archivieren"), 'group' => 'actions');
     $attributes['sem']['seminar_visibility'] = array('name' => _("Veranstaltung sichtbar/unsichtbar schalten"), 'group' => 'actions');
     $attributes['inst']['name'] = array('name' => _("Name"), 'group' => 'basic');
     $attributes['inst']['fakultaets_id'] = array('name' => _("Fakultät"), 'group' => 'basic');
     $attributes['inst']['type'] = array('name' => _("Bezeichnung"), 'group' => 'basic');
     $attributes['inst']['strasse'] = array('name' => _("Straße"), 'group' => 'basic');
     $attributes['inst']['plz'] = array('name' => _("Ort"), 'group' => 'basic');
     $attributes['inst']['telefon'] = array('name' => _("Telefonnummer"), 'group' => 'basic');
     $attributes['inst']['fax'] = array('name' => _("Faxnummer"), 'group' => 'basic');
     $attributes['inst']['email'] = array('name' => _("E-Mail-Adresse"), 'group' => 'basic');
     $attributes['inst']['url'] = array('name' => _("Homepage"), 'group' => 'basic');
     $attributes['inst']['participants'] = array('name' => _("Mitarbeiter hinzufügen/löschen"), 'group' => 'personnel');
     $attributes['inst']['groups'] = array('name' => _("Gruppen hinzufügen/löschen"), 'group' => 'personnel');
     $attributes['user']['name'] = array('name' => _("Vor- und Nachname"), 'group' => 'basic');
     $attributes['user']['username'] = array('name' => _("Nutzername"), 'group' => 'basic');
     $attributes['user']['password'] = array('name' => _("Passwort"), 'group' => 'basic');
     $attributes['user']['email'] = array('name' => _("E-Mail"), 'group' => 'basic');
     $attributes['user']['title'] = array('name' => _("Titel"), 'group' => 'basic');
     $attributes['user']['gender'] = array('name' => _("Geschlecht"), 'group' => 'basic');
     $attributes['user']['privatnr'] = array('name' => _("Telefon (privat)"), 'group' => 'basic');
     $attributes['user']['privatcell'] = array('name' => _("Mobiltelefon"), 'group' => 'basic');
     $attributes['user']['privadr'] = array('name' => _("Adresse (privat)"), 'group' => 'basic');
     $attributes['user']['hobby'] = array('name' => _("Hobbys"), 'group' => 'basic');
     $attributes['user']['lebenslauf'] = array('name' => _("Lebenslauf"), 'group' => 'basic');
     $attributes['user']['home'] = array('name' => _("Homepage"), 'group' => 'basic');
     $attributes['user']['publi'] = array('name' => _("Schwerpunkte"), 'group' => 'misc');
     $attributes['user']['schwerp'] = array('name' => _("Publikationen"), 'group' => 'misc');
     $attributes['user']['institute_data'] = array('name' => _("Einrichtungsdaten"), 'group' => 'misc');
     foreach (DataField::getDataFields($type) as $df_id => $df) {
         $attributes[$type][$df_id] = array('name' => $df->data['name'], 'group' => 'misc');
     }
     return array('groups' => $groups, 'attributes' => $attributes[$type]);
 }
Пример #11
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);
             }
         }
     }
 }
Пример #12
0
 /**
  *
  * @return DataField
  */
 public function getDataField()
 {
     if ($this->dataField == null) {
         $this->dataField = DataField::getByFormAndName($this->form->getDataType(), $this->dataName);
     }
     return $this->dataField;
 }
Пример #13
0
 private static function addTypes($field, $ind1, $record, $types, $isElectronical = false)
 {
     if (!empty($types)) {
         foreach ($types as $type) {
             $datafield = new DataField($field, $ind1, ' ');
             $datafield->addSubfield(new Subfield('a', ''));
             $typeStr = $isElectronical ? self::getFileFormat($type) : self::getType($type);
             if (!empty($type)) {
                 $datafield->addSubfield(new Subfield('q', $typeStr));
             }
             $record->addDataField($datafield);
         }
     }
 }
Пример #14
0
echo htmlReady($val->type);
?>
</span>
            </td>
            <td>
            <? if ($key === 'sem'): ?>
                <?php 
echo $val->object_class !== null ? htmlReady($GLOBALS['SEM_CLASS'][$val->object_class]['name']) : _('alle');
?>
            <? elseif ($key == 'inst'): ?>
                <?php 
echo $val->object_class !== null ? htmlReady($GLOBALS['INST_TYPE'][$val->object_class]['name']) : _('alle');
?>
            <? else: ?>
                <?php 
echo $val->object_class !== null ? DataField::getReadableUserClass($val->object_class) : _('alle');
?>
            <? endif; ?>
            </td>
            <td><?php 
echo $val->edit_perms;
?>
</td>
            <td><?php 
echo $val->view_perms;
?>
</td>
        <? if ($key === 'user'): ?>
            <td>
            <? if ($val->system): ?>
                <?php 
 /**
  * The constructor
  *
  * @param $name (string) the field name
  * @param $table (DataTable) the DataTable
  * @param $optionArrays (string array) all options
  */
 function DataFieldEnum($name, &$table, $optionArrays)
 {
     parent::DataField($name, $table, DATATYPE_ENUM);
     $this->_optionArrays = $optionArrays;
 }
 public function pushDataToIndexServers($delete = false)
 {
     $myHost = LernmarktplatzHost::thisOne();
     $data = array();
     $data['host'] = array('name' => $myHost['name'], 'url' => $myHost['url'], 'public_key' => $myHost['public_key']);
     $data['data'] = $this->toArray();
     $data['data']['foreign_material_id'] = $data['data']['material_id'];
     unset($data['data']['material_id']);
     unset($data['data']['id']);
     unset($data['data']['user_id']);
     unset($data['data']['host_id']);
     $user_description_datafield = DataField::find(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")) ?: DataField::findOneBySQL("name = ?", array(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")));
     if ($user_description_datafield) {
         $datafield_entry = DatafieldEntryModel::findOneBySQL("range_id = ? AND datafield_id = ?", array($this['user_id'], $user_description_datafield->getId()));
     }
     $data['user'] = array('user_id' => $this['user_id'], 'name' => get_fullname($this['user_id']), 'avatar' => Avatar::getAvatar($this['user_id'])->getURL(Avatar::NORMAL), 'description' => $datafield_entry ? $datafield_entry['content'] : null);
     $data['topics'] = array();
     foreach ($this->getTopics() as $tag) {
         if ($tag['name']) {
             $data['topics'][] = $tag['name'];
         }
     }
     if ($delete) {
         $data['delete_material'] = 1;
     }
     foreach (LernmarktplatzHost::findBySQL("index_server = '1' AND allowed_as_index_server = '1' ") as $index_server) {
         if (!$index_server->isMe()) {
             echo " push ";
             $index_server->pushDataToEndpoint("push_data", $data);
         }
     }
 }
Пример #17
0
 private static function addField935($record)
 {
     $date = JFactory::getDate();
     $date = JHtml::date($date, 'Y');
     $datafield = new DataField('935', ' ', ' ');
     $datafield->addSubfield(new Subfield('a', $date));
     $datafield->addSubfield(new Subfield('5', 'FENNI'));
     $record->addDataField($datafield);
 }
Пример #18
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;
 }
Пример #19
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');
     }
 }
Пример #20
0
            <div class="author_name">
                <a href="<?php 
echo URLHelper::getLink("dispatch.php/profile", array('username' => $user['username']));
?>
">
                    <?php 
echo htmlReady($user->getFullName());
?>
                </a>
            </div>
            <div class="author_host">(<?php 
echo htmlReady($GLOBALS['UNI_NAME_CLEAN']);
?>
)</div>
            <div class="description"><?
                $user_description_datafield = DataField::find(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")) ?: DataField::findOneBySQL("name = ?", array(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")));
                if ($user_description_datafield) {
                    $datafield_entry = DatafieldEntryModel::findOneBySQL("range_id = ? AND datafield_id = ?", array($user['user_id'], $user_description_datafield->getId()));
                    echo $datafield_entry && $datafield_entry['content'] ? formatReady($datafield_entry['content']) : "";

                    if ($material['user_id'] === $GLOBALS['user']->id) : ?>
                        <a href="<?php 
echo URLHelper::getLink("dispatch.php/settings/details#datafields_" . $user_description_datafield->getId());
?>
" title="<?php 
echo _("Text bearbeiten");
?>
">
                            <?php 
echo Icon::create("edit", "clickable")->asImg(20, array('class' => "text-bottom"));
?>
Пример #21
0
 /**
  * Returns data of a given item including where to download it and the structure, decription, etc.
  * If item is not hosted on this server, just relocate the request to the real server.
  *
  * This endpoint should be called by a remote whenever a client wants to view the details of an item.
  *
  * @param $item_id : ID of the item on this server.
  */
 public function get_item_data_action($item_id)
 {
     $material = new LernmarktplatzMaterial($item_id);
     if ($material->isNew()) {
         $this->render_json(array('deleted' => 1));
     } elseif (!$material['foreign_material_id']) {
         $me = LernmarktplatzHost::thisOne();
         $topics = array();
         foreach ($material->getTopics() as $topic) {
             $topics[] = $topic['name'];
         }
         $user_description_datafield = DataField::find(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")) ?: DataField::findOneBySQL("name = ?", array(get_config("LERNMARKTPLATZ_USER_DESCRIPTION_DATAFIELD")));
         if ($user_description_datafield) {
             $datafield_entry = DatafieldEntryModel::findOneBySQL("range_id = ? AND datafield_id = ?", array($material['user_id'], $user_description_datafield->getId()));
         }
         $reviews = array();
         foreach ($material->reviews as $review) {
             if ($review['host_id']) {
                 $user = LernmarktplatzUser::findOneBySQL("user_id = ?", array($review['user_id']));
                 $user = array('user_id' => $review['user_id'], 'name' => $user['name'], 'avatar' => $user['avatar'], 'description' => $user['description']);
             } else {
                 if ($user_description_datafield) {
                     $user_description = DatafieldEntryModel::findOneBySQL("range_id = ? AND datafield_id = ?", array($review['user_id'], $user_description_datafield->getId()));
                 }
                 $user = array('user_id' => $review['user_id'], 'name' => get_fullname($review['user_id']), 'avatar' => Avatar::getAvatar($review['user_id'])->getURL(Avatar::NORMAL), 'description' => $user_description['content'] ?: null);
             }
             $reviews[] = array('foreign_review_id' => $review['foreign_review_id'] ?: $review->getId(), 'review' => $review['review'], 'rating' => $review['rating'], 'user' => $user, 'host' => array('name' => $review['host_id'] ? $review->host['name'] : $me['name'], 'url' => $review['host_id'] ? $review->host['url'] : $me['url'], 'public_key' => $review['host_id'] ? $review->host['public_key'] : $me['public_key']), 'mkdate' => $review['mkdate'], 'chkdate' => $review['chdate']);
         }
         $this->render_json(array('data' => array('name' => $material['name'], 'short_description' => $material['short_description'], 'description' => $material['description'], 'content_type' => $material['content_type'], 'front_image_content_type' => $material['front_image_content_type'], 'url' => ($GLOBALS['LERNMARKTPLATZ_PREFERRED_URI'] ?: $GLOBALS['ABSOLUTE_URI_STUDIP']) . "/plugins.php/lernmarktplatz/market/download/" . $item_id, 'structure' => $material['structure'], 'license' => $material['license']), 'user' => array('user_id' => $material['user_id'], 'name' => User::find($material['user_id'])->getFullName(), 'avatar' => Avatar::getAvatar($material['user_id'])->getURL(Avatar::NORMAL), 'description' => $datafield_entry ? $datafield_entry['content'] : null), 'topics' => $topics, 'reviews' => $reviews));
     } else {
         $host = new LernmarktplatzHost($material['host_id']);
         header("Location: " . $host['url'] . "get_item_data/" . $item_id);
         return;
     }
 }
Пример #22
0
function MakeDatafieldsDefault($user_id, $statusgruppe_id, $default = 'default_value')
{
    global $auth;
    $fields = DataField::getDataFields('userinstrole');

    $query = "SELECT datafield_id FROM datafields WHERE object_type = 'userinstrole'";
    $ids = DBManager::get()->query($query)->fetchAll(PDO::FETCH_COLUMN);

    $query = "REPLACE INTO datafields_entries (datafield_id, range_id, content, sec_range_id, mkdate, chdate)
              VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())";
    $insert = DBManager::get()->prepare($query);

    foreach ($ids as $id) {
        if ($fields[$id]->editAllowed($auth->auth['perm'])) {
            $insert->execute(array($id, $user_id, $default, $statusgruppe_id));
        }
    }
}
Пример #23
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;
 }
Пример #24
0
 /**
  * Old version of CSV import (copy and paste from teilnehmer.php
  * @return type
  * @throws AccessDeniedException
  */
 public function set_autor_csv_action()
 {
     // Security Check
     if (!$this->is_tutor) {
         throw new AccessDeniedException('Sie haben leider keine ausreichende Berechtigung, um auf diesen Bereich von Stud.IP zuzugreifen.');
     }
     CSRFProtection::verifyUnsafeRequest();
     // prepare CSV-Lines
     $messaging = new messaging();
     $csv_request = preg_split('/(\\n\\r|\\r\\n|\\n|\\r)/', trim(Request::get('csv_import')));
     $csv_mult_founds = array();
     $csv_count_insert = 0;
     $csv_count_multiple = 0;
     $datafield_id = null;
     if (Request::get('csv_import_format') && !in_array(Request::get('csv_import_format'), words('realname username'))) {
         foreach (DataField::getDataFields('user', 1 | 2 | 4 | 8, true) as $df) {
             if ($df->accessAllowed() && in_array($df->getId(), $GLOBALS['TEILNEHMER_IMPORT_DATAFIELDS']) && $df->getId() == Request::quoted('csv_import_format')) {
                 $datafield_id = $df->getId();
                 break;
             }
         }
     }
     if (Request::get('csv_import')) {
         // remove duplicate users from csv-import
         $csv_lines = array_unique($csv_request);
         $csv_count_contingent_full = 0;
         foreach ($csv_lines as $csv_line) {
             $csv_name = preg_split('/[,\\t]/', substr($csv_line, 0, 100), -1, PREG_SPLIT_NO_EMPTY);
             $csv_nachname = trim($csv_name[0]);
             $csv_vorname = trim($csv_name[1]);
             if ($csv_nachname) {
                 if (Request::quoted('csv_import_format') == 'realname') {
                     $csv_users = $this->members->getMemberByIdentification($csv_nachname, $csv_vorname);
                 } elseif (Request::quoted('csv_import_format') == 'username') {
                     $csv_users = $this->members->getMemberByUsername($csv_nachname);
                 } else {
                     $csv_users = $this->members->getMemberByDatafield($csv_nachname, $datafield_id);
                 }
             }
             // if found more then one result to given name
             if (count($csv_users) > 1) {
                 // if user have two accounts
                 $csv_count_present = 0;
                 foreach ($csv_users as $row) {
                     if ($row['is_present']) {
                         $csv_count_present++;
                     } else {
                         $csv_mult_founds[$csv_line][] = $row;
                     }
                 }
                 if (is_array($csv_mult_founds[$csv_line])) {
                     $csv_count_multiple++;
                 }
             } elseif (count($csv_users) > 0) {
                 $row = reset($csv_users);
                 if (!$row['is_present']) {
                     $consider_contingent = Request::option('consider_contingent_csv');
                     if (insert_seminar_user($this->course_id, $row['user_id'], 'autor', isset($consider_contingent), $consider_contingent)) {
                         $csv_count_insert++;
                         setTempLanguage($this->user_id);
                         $message = sprintf(_('Sie wurden in die Veranstaltung **%s** eingetragen.'), $this->course_title);
                         restoreLanguage();
                         $messaging->insert_message($message, $row['username'], '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _('Eintragung in Veranstaltung')), TRUE);
                     } elseif (isset($consider_contingent)) {
                         $csv_count_contingent_full++;
                     }
                 } else {
                     $csv_count_present++;
                 }
             } else {
                 // not found
                 $csv_not_found[] = stripslashes($csv_nachname) . ($csv_vorname ? ', ' . stripslashes($csv_vorname) : '');
             }
         }
     }
     $selected_users = Request::getArray('selected_users');
     if (!empty($selected_users) && count($selected_users) > 0) {
         foreach ($selected_users as $selected_user) {
             if ($selected_user) {
                 if (insert_seminar_user($this->course_id, get_userid($selected_user), 'autor', isset($consider_contingent), $consider_contingent)) {
                     $csv_count_insert++;
                     setTempLanguage($this->user_id);
                     if ($GLOBALS['SEM_CLASS'][$GLOBALS['SEM_TYPE'][$_SESSION['SessSemName']['art_num']]['class']]['workgroup_mode']) {
                         $message = sprintf(_('Sie wurden manuell in die Veranstaltung **%s** eingetragen.'), $this->course_title);
                     } else {
                         $message = sprintf(_('Sie wurden manuell in die Veranstaltung **%s** eingetragen.'), $this->course_title);
                     }
                     restoreLanguage();
                     $messaging->insert_message($message, $selected_user, '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _('Eintragung in Veranstaltung')), TRUE);
                 } elseif (isset($consider_contingent)) {
                     $csv_count_contingent_full++;
                 }
             }
         }
     }
     // no results
     if (!sizeof($csv_lines) && !sizeof($selected_users)) {
         PageLayout::postMessage(MessageBox::error(_("Niemanden gefunden!")));
     }
     if ($csv_count_insert) {
         PageLayout::postMessage(MessageBox::success(sprintf(_('%s Personen in die Veranstaltung
             eingetragen!'), $csv_count_insert)));
     }
     if ($csv_count_present) {
         PageLayout::postMessage(MessageBox::info(sprintf(_('%s Personen waren bereits in der Veranstaltung
             eingetragen!'), $csv_count_present)));
     }
     // redirect to manual assignment
     if ($csv_mult_founds) {
         PageLayout::postMessage(MessageBox::info(sprintf(_('%s Personen konnten <b>nicht eindeutig</b>
             zugeordnet werden! Nehmen Sie die Zuordnung bitte manuell vor.'), $csv_count_multiple)));
         $this->flash['csv_mult_founds'] = $csv_mult_founds;
         $this->redirect('course/members/csv_manual_assignment');
         return;
     }
     if (count($csv_not_found) > 0) {
         PageLayout::postMessage(MessageBox::error(sprintf(_('%s konnten <b>nicht</b> zugeordnet werden!'), htmlReady(join(',', $csv_not_found)))));
     }
     if ($csv_count_contingent_full) {
         PageLayout::postMessage(MessageBox::error(sprintf(_('%s Personen konnten <b>nicht</b> zugeordnet werden,
             da das ausgewählte Kontingent keine freien Plätze hat.'), $csv_count_contingent_full)));
     }
     $this->redirect('course/members/index');
 }
Пример #25
0
    static function checkLockRule($fields)
    {
        $entries = DataField::getDataFields('usersemdata');
        foreach ($entries as $id => $entry) {
            if ($fields[$id] == 1) return true;
        }

        return false;
    }