+<?php
+require_once '../setup.phtml';
+if (!defined('COMMON_APP_BASE')) {
+ define('COMMON_APP_BASE', '/var/www/server/CommonApps/');
+}
+function icalDateFormat($date, $time)
+{
+ $starting = ($time)
+ ? sprintf('%s %s:%s %s', $date, $time['h'], $time['i'], $time['A'])
+ : sprintf('%s', $date);
+ return date('Ymd\THis', strtotime($starting));
+}
+$icalHeader = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:~//Gaslight Media Inc//Gaslight Events Calendar v2.0/EN
+EOD;
+
+$icalFooter = <<<EOD
+\nEND:VCALENDAR
+EOD;
+
+$eventTemplateStart = <<<EOD
+\nBEGIN:VEVENT
+UID:%d@%s
+CREATED:%s
+DTSTAMP:%s
+DTSTART:%s
+DTEND:%s
+DESCRIPTION:%s
+SUMMARY:%s
+STATUS:CONFIRMED
+EOD;
+$eventTemplateEnd = <<<EOD
+\nEND:VEVENT
+EOD;
+
+$dbh = Toolkit_Database::getInstance();
+
+// fetch all events from events database
+define('COMMON_EVENTS_SCHEMA', 'events');
+require_once COMMON_APP_BASE . 'EventCalendar/V1/models/EventMapper.php';
+$eventMapper = new EventMapper(Toolkit_Database::getInstance());
+
+$events = $eventMapper->fetchFilteredEvents();
+header('Content-type: text/calendar; charset=utf-8');
+header('Content-Disposition: inline; filename=event-calendar.ics');
+echo $icalHeader;
+$dateTimeFormat = '%s %s:%s %s';
+$dateFormat = '%s';
+$timeStampFormat = 'Ymd\THis';
+$weekdays =
+ array(1 => 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
+foreach ($events as $event) {
+ // clean description
+ $description = str_replace("\n", '\n', strip_tags($event->getDescription()));
+ $description = str_replace("\r", '', $description);
+ $eventDataStart = sprintf($eventTemplateStart,
+ $event->getId(),
+ 'keweenaw.info',
+ icalDateFormat($event->getCreated(), false),
+ icalDateFormat($event->getStarting(), $event->getStartHourArray()),
+ icalDateFormat($event->getStarting(), $event->getStartHourArray()),
+ ($event->getRecurr())
+ ? icalDateFormat($event->getStarting(), $event->getEndHourArray())
+ : icalDateFormat($event->getEnding(), $event->getEndHourArray()),
+ $description,
+ $event->getHeader()
+ );
+ echo $eventDataStart;
+ // if event have lat lon data
+ if ($event->hasLatLon()) {
+ echo "\nGEO:" . $event->getLat() . ';' . $event->getLon();
+ }
+ if ($event->getPlace()) {
+ echo "\nLOCATION:" . $event->getPlace();
+ if ($event->getAddress()) {
+ echo "\," . $event->getAddress();
+ }
+ if ($event->getCity()) {
+ echo "\," . $event->getCity();
+ }
+ if ($event->getState()) {
+ echo "\," . $event->getState();
+ }
+ if ($event->getZip()) {
+ echo "\," . $event->getZip();
+ }
+ }
+ // if event has contact data
+ if ($event->hasContactInfo()) {
+ echo "\nCONTACT:" . $event->getContactName() . '\,' .$event->getContactEmail() .'\,'.$event->getContactPhone();
+ }
+ // if event is recur
+ if ($event->getRecurr()) {
+ // if by day of the month
+ if ($event->getDayom()) {
+ $freq = 'FREQ=MONTHLY';
+ }
+ // if by day of the week
+ $daysOw = $event->getDaysow;
+ if ($daysOw) {
+ $weekom = $event->getWeekom();
+ $freq = 'FREQ=WEEKLY';
+ switch ($weekom) {
+ case 9:
+ $freq .= ';INTERVAL=2';
+ $ord = '';
+ break;
+ case 1:
+ $ord = '1';
+ break;
+ case 2:
+ $ord = '2';
+ break;
+ case 3:
+ $ord = '3';
+ break;
+ case 4:
+ $ord = '4';
+ break;
+ default:
+ $ord = '';
+ break;
+ }
+ $eventDays = array();
+ $ri = 1;
+ for ($iterator = 1; $iterator <= 7; ++$iterator) {
+ if ($daysOw & $ri) {
+ $eventDays[] = $ord.$weekdays[$iterator];
+ }
+ $ri = $ri << 1;
+ }
+ if (!empty($eventDays)) {
+ $daysInWeek = implode(',', $eventDays);
+ }
+ $categoryName = $event->getCategoryName();
+ if ($categoryName) {
+ echo "\nCATEGORIES:" . $categoryName;
+ }
+ echo "\nRRULE:" .$freq . ';BYDAY=' . $daysInWeek . ';UNTIL=' . icalDateFormat($event->getEnding(), $event->getEndHourArray());
+ }
+ } else if ($event->getStarting() != $event->getEnding()) {
+ //echo "\nRRULE:FREQ=DAILY;UNTIL=" . icalDateFormat($event->getEnding(), $event->getEndHourArray());
+ }
+ echo $eventTemplateEnd;
+}
+echo $icalFooter;
+//echo '<pre>'.print_r($events, true).'</pre>';