public function add_member_action() { CSRFProtection::verifyRequest(); $mp = MultiPersonSearch::load('settings_add_deputy'); $msg = array('error' => array(), 'success' => array()); foreach ($mp->getAddedUsers() as $_user_id) { if (isDeputy($_user_id, $this->user->user_id)) { $msg['error'][] = sprintf(_('%s ist bereits als Vertretung eingetragen.'), get_fullname($_user_id, 'full')); } else { if ($_user_id == $this->user->user_id) { $msg['error'][] = _('Sie können sich nicht als Ihre eigene Vertretung eintragen!'); } else { if (!addDeputy($_user_id, $this->user->user_id)) { $msg['error'][] = _('Fehler beim Eintragen der Vertretung!'); } else { $msg['success'][] = sprintf(_('%s wurde als Vertretung eingetragen.'), get_fullname($_user_id, 'full')); } } } } // only show an error messagebox once. if (!empty($msg['error'])) { PageLayout::postMessage(MessageBox::error(_('Die gewünschte Operation konnte nicht ausgeführt werden.'), $msg['error'])); } if (!empty($msg['success'])) { PageLayout::postMessage(MessageBox::success(_('Die gewünschten Personen wurden als Ihre Vertretung eingetragen!'), $msg['success'])); } $this->redirect('settings/deputies/index'); }
/** * Main action to display contacts */ function index_action($filter = null) { // Check if we need to add contacts $mps = MultiPersonSearch::load('contacts'); $imported = 0; foreach ($mps->getAddedUsers() as $userId) { $user_to_add = User::find($userId); if ($user_to_add) { $new_contact = array('owner_id' => User::findCurrent()->id, 'user_id' => $user_to_add->id); if ($filter && $this->group) { $new_contact['group_assignments'][] = array('statusgruppe_id' => $this->group->id, 'user_id' => $user_to_add->id); } $imported += (bool) Contact::import($new_contact)->store(); } } if ($imported) { PageLayout::postMessage(MessageBox::success(sprintf(_("%s Kontakte wurden hinzugefügt."), $imported))); } $mps->clearSession(); // write filter to local $this->filter = $filter; // Deal with navigation Navigation::activateItem('community/contacts'); // Edit CSS for quicknavigation PageLayout::addStyle('div.letterlist span {color: #c3c8cc;}'); if ($filter) { $selected = $this->group; $contacts = SimpleCollection::createFromArray(User::findMany($selected->members->pluck('user_id'))); } else { $contacts = User::findCurrent()->contacts; } $this->allContacts = $contacts; // Retrive first letter and store in that contactgroup $this->contacts = array(); foreach ($contacts as $contact) { $this->contacts[strtoupper(SimpleCollection::translitLatin1($contact->nachname[0]))][] = $contact; } // Humans are a lot better with sorted results ksort($this->contacts); $this->contacts = array_map(function ($g) { return SimpleCollection::createFromArray($g)->orderBy('nachname, vorname'); }, $this->contacts); // Init sidebar $this->initSidebar($filter); // Init person search $mps = MultiPersonSearch::get('contacts')->setTitle(_('Kontakte hinzufügen'))->setDefaultSelectedUser($this->allContacts->pluck('user_id'))->setExecuteURL($this->url_for('contact/index/' . $filter))->setSearchObject(new StandardSearch('user_id')); // Set default title $this->title = _('Alle Kontakte'); // If we have a group if ($selected) { // Set title of Table $this->title = $selected->name; // Set title of multipersonsearch $mps->setTitle(sprintf(_('Kontakte zu %s hinzufügen'), $selected->name)); $mps->addQuickfilter(_('Kontakte'), User::findCurrent()->contacts->pluck('user_id')); } // Render multiperson search $this->multiPerson = $mps->render(); }
/** * Action to add multiple members to a group. * * @param string group id */ public function memberAdd_action($group_id = null) { $mp = MultiPersonSearch::load("add_statusgroup" . $group_id); $this->group = new Statusgruppen($group_id); $countAdded = 0; foreach ($mp->getAddedUsers() as $a) { if (!$this->group->isMember(new User($a))) { $new_user = new StatusgruppeUser(array($group_id, $a)); $new_user->store(); $this->type['after_user_add']($a); $countAdded++; } } if ($countAdded > 0) { $message = sprintf(ngettext('Es wurde eine Person hinzugefügt.', 'Es wurden %u MitgliederInnen hinzugefügt.', $countAdded), $countAdded); PageLayout::postMessage(MessageBox::success($message)); } $this->redirect('admin/statusgroups'); }
/** * invites members to a studygroup. */ function execute_invite_action($id) { // Security Check global $perm; if (!$perm->have_studip_perm('tutor', $id)) { $this->redirect(URLHelper::getURL('seminar_main.php?auswahl=' . $id)); exit; } // load MultiPersonSearch object $mp = MultiPersonSearch::load("studygroup_invite_" . $id); $fail = false; $count = 0; $addedUsers = ""; foreach ($mp->getAddedUsers() as $receiver) { // save invite in database StudygroupModel::inviteMember($receiver, $id); // send invite message to user $msg = new Messaging(); $sem = new Seminar($id); $message = sprintf(_("%s möchte Sie auf die Studiengruppe %s aufmerksam machen. Klicken Sie auf den untenstehenden Link, um direkt zur Studiengruppe zu gelangen.\n\n %s"), get_fullname(), $sem->name, URLHelper::getlink("dispatch.php/course/studygroup/details/" . $id, array('cid' => NULL))); $subject = _("Sie wurden in eine Studiengruppe eingeladen"); $msg->insert_message($message, get_username($receiver), '', '', '', '', '', $subject); if ($count > 0) { $addedUsers .= ", "; } $addedUsers .= get_fullname($receiver, 'full', true); $count++; } if ($count == 1) { $this->flash['success'] = sprintf(_("%s wurde in die Studiengruppe eingeladen."), $addedUsers); } else { if ($count >= 1) { $this->flash['success'] = sprintf(_("%s wurden in die Studiengruppe eingeladen."), $addedUsers); } } $this->redirect($this->url_for('course/studygroup/members/' . $id, array('view' => Request::get('view')))); }
/** * Landing page for mulitpersonsearch, adds the selected users to the * user list. * @param $userlistId string ID of the userlist to edit */ public function add_members_action($userlistId) { $mp = MultiPersonSearch::load("add_userlist_member_" . $userlistId); $users = $mp->getDefaultSelectedUsersIDs(); $oldsize = count($users); foreach ($mp->getAddedUsers() as $u) { $users[] = $u; } $newsize = count($users); $this->flash['users'] = $users; PageLayout::postInfo(sprintf(ngettext('Eine Person wurde der Liste hinzugefügt.', '%u Personen wurden der Liste hinzugefügt, die Liste ist aber noch nicht gespeichert.', $newsize - $oldsize), $newsize - $oldsize)); $this->redirect($this->url_for('admission/userlist/configure', $userlistId)); }
public function add_member_action($course_id, $status = 'dozent') { // load MultiPersonSearch object $mp = MultiPersonSearch::load("add_member_" . $status . $course_id); $fail = false; switch ($status) { case 'tutor': $func = 'addTutor'; break; case 'deputy': $func = 'addDeputy'; break; default: $func = 'addTeacher'; break; } foreach ($mp->getAddedUsers() as $a) { $result = $this->{$func}($a, $course_id); if ($result !== false) { PageLayout::postMessage($result); } else { $fail = true; } } // only show an error messagebox once. if ($fail === true) { PageLayout::postMessage(MessageBox::error(_('Die gewünschte Operation konnte nicht ausgeführt werden.'))); } $this->flash['open'] = "bd_personal"; $redirect = Request::get('from') ?: 'course/basicdata/view/' . $course_id; $this->redirect($this->url_for($redirect)); }
/** * Add tutors to a seminar. * @throws AccessDeniedException */ public function execute_multipersonsearch_tutor_action() { // Security Check if (!$this->is_tutor) { throw new AccessDeniedException('Sie haben leider keine ausreichende Berechtigung, um auf diesen Bereich von Stud.IP zuzugreifen.'); } // load MultiPersonSearch object $mp = MultiPersonSearch::load("add_tutor" . $this->course_id); foreach ($mp->getAddedUsers() as $a) { $this->addTutor($a); } $this->redirect('course/members/index'); }
/** * 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()); } }
public function add_users_action($range_id = null) { $this->range_id = $range_id ?: $this->range_id; $this->calendar = new SingleCalendar($this->range_id); if (Request::isXhr()) { $added_users = Request::optionArray('added_users'); } else { $mps = MultiPersonSearch::load('calendar-manage_access'); $added_users = $mps->getAddedUsers(); $mps->clearSession(); } $added = 0; foreach ($added_users as $user_id) { $user_to_add = User::find($user_id); if ($user_to_add) { $calendar_user = new CalendarUser(array($this->calendar->getRangeId(), $user_to_add->id)); if ($calendar_user->isNew()) { $calendar_user->permission = Calendar::PERMISSION_READABLE; $added += $calendar_user->store(); } } } if ($added) { PageLayout::postMessage(MessageBox::success(sprintf(ngettext('Eine Person wurde mit der Berechtigung zum Lesen des Kalenders hinzugefügt.', '%s Personen wurden mit der Berechtigung zum Lesen des Kalenders hinzugefügt.', $added), $added))); } if (Request::isXhr()) { $this->response->add_header('X-Dialog-Close', 1); $this->response->set_status(200); $this->render_nothing(); } else { $this->redirect($this->url_for('calendar/single/manage_access/' . $this->calendar->getRangeId())); } }
function addToStatusgroup($range_id, $statusgruppe_id, $workgroup_mode) { $mp = MultiPersonSearch::load("contacts_statusgroup_" . $statusgruppe_id); if (count($mp->getAddedUsers()) !== 0) { foreach ($mp->getAddedUsers() as $m) { $quickfilters = $mp->getQuickfilterIds(); if (in_array($m, $quickfilters[_("Veranstaltungsteilnehmende")])) { InsertPersonStatusgruppe ($m, $statusgruppe_id, false); } elseif (in_array($m, $quickfilters[_("Mitarbeiter/-innen")])) { $writedone = InsertPersonStatusgruppe ($m, $statusgruppe_id, false); if ($writedone) { if ($workgroup_mode == TRUE) { $globalperms = get_global_perm($m); if ($globalperms == "tutor" || $globalperms == "dozent") { insert_seminar_user($range_id, $m, "tutor"); } else { insert_seminar_user($range_id, $m, "autor"); } } else { insert_seminar_user($range_id, $m, "autor"); } } checkExternDefaultForUser($m); } else { $writedone = InsertPersonStatusgruppe ($m, $statusgruppe_id, false); if ($writedone) { if ($workgroup_mode == TRUE) { $globalperms = get_global_perm($m); if ($globalperms == "tutor" || $globalperms == "dozent") { insert_seminar_user($range_id, $m, "tutor"); } else { insert_seminar_user($range_id, $m, "autor"); } } else { insert_seminar_user($range_id, $m, "autor"); } } } } } $mp->clearSession(); }