format('t'); $dayOfWeek = $firstDayOfMonth->format('N'); // 1 (for Monday) through 7 (for Sunday) // Get events for the current month $pdo = db(); $stmt = $pdo->prepare("SELECT c.*, t.name as type_name, t.color as type_color, GROUP_CONCAT(g.name SEPARATOR ', ') as group_names FROM calendar_events c LEFT JOIN event_types t ON c.event_type_id = t.id LEFT JOIN calendar_event_groups ceg ON c.id = ceg.calendar_event_id LEFT JOIN bni_groups g ON ceg.bni_group_id = g.id WHERE MONTH(c.start_datetime) = ? AND YEAR(c.start_datetime) = ? GROUP BY c.id ORDER BY c.start_datetime ASC"); $stmt->execute([$month, $year]); $events = $stmt->fetchAll(PDO::FETCH_ASSOC); $eventsByDay = []; foreach ($events as $event) { $day = (new DateTime($event['start_datetime']))->format('j'); if (!isset($eventsByDay[$day])) { $eventsByDay[$day] = []; } $eventsByDay[$day][] = $event; } // Get event types for the modal $stmt_types = $pdo->query("SELECT * FROM event_types ORDER BY display_order"); $event_types = $stmt_types->fetchAll(PDO::FETCH_ASSOC); // Get BNI groups for the modal $stmt_groups = $pdo->query("SELECT * FROM bni_groups ORDER BY display_order"); $bni_groups = $stmt_groups->fetchAll(PDO::FETCH_ASSOC); $prevMonth = $month == 1 ? 12 : $month - 1; $prevYear = $month == 1 ? $year - 1 : $year; $nextMonth = $month == 12 ? 1 : $month + 1; $nextYear = $month == 12 ? $year + 1 : $year; ?>

format('F')), $firstDayOfMonth->format('F')) . ' ' . $firstDayOfMonth->format('Y'); ?>

"; } $currentDay = 1; while ($currentDay <= $daysInMonth) { if ($dayOfWeek > 7) { $dayOfWeek = 1; echo ""; } echo ""; $currentDay++; $dayOfWeek++; } // Print remaining empty cells while ($dayOfWeek <= 7) { echo ""; $dayOfWeek++; } ?>
"; echo "$currentDay"; if (isset($eventsByDay[$currentDay])) { echo "
    "; foreach ($eventsByDay[$currentDay] as $event) { echo '
  • ' . htmlspecialchars($event['title']); if (!empty($event['group_names'])) { echo '
    (' . htmlspecialchars($event['group_names']) . ')'; } echo "
  • "; } echo "
"; } echo "