Skip to content
Snippets Groups Projects
Commit 953de28b authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

rework admission user list overview, fixes #2393

Closes #2393

Merge request studip/studip!1583
parent 7e94d278
No related branches found
No related tags found
No related merge requests found
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* @category Stud.IP * @category Stud.IP
*/ */
class Admission_UserListController extends AuthenticatedController class Admission_UserlistController extends AuthenticatedController
{ {
/** /**
* @see AuthenticatedController::before_filter * @see AuthenticatedController::before_filter
...@@ -28,16 +28,18 @@ class Admission_UserListController extends AuthenticatedController ...@@ -28,16 +28,18 @@ class Admission_UserListController extends AuthenticatedController
Navigation::activateItem('/browse/coursesets/userlists'); Navigation::activateItem('/browse/coursesets/userlists');
PageLayout::addScript('studip-admission.js'); PageLayout::addScript('studip-admission.js');
$views = new ViewsWidget(); Sidebar::get()->addWidget(new ActionsWidget())->addLink(
$views->setTitle(_('Aktionen')); _('Personenliste anlegen'),
$views->addLink(_('Personenliste anlegen'),$this->url_for('admission/userlist/configure'))->setActive($action == 'configure'); $this->configureURL(),
Sidebar::Get()->addWidget($views); Icon::create('add')
);
} }
/** /**
* Show the user lists the current user has access to. * Show the user lists the current user has access to.
*/ */
public function index_action() { public function index_action()
{
$this->userlists = []; $this->userlists = [];
foreach (AdmissionUserList::getUserLists($GLOBALS['user']->id) as $list) { foreach (AdmissionUserList::getUserLists($GLOBALS['user']->id) as $list) {
$this->userlists[$list->getId()] = $list; $this->userlists[$list->getId()] = $list;
...@@ -50,7 +52,8 @@ class Admission_UserListController extends AuthenticatedController ...@@ -50,7 +52,8 @@ class Admission_UserListController extends AuthenticatedController
* @param String $userlistId user list to load settings from (or empty * @param String $userlistId user list to load settings from (or empty
* if it is a new user list) * if it is a new user list)
*/ */
public function configure_action($userlistId='') { public function configure_action($userlistId = '')
{
if ($userlistId) { if ($userlistId) {
$this->userlist = new AdmissionUserList($userlistId); $this->userlist = new AdmissionUserList($userlistId);
$this->userlist_id = $userlistId; $this->userlist_id = $userlistId;
...@@ -100,7 +103,8 @@ class Admission_UserListController extends AuthenticatedController ...@@ -100,7 +103,8 @@ class Admission_UserListController extends AuthenticatedController
* *
* @param String $userlistId user list to save * @param String $userlistId user list to save
*/ */
public function save_action($userlistId='') { public function save_action($userlistId = '')
{
CSRFProtection::verifyUnsafeRequest(); CSRFProtection::verifyUnsafeRequest();
$userlist = new AdmissionUserList($userlistId); $userlist = new AdmissionUserList($userlistId);
$userlist->setName(Request::get('name')) $userlist->setName(Request::get('name'))
...@@ -120,15 +124,13 @@ class Admission_UserListController extends AuthenticatedController ...@@ -120,15 +124,13 @@ class Admission_UserListController extends AuthenticatedController
* *
* @param String $userlistId the user list to delete * @param String $userlistId the user list to delete
*/ */
public function delete_action($userlistId) { public function delete_action($userlistId)
$this->userlist = new AdmissionUserList($userlistId); {
if (Request::int('really')) { CSRFProtection::verifyUnsafeRequest();
$this->userlist->delete();
$this->redirect($this->url_for('admission/userlist')); $userlist = new AdmissionUserList($userlistId);
} $userlist->delete();
if (Request::int('cancel')) { $this->redirect($this->indexURL());
$this->redirect($this->url_for('admission/userlist'));
}
} }
/** /**
......
<?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])
)
?>
<?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
}
?>
...@@ -19,12 +19,12 @@ Helpbar::get()->addPlainText(_('Info'), "Stellen Sie hier ein, wie die Chancen b ...@@ -19,12 +19,12 @@ Helpbar::get()->addPlainText(_('Info'), "Stellen Sie hier ein, wie die Chancen b
"bevorzugt."); "bevorzugt.");
?> ?>
<?= $error ?? '' ?> <?= $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() ?> <?= CSRFProtection::tokenTag() ?>
<fieldset> <fieldset>
<legend> <legend>
<?= ($userlist_id) ? _('Personenliste bearbeiten') : _('Personenliste anlegen') ?> <?= $userlist_id ? _('Personenliste bearbeiten') : _('Personenliste anlegen') ?>
</legend> </legend>
<label> <label>
<span class="required"> <span class="required">
......
<?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>
...@@ -181,13 +181,25 @@ class AdmissionUserList ...@@ -181,13 +181,25 @@ class AdmissionUserList
/** /**
* Gets all assigned user IDs. * 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)
{ {
if (!$as_objects) {
return $this->users; 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);
}
/** /**
* Helper function for loading data from DB. * Helper function for loading data from DB.
*/ */
...@@ -313,6 +325,26 @@ class AdmissionUserList ...@@ -313,6 +325,26 @@ class AdmissionUserList
return $this; 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 * Function for storing the data to DB. Is not called automatically on
* changing object values. * changing object values.
...@@ -353,7 +385,8 @@ class AdmissionUserList ...@@ -353,7 +385,8 @@ class AdmissionUserList
/** /**
* String representation of this object. * String representation of this object.
*/ */
public function toString() { public function toString()
{
$tpl = $GLOBALS['template_factory']->open('admission/userlist'); $tpl = $GLOBALS['template_factory']->open('admission/userlist');
$tpl->set_attribute('userlist', $this); $tpl->set_attribute('userlist', $this);
return $tpl->render(); return $tpl->render();
...@@ -364,9 +397,9 @@ class AdmissionUserList ...@@ -364,9 +397,9 @@ class AdmissionUserList
* *
* @return String * @return String
*/ */
public function __toString() { public function __toString()
{
return $this->toString(); return $this->toString();
} }
} /* end of class AdmissionUserList */ }
?>
<?php if ($userlist->getFactor() == 0) : ?> <?php
<?= _('Bei der Platzverteilung zu Veranstaltungen werden die betreffenden '. /**
'Personen nur nachrangig berücksichtigt.') ?> * @var AdmissionUserList $userlist
<?php elseif ($userlist->getFactor() == PHP_INT_MAX) : ?> */
<?= _('Bei der Platzverteilung zu Veranstaltungen werden die betreffenden '. ?>
'Personen vor allen anderen einen Platz erhalten.') ?> <?= $userlist->describe(['<b>', '</b>']) ?><br>
<?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>
<?= _('Personen auf dieser Liste:') ?> <?= _('Personen auf dieser Liste:') ?>
<?php if ($userlist->getUsers()) { ?> <? if ($userlist->getUsers()): ?>
<ul> <ul>
<?php foreach ($userlist->getUsers() as $userId => $assigned) { ?> <? foreach ($userlist->getUsers(true) as $user): ?>
<li><?= get_fullname($userId, 'full_rev', true).' ('.get_username($userId).')' ?></li> <li>
<?php } ?> <?= htmlReady($user->getFullname('full_rev')) ?>
(<?= htmlReady($user->username) ?>)
</li>
<? endforeach; ?>
</ul> </ul>
<?php } else { ?> <? else: ?>
<br> <br>
<i><?= _('Es wurde noch niemand zugeordnet.'); ?></i> <i><?= _('Es wurde noch niemand zugeordnet.'); ?></i>
<?php } ?> <? endif; ?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment