From: Steve Sutton Date: Wed, 25 Nov 2015 19:25:36 +0000 (-0500) Subject: updates X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/index.cgi?a=commitdiff_plain;h=HEAD;p=prog%2FeventIcal.git updates --- diff --git a/index.php b/index.php index cfb3c7f..4a54da6 100644 --- a/index.php +++ b/index.php @@ -1,8 +1,5 @@ ' . var_dump($time) . ''; + 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 '
' . print_r($timeParts, true) . '
'; + //echo '
' . print_r($hour, true) . '
'; + //echo '
' . print_r($hour, true) . '
'; + //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 = <<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 '
' . print_r($e, true) . '
'; + die('done'); +} +//echo '
' . print_r($events, true) . '
'; +//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: @@ -134,16 +215,13 @@ foreach ($events as $event) { 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 '
'.print_r($events, true).'
'; diff --git a/new-events.php b/new-events.php new file mode 100644 index 0000000..cfb3c7f --- /dev/null +++ b/new-events.php @@ -0,0 +1,149 @@ +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 '
'.print_r($events, true).'
';