From 8322ed65e997c3db550ceb76944361d4061b854f Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Tue, 14 Dec 2021 17:08:35 +0000
Subject: [PATCH] fixed display of semester week, hide semester outside lecture
 period, re #453

---
 .../resources/room_planning/booking_plan.php  |  4 +-
 app/views/room_management/planning/index.php  | 18 +++----
 .../assets/javascripts/lib/fullcalendar.js    | 15 +++---
 resources/assets/javascripts/lib/resources.js | 52 +++++++++++--------
 4 files changed, 49 insertions(+), 40 deletions(-)

diff --git a/app/views/resources/room_planning/booking_plan.php b/app/views/resources/room_planning/booking_plan.php
index 5792a2a2abc..0c2944ada7d 100644
--- a/app/views/resources/room_planning/booking_plan.php
+++ b/app/views/resources/room_planning/booking_plan.php
@@ -8,8 +8,7 @@
     } ?>
 
     <section id="booking_plan_header"
-             class="studip-fullcalendar-header booking-plan-header"
-             data-semester-begin="" data-semester-end="">
+             class="studip-fullcalendar-header booking-plan-header">
             <span id="booking-plan-header-resource-name-line">
                 <? if ($resource instanceof Room) : ?>
                     <?= htmlReady($resource->name) ?>
@@ -23,6 +22,7 @@
                     <strong>
                         <span id="booking-plan-header-semname"></span>
                         <span id="booking-plan-header-semweek-part">
+                            <?= _('Vorlesungswoche') ?>
                             <span id="booking-plan-header-semweek"></span>
                         </span>
                     </strong>
diff --git a/app/views/room_management/planning/index.php b/app/views/room_management/planning/index.php
index 321d3a6af7d..f42f8a00775 100644
--- a/app/views/room_management/planning/index.php
+++ b/app/views/room_management/planning/index.php
@@ -14,22 +14,22 @@
         $min_time = Config::get()->RESOURCES_BOOKING_PLAN_START_HOUR . ':00';
         $max_time = Config::get()->RESOURCES_BOOKING_PLAN_END_HOUR . ':00';
     } ?>
-    <section class="studip-fullcalendar-header booking-plan-header"
-             data-semester-begin="" data-semester-end="">
+    <section class="studip-fullcalendar-header booking-plan-header">
         <div>
             <?= _('Raumgruppe') ?>
             <span id="booking-plan-header-roomgroup"><?= htmlReady($clipboard->name) ?></span>
-            <span id="booking-plan-header-semrow">
-                <strong>
-                    <?= _('KW') ?>
-                    <span id="booking-plan-header-calweek"></span>
-                    (<span id="booking-plan-header-calbegin"></span>)
+            <strong>
+                <?= _('KW') ?>
+                <span id="booking-plan-header-calweek"></span>
+                (<span id="booking-plan-header-calbegin"></span>)
+                <span id="booking-plan-header-semrow">
                     <span id="booking-plan-header-semname"></span>
                     <span id="booking-plan-header-semweek-part">
+                        <?= _('Vorlesungswoche') ?>
                         <span id="booking-plan-header-semweek"></span>
                     </span>
-                </strong>
-            </span>
+                </span>
+            </strong>
         </div>
     </section>
 
diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js
index c6b1b5d734a..0d9d0f1b8c4 100644
--- a/resources/assets/javascripts/lib/fullcalendar.js
+++ b/resources/assets/javascripts/lib/fullcalendar.js
@@ -547,16 +547,19 @@ class Fullcalendar
 
                 if ($('.booking-plan-header').length) {
                     end.setDate(end.getDate());
-                    var sem_start = $('.booking-plan-header').data('semester-begin');
-                    var sem_end = $('.booking-plan-header').data('semester-end');
+                    let semester = $('.booking-plan-header').data('semester');
+                    let sem_start = null;
+                    let sem_end = null;
+                    if (semester) {
+                        sem_start = semester.seminars_begin;
+                        sem_end = semester.seminars_end;
+                    }
 
                     if (sem_start && (start.getTime() / 1000 < sem_start || start.getTime() / 1000 > sem_end)) {
                         sem_start = null;
                         sem_end = null;
-                    } else if(sem_start) {
-                        var sem_week = Math.floor((end.getTime() / 1000 - 10800 - sem_start) / (7 * 24 * 60 * 60)) + 1;
-                        $("#booking-plan-header-semweek-part").text("Vorlesungswoche".toLocaleString());
-                        $('#booking-plan-header-semweek').text(sem_week);
+                    } else if (sem_start) {
+                        STUDIP.Resources.updateBookingPlanDateInfos(activeRange.start, activeRange.end, semester);
                     }
                     $('#booking-plan-header-calweek').text(start.getWeekNumber());
                     $('#booking-plan-header-calbegin').text(start.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + start.toLocaleDateString('de-DE'));
diff --git a/resources/assets/javascripts/lib/resources.js b/resources/assets/javascripts/lib/resources.js
index 126a55ebc2e..417eb172324 100644
--- a/resources/assets/javascripts/lib/resources.js
+++ b/resources/assets/javascripts/lib/resources.js
@@ -709,49 +709,55 @@ class Resources
 
 
     static updateBookingPlanSemesterByView(activeRange, api_url = 'api.php/semesters') {
-        var semester = null;
+        let semester = null;
         jQuery.ajax(
             STUDIP.URLHelper.getURL(api_url),
             {
                 method: 'get',
                 dataType: 'json',
-                success: function(data) {
+                success: function (data) {
                     if (data) {
-                        var start = activeRange.start;
-                        var end = activeRange.end;
                         Object.values(data.collection).forEach(item => {
-                            if (start.getTime()/1000 >= item.seminars_begin && start.getTime()/1000 < item.seminars_end) {
+                            if (activeRange.start.getTime() / 1000 >= item.begin && activeRange.start.getTime() / 1000 < item.end) {
                                 semester = item;
                             }
                         });
-                        if (semester) {
-                            $(".booking-plan-header")
-                                .data('semester-begin', semester.seminars_begin)
-                                .data('semester-end', semester.seminars_end);
-                            $("#booking-plan-header-semrow").show();
-                            $("#booking-plan-header-semname").text(semester.title);
-                            var sem_week = Math.floor((end.getTime()/1000 - 10800 - semester.seminars_begin) / 604800)+1;
-                            $("#booking-plan-header-semweek-part").text("Vorlesungswoche".toLocaleString());
-                            $("#booking-plan-header-semweek").text(sem_week);
-                        } else {
+                        if (!semester) {
                             if (data.pagination && data.pagination.links && data.pagination.links.next != api_url) {
                                 semester = STUDIP.Resources.updateBookingPlanSemesterByView(activeRange, data.pagination.links.next);
-                            } else {
-                                $(".booking-plan-header")
-                                    .data('semester-begin', '')
-                                    .data('semester-end', '');
                             }
                         }
-
-                        $('#booking-plan-header-calweek').text(start.getWeekNumber());
-                        $('#booking-plan-header-calbegin').text(start.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + start.toLocaleDateString('de-DE'));
-                        $('#booking-plan-header-calend').text(end.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + end.toLocaleDateString('de-DE'));
                     }
+                    STUDIP.Resources.updateBookingPlanDateInfos(activeRange.start, activeRange.end, semester);
                 }
             }
         );
     }
 
+    static updateBookingPlanDateInfos(plan_begin, plan_end, semester = null)
+    {
+        if (semester) {
+            let show_lecture_week = plan_begin.getTime()/1000 >= semester.seminars_begin && plan_begin.getTime()/1000 < semester.seminars_end;
+            $(".booking-plan-header").data('semester', semester);
+            $("#booking-plan-header-semname").text(semester.title);
+            if (show_lecture_week) {
+                let sem_week = Math.floor((plan_end.getTime() / 1000 - 10800 - semester.seminars_begin) / 604800) + 1;
+                $("#booking-plan-header-semweek").text(sem_week);
+                $("#booking-plan-header-semweek-part").show();
+            } else {
+                $("#booking-plan-header-semweek-part").hide();
+            }
+            $("#booking-plan-header-semrow").show();
+        } else {
+            $(".booking-plan-header").data('semester', null);
+            $('#booking-plan-header-semrow').hide();
+        }
+
+        $('#booking-plan-header-calweek').text(plan_begin.getWeekNumber());
+        $('#booking-plan-header-calbegin').text(plan_begin.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + plan_begin.toLocaleDateString('de-DE'));
+        $('#booking-plan-header-calend').text(plan_end.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + plan_end.toLocaleDateString('de-DE'));
+    }
+
 
     static toggleRequestMarked(source_node)
     {
-- 
GitLab