aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admission/userlist.php36
-rw-r--r--app/views/admission/user_list/delete.php15
-rw-r--r--app/views/admission/user_list/index.php48
-rw-r--r--app/views/admission/userlist/configure.php (renamed from app/views/admission/user_list/configure.php)4
-rw-r--r--app/views/admission/userlist/index.php62
-rw-r--r--lib/classes/admission/AdmissionUserList.class.php47
-rw-r--r--templates/admission/userlist.php33
7 files changed, 138 insertions, 107 deletions
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/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 @@
-<?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 645ad19..0000000
--- 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
index a35fd51..4e5df25 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 0000000..4c87fdf
--- /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 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 @@
-<?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; ?>