12 || $month < 1) return ""; return [ "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" ][$month - 1]; } /** * Returns the short name of a day of week * * @param int $day_of_week DoW index, 1 to 7 * * @return string Day of week name * @return string Blank string if invalid DoW was given */ function getLocalizedShortDayName ($day_of_week) { if ($day_of_week < 1 || $day_of_week > 7) return ""; return [ "Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa.", "So." ][$day_of_week - 1]; } /** * Tests if a given date is today * * @param DateTime $date DateTime object to compare against * * @return true when the DateTime object is today * @return false when the DateTime object is not today */ function isDateTimeToday ($date) { return $date -> format ("Y-m-d") == date ("Y-m-d"); } /** * Tests if a given date is within the current month * * @param DateTime $date DateTime object to compare against * @param int $month Month to check against (defaults to current month) * * @return true when the DateTime object is within the current month * @return false when the DateTime object is not within the current month */ function isDateTimeWithinMonth ($date, $month = null) { $compareDate = new DateTime (); if ($month != null) $compareDate = new DateTime ("this year $month/01"); return $date -> format ("Y-m") == $compareDate -> format ("Y-m"); } /** * Tests if a given date is during the weekend * * @param DateTime $date DateTime object to test * * @return true when the DateTime object is a weekend day * @return false when the DateTime object is a week day */ function isDateTimeDuringWeekend ($date) { return intval ($date -> format ("N")) > 5; } /** * Fetches an ICal object from an ICS URL * * @param string $url ICS URL to fetch from * * @return ICal ICal object */ function getCalendar ($url) { try { $ical = new ICal (false, array( 'defaultSpan' => 2, // Default value 'defaultTimeZone' => 'Europe/Berlin', 'defaultWeekStart' => 'MO', // Default value 'disableCharacterReplacement' => false, // Default value 'filterDaysAfter' => null, // Default value 'filterDaysBefore' => null )); $ical -> initUrl( $url, $username = null, $password = null, $userAgent = null ); } catch (Exception $e) { showError( "ICal error: " . $e -> getMessage() ); return $ical; } return $ical; } /** * Returns all events from an iCal object * * @param ICal $ical ICal object * * @return array Array of event objects * @return false False on failure */ function getEvents ($ical) { if (! $ical) return false; return $ical -> sortEventsWithOrder ( $ical -> events () ); } /** * Returns all events from an ICal object for a specific day * * @param ICal $ical ICal object * @param int $day Day * @param int $month Month (defaults to current month) * @param int $year Year (default to current year) * * @return array Array of event objects * @return false False on failure */ function getEventsForDay ($ical, $day, $month = null, $year = null) { if (! $ical) return false; $date_format = "Y-m-d h:i:s"; return $ical -> sortEventsWithOrder ( $ical -> eventsFromRange ( date ($date_format, mktime (0, 0, 0, $month, $day, $year)), date ($date_format, mktime (23, 59, 59, $month, $day, $year)), ) ); } /** * Wrapper for getEventsForDay. * Returns all events from an ICal object for a specific date * * @param ICal $ical ICal object * @param DateTime $date DateTime object * * @return array Array of event objects * @return false False on failure */ function getEventsForDate ($ical, $date) { return getEventsForDay ( $ical, intval($date -> format ("d")), intval($date -> format ("m")), intval($date -> format ("Y")) ); } /** * Get events from ICal object limited by a start date * and amount to days forward from the start date * * @param ICal $ical ICal object * @param DateTime $startDate Date to start from * @param int $days Amount of days to get */ function getEventsFromRange ($ical, $startDate, $days) { if (! $ical) return false; return $ical -> sortEventsWithOrder ( $ical -> getEventsFromRange ( $startDate -> format ("Y-m-d H:i:s"), $startDate -> modify ("+ {$days} days") -> format ("Y-m-d H:i:s") ) ); }