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 @@
* @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());
}
/**
......
<?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
"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">
......
<?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
/**
* 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;
}
$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.
*/
......@@ -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 */
?>
}
<?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; ?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment