= :threeMonthsAgo AND MONTH(EventDate) = :month AND YEAR(EventDate) = :year"; $params = [ ':month' => $month, ':year' => $year, ':threeMonthsAgo' => $threeMonthsAgo ]; $stmt = execute_prepared_statement($pdoWebsite, $query, $params); if ($stmt === false) { log_error("Failed to fetch events: " . $pdoWebsite->errorInfo()[2]); display_error_message(); return []; } $events = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($events as &$event) { $event['FormattedTime'] = date("g:i A", strtotime($event['EventTime'])); $event['EventDateTime'] = $event['EventDate'] . ' ' . $event['EventTime']; } return $events; } function generate_calendar($month, $year, $pdoWebsite, $threeMonthsAgo) { $events = getEvents($pdoWebsite, $month, $year, $threeMonthsAgo); $eventsByDate = []; foreach ($events as $event) { $eventDate = $event['EventDate']; if (!isset($eventsByDate[$eventDate])) { $eventsByDate[$eventDate] = []; } $eventsByDate[$eventDate][] = $event; } $dayLabels = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; $firstDayOfMonth = mktime(0, 0, 0, $month, 1, $year); $daysInMonth = date("t", $firstDayOfMonth); $firstDayOfWeek = date("w", $firstDayOfMonth); $calendar_html = '
| ' . $label . ' | '; } $calendar_html .= '|
|---|---|
| '; } for ($day = 1; $day <= $daysInMonth; $day++) { $date = sprintf('%04d-%02d-%02d', $year, $month, $day); $classes = []; $eventData = ''; if ($date == date("Y-m-d")) { $classes[] = 'today'; } if (isset($eventsByDate[$date])) { $classes[] = 'event'; $eventData = ' data-event="' . htmlspecialchars(json_encode($eventsByDate[$date]), ENT_QUOTES, 'UTF-8') . '"'; } $classString = !empty($classes) ? ' class="' . implode(' ', $classes) . '"' : ''; $calendar_html .= ' | ' . $day;
if (isset($eventsByDate[$date])) {
$calendar_html .= ' ';
foreach ($eventsByDate[$date] as $event) {
$calendar_html .= ' ';
}
$calendar_html .= '' . $event['EventName'] . ' '; } $calendar_html .= ' | ';
if (($firstDayOfWeek + $day) % 7 == 0) {
$calendar_html .= '
| '; } $calendar_html .= ' |