From b3e8c24e1452e85c4d408fd3838b352e58a7c141 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Fri, 18 Oct 2024 08:37:47 +0000 Subject: [PATCH] ensure dates belong to course, fixes #4530 Closes #4530 Merge request studip/studip!3509 --- app/controllers/course/timesrooms.php | 34 ++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/controllers/course/timesrooms.php b/app/controllers/course/timesrooms.php index 3d55469a8c3..52fa6fff317 100644 --- a/app/controllers/course/timesrooms.php +++ b/app/controllers/course/timesrooms.php @@ -771,7 +771,8 @@ class Course_TimesroomsController extends AuthenticatedController public function stack_action($cycle_id = '') { $_SESSION['_checked_dates'] = Request::optionArray('single_dates'); - if (empty($_SESSION['_checked_dates']) && isset($_SESSION['_checked_dates'])) { + $_SESSION['_checked_dates'] = $this->validateDateIds($_SESSION['_checked_dates']); + if (count($_SESSION['_checked_dates']) === 0) { PageLayout::postError(_('Sie haben keine Termine ausgewählt!')); $this->redirect('course/timesrooms/index', ['contentbox_open' => $cycle_id]); @@ -1874,4 +1875,35 @@ class Course_TimesroomsController extends AuthenticatedController } } } + + private function validateDateIds(array $date_ids): array + { + if (count($date_ids) === 0) { + return []; + } + + $valid = []; + + CourseDate::findEachBySQL( + function (CourseDate $date) use (&$valid) { + if ($date->range_id === $this->course_id) { + $valid[] = $date->id; + } + }, + 'range_id = ? AND termin_id IN (?)', + [$this->course->id, $date_ids] + ); + + CourseExDate::findEachBySQL( + function (CourseExDate $date) use (&$valid) { + if ($date->range_id === $this->course_id) { + $valid[] = $date->id; + } + }, + 'range_id = ? AND termin_id IN (?)', + [$this->course->id, $date_ids] + ); + + return $valid; + } } -- GitLab