From c52190436a7501f511e37959825dde36c457f701 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 11 Jan 2026 14:32:24 +0000 Subject: [PATCH] =?UTF-8?q?Naprawiona=20wi=C4=99kszo=C5=9B=C4=87=20mechani?= =?UTF-8?q?zm=C3=B3w=20przed=20spotkaniami?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WorkflowEngine.php | 31 ++++++++++++++++++++++++------- index.php | 46 +++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 67 insertions(+), 10 deletions(-) diff --git a/WorkflowEngine.php b/WorkflowEngine.php index db5ed98..245033a 100644 --- a/WorkflowEngine.php +++ b/WorkflowEngine.php @@ -134,15 +134,32 @@ class WorkflowEngine { // 7. Fetch Spotkania columns (upcoming meetings) $today = date('Y-m-d H:i:s'); $stmt_meetings = $this->pdo->prepare(" - SELECT bni_groups.id as group_id, bni_groups.name as group_name, MIN(calendar_events.start_datetime) as next_meeting_date - FROM bni_groups - LEFT JOIN calendar_event_groups ON bni_groups.id = calendar_event_groups.bni_group_id - LEFT JOIN calendar_events ON calendar_event_groups.calendar_event_id = calendar_events.id AND calendar_events.start_datetime >= :today - GROUP BY bni_groups.id - ORDER BY bni_groups.name + WITH RankedMeetings AS ( + SELECT + bg.id as group_id, + bg.name as group_name, + ce.start_datetime, + ROW_NUMBER() OVER(PARTITION BY bg.id ORDER BY ce.start_datetime) as rn + FROM bni_groups bg + JOIN calendar_event_groups ceg ON bg.id = ceg.bni_group_id + JOIN calendar_events ce ON ceg.calendar_event_id = ce.id + WHERE ce.start_datetime >= :today + ) + SELECT group_id, group_name, start_datetime + FROM RankedMeetings + WHERE rn <= 3 + ORDER BY group_id, start_datetime; "); $stmt_meetings->execute(['today' => $today]); - $spotkania_cols = $stmt_meetings->fetchAll(PDO::FETCH_ASSOC); + $upcoming_meetings_flat = $stmt_meetings->fetchAll(PDO::FETCH_ASSOC); + + $spotkania_cols = []; + foreach ($upcoming_meetings_flat as $meeting) { + $spotkania_cols[$meeting['group_id']]['group_id'] = $meeting['group_id']; + $spotkania_cols[$meeting['group_id']]['group_name'] = $meeting['group_name']; + $spotkania_cols[$meeting['group_id']]['meetings'][] = $meeting['start_datetime']; + } + return [ 'people' => $people, diff --git a/index.php b/index.php index 2daba49..2d791a6 100644 --- a/index.php +++ b/index.php @@ -124,9 +124,15 @@ $status_colors = [ - -
- + '> +
+ +
+
+ +
+ +
@@ -711,7 +717,41 @@ document.addEventListener('DOMContentLoaded', function () { editMemberOnlyFields.style.display = isMember ? 'block' : 'none'; }); + // Meeting navigation + document.querySelectorAll('[data-group-id]').forEach(function(headerCell) { + let meetings = JSON.parse(headerCell.dataset.meetings); + let currentIndex = 0; + let dateElement = headerCell.querySelector('.meeting-date'); + let prevBtn = headerCell.querySelector('.meeting-prev-btn'); + let nextBtn = headerCell.querySelector('.meeting-next-btn'); + function updateDate() { + if (meetings.length > 0) { + let date = new Date(meetings[currentIndex]); + dateElement.textContent = date.toLocaleDateString('pl-PL', { day: '2-digit', month: '2-digit', year: 'numeric' }); + } else { + dateElement.textContent = 'Brak'; + } + prevBtn.disabled = currentIndex === 0; + nextBtn.disabled = currentIndex === meetings.length - 1; + } + + prevBtn.addEventListener('click', function() { + if (currentIndex > 0) { + currentIndex--; + updateDate(); + } + }); + + nextBtn.addEventListener('click', function() { + if (currentIndex < meetings.length - 1) { + currentIndex++; + updateDate(); + } + }); + + updateDate(); + }); });