diff options
| author | Rasmus Fuhse <fuhse@data-quest.de> | 2024-12-12 09:37:16 +0000 |
|---|---|---|
| committer | Rasmus Fuhse <fuhse@data-quest.de> | 2024-12-12 10:40:41 +0100 |
| commit | 461a3f02a71432c31c66074ffa343b2c29da2791 (patch) | |
| tree | d27887c4bc0ec8d29a0c9a083834cc226ffa524a /lib/classes | |
| parent | 55ef7f67c7ec007f4ff185350c818012bed19ab9 (diff) | |
Resolve "Im Stundenplan werden veraltete Termine angezeigt"
Merge request studip/studip!3741
Diffstat (limited to 'lib/classes')
| -rw-r--r-- | lib/classes/calendar/CalendarScheduleModel.php | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/lib/classes/calendar/CalendarScheduleModel.php b/lib/classes/calendar/CalendarScheduleModel.php index b800d5e..1e8d60d 100644 --- a/lib/classes/calendar/CalendarScheduleModel.php +++ b/lib/classes/calendar/CalendarScheduleModel.php @@ -169,6 +169,19 @@ class CalendarScheduleModel $sem = new Seminar($seminar_id); foreach ($sem->getCycles() as $cycle) { + if ($semester !== false) { + $hasDatesInSemester = false; + foreach ($cycle->getSingleDates() as $singleDate) { + if (($singleDate->getStartTime() >= $semester['beginn'] && $singleDate->getStartTime() <= $semester['ende']) + || ($singleDate->getEndTime() >= $semester['beginn'] && $singleDate->getEndTime() <= $semester['ende'])) { + $hasDatesInSemester = true; + break; + } + } + if (!$hasDatesInSemester) { + continue; + } + } if (!$cycle_id || $cycle->getMetaDateID() == $cycle_id) { $entry = []; @@ -304,12 +317,22 @@ class CalendarScheduleModel $seminars = []; // get all virtually added seminars - $stmt = DBManager::get()->prepare("SELECT * FROM schedule_seminare as c - LEFT JOIN seminare as s ON (s.Seminar_id = c.Seminar_id) - LEFT JOIN semester_courses ON (semester_courses.course_id = s.Seminar_id) - WHERE c.user_id = ? AND s.start_time <= ? AND - (semester_courses.semester_id IS NULL OR semester_courses.semester_id = ?)"); - $stmt->execute([$user_id, $semester['beginn'], $semester['id']]); + $stmt = DBManager::get()->prepare("SELECT * + FROM schedule_seminare as c + INNER JOIN seminare as s ON (s.Seminar_id = c.Seminar_id) + INNER JOIN termine ON (termine.range_id = s.Seminar_id) + LEFT JOIN semester_courses ON (semester_courses.course_id = s.Seminar_id) + WHERE c.user_id = :userid + AND s.start_time <= :begin + AND (termine.`date` BETWEEN :begin AND :end OR termine.`end_time` BETWEEN :begin AND :end) + AND + (semester_courses.semester_id IS NULL OR semester_courses.semester_id = :semesterId)"); + $stmt->execute([ + ':userid' => $user_id, + ':begin' => $semester['beginn'], + ':end' => $semester['ende'], + ':semesterId' => $semester['id']] + ); while ($entry = $stmt->fetch()) { $seminars[$entry['seminar_id']] = [ @@ -320,12 +343,15 @@ class CalendarScheduleModel // fetch seminar-entries $stmt = DBManager::get()->prepare("SELECT s.Seminar_id FROM seminar_user as su LEFT JOIN seminare as s USING (Seminar_id) + INNER JOIN termine ON (termine.range_id = s.Seminar_id) LEFT JOIN semester_courses ON (semester_courses.course_id = s.Seminar_id) WHERE su.user_id = :userid AND s.start_time <= :begin + AND (termine.`date` BETWEEN :begin AND :end OR termine.`end_time` BETWEEN :begin AND :end) AND (semester_courses.semester_id IS NULL OR semester_courses.semester_id = :semester_id) "); $stmt->bindValue(':begin', $semester['beginn']); + $stmt->bindValue(':end', $semester['ende']); $stmt->bindValue(':semester_id', $semester['semester_id']); $stmt->bindValue(':userid', $user_id); $stmt->execute(); |
