From b54ea35f36b02de8b260e41073de6cb24c653e0b Mon Sep 17 00:00:00 2001 From: Thomas Hackl Date: Mon, 23 May 2022 16:31:33 +0200 Subject: handle entry deletion, re #688 --- app/controllers/admin/autoinsert.php | 19 ++++++++------- app/views/admin/autoinsert/index.php | 10 ++++---- lib/classes/AutoInsert.class.php | 28 +++++++++++++--------- .../assets/javascripts/bootstrap/autoinsert.js | 1 - 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/app/controllers/admin/autoinsert.php b/app/controllers/admin/autoinsert.php index c1efb00..5d3d7fb 100644 --- a/app/controllers/admin/autoinsert.php +++ b/app/controllers/admin/autoinsert.php @@ -63,8 +63,6 @@ class Admin_AutoinsertController extends AuthenticatedController } else if ($group == 'by_type') { } - PageLayout::postInfo('
' . print_r($this->auto_sems, 1) . '
'); - $this->range_types = AutoInsert::getRangeTypes(); $this->grouping = $group; @@ -108,7 +106,6 @@ class Admin_AutoinsertController extends AuthenticatedController public function new_action() { if (Request::submitted('anlegen')) { - PageLayout::postInfo('
' . print_r(Request::getInstance(), 1) . '
'); $sem_id = Request::option('sem_id'); $entries = Request::getArray('rechte'); @@ -192,14 +189,18 @@ class Admin_AutoinsertController extends AuthenticatedController * * @param string $seminar_id */ - public function delete_action($seminar_id) + public function delete_action($seminar_id, $type, $range_id) { - if (Request::int('delete') === 1) { - if (AutoInsert::deleteSeminar($seminar_id)) { - PageLayout::postSuccess(_('Die Zuordnung der Veranstaltung wurde gelöscht!')); + if (!Request::get('back')) { + if (Request::int('delete') === 1) { + if (AutoInsert::deleteSeminar($seminar_id, $type, $range_id)) { + PageLayout::postSuccess(_('Die Zuordnung der Veranstaltung wurde gelöscht!')); + } + } else { + $this->flash['course'] = $seminar_id; + $this->flash['type'] = $type; + $this->flash['range'] = $range_id; } - } elseif (!Request::get('back')) { - $this->flash['delete'] = $seminar_id; } $this->redirect('admin/autoinsert'); } diff --git a/app/views/admin/autoinsert/index.php b/app/views/admin/autoinsert/index.php index 1d2abf0..59029de 100644 --- a/app/views/admin/autoinsert/index.php +++ b/app/views/admin/autoinsert/index.php @@ -3,11 +3,11 @@ use Studip\Button, Studip\LinkButton; ?> - + deleteURL($flash['delete'], ['delete' => 1]), - $controller->deleteURL($flash['delete'], ['back' => 1]) + $controller->deleteURL($flash['course'], $flash['type'], $flash['range'], ['delete' => 1]), + $controller->deleteURL($flash['course'], $flash['type'], $flash['range'], ['back' => 1]) ) ?>
@@ -91,7 +91,7 @@ use Studip\Button, Studip\LinkButton; $types): ?> - + $courses): ?> @@ -114,7 +114,7 @@ use Studip\Button, Studip\LinkButton; - + query($query); + $statement = DBManager::get()->query($query); $results = $statement->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $result) { @@ -197,21 +198,21 @@ class AutoInsert { $cached = self::getSeminarCache(); - if (!isset($cached[$seminar_id])) { - $query = "SELECT range_id, 1 - FROM auto_insert_sem - WHERE seminar_id = ? AND range_type = ?"; - $cached[$seminar_id] = DBManager::get()->fetchGroupedPairs( + if (!isset($cached[$seminar_id][$range_type][$range_id])) { + $query = "SELECT `range_id`, 1 + FROM `auto_insert_sem` + WHERE `seminar_id` = :course AND `range_type` = :type AND `range_id` = :range"; + $cached[$seminar_id][$range_type][$range_id] = DBManager::get()->fetchGroupedPairs( $query, - [$seminar_id, $range_type], + ['course' => $seminar_id, 'type' => $range_type, 'range' => $range_id], function ($value) { return (bool) $value; } ); } - return array_key_exists($domain_id ?: '', $cached[$seminar_id]) - ? $cached[$seminar_id][$domain_id ?: ''] + return array_key_exists($range_id ?: '', $cached[$seminar_id]) + ? $cached[$seminar_id][$range_id ?: ''] : false; } @@ -255,14 +256,19 @@ class AutoInsert /** * Removes a seminar from the autoinsertion process. * @param string $seminar_id Id of the seminar + * @param string $type which type of assignment to delete? + * @param string $range_id Id of the range this seminar is assigned to */ - public static function deleteSeminar($seminar_id) + public static function deleteSeminar($seminar_id, $type, $range_id) { - $query = "DELETE FROM auto_insert_sem WHERE seminar_id = ?"; + $query = "DELETE FROM `auto_insert_sem` WHERE `seminar_id` = :course + AND `range_type` = :type AND `range_id` = :range"; $statement = DBManager::get()->prepare($query); - $statement->execute([$seminar_id]); + $result = $statement->execute(['course' => $seminar_id, 'type' => $type, 'range' => $range_id]); unset(self::getSeminarCache()[$seminar_id]); + + return $result !== false; } /** diff --git a/resources/assets/javascripts/bootstrap/autoinsert.js b/resources/assets/javascripts/bootstrap/autoinsert.js index 8e2455a..28ebc0f 100644 --- a/resources/assets/javascripts/bootstrap/autoinsert.js +++ b/resources/assets/javascripts/bootstrap/autoinsert.js @@ -1,4 +1,3 @@ -/*global jQuery, STUDIP */ STUDIP.domReady(() => { STUDIP.Autoinsert.init(); }); -- cgit v1.0