Example #1
0
 /**
  * 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;
 }
Example #2
0
 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);
 }
Example #3
0
 /**
  * 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());
     }
 }
Example #4
0
 /**
  * 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)));
 }
Example #5
0
 /**
  * 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();
 }