From 953de28bb8cdbb8edbf14c7f0ce81d0f5abbd8a8 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Wed, 22 Mar 2023 12:43:48 +0000 Subject: rework admission user list overview, fixes #2393 Closes #2393 Merge request studip/studip!1583 --- app/controllers/admission/userlist.php | 36 +++---- app/views/admission/user_list/configure.php | 109 ---------------------- app/views/admission/user_list/delete.php | 15 --- app/views/admission/user_list/index.php | 48 ---------- app/views/admission/userlist/configure.php | 109 ++++++++++++++++++++++ app/views/admission/userlist/index.php | 62 ++++++++++++ lib/classes/admission/AdmissionUserList.class.php | 47 ++++++++-- templates/admission/userlist.php | 33 +++---- 8 files changed, 245 insertions(+), 214 deletions(-) delete mode 100644 app/views/admission/user_list/configure.php delete mode 100644 app/views/admission/user_list/delete.php delete mode 100644 app/views/admission/user_list/index.php create mode 100644 app/views/admission/userlist/configure.php create mode 100644 app/views/admission/userlist/index.php diff --git a/app/controllers/admission/userlist.php b/app/controllers/admission/userlist.php index 4c86185..683f1e2 100644 --- a/app/controllers/admission/userlist.php +++ b/app/controllers/admission/userlist.php @@ -15,7 +15,7 @@ * @category Stud.IP */ -class Admission_UserListController extends AuthenticatedController +class Admission_UserlistController extends AuthenticatedController { /** * @see AuthenticatedController::before_filter @@ -28,16 +28,18 @@ class Admission_UserListController extends AuthenticatedController Navigation::activateItem('/browse/coursesets/userlists'); PageLayout::addScript('studip-admission.js'); - $views = new ViewsWidget(); - $views->setTitle(_('Aktionen')); - $views->addLink(_('Personenliste anlegen'),$this->url_for('admission/userlist/configure'))->setActive($action == 'configure'); - Sidebar::Get()->addWidget($views); + Sidebar::get()->addWidget(new ActionsWidget())->addLink( + _('Personenliste anlegen'), + $this->configureURL(), + Icon::create('add') + ); } /** * Show the user lists the current user has access to. */ - public function index_action() { + public function index_action() + { $this->userlists = []; foreach (AdmissionUserList::getUserLists($GLOBALS['user']->id) as $list) { $this->userlists[$list->getId()] = $list; @@ -50,7 +52,8 @@ class Admission_UserListController extends AuthenticatedController * @param String $userlistId user list to load settings from (or empty * if it is a new user list) */ - public function configure_action($userlistId='') { + public function configure_action($userlistId = '') + { if ($userlistId) { $this->userlist = new AdmissionUserList($userlistId); $this->userlist_id = $userlistId; @@ -100,7 +103,8 @@ class Admission_UserListController extends AuthenticatedController * * @param String $userlistId user list to save */ - public function save_action($userlistId='') { + public function save_action($userlistId = '') + { CSRFProtection::verifyUnsafeRequest(); $userlist = new AdmissionUserList($userlistId); $userlist->setName(Request::get('name')) @@ -120,15 +124,13 @@ class Admission_UserListController extends AuthenticatedController * * @param String $userlistId the user list to delete */ - public function delete_action($userlistId) { - $this->userlist = new AdmissionUserList($userlistId); - if (Request::int('really')) { - $this->userlist->delete(); - $this->redirect($this->url_for('admission/userlist')); - } - if (Request::int('cancel')) { - $this->redirect($this->url_for('admission/userlist')); - } + public function delete_action($userlistId) + { + CSRFProtection::verifyUnsafeRequest(); + + $userlist = new AdmissionUserList($userlistId); + $userlist->delete(); + $this->redirect($this->indexURL()); } /** diff --git a/app/views/admission/user_list/configure.php b/app/views/admission/user_list/configure.php deleted file mode 100644 index a35fd51..0000000 --- a/app/views/admission/user_list/configure.php +++ /dev/null @@ -1,109 +0,0 @@ -addPlainText(_('Info'), "Personenlisten dienen dazu, um Sonderfälle erfassen zu ". - "können, die in Anmeldeverfahren gesondert behandelt ". - "werden sollen (Härtefälle etc.)."); -Helpbar::get()->addPlainText(_('Info'), "Stellen Sie hier ein, wie die Chancen bei der ". - "Platzverteilung verändert werden sollen. Ein Wert ". - "von 1 bedeutet normale Verteilung, ein Wert kleiner ". - "als 1 führt zur Benachteiligung, mit einem Wert ". - "größer als 1 werden die betreffenden Personen ". - "bevorzugt."); -?> - -
- - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - setTitle(_('Personen zur Liste hinzufügen')) - ->setSearchObject($userSearch) - ->setDefaultSelectedUser(array_map(function ($u) { return $u->id; }, $users)) - ->setDataDialogStatus(Request::isXhr()) - ->setJSFunctionOnSubmit(Request::isXhr() ? 'jQuery(this).closest(".ui-dialog-content").dialog("close");' : false) - ->setExecuteURL($controller->url_for('admission/userlist/add_members', $userlist_id)) - ->render() ?> - -
- -
- - id, $u->username)->getImageTag(Avatar::SMALL) ?> - - - - getFullname('full_rev') . ' (' . $u->username . ')' ?> - - - - - - -
-
- -
- - url_for('admission/userlist')) ?> -
-
diff --git a/app/views/admission/user_list/delete.php b/app/views/admission/user_list/delete.php deleted file mode 100644 index b921e9e..0000000 --- a/app/views/admission/user_list/delete.php +++ /dev/null @@ -1,15 +0,0 @@ - -getName()) - ), - $controller->deleteURL($userlist->getId(), ['really' => true]), - $controller->deleteURL($userlist->getId(), ['cancel' => true]) -) -?> diff --git a/app/views/admission/user_list/index.php b/app/views/admission/user_list/index.php deleted file mode 100644 index 645ad19..0000000 --- a/app/views/admission/user_list/index.php +++ /dev/null @@ -1,48 +0,0 @@ -addPlainText(_('Info'),"Personenlisten erfassen eine Menge von Personen, die ". - "mit modifizierten Chancen in die Platzverteilung bei ". - "Anmeldeverfahren eingehen. Dies können z.B. ". - "Härtefälle sein, die bevorzugt einen Platz in ". - "Veranstaltungen erhalten sollen."); -Helpbar::get()->addPlainText(_('Info'), "Hier sehen Sie alle Personenlisten, auf die Sie Zugriff ". - "haben."); -?> - - -
- - - - -
- -url_for('admission/userlist/configure').'">', - '')); ?> - diff --git a/app/views/admission/userlist/configure.php b/app/views/admission/userlist/configure.php new file mode 100644 index 0000000..4e5df25 --- /dev/null +++ b/app/views/admission/userlist/configure.php @@ -0,0 +1,109 @@ +addPlainText(_('Info'), "Personenlisten dienen dazu, um Sonderfälle erfassen zu ". + "können, die in Anmeldeverfahren gesondert behandelt ". + "werden sollen (Härtefälle etc.)."); +Helpbar::get()->addPlainText(_('Info'), "Stellen Sie hier ein, wie die Chancen bei der ". + "Platzverteilung verändert werden sollen. Ein Wert ". + "von 1 bedeutet normale Verteilung, ein Wert kleiner ". + "als 1 führt zur Benachteiligung, mit einem Wert ". + "größer als 1 werden die betreffenden Personen ". + "bevorzugt."); +?> + +
+ + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + setTitle(_('Personen zur Liste hinzufügen')) + ->setSearchObject($userSearch) + ->setDefaultSelectedUser(array_map(function ($u) { return $u->id; }, $users)) + ->setDataDialogStatus(Request::isXhr()) + ->setJSFunctionOnSubmit(Request::isXhr() ? 'jQuery(this).closest(".ui-dialog-content").dialog("close");' : false) + ->setExecuteURL($controller->url_for('admission/userlist/add_members', $userlist_id)) + ->render() ?> + +
+ +
+ + id, $u->username)->getImageTag(Avatar::SMALL) ?> + + + + getFullname('full_rev') . ' (' . $u->username . ')' ?> + + + + + + +
+
+ +
+ + url_for('admission/userlist')) ?> +
+
diff --git a/app/views/admission/userlist/index.php b/app/views/admission/userlist/index.php new file mode 100644 index 0000000..4c87fdf --- /dev/null +++ b/app/views/admission/userlist/index.php @@ -0,0 +1,62 @@ +addPlainText(_('Info'),"Personenlisten erfassen eine Menge von Personen, die ". + "mit modifizierten Chancen in die Platzverteilung bei ". + "Anmeldeverfahren eingehen. Dies können z.B. ". + "Härtefälle sein, die bevorzugt einen Platz in ". + "Veranstaltungen erhalten sollen."); +Helpbar::get()->addPlainText(_('Info'), "Hier sehen Sie alle Personenlisten, auf die Sie Zugriff ". + "haben."); +?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ configureURL() + ) ?> +
getName()) ?>describe()) ?>getUsers()) ?> + + asImg(tooltip2(_('Nutzerliste bearbeiten'))) ?> + + asInput(tooltip2(_('Personenliste löschen')) + [ + 'formaction' => $controller->deleteURL($list->getId()), + 'data-confirm' => sprintf(_('Soll die Nutzerliste %s wirklich gelöscht werden?'), $list->getName()), + ]) ?> +
+
diff --git a/lib/classes/admission/AdmissionUserList.class.php b/lib/classes/admission/AdmissionUserList.class.php index f45e195..570bc62 100644 --- a/lib/classes/admission/AdmissionUserList.class.php +++ b/lib/classes/admission/AdmissionUserList.class.php @@ -181,11 +181,23 @@ class AdmissionUserList /** * Gets all assigned user IDs. * - * @return String + * @param bool $as_objects Whether the users should be returned as objects + * @return array|User[] */ - public function getUsers() + public function getUsers(bool $as_objects = false) { - return $this->users; + if (!$as_objects) { + return $this->users; + } + + $result = $this->users; + User::findEachMany( + function (User $user) use (&$result) { + $result[$user->id] = $user; + }, + array_keys($this->users) + ); + return array_values($result); } /** @@ -313,6 +325,26 @@ class AdmissionUserList return $this; } + public function describe(array $wrapper = ['', '']): string + { + if ($this->getFactor() == 0) { + return _('Bei der Platzverteilung zu Veranstaltungen werden die ' + . 'betreffenden Personen nur nachrangig berücksichtigt.'); + } + + if ($this->getFactor() == PHP_INT_MAX) { + return _('Bei der Platzverteilung zu Veranstaltungen werden die ' + . 'betreffenden Personen vor allen anderen einen Platz erhalten.'); + } + + return sprintf( + _('Bei der Platzverteilung zu Veranstaltungen haben die betreffenden ' + . 'Personen gegenüber Anderen eine %s-fache Chance darauf, einen Platz zu ' + . 'erhalten.'), + $wrapper[0] . $this->getFactor() . $wrapper[1] + ); + } + /** * Function for storing the data to DB. Is not called automatically on * changing object values. @@ -353,7 +385,8 @@ class AdmissionUserList /** * String representation of this object. */ - public function toString() { + public function toString() + { $tpl = $GLOBALS['template_factory']->open('admission/userlist'); $tpl->set_attribute('userlist', $this); return $tpl->render(); @@ -364,9 +397,9 @@ class AdmissionUserList * * @return String */ - public function __toString() { + public function __toString() + { return $this->toString(); } -} /* end of class AdmissionUserList */ -?> +} diff --git a/templates/admission/userlist.php b/templates/admission/userlist.php index df4dfcf..872d691 100644 --- a/templates/admission/userlist.php +++ b/templates/admission/userlist.php @@ -1,23 +1,20 @@ -getFactor() == 0) : ?> - -getFactor() == PHP_INT_MAX) : ?> - - - '.$userlist->getFactor().''); ?> - -
+ +describe(['', '']) ?>
-getUsers()) { ?> +getUsers()): ?> - +
- + -- cgit v1.0