/** * A function to generate month view of a set of events * @param array $day day to show * @param integer $month month to show * @param integer $year year to show * @param array $weekdaynames * @return object with `count` attribute containing the number of associated events with the item */ public static function month_calendar($day, $month, $year) { global $uid, $langDay_of_weekNames, $langMonthNames, $langToday, $langDay, $langWeek, $langMonth, $langView; $calendar_content = ""; //Handle leap year $numberofdays = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if ($year % 400 == 0 or $year % 4 == 0 and $year % 100 != 0) { $numberofdays[2] = 29; } $eventlist = Calendar_Events::get_calendar_events("month", "{$year}-{$month}-{$day}"); $events = array(); if ($eventlist) { foreach ($eventlist as $event) { $eventday = new DateTime($event->startdate); $eventday = $eventday->format('j'); if (!array_key_exists($eventday, $events)) { $events[$eventday] = array(); } array_push($events[$eventday], $event); } } //Get the first day of the month $dayone = getdate(mktime(0, 0, 0, $month, 1, $year)); //Start the week on monday $startdayofweek = $dayone['wday'] != 0 ? $dayone['wday'] - 1 : 6; $backward = array('month' => $month == 1 ? 12 : $month - 1, 'year' => $month == 1 ? $year - 1 : $year); $foreward = array('month' => $month == 12 ? 1 : $month + 1, 'year' => $month == 12 ? $year + 1 : $year); $calendar_content .= '<div class="right" style="width:100%">' . $langView . ': ' . '<a href="#" onclick="show_day(selectedday, selectedmonth, selectedyear);return false;">' . $langDay . '</a> | ' . '<a href="#" onclick="show_week(selectedday, selectedmonth, selectedyear);return false;">' . $langWeek . '</a> | ' . '<a href="#" onclick="show_month(selectedday, selectedmonth, selectedyear);return false;">' . $langMonth . '</a></div>'; $calendar_content .= '<table width=100% class="title1">'; $calendar_content .= "<tr>"; $calendar_content .= '<td width="250"><a href="#" onclick="show_month(1,' . $backward['month'] . ',' . $backward['year'] . '); return false;">«</a></td>'; $calendar_content .= "<td class='center'><b>{$langMonthNames['long'][$month - 1]} {$year}</b></td>"; $calendar_content .= '<td width="250" class="right"><a href="#" onclick="show_month(1,' . $foreward['month'] . ',' . $foreward['year'] . '); return false;">»</a></td>'; $calendar_content .= "</tr>"; $calendar_content .= "</table><br />"; $calendar_content .= "<table class='table-default'><tr>"; for ($ii = 1; $ii < 8; $ii++) { $calendar_content .= "<th class='center'>" . $langDay_of_weekNames['long'][$ii % 7] . "</th>"; } $calendar_content .= "</tr>"; $curday = -1; $today = getdate(); while ($curday <= $numberofdays[$month]) { $calendar_content .= "<tr>"; for ($ii = 0; $ii < 7; $ii++) { if ($curday == -1 && $ii == $startdayofweek) { $curday = 1; } if ($curday > 0 && $curday <= $numberofdays[$month]) { $bgcolor = $ii < 5 ? "class='alert alert-danger'" : "class='odd'"; $dayheader = "{$curday}"; $class_style = "class=odd"; if ($curday == $today['mday'] && $year == $today['year'] && $month == $today['mon']) { $dayheader = "<b>{$curday}</b> <small>({$langToday})</small>"; $class_style = "class='today'"; } $calendar_content .= "<td height=50 width=14% valign=top {$class_style}><b>{$dayheader}</b>"; $thisDayItems = ""; if (array_key_exists($curday, $events)) { foreach ($events[$curday] as $ev) { $thisDayItems .= Calendar_Events::month_calendar_item($ev, Calendar_Events::$calsettings->{$ev->event_group . "_color"}); } $calendar_content .= "{$thisDayItems}</td>"; } $curday++; } else { $calendar_content .= "<td width=14%> </td>"; } } $calendar_content .= "</tr>"; } $calendar_content .= "</table>"; /* Legend */ $calendar_content .= Calendar_Events::calendar_legend(); /*************************************** Bootstrap calendar ******************************************************/ $calendar_content .= '<div id="bootstrapcalendar"></div>'; return $calendar_content; }