public function checkLine($line) { $errors = ""; if (!FleximportTable::findOneByName("fleximport_semiro_course_import")) { return "Tabelle fleximport_semiro_course_import existiert nicht. "; } $dilp_kennung_feld = FleximportConfig::get("SEMIRO_DILP_KENNUNG_FIELD"); if (!$dilp_kennung_feld) { $dilp_kennung_feld = "dilp_teilnehmer"; } if (!$line[$dilp_kennung_feld]) { $errors .= "Teilnehmer hat keinen Wert für '{$dilp_kennung_feld}''. "; } else { $datafield = Datafield::findOneByName(FleximportConfig::get("SEMIRO_USER_DATAFIELD_NAME")); if (!$datafield) { $errors .= "System hat kein Datenfeld " . FleximportConfig::get("SEMIRO_USER_DATAFIELD_NAME") . ", womit die Nutzer identifiziert werden. "; } else { $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ? ", array($datafield->getId(), $line[$dilp_kennung_feld])); if (!$entry || !User::find($entry['range_id'])) { $errors .= "Nutzer konnte nicht durch id_teilnehmer identifiziert werden. "; } } } if (!$line['teilnehmergruppe']) { $errors .= "Keine Teilnehmergruppe. "; } else { $statement = DBManager::get()->prepare("\n SELECT 1\n FROM fleximport_semiro_course_import\n WHERE teilnehmergruppe = ?\n "); $statement->execute(array($line['teilnehmergruppe'])); if (!$statement->fetch()) { $errors .= "Nicht verwendete Teilnehmergruppe. "; } } return $errors; }
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']; } } } }
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 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 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']; } } } }
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")); ?> </a> <? endif;
/** * 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); } } } }
/** * Specialized count method that returns the number of concrete entries. * * @return int number of entries */ public function count() { return DatafieldEntryModel::countBySQL('datafield_id = ?', array($this->id)); }
/** * Set defaults for a single datafield of a statusgruppe. * * @param String $inst_id Id of the institute in question * @param String $role_id Id of the statusgruppe in question * @param String $datafield_id Id of the datafield in question * @param bool $state Indicates whether the defaults should be used or not */ public function default_action($inst_id, $role_id, $datafield_id, $state) { $value = 'default_value'; if (!$state) { $defaults = DataFieldEntry::getDataFieldEntries(array($this->user->user_id, $inst_id)); $value = $defaults[$datafield_id]->getValue(); } $entry = new DatafieldEntryModel($datafield_id); $entry->range_id = $this->user->user_id; $entry->sec_range_id = $role_id; $entry->content = $value; $entry->store(); $this->redirect('settings/statusgruppen#' . $role_id); }
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); } } }
public function afterUpdate($object, $line) { if (FleximportConfig::get("SEMIRO_SEND_MESSAGES")) { $messaging = new messaging(); //Email an Dozenten: foreach ((array) $this->new_dozenten as $user_id) { $message = sprintf(_('Sie wurden von Semiro als DozentIn in die Veranstaltung **%s** eingetragen.'), $object->name); $messaging->insert_message($message, get_username($user_id), '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _('Eintragung in Veranstaltung')), TRUE); } } $teilnehmergruppe = $line['teilnehmergruppe']; $import_type = "semiro_participant_import_" . $object->getId() . "_" . md5($teilnehmergruppe); $imported_items = array(); if ($teilnehmergruppe && $object->getId()) { $seminar = new Seminar($object->getId()); $datafield = Datafield::findOneByName(FleximportConfig::get("SEMIRO_USER_DATAFIELD_NAME")); $dilp_kennung_feld = FleximportConfig::get("SEMIRO_DILP_KENNUNG_FIELD"); if (!$dilp_kennung_feld) { $dilp_kennung_feld = "dilp_teilnehmer"; } if ($datafield) { $statement = DBManager::get()->prepare("\n SELECT `" . addslashes($dilp_kennung_feld) . "`\n FROM fleximport_semiro_participant_import\n WHERE teilnehmergruppe = ?\n "); $statement->execute(array($teilnehmergruppe)); while ($id_teilnehmer = $statement->fetch(PDO::FETCH_COLUMN, 0)) { //$ids = $statement->fetchAll(PDO::FETCH_COLUMN, 0); //foreach ($ids as $id_teilnehmer) { $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ? ", array($datafield->getId(), $id_teilnehmer)); if ($entry) { $was_member = CourseMember::findOneBySQL("seminar_id = ? AND user_id = ?", array($object->getId(), $entry['range_id'])); $seminar->addMember($entry['range_id']); if (!$was_member && FleximportConfig::get("SEMIRO_SEND_MESSAGES")) { $message = sprintf(_('Sie wurden von Semiro als TeilnehmerIn in die Veranstaltung **%s** eingetragen.'), $seminar->name); $messaging->insert_message($message, get_username($entry['range_id']), '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _('Eintragung in Veranstaltung')), TRUE); } //Zu Statusgruppe hinzufügen: $gruppe = Statusgruppen::findOneBySQL("range_id = ? AND name = ?", array($object->getId(), $teilnehmergruppe)); if (!$gruppe) { $gruppe = new Statusgruppen(); $gruppe['range_id'] = $object->getId(); $gruppe['name'] = $teilnehmergruppe; $gruppe->store(); } if (!$gruppe->isMember($entry['range_id'])) { $gruppe->addUser($entry['range_id']); } //$gruppe->updateFolder(true); if (!$gruppe->hasFolder()) { create_folder(_("Dateiordner der Gruppe:") . ' ' . $teilnehmergruppe, _("Ablage für Ordner und Dokumente dieser Gruppe"), $gruppe->id, 15, $object->getId()); } $item_id = $entry['range_id']; if (!in_array($item_id, $imported_items)) { $mapped = FleximportMappedItem::findbyItemId($item_id, $import_type) ?: new FleximportMappedItem(); $mapped['import_type'] = $import_type; $mapped['item_id'] = $item_id; $mapped['chdate'] = time(); $mapped->store(); $imported_items[] = $item_id; } } } } //Dozent zu Statusgruppe hinzufügen: $gruppe = Statusgruppen::findOneBySQL("range_id = ? AND name = ?", array($object->getId(), $teilnehmergruppe)); foreach ($object->members->filter(function ($member, $value) { return $member['status'] === "dozent"; }) as $teacher) { if (!$gruppe->isMember($teacher->getId())) { $gruppe->addUser($teacher->getId()); } } $items = FleximportMappedItem::findBySQL("import_type = :import_type AND item_id NOT IN (:ids)", array('import_type' => $import_type, 'ids' => $imported_items ?: "")); foreach ($items as $item) { $user_id = $item['item_id']; //check if user is in another group of this course $statement = DBManager::get()->prepare("\n SELECT 1\n FROM fleximport_semiro_participant_import\n INNER JOIN fleximport_semiro_course_import ON (fleximport_semiro_course_import.teilnehmergruppe = fleximport_semiro_participant_import.teilnehmergruppe)\n WHERE `" . addslashes($dilp_kennung_feld) . "` = :user_dilp\n AND fleximport_semiro_course_import.name_veranstaltung = :name\n "); $dilp_entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND range_id = ? ", array($datafield->getId(), $user_id)); $statement->execute(array('user_dilp' => $dilp_entry['content'], 'name' => $object['name'])); $is_still_in_course = $statement->fetch(PDO::FETCH_COLUMN, 0); if (!$is_still_in_course) { $seminar->deleteMember($user_id); } $item->delete(); } } }
public function getMappedData($line) { $plugin = $this->getPlugin(); $fields = $this->getTargetFields(); //dynamic additional fields: switch ($this['import_type']) { case "Course": foreach (Datafield::findBySQL("object_type = 'sem'") as $datafield) { $fields[] = $datafield['name']; } $fields[] = "fleximport_dozenten"; $fields[] = "fleximport_related_institutes"; $fields[] = "fleximport_studyarea"; $fields[] = "fleximport_locked"; $fields[] = "fleximport_course_userdomains"; break; case "User": foreach (Datafield::findBySQL("object_type = 'user'") as $datafield) { $fields[] = $datafield['name']; } $fields[] = "fleximport_username_prefix"; $fields[] = "fleximport_userdomains"; $fields[] = "fleximport_user_inst"; $fields[] = "fleximport_expiration_date"; $fields[] = "fleximport_welcome_message"; break; } $data = array(); foreach ($fields as $field) { $mapping = false; //important: false means no mapping, null means mapping to database null if ($plugin && in_array($field, $plugin->fieldsToBeMapped())) { $mapping = $plugin->mapField($field, $line); } if ($mapping !== false) { $data[$field] = $mapping; } else { if ($this['tabledata']['simplematching'][$field]['column']) { if ($this['tabledata']['simplematching'][$field]['column'] === "static value") { //use a static value $data[$field] = $this['tabledata']['simplematching'][$field]['static']; } else { if (strpos($this['tabledata']['simplematching'][$field]['column'], "fleximportconfig_") === 0) { $config = substr($this['tabledata']['simplematching'][$field]['column'], strlen("fleximportconfig_")); $template = FleximportConfig::get($config); foreach ($data as $index => $value) { $template = str_replace("{{" . $index . "}}", $value, $template); } foreach ($line as $index => $value) { if (!in_array($index, $data)) { $template = str_replace("{{" . $index . "}}", $value, $template); } } $data[$field] = $template; } else { //use a matched column $data[$field] = $line[$this['tabledata']['simplematching'][$field]['column']]; } } } else { //else no mapping, don't even overwrite old value. } } } foreach ($fields as $field) { //mapper: if (strpos($this['tabledata']['simplematching'][$field]['column'], "fleximport_mapper__") === 0) { list($prefix, $mapperclass, $format) = explode("__", $this['tabledata']['simplematching'][$field]['column']); if (class_exists($mapperclass)) { $mapper = new $mapperclass(); if (is_a($mapper, "FleximportMapper")) { $mapfrom = $this['tabledata']['simplematching'][$field]['mapfrom']; $data[$field] = $mapper->map($format, $data[$mapfrom] ?: $line[$mapfrom]); } } } } //special mapping if ($this['import_type'] === "Course") { //Map seminar_id : if (!$data['seminar_id'] && $this['tabledata']['simplematching']["seminar_id"]['column'] === "fleximport_map_from_veranstaltungsnummer_and_semester") { $course = Course::findOneBySQL("name = ? AND start_time = ?", array($data['name'], $data['start_time'])); if ($course) { $data['seminar_id'] = $course->getId(); } } //Map dozenten: if ($this['tabledata']['simplematching']["fleximport_dozenten"]['column'] && !in_array("fleximport_dozenten", $this->fieldsToBeDynamicallyMapped())) { $data['fleximport_dozenten'] = (array) preg_split($this['tabledata']['simplematching']["fleximport_dozenten"]['format'] === "fullname" ? "/\\s*,\\s*/" : "/\\s+/", $data['fleximport_dozenten'], null, PREG_SPLIT_NO_EMPTY); switch ($this['tabledata']['simplematching']["fleximport_dozenten"]['format']) { case "user_id": $data['fleximport_dozenten'] = array_map(function ($user_id) { $user = User::find($user_id); if ($user) { return $user->getId(); } else { return null; } }, $data['fleximport_dozenten']); break; case "username": $data['fleximport_dozenten'] = array_map("get_userid", $data['fleximport_dozenten']); break; case "email": $data['fleximport_dozenten'] = array_map(function ($email) { $user = User::findOneByEmail($email); if ($user) { return $user->getId(); } else { return null; } }, $data['fleximport_dozenten']); break; case "fullname": $data['fleximport_dozenten'] = array_map(function ($fullname) { list($vorname, $nachname) = (array) preg_split("/\\s+/", $fullname, null, PREG_SPLIT_NO_EMPTY); $user = User::findOneBySQL("Vorname = ? AND Nachname = ? AND perms = 'dozent'", array($vorname, $nachname)); if ($user) { return $user->getId(); } else { return null; } }, $data['fleximport_dozenten']); break; default: //map by datafield $datafield_id = $this['tabledata']['simplematching']["fleximport_dozenten"]['format']; foreach ($data['fleximport_dozenten'] as $key => $value) { $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ?", array($datafield_id, $value)); if ($entry) { $data['fleximport_dozenten'][$key] = $entry['range_id']; } else { unset($data['fleximport_dozenten'][$key]); } } break; } } //Map sem_type: if ($this['tabledata']['simplematching']["status"]['column'] && $this['tabledata']['simplematching']["status"]['format']) { if ($this['tabledata']['simplematching']["status"]['format'] === "name") { $sem_type_id = null; foreach ($GLOBALS['SEM_TYPE'] as $id => $sem_type) { if ($sem_type['name'] === $data['status']) { $sem_type_id = $id; } } $data['status'] = $sem_type_id; } } //Map Studienbereiche if ($this['tabledata']['simplematching']["fleximport_studyarea"]['column'] && !in_array("fleximport_studyarea", $this->fieldsToBeDynamicallyMapped())) { if ($this['tabledata']['simplematching']["fleximport_studyarea"]['column'] === "static value") { $data['fleximport_studyarea'] = (array) explode(";", $this['tabledata']['simplematching']["fleximport_studyarea"]['static']); } else { $data['fleximport_studyarea'] = (array) explode(";", $data['fleximport_studyarea']); $study_areas = array(); foreach ($data['fleximport_studyarea'] as $key => $name) { foreach (StudipStudyArea::findBySQL("name = ?", array($name)) as $study_area) { $study_areas[] = $study_area->getId(); } } $data['fleximport_studyarea'] = $study_areas; } } if ($this['tabledata']['simplematching']["fleximport_course_userdomains"]['column'] && !in_array("fleximport_course_userdomains", $this->fieldsToBeDynamicallyMapped())) { $data['fleximport_course_userdomains'] = (array) preg_split("/\\s*,\\s*/", $data['fleximport_course_userdomains'], null, PREG_SPLIT_NO_EMPTY); $statement = DBManager::get()->prepare("SELECT userdomain_id FROM userdomains WHERE name IN (:domains) OR userdomain_id IN (:domains)"); $statement->execute(array('domains' => $data['fleximport_course_userdomains'])); $data['fleximport_course_userdomains'] = $statement->fetchAll(PDO::FETCH_COLUMN, 0); } } if ($this['import_type'] === "User") { if ($this['tabledata']['simplematching']["username"]['column']) { if ($this['tabledata']['simplematching']["username"]['format'] === "email_first_part") { list($data['username']) = explode("@", $data['username']); } if ($this['tabledata']['simplematching']["fleximport_username_prefix"]['column']) { $data['username'] = $data['fleximport_username_prefix'] . $data['username']; } } if ($this['tabledata']['simplematching']["fleximport_user_inst"]['column']) { $data['fleximport_user_inst'] = (array) preg_split("/\\s*,\\s*/", $data['fleximport_user_inst'], null, PREG_SPLIT_NO_EMPTY); $institut_ids = array(); foreach ($data['fleximport_user_inst'] as $inst_name) { $statement = DBManager::get()->prepare("\n SELECT Institut_id\n FROM Institute\n WHERE Name = ?\n "); $statement->execute(array($inst_name)); $institut_id = $statement->fetch(PDO::FETCH_COLUMN, 0); if ($institut_id) { $institut_ids[] = $institut_id; } } $data['fleximport_user_inst'] = $institut_ids; } if ($this['tabledata']['simplematching']["fleximport_userdomains"]['column'] && !in_array("fleximport_userdomains", $this->fieldsToBeDynamicallyMapped())) { $data['fleximport_userdomains'] = (array) preg_split("/\\s*,\\s*/", $data['fleximport_userdomains'], null, PREG_SPLIT_NO_EMPTY); $statement = DBManager::get()->prepare("SELECT userdomain_id FROM userdomains WHERE name IN (:domains) OR userdomain_id IN (:domains)"); $statement->execute(array('domains' => $data['fleximport_userdomains'])); $data['fleximport_userdomains'] = $statement->fetchAll(PDO::FETCH_COLUMN, 0); } if ($this['tabledata']['simplematching']["fleximport_expiration_date"]['column'] && !in_array("fleximport_expiration_date", $this->fieldsToBeDynamicallyMapped())) { if (!is_numeric($data['fleximport_expiration_date'])) { $data['fleximport_expiration_date'] = strtotime($data['fleximport_expiration_date']); } } } if ($this['import_type'] === "User" && !$data['user_id']) { if (!$data['user_id'] && $data['auth_plugin'] === "standard" && !$data['password']) { $usermanager = new UserManagement(); $data['password'] = $usermanager->generate_password(6); } } return $data; }
/** * 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; } }
/** * Stores this datafield entry * * @return int representing the number of changed entries */ public function store() { $entry = new DatafieldEntryModel(array($this->model->id, (string) $this->getRangeID(), (string) $this->getSecondRangeID())); $old_value = $entry->content; $entry->content = $this->getValue(); if ($this->isEmpty()) { $result = $entry->delete(); } else { $result = $entry->store(); } if ($result) { NotificationCenter::postNotification('DatafieldDidUpdate', $this, array('changed' => $result, 'old_value' => $old_value)); } return $result; }