/** * Show a configuration form for the given user list. * * @param String $userlistId user list to load settings from (or empty * if it is a new user list) */ public function configure_action($userlistId = '') { if ($userlistId) { $this->userlist = new AdmissionUserList($userlistId); $this->userlist_id = $userlistId; PageLayout::setTitle(_('Personenliste bearbeiten')); } else { PageLayout::setTitle(_('Personenliste anlegen')); $this->userlist = new AdmissionUserList(); $this->userlist_id = ''; } $this->users = User::findMany(array_keys($this->userlist->getUsers())); if ($this->flash['name'] || $this->flash['factor'] || $this->flash['users'] || $this->flash['deleted_member']) { if ($this->flash['name']) { $this->userlist->setName($this->flash['name']); } if ($this->flash['factor']) { $this->userlist->setFactor($this->flash['factor']); } if ($this->flash['users'] || $this->flash['deleted_member']) { $this->users = User::findMany($this->flash['cleared_users'] ?: $this->flash['users'] ?: array()); } } usort($this->users, function ($a, $b) { if ($a->nachname == $b->nachname) { if ($a->vorname == $b->vorname) { return strnatcasecmp($a->username, $b->username); } else { return strnatcasecmp($a->vorname, $b->vorname); } } else { return strnatcasecmp($a->nachname, $b->nachname); } }); $uids = array_map(function ($u) { return $u->id; }, $this->users); $this->userSearch = new PermissionSearch('user', 'Person hinzufügen', 'user_id', array('permission' => array('user', 'autor', 'tutor', 'dozent'), 'exclude_user' => $uids)); $this->flash['listusers'] = $uids; }
function vcard_action($group = null) { // Set constants for export $charset = 'utf-8'; $filename = _('Kontakte'); // Set layout $this->set_layout(null); // If we got an array of user if (Request::submitted('user')) { $user = User::findManyByUsername(Request::getArray('user')); } // If we got a group if ($group) { $user = User::findMany(Statusgruppen::find($group)->members->pluck('user_id')); } // Fallback to all contacts if we got nothing if (!$user) { $user = User::findCurrent()->contacts; } header("Content-type: text/x-vCard;charset=" . $charset); //application/octet-stream MIME header("Content-disposition: attachment; filename=" . $filename . ".vcf"); header("Pragma: private"); $this->vCard = vCard::export($user); }
/** * Action which is used for handling all submits for no-JavaScript * users: * * searching, * * adding a person, * * removing a person, * * selcting a quickfilter, * * aborting, * * saving. * * This needs to be done in one single action to provider a similar * usability for no-JavaScript users as for JavaScript users. */ public function no_js_form_action() { if (!empty($_POST)) { CSRFProtection::verifyUnsafeRequest(); } $this->name = Request::get("name"); $mp = MultiPersonSearch::load($this->name); $this->selectableUsers = array(); $this->selectedUsers = array(); $this->search = Request::get("freesearch"); $this->additionHTML = $mp->getAdditionHTML(); $previousSelectableUsers = unserialize(studip_utf8decode(Request::get('search_persons_selectable_hidden'))); $previousSelectedUsers = unserialize(studip_utf8decode(Request::get('search_persons_selected_hidden'))); // restore quickfilter $this->quickfilterIDs = $mp->getQuickfilterIds(); foreach ($this->quickfilterIDs as $title => $array) { $this->quickfilter[] = $title; } // abort if (Request::submitted('abort')) { $this->redirect($_SESSION['multipersonsearch'][$this->name]['pageURL']); } elseif (Request::submitted('submit_search')) { // evaluate search $this->selectedUsers = User::findMany($previousSelectedUsers); $searchterm = Request::get('freesearch'); $searchObject = $mp->getSearchObject(); $result = array_map(function ($r) { return $r['user_id']; }, $searchObject->getResults($searchterm, array(), 50)); $this->selectableUsers = User::findMany($result); // remove already selected users foreach ($this->selectableUsers as $key => $user) { if (in_array($user->id, $previousSelectedUsers) || in_array($user->id, $mp->getDefaultSelectedUsersIDs())) { unset($this->selectableUsers[$key]); $this->alreadyMemberUsers[$key] = $user; } } } elseif (Request::submitted('submit_search_preset')) { $this->selectedUsers = User::findMany($previousSelectedUsers); $this->selectableUsers = User::findMany($this->quickfilterIDs[Request::get('search_preset')]); // remove already selected users foreach ($this->selectableUsers as $key => $user) { if (in_array($user->id, $previousSelectedUsers) || in_array($user->id, $mp->getDefaultSelectedUsersIDs())) { unset($this->selectableUsers[$key]); } } } elseif (Request::submitted('search_persons_add')) { // add users foreach (Request::optionArray('search_persons_selectable') as $userID) { if (($key = array_search($userID, $previousSelectableUsers)) !== false) { unset($previousSelectableUsers[$key]); } $previousSelectedUsers[] = $userID; } $this->selectedUsers = User::findMany($previousSelectedUsers); $this->selectableUsers = User::findMany($previousSelectableUsers); } elseif (Request::submitted('search_persons_remove')) { // remove users foreach (Request::optionArray('search_persons_selected') as $userID) { if (($key = array_search($userID, $previousSelectedUsers)) !== false) { unset($previousSelectedUsers[$key]); } $previousSelectableUsers[] = $userID; } $this->selectedUsers = User::findMany($previousSelectedUsers); $this->selectableUsers = User::findMany($previousSelectableUsers); } elseif (Request::submitted('save')) { // find added users $addedUsers = array(); $defaultSelectedUsersIDs = $searchObject = $mp->getDefaultSelectedUsersIDs(); foreach ($previousSelectedUsers as $selected) { if (!in_array($selected, $defaultSelectedUsersIDs)) { $addedUsers[] = $selected; } } // find removed users $removedUsers = array(); foreach ($defaultSelectedUsersIDs as $default) { if (!in_array($default, $previousSelectedUsers)) { $removedUsers[] = $default; } } $_SESSION['multipersonsearch'][$this->name]['selected'] = $previousSelectedUsers; $_SESSION['multipersonsearch'][$this->name]['added'] = $addedUsers; $_SESSION['multipersonsearch'][$this->name]['removed'] = $removedUsers; // redirect to action which handles the form data $this->redirect($mp->getExecuteURL()); } else { // get selected and selectable users from SESSION $this->defaultSelectableUsersIDs = $mp->getDefaultSelectableUsersIDs(); $this->defaultSelectedUsersIDs = $mp->getDefaultSelectedUsersIDs(); $this->selectableUsers = User::findMany($this->defaultSelectableUsersIDs); $this->selectedUsers = array(); } // save selected/selectable users in hidden form fields $this->selectableUsers = new SimpleCollection($this->selectableUsers); $this->selectableUsers->orderBy("nachname asc, vorname asc"); $this->selectableUsersHidden = $this->selectableUsers->pluck('id'); $this->selectedUsers = new SimpleCollection($this->selectedUsers); $this->selectedUsers->orderBy("nachname asc, vorname asc"); $this->selectedUsersHidden = $this->selectedUsers->pluck('id'); $this->selectableUsers->orderBy('nachname, vorname'); $this->selectedUsers->orderBy('nachname, vorname'); // set layout data $this->set_layout($GLOBALS['template_factory']->open('layouts/base')); $this->title = $mp->getTitle(); $this->description = $mp->getDescription(); $this->pageURL = $mp->getPageURL(); if ($mp->getNavigationItem() != "") { Navigation::activateItem($mp->getNavigationItem()); } }
/** * Save date-information * @param $termin_id * @throws Trails_DoubleRenderError */ public function saveDate_action($termin_id) { $termin = CourseDate::find($termin_id); $date = strtotime(sprintf('%s %s:00', Request::get('date'), Request::get('start_time'))); $end_time = strtotime(sprintf('%s %s:00', Request::get('date'), Request::get('end_time'))); //time changed for regular date. create normal singledate and cancel the regular date if (($termin->metadate_id != '' || isset($termin->metadate_id)) && ($date != $termin->date || $end_time != $termin->end_time)) { $termin_values = $termin->toArray(); $termin_info = $termin->getFullname(); $termin->cancelDate(); PageLayout::postInfo(sprintf(_('Der Termin %s wurde aus der Liste der regelmäßigen Termine' . ' gelöscht und als unregelmäßiger Termin eingetragen, da Sie die Zeiten des Termins verändert haben,' . ' so dass dieser Termin nun nicht mehr regelmäßig ist.'), $termin_info)); $termin = new CourseDate(); unset($termin_values['termin_id']); unset($termin_values['metadate_id']); $termin->setData($termin_values); } $termin->date = $date; $termin->end_time = $end_time; $termin->date_typ = Request::get('course_type'); $related_groups = Request::get('related_statusgruppen'); $termin->statusgruppen = array(); if (!empty($related_groups)) { $related_groups = explode(',', $related_groups); $termin->statusgruppen = Statusgruppen::findMany($related_groups); } $related_users = Request::get('related_teachers'); $termin->dozenten = array(); if (!empty($related_users)) { $related_users = explode(',', $related_users); $termin->dozenten = User::findMany($related_users); } // Set Room if (Request::option('room') == 'room') { $room_id = Request::option('room_sd', '0'); if ($room_id != '0' && $room_id != $termin->room_assignment->resource_id) { ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $termin->termin_id)); $resObj = new ResourceObject($room_id); $termin->raum = ''; $room = new ResourceAssignment(); $room->assign_user_id = $termin->termin_id; $room->resource_id = Request::get('room_sd'); $room->begin = $termin->date; $room->end = $termin->end_time; $room->repeat_end = $termin->end_time; $room->store(); $this->course->createMessage(sprintf(_('Der Termin %s wurde geändert und der Raum %s gebucht, etwaige freie Ortsangaben wurden entfernt.'), $termin->getFullname(), $resObj->getName())); } elseif ($room_id == '0') { $this->course->createError(sprintf(_('Der angegebene Raum konnte für den Termin %s nicht gebucht werden!'), $termin->getFullname())); } } elseif (Request::option('room') == 'noroom') { $termin->raum = ''; ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $termin->termin_id)); $this->course->createMessage(sprintf(_('Der Termin %s wurde geändert, etwaige freie Ortsangaben und Raumbuchungen wurden entfernt.'), '<b>' . $termin->getFullname() . '</b>')); } elseif (Request::option('room') == 'freetext') { $termin->raum = Request::get('freeRoomText_sd'); ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $termin->termin_id)); $this->course->createMessage(sprintf(_('Der Termin %s wurde geändert, etwaige Raumbuchungen wurden entfernt und stattdessen der angegebene Freitext eingetragen!'), '<b>' . $termin->getFullname() . '</b>')); } if ($termin->store()) { NotificationCenter::postNotification('CourseDidChangeSchedule', $this->course); $this->displayMessages(); } $this->redirect($this->url_for('course/timesrooms/index#' . $termin->metadate_id, array('contentbox_open' => $termin->metadate_id))); }
/** * Gets the list of applicants for the courses belonging to this course set. * * @param String $set_id course set ID * @param String $csv export users to file */ public function applications_list_action($set_id, $csv = null) { if (Request::isXhr()) { $this->response->add_header('X-Title', _('Liste der Anmeldungen')); } $courseset = new CourseSet($set_id); $applicants = AdmissionPriority::getPriorities($set_id); $users = User::findMany(array_keys($applicants), 'ORDER BY Nachname'); $courses = SimpleCollection::createFromArray(Course::findMany($courseset->getCourses())); $captions = array(_("Nachname"), _("Vorname"), _("Nutzername"), _("Veranstaltung"), _("Nummer"), _("Priorität")); $data = array(); foreach ($users as $user) { $row = array(); $app_courses = $applicants[$user->id]; asort($app_courses); foreach ($app_courses as $course_id => $prio) { $row = array(); $row[] = $user->nachname; $row[] = $user->vorname; $row[] = $user->username; $row[] = $courses->findOneBy('id', $course_id)->name; $row[] = $courses->findOneBy('id', $course_id)->veranstaltungsnummer; $row[] = $prio; if ($csv) { $row[] = $user->email; } $data[] = $row; } } if ($csv) { $tmpname = md5(uniqid('tmp')); $captions[] = _("Email"); if (array_to_csv($data, $GLOBALS['TMP_PATH'] . '/' . $tmpname, $captions)) { $this->redirect(GetDownloadLink($tmpname, 'Anmeldungen_' . $courseset->getName() . '.csv', 4, 'force')); return; } } $this->captions = $captions; $this->data = $data; $this->set_id = $courseset->getId(); }