Exemple #1
0
 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');
 }
Exemple #2
0
 /**
  * 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();
 }
Exemple #3
0
 /**
  * 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');
 }
Exemple #4
0
 /**
  * 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'))));
 }
Exemple #5
0
 /**
  * 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));
 }
Exemple #6
0
 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));
 }
Exemple #7
0
 /**
  * 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');
 }
Exemple #8
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());
     }
 }
Exemple #9
0
 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()));
     }
 }
Exemple #10
0
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();
}