diff --git a/app/controllers/admission/userlist.php b/app/controllers/admission/userlist.php index 4c86185cddf375bf8f3110c3103535f392050c2b..683f1e272b86e78d06756cd6264d190c24187f05 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/delete.php b/app/views/admission/user_list/delete.php deleted file mode 100644 index b921e9e72eaf9df56569d1981537792fdbf3eb0e..0000000000000000000000000000000000000000 --- a/app/views/admission/user_list/delete.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -/** - * @var AdmissionUserList $userlist - * @var Admission_UserListController $controller - */ -?> -<?= QuestionBox::create( - sprintf( - _('Soll die Nutzerliste %s wirklich gelöscht werden?'), - htmlReady($list->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 645ad19bfca698d8338d73a2fc204d7085a6d39e..0000000000000000000000000000000000000000 --- a/app/views/admission/user_list/index.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * @var AdmissionUserList[] $userlists - * @var Admission_UserListController $controller - */ -Helpbar::get()->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."); -?> - -<?php -if ($userlists) { -?> -<div id="userlists"> - <?php foreach ($userlists as $list) { ?> - <div id="userlist_<?= $list->getId() ?>"> - <a href="#" onclick="return STUDIP.Admission.toggleDetails('userlist_arrow_<?= $list->getId() ?>', 'userlist_details_<?= $list->getId() ?>')"> - <?= Icon::create('arr_1right', 'clickable')->asImg(20, ["id" => 'userlist_arrow_'.$list->getId(), "align" => 'top', "rel" => Icon::create('arr_1down', 'clickable')->asImagePath(20)]) ?> - <?= htmlReady($list->getName()) ?> - </a> - <a class="userlist-action" - href="<?= URLHelper::getURL('dispatch.php/admission/userlist/configure/'.$list->getId()); ?>"> - <?= Icon::create('edit', 'clickable', ['title' => _('Nutzerliste bearbeiten')])->asImg(20, ["alt" => _('Nutzerliste bearbeiten')]); ?> - </a> - <a class="userlist-action" href="<?= $controller->link_for('admission/userlist/delete', $list->getId(), ['really' => true]) ?>" - data-confirm="<?= htmlReady(sprintf(_('Soll die Nutzerliste %s wirklich gelöscht werden?'), $list->getName())) ?>"> - <?= Icon::create('trash', 'clickable', ['title' => _('Personenliste löschen')])->asImg(20) ?> - </a> - </div> - <div id="userlist_details_<?= $list->getId() ?>" style="display: none; margin-left: 20px;"> - <?= $list->toString() ?> - </div> - <?php } ?> -</div> -<?php -} else { -?> -<?= MessageBox::info(sprintf(_('Es wurden keine Personenlisten gefunden. Sie können eine '. - 'neue %sPersonenliste anlegen%s.'), '<a href="'. - $controller->url_for('admission/userlist/configure').'">', - '</a>')); ?> -<?php -} -?> diff --git a/app/views/admission/user_list/configure.php b/app/views/admission/userlist/configure.php similarity index 96% rename from app/views/admission/user_list/configure.php rename to app/views/admission/userlist/configure.php index a35fd5171f18af01fc4d18c745424e1eda361487..4e5df2525ea223691f5bb4301577e352d727341a 100644 --- a/app/views/admission/user_list/configure.php +++ b/app/views/admission/userlist/configure.php @@ -19,12 +19,12 @@ Helpbar::get()->addPlainText(_('Info'), "Stellen Sie hier ein, wie die Chancen b "bevorzugt."); ?> <?= $error ?? '' ?> -<form class="default" action="<?= $controller->url_for('admission/userlist/save', $userlist_id) ?>" method="post"> +<form class="default" action="<?= $controller->link_for('admission/userlist/save', $userlist_id) ?>" method="post"> <?= CSRFProtection::tokenTag() ?> <fieldset> <legend> - <?= ($userlist_id) ? _('Personenliste bearbeiten') : _('Personenliste anlegen') ?> + <?= $userlist_id ? _('Personenliste bearbeiten') : _('Personenliste anlegen') ?> </legend> <label> <span class="required"> diff --git a/app/views/admission/userlist/index.php b/app/views/admission/userlist/index.php new file mode 100644 index 0000000000000000000000000000000000000000..4c87fdfa4615c28f1f792b017dfbded95b4fb464 --- /dev/null +++ b/app/views/admission/userlist/index.php @@ -0,0 +1,62 @@ +<?php +/** + * @var AdmissionUserList[] $userlists + * @var Admission_UserListController $controller + */ +Helpbar::get()->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."); +?> +<form action="#" method="post"> + <?= CSRFProtection::tokenTag() ?> + + <table class="default"> + <colgroup> + <col> + <col> + <col> + <col style="width: 48px"> + </colgroup> + <thead> + <tr> + <th><?= _('Name') ?></th> + <th><?= _('Beschreibung') ?></th> + <th><?= _('Personen') ?></th> + <th></th> + </tr> + </thead> + <tbody> + <? if (empty($userlists)): ?> + <tr> + <td colspan="4" style="text-align: center;"> + <?= _('Es sind noch keine Personenlisten vorhanden.') ?><br> + <?= Studip\LinkButton::create( + _('Neue Personenliste anlegen'), + $controller->configureURL() + ) ?> + </td> + </tr> + <? endif; ?> + <? foreach ($userlists as $list): ?> + <tr id="userlist_<?= htmlReady($list->getId()) ?>"> + <td><?= htmlReady($list->getName()) ?></td> + <td><?= htmlReady($list->describe()) ?></td> + <td><?= count($list->getUsers()) ?></td> + <td class="actions"> + <a href="<?= $controller->configure($list->getId()) ?>"> + <?= Icon::create('edit')->asImg(tooltip2(_('Nutzerliste bearbeiten'))) ?> + </a> + <?= Icon::create('trash')->asInput(tooltip2(_('Personenliste löschen')) + [ + 'formaction' => $controller->deleteURL($list->getId()), + 'data-confirm' => sprintf(_('Soll die Nutzerliste %s wirklich gelöscht werden?'), $list->getName()), + ]) ?> + </td> + </tr> + <? endforeach; ?> + </tbody> + </table> +</form> diff --git a/lib/classes/admission/AdmissionUserList.class.php b/lib/classes/admission/AdmissionUserList.class.php index f45e1954e40b8454b81e4e883d4527d6313d41de..570bc62b697e1fb1e827f814538c927bedc44603 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 df4dfcf11e9d7c114e4c0c8b7ac51bdd44dcb235..872d69110cb9a88a1c933aa1f878f362515d7e40 100644 --- a/templates/admission/userlist.php +++ b/templates/admission/userlist.php @@ -1,23 +1,20 @@ -<?php if ($userlist->getFactor() == 0) : ?> - <?= _('Bei der Platzverteilung zu Veranstaltungen werden die betreffenden '. - 'Personen nur nachrangig berücksichtigt.') ?> -<?php elseif ($userlist->getFactor() == PHP_INT_MAX) : ?> - <?= _('Bei der Platzverteilung zu Veranstaltungen werden die betreffenden '. - 'Personen vor allen anderen einen Platz erhalten.') ?> -<?php else : ?> - <?= sprintf(_('Bei der Platzverteilung zu Veranstaltungen haben die betreffenden '. - 'Personen gegenüber Anderen eine %s-fache Chance darauf, einen Platz zu '. - 'erhalten.'), '<b>'.$userlist->getFactor().'</b>'); ?> -<?php endif ?> -<br> +<?php +/** + * @var AdmissionUserList $userlist + */ +?> +<?= $userlist->describe(['<b>', '</b>']) ?><br> <?= _('Personen auf dieser Liste:') ?> -<?php if ($userlist->getUsers()) { ?> +<? if ($userlist->getUsers()): ?> <ul> - <?php foreach ($userlist->getUsers() as $userId => $assigned) { ?> - <li><?= get_fullname($userId, 'full_rev', true).' ('.get_username($userId).')' ?></li> - <?php } ?> +<? foreach ($userlist->getUsers(true) as $user): ?> + <li> + <?= htmlReady($user->getFullname('full_rev')) ?> + (<?= htmlReady($user->username) ?>) + </li> +<? endforeach; ?> </ul> -<?php } else { ?> +<? else: ?> <br> <i><?= _('Es wurde noch niemand zugeordnet.'); ?></i> -<?php } ?> +<? endif; ?>