public function afterUpdate(SimpleORMap $object, $line) { $old_domains = array_map(function ($domain) { return $domain->getID(); }, $this->old_domains); $new_domains = UserDomain::getUserDomainsForUser($object->getId()); foreach ($new_domains as $domain_id) { if (!in_array($domain_id, $old_domains)) { if ($domain_id === "alumni") { if (count($new_domains) == 1) { $statement = DBManager::get()->prepare("\n SELECT seminar_user.Seminar_id \n FROM seminar_user\n LEFT JOIN seminar_userdomain ON (seminar_user.Seminar_id = seminar_userdomain.Seminar_id)\n WHERE seminar_user.user_id = :user_id\n AND seminar_user.Seminar_id NOT IN (SELECT seminar_id FROM seminar_userdomain WHERE userdomain_id = 'alumni')\n "); $statement->execute(array('user_id' => $object->getId())); foreach ($statement->fetchAll(PDO::FETCH_COLUMN, 0) as $seminar_id) { $seminar = new Seminar($seminar_id); $seminar->deleteMember($object->getId()); } } $datafield = Datafield::findOneBySQL("name = 'Ich will weiterhin als Alumni in Stud.IP geführt werden' AND object_type = 'user'"); $user_wants_to_stay = DatafieldEntry::findOneBySQL("datafield_id = ? AND range_id = ?", array($datafield->getId(), $object->getId())); if ($user_wants_to_stay['content']) { //In Veranstaltung ALUMNI die Statusgruppe anlegen: $datafield = Datafield::findOneBySQL("name = 'Alumni' AND object_type = 'user'"); $entry = DatafieldEntry::findOneBySQL("datafield_id = ? AND range_id = ?", array($datafield->getId(), $object->getId())); $course = Course::findOneByName("ALUMNI"); $gruppenname = $entry ? $entry['content'] : null; if ($course && $gruppenname) { $statusgruppe = Statusgruppen::findOneBySQL("name = ? range_id = ?", array($gruppenname, $course->getId())); if (!$statusgruppe) { $statusgruppe = new Statusgruppen(); $statusgruppe['name'] = $gruppenname; $statusgruppe['range_id'] = $course->getId(); $statusgruppe->store(); } if (!$statusgruppe->isMember($object->getId())) { $statusgruppe->addUser($object->getId()); } } } else { $object->delete(); $deleted = true; } } } } }
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(); } } }
/** * Change preliminary admission settings. */ function change_admission_prelim_action() { CSRFProtection::verifyUnsafeRequest(); $this->response->add_header('X-Title', _('Anmeldemodus ändern')); if (Request::submitted('change_admission_prelim')) { $request = Request::extract('admission_prelim int, admission_binding submitted, admission_prelim_txt'); $request = array_diff_key($request, array_filter($this->is_locked)); $request['change_admission_prelim'] = 1; $this->course->setData($request); if ($this->course->isFieldDirty('admission_prelim')) { if ($this->course->admission_prelim == 1 && $this->course->getNumParticipants()) { $question = _("Sie beabsichtigen den Anmeldemodus auf vorläufiger Eintrag zu ändern. Sollen die bereits in der Veranstaltung eingetragenen Teilnehmer in vorläufige Teilnehmer umgewandelt werden?"); } if ($this->course->admission_prelim == 0 && $this->course->getNumPrelimParticipants()) { $question = _("Sie beabsichtigen den Anmeldemodus auf direkten Eintrag zu ändern. Sollen die vorläufigen Teilnehmer in die Veranstaltung übernommen werden (ansonsten werden die vorläufigen Teilnehmer aus der Veranstaltung entfernt) ?"); } } if (Request::submittedSome('change_admission_prelim_no', 'change_admission_prelim_yes') || !$question) { if ($this->course->admission_prelim == 1 && $this->course->getNumParticipants() && Request::submitted('change_admission_prelim_yes')) { $num_moved = 0; $seminar = new Seminar($this->course_id); foreach ($this->course->members->findBy('status', array('user', 'autor'))->pluck('user_id') as $user_id) { $seminar->addPreliminaryMember($user_id); $num_moved += $seminar->deleteMember($user_id) !== false; setTempLanguage($user_id); $message_body = sprintf(_('Sie wurden in der Veranstaltung **%s** in den Status **vorläufig akzeptiert** befördert, da das Anmeldeverfahren geändert wurde.'), $this->course->name); $message_title = sprintf(_("Statusänderung %s"), $this->course->name); messaging::sendSystemMessage($user_id, $message_title, $message_body); restoreLanguage(); } if ($num_moved) { PageLayout::postMessage(MessageBox::success(sprintf(_("%s Teilnehmer wurden auf vorläufigen Eintrag gesetzt."), $num_moved))); } } if ($this->course->admission_prelim == 0 && $this->course->getNumPrelimParticipants()) { if (Request::submitted('change_admission_prelim_yes')) { $num_moved = 0; $seminar = new Seminar($this->course_id); foreach ($this->course->admission_applicants->findBy('status', 'accepted')->pluck('user_id') as $user_id) { $num_moved += $seminar->addMember($user_id, 'autor') !== false; setTempLanguage($user_id); $message_body = sprintf(_('Sie wurden in der Veranstaltung **%s** in den Status **Autor** versetzt, da das Anmeldeverfahren geändert wurde.'), $this->course->name); $message_title = sprintf(_("Statusänderung %s"), $this->course->name); messaging::sendSystemMessage($user_id, $message_title, $message_body); restoreLanguage(); } if ($num_moved) { PageLayout::postMessage(MessageBox::success(sprintf(_("%s Teilnehmer wurden in die Veranstaltung übernommen."), $num_moved))); } } if (Request::submitted('change_admission_prelim_no')) { $num_moved = 0; foreach ($this->course->admission_applicants->findBy('status', 'accepted') as $applicant) { setTempLanguage($applicant->user_id); $message_body = sprintf(_('Sie wurden aus der Veranstaltung **%s** entfernt, da das Anmeldeverfahren geändert wurde.'), $this->course->name); $message_title = sprintf(_("Statusänderung %s"), $this->course->name); messaging::sendSystemMessage($applicant->user_id, $message_title, $message_body); restoreLanguage(); $num_moved += $applicant->delete(); } if ($num_moved) { PageLayout::postMessage(MessageBox::success(sprintf(_("%s vorläufige Teilnehmer wurden entfernt."), $num_moved))); } } } if ($this->course->store()) { PageLayout::postMessage(MessageBox::success(_("Der Anmeldemodus wurde geändert."))); } unset($question); } } if (!$question) { $this->redirect($this->url_for('/index')); } else { $this->button_yes = 'change_admission_prelim_yes'; $this->button_no = 'change_admission_prelim_no'; $this->request = $request; PageLayout::postMessage(MessageBox::info($question)); $this->render_template('course/admission/_change_admission.php'); } }