* @version 0.0.1
* @copyright Copyright (c) 2010 All rights reserved.
* @author Steve Sutton <steve@gaslightmedia.com>
- * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt}
+ * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt}
*/
-class GLmMembersFront_events_icalFeed extends GlmMembersFront_events_baseAction
+class GlmMembersFront_events_icalFeed extends GlmMembersFront_events_baseAction
{
/**
* modelAction
if ($ical = filter_var($_REQUEST['ical'], FILTER_VALIDATE_BOOLEAN)) {
$action = 'event-ical';
}
- }
+ }
+
+ if ( !isset($eventId) || !$eventId ) {
+ $action = 'event-list-ical';
+ }
+
+ $output = '';
switch ($action) {
case 'event-ical':
- $this->postAddRecurrences = true;
- $event = $this->getModelEventData($eventId);
- $this->postAddRecurrences = false;
- //echo '<pre>$event: ' . print_r($event, true) . '</pre>';
-$icalHeader = <<<EOD
+ $output = $this->getEventOutput( $eventId );
+ header('Content-type: text/calendar; charset=utf-8');
+ header('Content-Disposition: inline; filename=event-' . $eventId . '.ics');
+ echo $output;
+ exit;
+ break;
+ case 'event-list-ical':
+ $eventSql = "
+ SELECT id
+ FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX. "events
+ WHERE id IN (
+ SELECT event
+ FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times AS ET
+ WHERE active
+ AND " . $this->dateRange . "
+ )
+ ORDER BY id";
+ $events = $this->wpdb->get_results( $eventSql, ARRAY_A );
+ if ( isset($events) && !empty($events) ) {
+ foreach ( $events as $key => $event ) {
+ $output .= $this->getEventOutput( $event['id'] );
+ }
+ }
+ header('Content-type: text/calendar; charset=utf-8');
+ header('Content-Disposition: inline; filename=events.ics');
+ echo $output;
+ exit;
+ break;
+ default:
+ die('should not reach this');
+ break;
+ }
+ }
+
+ public function getEventOutput($eventId)
+ {
+ $this->postAddRecurrences = true;
+ $event = $this->getModelEventData($eventId);
+ $this->postAddRecurrences = false;
+ $icalHeader = <<<EOD
BEGIN:VCALENDAR
PRODID:-//Gaslight Media Inc//Gaslight Events Calendar v2.0/EN
VERSION:2.0
METHOD:PUBLISH
EOD;
-$icalFooter = <<<EOD
+ $icalFooter = <<<EOD
\nEND:VCALENDAR
EOD;
-$eventTemplateStart = <<<EOD
+ $eventTemplateStart = <<<EOD
\nBEGIN:VEVENT
UID:%d@%s
CREATED:%s
SUMMARY:%s
STATUS:CONFIRMED
EOD;
-$eventTemplateEnd = <<<EOD
+ $eventTemplateEnd = <<<EOD
\nEND:VEVENT
EOD;
- $dateTimeFormat = '%s %s:%s %s';
- $dateFormat = '%s';
- $timeStampFormat = 'Ymd\THis';
- $weekdays =
- array(1 => 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
- header('Content-type: text/calendar; charset=utf-8');
- header('Content-Disposition: inline; filename=event-' . $eventId . '.ics');
- //$output .= '<pre>';
- $output .= $icalHeader;
- // clean description
- $description = 'DESCRIPTION:' . str_replace("\n", "\\n", strip_tags($event['descr']));
- $description = str_replace("\r", '', $description);
- $urlParts = parse_url(get_bloginfo('url'), PHP_URL_HOST);
- $urlHost = str_replace('www.', '', $urlParts);
- $eventDataStart = sprintf($eventTemplateStart,
- $event['id'],
- $urlHost,
- $this->icalDateFormat($event['created']),
- $this->icalDateFormat($event['starting_timestamp']),
- $this->icalDateFormat($event['starting_timestamp']),
- $this->icalDateFormat($event['ending_timestamp']),
- $description,
- $event['name']
- );
- $output .= $eventDataStart;
- // geo location (lat lon)
- if ( $event['use_member_location']['value']
- && $event['member']
- ) {
- if ( $event['member']['lat'] && $event['member']['lon'] ) {
- $output .= "\nGEO:" . $event['member']['lat']
- . ';' . $event['member']['lon'];
+ $dateTimeFormat = '%s %s:%s %s';
+ $dateFormat = '%s';
+ $timeStampFormat = 'Ymd\THis';
+ $weekdays =
+ array(1 => 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
+ $output .= $icalHeader;
+ // clean description
+ $description = 'DESCRIPTION:' . str_replace("\n", "\\n", strip_tags($event['descr']));
+ $description = str_replace("\r", '', $description);
+ $urlParts = parse_url(get_bloginfo('url'), PHP_URL_HOST);
+ $urlHost = str_replace('www.', '', $urlParts);
+ $eventDataStart = sprintf($eventTemplateStart,
+ $event['id'],
+ $urlHost,
+ $this->icalDateFormat($event['created']),
+ $this->icalDateFormat($event['starting_timestamp']),
+ $this->icalDateFormat($event['starting_timestamp']),
+ $this->icalDateFormat($event['ending_timestamp']),
+ $description,
+ $event['name']
+ );
+ $output .= $eventDataStart;
+ // geo location (lat lon)
+ if ( $event['use_member_location']['value']
+ && $event['member']
+ ) {
+ if ( $event['member']['lat'] && $event['member']['lon'] ) {
+ $output .= "\nGEO:" . $event['member']['lat']
+ . ';' . $event['member']['lon'];
+ }
+ // location (address city state zip)
+ $output .= "\nLOCATION:" . $event['member']['member_name'] . ' - ';
+ if ( !$event['hide_address']['value'] ) {
+ if ( $event['member']['addr1'] ) {
+ $output .= "{$event['member']['addr1']}";
}
- // location (address city state zip)
- $output .= "\nLOCATION:" . $event['member']['member_name'] . ' - ';
- if ( !$event['hide_address']['value'] ) {
- if ( $event['member']['addr1'] ) {
- $output .= "{$event['member']['addr1']}";
- }
- if ( $event['member']['city'] ) {
- $output .= "\,{$event['member']['city']}";
- }
- if ( $event['member']['state']['value'] ) {
- $output .= "\,{$event['member']['state']['value']}";
- }
- if ( $event['member']['zip'] ) {
- $output .= "\,{$event['member']['zip']}";
- }
+ if ( $event['member']['city'] ) {
+ $output .= "\,{$event['member']['city']}";
}
- } else if ( !empty( $event['locations'] ) ) {
- // location (address city state zip)
- $output .= "\nLOCATION:"
- . $event['locations']['name'] . ' - ';
- if ( !$event['hide_address']['value'] ) {
- if ( $event['locations']['address'] ) {
- $output .= "{$event['locations']['address']}";
- }
- if ( $event['locations']['city'] ) {
- $output .= "\,{$event['locations']['city']['name']}";
- }
- if ( $event['locations']['state']['value'] ) {
- $output .= "\,{$event['locations']['state']['value']}";
- }
- if ( $event['locations']['zip'] ) {
- $output .= "\,{$event['locations']['zip']}";
- }
+ if ( $event['member']['state']['value'] ) {
+ $output .= "\,{$event['member']['state']['value']}";
+ }
+ if ( $event['member']['zip'] ) {
+ $output .= "\,{$event['member']['zip']}";
}
}
- // contact info
- if ( $event['contact_name']
- || $event['contact_email']
- || $event['contact_phone']
- ) {
- $output .= "\nCONTACT:" . $event['contact_email'] . '\;;'
- . $this->phoneFrmt( $event['contact_phone'] ) . '\;'
- . $event['contact_name'];
- }
- // Categories
- if ( !empty($event['categories']) ) {
- $output .= "\nCATEGORIES:";
- $eventCategories = array();
- foreach ( $event['categories'] as $eCategory ) {
- $eventCategories[] = strtoupper( $eCategory['name'] );
+ } else if ( !empty( $event['locations'] ) ) {
+ // location (address city state zip)
+ $output .= "\nLOCATION:"
+ . $event['locations']['name'] . ' - ';
+ if ( !$event['hide_address']['value'] ) {
+ if ( $event['locations']['address'] ) {
+ $output .= "{$event['locations']['address']}";
+ }
+ if ( $event['locations']['city'] ) {
+ $output .= "\,{$event['locations']['city']['name']}";
+ }
+ if ( $event['locations']['state']['value'] ) {
+ $output .= "\,{$event['locations']['state']['value']}";
+ }
+ if ( $event['locations']['zip'] ) {
+ $output .= "\,{$event['locations']['zip']}";
}
- $output .= implode( ',', $eventCategories);
}
- // frequency (recurring data)
- if ( $event['recurrences'][0]['recurring']['value'] ) {
- if ( $event['recurrences'][0]['day_of_week']['names'] ) {
- $daysOfWeek = array();
- foreach ( $event['recurrences'][0]['day_of_week']['names'] as $dow ) {
- $freq = 'FREQ=WEEKLY';
- switch ( $dow ) {
- case 'Sunday':
- $daysOfWeek[] = 'Sun';
- break;
- case 'Monday':
- $daysOfWeek[] = 'Mon';
- break;
- case 'Tuesday':
- $daysOfWeek[] = 'Tue';
- break;
- case 'Wednesday':
- $daysOfWeek[] = 'Wed';
- break;
- case 'Thursday':
- $daysOfWeek[] = 'Thu';
- break;
- case 'Friday':
- $daysOfWeek[] = 'Fri';
- break;
- case 'Saturday':
- $daysOfWeek[] = 'Sat';
- break;
- }
- }
- if (!empty($daysOfWeek)) {
- $daysInWeek = implode(',', $daysOfWeek);
+ }
+ // contact info
+ if ( $event['contact_name']
+ || $event['contact_email']
+ || $event['contact_phone']
+ ) {
+ $output .= "\nCONTACT:" . $event['contact_email'] . '\;;'
+ . $this->phoneFrmt( $event['contact_phone'] ) . '\;'
+ . $event['contact_name'];
+ }
+ // Categories
+ if ( !empty($event['categories']) ) {
+ $output .= "\nCATEGORIES:";
+ $eventCategories = array();
+ foreach ( $event['categories'] as $eCategory ) {
+ $eventCategories[] = strtoupper( $eCategory['name'] );
+ }
+ $output .= implode( ',', $eventCategories);
+ }
+ // frequency (recurring data)
+ if ( $event['recurrences'][0]['recurring']['value'] ) {
+ if ( $event['recurrences'][0]['day_of_week']['names'] ) {
+ $daysOfWeek = array();
+ foreach ( $event['recurrences'][0]['day_of_week']['names'] as $dow ) {
+ $freq = 'FREQ=WEEKLY';
+ switch ( $dow ) {
+ case 'Sunday':
+ $daysOfWeek[] = 'Sun';
+ break;
+ case 'Monday':
+ $daysOfWeek[] = 'Mon';
+ break;
+ case 'Tuesday':
+ $daysOfWeek[] = 'Tue';
+ break;
+ case 'Wednesday':
+ $daysOfWeek[] = 'Wed';
+ break;
+ case 'Thursday':
+ $daysOfWeek[] = 'Thu';
+ break;
+ case 'Friday':
+ $daysOfWeek[] = 'Fri';
+ break;
+ case 'Saturday':
+ $daysOfWeek[] = 'Sat';
+ break;
}
- $output .= "\nRRULE:" . $freq .";BYDAY=" . $daysInWeek . ";UNTIL="
- . $this->icalDateFormat($event['ending_timestamp']);
}
+ if (!empty($daysOfWeek)) {
+ $daysInWeek = implode(',', $daysOfWeek);
+ }
+ $output .= "\nRRULE:" . $freq .";BYDAY=" . $daysInWeek . ";UNTIL="
+ . $this->icalDateFormat($event['ending_timestamp']);
}
- $output .= $eventTemplateEnd;
- $output .= $icalFooter;
- //$output .= '</pre>';
- echo $output;
- exit;
- break;
- default:
- die('should not reach this');
- break;
}
+ $output .= $eventTemplateEnd;
+ $output .= $icalFooter;
+ return $output;
}
/**