From 07c4c7d2a3f0fc45ddc7c611aca9863e599b84f7 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Thu, 22 Aug 2024 07:50:13 +0000 Subject: [PATCH] user admin: allow searching for matriculation number and add matriculation number to export, fixes #4497 Closes #4497 Merge request studip/studip!3289 --- app/controllers/admin/user.php | 38 +++++++++++++++++++--------------- app/views/admin/user/index.php | 9 ++++++-- lib/models/User.class.php | 5 +++++ 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/app/controllers/admin/user.php b/app/controllers/admin/user.php index d60a3879bf0..a9a04cfd354 100644 --- a/app/controllers/admin/user.php +++ b/app/controllers/admin/user.php @@ -100,11 +100,12 @@ class Admin_UserController extends AuthenticatedController } } - $request['username'] = trim($request['username']); - $request['email'] = trim($request['email']); - $request['vorname'] = trim($request['vorname']); - $request['nachname'] = trim($request['nachname']); - $request['inaktiv'] = $inaktiv; + $request['username'] = trim($request['username']); + $request['email'] = trim($request['email']); + $request['matriculation_number'] = trim($request['matriculation_number']); + $request['vorname'] = trim($request['vorname']); + $request['nachname'] = trim($request['nachname']); + $request['inaktiv'] = $inaktiv; $request['datafields'] = $search_datafields; $_SESSION['admin']['user'] = $request; @@ -135,6 +136,7 @@ class Admin_UserController extends AuthenticatedController 'vorname', 'nachname', 'email', + 'matriculation_number', 'inaktiv', 'locked', 'show_only_not_lectures', @@ -162,16 +164,16 @@ class Admin_UserController extends AuthenticatedController PageLayout::postInfo(_('Sie haben keine Suchkriterien ausgewählt!')); } elseif (count($this->users) < 1 && Request::submitted('search')) { PageLayout::postInfo(_('Es wurden keine Personen mit diesen Suchkriterien gefunden.')); - } else { + } elseif (!Request::submitted('export')) { $_SESSION['admin']['user']['results'] = true; PageLayout::postInfo(sprintf(_('Es wurden %s Personen mit diesen Suchkriterien gefunden.'), count($this->users))); } if (is_array($this->users) && Request::submitted('export')) { - $tmpname = md5(uniqid('tmp')); $captions = ['username', 'vorname', 'nachname', 'email', + 'matriculation_number', 'status', 'authentifizierung', 'domänen', @@ -189,11 +191,12 @@ class Admin_UserController extends AuthenticatedController $u['Vorname'], $u['Nachname'], $u['Email'], + $u['matriculation_number'], $u['perms'], $u['auth_plugin'], - join(';', $userdomains), + implode(';', $userdomains), $u['mkdate'] ? strftime('%x', $u['mkdate']) : '', - $u->online->last_lifesign ? strftime('%x', $u->online->last_lifesign) : '' + isset($u->online->last_lifesign) ? strftime('%x', $u->online->last_lifesign) : '' ]; foreach ($this->datafields as $datafield) { $df = new DatafieldEntryModel( @@ -207,14 +210,15 @@ class Admin_UserController extends AuthenticatedController } return $data; }; - if (array_to_csv(array_map($mapper, $this->users), $GLOBALS['TMP_PATH'] . '/' . $tmpname, $captions)) { - $this->redirect( - FileManager::getDownloadURLForTemporaryFile( - $tmpname, - 'nutzer-export.csv' - ) - ); - } + + $this->render_csv( + array_merge( + [$captions], + array_map($mapper, $this->users), + ), + 'nutzer-export.csv' + ); + return; } } diff --git a/app/views/admin/user/index.php b/app/views/admin/user/index.php index 77c6937771f..2470428a225 100644 --- a/app/views/admin/user/index.php +++ b/app/views/admin/user/index.php @@ -21,16 +21,21 @@ use Studip\Button; <fieldset> <legend><?= _('Benutzerverwaltung') ?></legend> - <label class="col-3"> + <label class="col-2"> <?= _('Benutzername') ?> <input name="username" type="text" value="<?= htmlReady($request['username'] ?? '') ?>"> </label> - <label class="col-3"> + <label class="col-2"> <?= _('E-Mail') ?> <input name="email" type="text" value="<?= htmlReady($request['email'] ?? '') ?>"> </label> + <label class="col-2"> + <?= _('Matrikelnummer') ?> + <input name="matriculation_number" type="text" value="<?= htmlReady($request['matriculation_number'] ?? '') ?>"> + </label> + <label class="col-3"> <?= _('Vorname') ?> <input name="vorname" type="text" value="<?= htmlReady($request['vorname'] ?? '') ?>"> diff --git a/lib/models/User.class.php b/lib/models/User.class.php index c51d38fa0f8..c0254e32a24 100644 --- a/lib/models/User.class.php +++ b/lib/models/User.class.php @@ -432,6 +432,11 @@ class User extends AuthUserMd5 implements Range, PrivacyObject, Studip\Calendar\ $params[':email'] = self::searchParam($attributes['email']); } + if (!empty($attributes['matriculation_number'])) { + $where[] = "au.`matriculation_number` LIKE :matriculation_number"; + $params[':matriculation_number'] = self::searchParam($attributes['matriculation_number']); + } + //permissions if (!empty($attributes['perm']) && $attributes['perm'] !== 'alle') { $where[] = "au.`perms` = :perms"; -- GitLab