From 0565945451e03b65cdb14be8a210a4d9a2213926 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Tue, 2 May 2023 14:26:44 +0000 Subject: [PATCH] allow forcing of 'manual auto insert', fixes #2576 Closes #2576 Merge request studip/studip!1735 --- app/controllers/admin/autoinsert.php | 16 ++++++---- app/views/admin/autoinsert/manual.php | 45 +++++++++++++++++++-------- lib/classes/AutoInsert.class.php | 11 +++---- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/app/controllers/admin/autoinsert.php b/app/controllers/admin/autoinsert.php index 70464e17d58..f89979555ad 100644 --- a/app/controllers/admin/autoinsert.php +++ b/app/controllers/admin/autoinsert.php @@ -149,14 +149,17 @@ class Admin_AutoinsertController extends AuthenticatedController $this->seminar_search = []; PageLayout::setTitle(_('Manuelles Eintragen von Nutzergruppen in Veranstaltungen')); - if (Request::submitted('submit')) { + if (Request::submittedSome('submit', 'force')) { $filters = array_filter(Request::getArray('filter')); - if (!Request::get('sem_id') || Request::get('sem_id') == 'false') { + $force = Request::bool('force', false); + $seminar_id = Request::option('sem_id'); + + if (!$seminar_id || $seminar_id === 'false') { PageLayout::postError(_('Ungültiger Aufruf')); } elseif (!count($filters)) { PageLayout::postError(_('Keine Filterkriterien gewählt')); } else { - $seminar = Seminar::GetInstance(Request::option('sem_id')); + $seminar = Seminar::GetInstance($seminar_id); $userlookup = new UserLookup(); foreach ($filters as $type => $values) { @@ -166,9 +169,9 @@ class Admin_AutoinsertController extends AuthenticatedController $real_users = 0; foreach ($user_ids as $user_id) { - if (!AutoInsert::checkAutoInsertUser(Request::option('sem_id'), $user_id)) { - $seminar->addMember($user_id); - $real_users += AutoInsert::saveAutoInsertUser(Request::option('sem_id'), $user_id); + if ($force || !AutoInsert::checkAutoInsertUser($seminar_id, $user_id)) { + $real_users += $seminar->addMember($user_id) ? 1 : 0; + AutoInsert::saveAutoInsertUser($seminar_id, $user_id); } } @@ -192,6 +195,7 @@ class Admin_AutoinsertController extends AuthenticatedController } $this->redirect('admin/autoinsert/manual'); + return; } } diff --git a/app/views/admin/autoinsert/manual.php b/app/views/admin/autoinsert/manual.php index c06454830a8..dd0f834bdde 100644 --- a/app/views/admin/autoinsert/manual.php +++ b/app/views/admin/autoinsert/manual.php @@ -134,6 +134,25 @@ </tr> </tbody> <? endif ?> + <thead> + <tr> + <th colspan="3"><?= _('Einstellungen') ?></th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="3"> + <label> + <input type="checkbox" name="force" value="1"> + <?= _('Eintragung forcieren') ?> + <?= tooltipIcon(implode("\n", [ + _('Über diese Einstellung kann forciert werden, dass alle gefundenen Personen in die Veranstaltung eingetragen werden.'), + _('Ansonsten werden nur die Personen eingetragen, die bislang noch nicht über diesen Mechanismus eingetragen wurden.'), + ])) ?> + </label> + </td> + </tr> + </tbody> <tfoot> <tr> <td colspan="3"> @@ -157,20 +176,20 @@ if (!$(this).next().length || !$(this).next().is('span')) { $(this).after($('<span id="autoinsert_count" style="vertical-align: middle;"/>')); } - $.getJSON('<?= $controller->manual_count() ?>', - $(this).closest('form').serializeArray(), - function (json) { - var result = ""; - if (!json || json.error) { - result = '<?= _('Fehler') ?>: '; - result += json.error || '<?= _('Fehler bei der Übertragung') ?>'; - } else { - result = '<?= _('Gefundene Nutzer') ?>: '; - result += "<strong>" + json.users + "</strong>"; - } - $('#autoinsert_count').html(result); + $.getJSON( + '<?= $controller->manual_count() ?>', + $(this).closest('form').serializeArray() + ).done(function (json) { + let result = ''; + if (!json || json.error) { + result = '<?= _('Fehler') ?>: '; + result += json.error || '<?= _('Fehler bei der Übertragung') ?>'; + } else { + result = '<?= _('Gefundene Personen') ?>: '; + result += "<strong>" + json.users + "</strong>"; } - ); + $('#autoinsert_count').html(' ' + result); + }); event.preventDefault(); }); $('input[name^=remove_filter]').click(function (event) { diff --git a/lib/classes/AutoInsert.class.php b/lib/classes/AutoInsert.class.php index 417e6ffa518..fd0f7bba3c0 100644 --- a/lib/classes/AutoInsert.class.php +++ b/lib/classes/AutoInsert.class.php @@ -313,12 +313,11 @@ class AutoInsert */ public static function saveAutoInsertUser($seminar_id, $user_id) { - $query = "INSERT INTO auto_insert_user (Seminar_id, user_id, mkdate) - SELECT ?, user_id, UNIX_TIMESTAMP() FROM auth_user_md5 WHERE - user_id=? AND perms NOT IN('root','admin')"; - $statement = DBManager::get()->prepare($query); - $statement->execute([$seminar_id, $user_id]); - return $statement->rowCount(); + $query = "INSERT IGNORE INTO auto_insert_user (Seminar_id, user_id, mkdate) + SELECT ?, user_id, UNIX_TIMESTAMP() + FROM auth_user_md5 + WHERE user_id = ? AND perms NOT IN ('root','admin')"; + return DBManager::get()->execute($query, [$seminar_id, $user_id]); } /** -- GitLab