<?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', $date);
return date('Ymd\THis', strtotime($starting));
}
+function getHourArrayFromTime($time)
+{
+ if (!$time) {
+ return false;
+ }
+ //echo '<pre>' . var_dump($time) . '</pre>';
+ if (!preg_match('%(\d{1,2}):?(\d{2})? ?(\w{1,2})?%', $time, $timeParts)) {
+ //die('not found');
+ return false;
+ }
+ $hour = (!$timeParts[3] || in_array(strtolower(trim($timeParts[3])), array('pm', 'p')))
+ ? ( ((int)$timeParts[1] === 12) ? 12 : (int)$timeParts[1] += 12 )
+ : ( ((int)$timeParts[1] === 12) ? 0 : (int)$timeParts[1] );
+ //echo '<pre>' . print_r($timeParts, true) . '</pre>';
+ //echo '<pre>' . print_r($hour, true) . '</pre>';
+ //echo '<pre>' . print_r($hour, true) . '</pre>';
+ //exit;
+ // parse the hour from event
+ $dateTime = new DateTime();
+ $dateTime->setTime($hour, (int)$timeParts[2] );
+ return array(
+ 'h' => $dateTime->format('g'),
+ 'i' => $dateTime->format('i'),
+ 'A' => $dateTime->format('A')
+ );
+}
+function phoneFrmt($number)
+{
+ $num = preg_replace('%[^0-9]%', '', trim($number));
+ if (strlen($num) == 10) {
+ preg_match('%(\d{3})(\d{3})(\d{4})%', $num, $part);
+ return '('. $part[1] . ') ' . $part[2] . '-' . $part[3];
+ } else if (strlen($num) == 7) {
+ preg_match('%(\d{3})(\d{4})%', $num, $part);
+ return $part[1] . '-' . $part[2];
+ } else {
+ return $num;
+
+ }
+}
+
+if (!$dbh) {
+ $dbh = Toolkit_Database::getInstance();
+}
$icalHeader = <<<EOD
BEGIN:VCALENDAR
+PRODID:-//Gaslight Media Inc//Gaslight Events Calendar v2.0/EN
VERSION:2.0
-PRODID:~//Gaslight Media Inc//Gaslight Events Calendar v2.0/EN
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
EOD;
$icalFooter = <<<EOD
DTSTAMP:%s
DTSTART:%s
DTEND:%s
-DESCRIPTION:%s
+%s
SUMMARY:%s
STATUS:CONFIRMED
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();
+try {
+ $sql = "
+ SELECT descr
+ FROM topic
+ WHERE id = :id";
+ $getTopic = $dbh->prepare($sql);
+ $sql = "
+ SELECT *
+ FROM event
+ WHERE edate >= '01/01/2014'::DATE
+ AND visable = true
+ AND publichome = true
+ ORDER BY bdate,edate";
+ $stmt = $dbh->query($sql);
+ $events = $stmt->fetchAll(PDO::FETCH_ASSOC);
+} catch(PDOException $e) {
+ echo '<pre>' . print_r($e, true) . '</pre>';
+ die('done');
+}
+//echo '<pre>' . print_r($events, true) . '</pre>';
+//exit;
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=event-calendar.ics');
-echo $icalHeader;
+$output = '';
+$output .= $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) {
+foreach ($events as &$event) {
+ $eventOutput = '';
// clean description
- $description = str_replace("\n", '\n', strip_tags($event->getDescription()));
+ $description = 'DESCRIPTION:' . str_replace("\n", "\\n", strip_tags($event['descr']));
$description = str_replace("\r", '', $description);
+ //$description = wordwrap($description, 75, "\\n");
$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()),
+ $event['id'],
+ 'staffords.com',
+ icalDateFormat($event['bdate'], false),
+ icalDateFormat($event['bdate'], getHourArrayFromTime($event['btime'])),
+ icalDateFormat($event['bdate'], getHourArrayFromTime($event['btime'])),
+ ($event['reacur'])
+ ? icalDateFormat($event['bdate'], getHourArrayFromTime($event['etime']))
+ : icalDateFormat($event['edate'], getHourArrayFromTime($event['etime'])),
$description,
- $event->getHeader()
+ $event['header']
);
- echo $eventDataStart;
- // if event have lat lon data
- if ($event->hasLatLon()) {
- echo "\nGEO:" . $event->getLat() . ';' . $event->getLon();
+ $eventOutput = $eventDataStart;
+ // If event has Location data
+ if ($event['lat'] || $event['lon']) {
+ $eventOutput .= "\nGEO:" . $event['lat'] . ';' . $event['lon'];
}
- if ($event->getPlace()) {
- echo "\nLOCATION:" . $event->getPlace();
- if ($event->getAddress()) {
- echo "\," . $event->getAddress();
+ $hasLocation = ($event['loc']
+ || $event['address']
+ || $event['city']
+ || $event['state']
+ || $event['zip']
+ );
+ if ($hasLocation) {
+ $eventOutput .= "\nLOCATION:" . $event['loc'].' - ';
+ if ($event['address']) {
+ $eventOutput .= "{$event['address']}";
}
- if ($event->getCity()) {
- echo "\," . $event->getCity();
+ if ($event['city']) {
+ $eventOutput .= "\,{$event['city']}";
}
- if ($event->getState()) {
- echo "\," . $event->getState();
+ if ($event['state']) {
+ $eventOutput .= "\,{$event['state']}";
}
- if ($event->getZip()) {
- echo "\," . $event->getZip();
+ if ($event['zip']) {
+ $eventOutput .= "\,{$event['zip']}";
}
}
// if event has contact data
- if ($event->hasContactInfo()) {
- echo "\nCONTACT:" . $event->getContactName() . '\,' .$event->getContactEmail() .'\,'.$event->getContactPhone();
+ if ( $event['contact'] || $event['email'] || $event['phone']) {
+ $eventOutput .= "\nCONTACT:" . $event['email'] . '\;;' . phoneFrmt($event['phone']) . '\;'.$event['contact'];
+ }
+ if ($event['topicid']) {
+ $getTopic->bindParam(':id', $event['topicid'], PDO::PARAM_INT);
+ $getTopic->execute();
+ $categoryName = $getTopic->fetchColumn();
+ $eventOutput .= "\nCATEGORIES:" . $categoryName;
+ }
+ if ($event['cost']) {
+ $eventOutput .= "\nX-COST:" . $event['cost'];
+ }
+ if ($event['url']) {
+ if (!preg_match('%http://|https://%', $event['url'])) {
+ $event['url'] = 'http://' . $event['url'];
+ }
+ $eventOutput .= "\nX-TICKETS-URL:" . $event['url'];
}
// if event is recur
- if ($event->getRecurr()) {
+ if ($event['reacur']) {
// if by day of the month
- if ($event->getDayom()) {
+ if ($event['dayom']) {
$freq = 'FREQ=MONTHLY';
}
// if by day of the week
- $daysOw = $event->getDaysow;
+ $daysOw = $event['daysow'];
if ($daysOw) {
- $weekom = $event->getWeekom();
+ $weekom = $event['weekom'];
$freq = 'FREQ=WEEKLY';
switch ($weekom) {
case 9:
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());
+ $eventOutput .= "\nRRULE:" .$freq . ';BYDAY=' . $daysInWeek . ';UNTIL=' . icalDateFormat($event['edate'], getHourArrayFromTime($event['etime']));
}
- } else if ($event->getStarting() != $event->getEnding()) {
- //echo "\nRRULE:FREQ=DAILY;UNTIL=" . icalDateFormat($event->getEnding(), $event->getEndHourArray());
}
- echo $eventTemplateEnd;
+ $eventOutput .= $eventTemplateEnd;
+ $output .= $eventOutput;
+ $event['eventOutput'] = $eventOutput;
}
-echo $icalFooter;
+$output .= $icalFooter;
+echo $output;
//echo '<pre>'.print_r($events, true).'</pre>';
--- /dev/null
+<?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>';