--- /dev/null
+<?php
+/**
+ * This PHP-Class should only read a iCal-File (*.ics), parse it and give an
+ * array with its content.
+ *
+ * PHP Version 5
+ *
+ * @category Parser
+ * @package Ics-parser
+ * @author Martin Thoma <info@martin-thoma.de>
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @version SVN: <svn_id>
+ * @link http://code.google.com/p/ics-parser/
+ * @example $ical = new ical('MyCal.ics');
+ * print_r( $ical->events() );
+ */
+
+error_reporting(E_ALL);
+
+/**
+ * This is the iCal-class
+ *
+ * @category Parser
+ * @package Ics-parser
+ * @author Martin Thoma <info@martin-thoma.de>
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @link http://code.google.com/p/ics-parser/
+ *
+ * @param {string} filename The name of the file which should be parsed
+ * @constructor
+ */
+class ICal
+{
+ /* How many ToDos are in this ical? */
+ public /** @type {int} */ $todo_count = 0;
+
+ /* How many events are in this ical? */
+ public /** @type {int} */ $event_count = 0;
+
+ /* The parsed calendar */
+ public /** @type {Array} */ $cal;
+
+ /* Which keyword has been added to cal at last? */
+ private /** @type {string} */ $_lastKeyWord;
+
+ /**
+ * Creates the iCal-Object
+ *
+ * @param {string} $filename The path to the iCal-file
+ *
+ * @return Object The iCal-Object
+ */
+ public function __construct($filename)
+ {
+ if (!$filename) {
+ return false;
+ }
+
+ $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ if (stristr($lines[0], 'BEGIN:VCALENDAR') === false) {
+ return false;
+ } else {
+ // TODO: Fix multiline-description problem (see http://tools.ietf.org/html/rfc2445#section-4.8.1.5)
+ foreach ($lines as $line) {
+ $line = trim($line);
+ $add = $this->keyValueFromString($line);
+ if ($add === false) {
+ $this->addCalendarComponentWithKeyAndValue($type, false, $line);
+ continue;
+ }
+
+ list($keyword, $value) = $add;
+
+ switch ($line) {
+ // http://www.kanzaki.com/docs/ical/vtodo.html
+ case "BEGIN:VTODO":
+ $this->todo_count++;
+ $type = "VTODO";
+ break;
+
+ // http://www.kanzaki.com/docs/ical/vevent.html
+ case "BEGIN:VEVENT":
+ //echo "vevent gematcht";
+ $this->event_count++;
+ $type = "VEVENT";
+ break;
+
+ //all other special strings
+ case "BEGIN:VCALENDAR":
+ case "BEGIN:DAYLIGHT":
+ // http://www.kanzaki.com/docs/ical/vtimezone.html
+ case "BEGIN:VTIMEZONE":
+ case "BEGIN:STANDARD":
+ $type = $value;
+ break;
+ case "END:VTODO": // end special text - goto VCALENDAR key
+ case "END:VEVENT":
+ case "END:VCALENDAR":
+ case "END:DAYLIGHT":
+ case "END:VTIMEZONE":
+ case "END:STANDARD":
+ $type = "VCALENDAR";
+ break;
+ default:
+ $this->addCalendarComponentWithKeyAndValue($type,
+ $keyword,
+ $value);
+ break;
+ }
+ }
+ return $this->cal;
+ }
+ }
+
+ /**
+ * Add to $this->ical array one value and key.
+ *
+ * @param {string} $component This could be VTODO, VEVENT, VCALENDAR, ...
+ * @param {string} $keyword The keyword, for example DTSTART
+ * @param {string} $value The value, for example 20110105T090000Z
+ *
+ * @return {None}
+ */
+ public function addCalendarComponentWithKeyAndValue($component,
+ $keyword,
+ $value)
+ {
+ if ($keyword == false) {
+ $keyword = $this->last_keyword;
+ switch ($component) {
+ case 'VEVENT':
+ $value = $this->cal[$component][$this->event_count - 1]
+ [$keyword].$value;
+ break;
+ case 'VTODO' :
+ $value = $this->cal[$component][$this->todo_count - 1]
+ [$keyword].$value;
+ break;
+ }
+ }
+
+ if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) {
+ $keyword = explode(";", $keyword);
+ $keyword = $keyword[0];
+ }
+
+ switch ($component) {
+ case "VTODO":
+ $this->cal[$component][$this->todo_count - 1][$keyword] = $value;
+ //$this->cal[$component][$this->todo_count]['Unix'] = $unixtime;
+ break;
+ case "VEVENT":
+ $this->cal[$component][$this->event_count - 1][$keyword] = $value;
+ break;
+ default:
+ $this->cal[$component][$keyword] = $value;
+ break;
+ }
+ $this->last_keyword = $keyword;
+ }
+
+ /**
+ * Get a key-value pair of a string.
+ *
+ * @param {string} $text which is like "VCALENDAR:Begin" or "LOCATION:"
+ *
+ * @return {array} array("VCALENDAR", "Begin")
+ */
+ public function keyValueFromString($text)
+ {
+ preg_match("/([^:;]+)[:;]([\w\W]*)/", $text, $matches);
+ if (count($matches) == 0) {
+ return false;
+ }
+ $matches = array_splice($matches, 1, 2);
+ return $matches;
+ }
+
+ /**
+ * Return Unix timestamp from ical date time format
+ *
+ * @param {string} $icalDate A Date in the format YYYYMMDD[T]HHMMSS[Z] or
+ * YYYYMMDD[T]HHMMSS
+ *
+ * @return {int}
+ */
+ public function iCalDateToUnixTimestamp($icalDate)
+ {
+ $icalDate = str_replace('T', '', $icalDate);
+ $icalDate = str_replace('Z', '', $icalDate);
+
+ $pattern = '/([0-9]{4})'; // 1: YYYY
+ $pattern .= '([0-9]{2})'; // 2: MM
+ $pattern .= '([0-9]{2})'; // 3: DD
+ $pattern .= '([0-9]{0,2})'; // 4: HH
+ $pattern .= '([0-9]{0,2})'; // 5: MM
+ $pattern .= '([0-9]{0,2})/'; // 6: SS
+ preg_match($pattern, $icalDate, $date);
+
+ // Unix timestamp can't represent dates before 1970
+ if ($date[1] <= 1970) {
+ return false;
+ }
+ // Unix timestamps after 03:14:07 UTC 2038-01-19 might cause an overflow
+ // if 32 bit integers are used.
+ $timestamp = mktime((int)$date[4],
+ (int)$date[5],
+ (int)$date[6],
+ (int)$date[2],
+ (int)$date[3],
+ (int)$date[1]);
+ return $timestamp;
+ }
+
+ /**
+ * Returns an array of arrays with all events. Every event is an associative
+ * array and each property is an element it.
+ *
+ * @return {array}
+ */
+ public function events()
+ {
+ $array = $this->cal;
+ return $array['VEVENT'];
+ }
+
+ /**
+ * Returns a boolean value whether thr current calendar has events or not
+ *
+ * @return {boolean}
+ */
+ public function hasEvents()
+ {
+ return ( count($this->events()) > 0 ? true : false );
+ }
+
+ /**
+ * Returns false when the current calendar has no events in range, else the
+ * events.
+ *
+ * Note that this function makes use of a UNIX timestamp. This might be a
+ * problem on January the 29th, 2038.
+ * See http://en.wikipedia.org/wiki/Unix_time#Representing_the_number
+ *
+ * @param {boolean} $rangeStart Either true or false
+ * @param {boolean} $rangeEnd Either true or false
+ *
+ * @return {mixed}
+ */
+ public function eventsFromRange($rangeStart = false, $rangeEnd = false)
+ {
+ $events = $this->sortEventsWithOrder($this->events(), SORT_ASC);
+
+ if (!$events) {
+ return false;
+ }
+
+ $extendedEvents = array();
+
+ if ($rangeStart !== false) {
+ $rangeStart = new DateTime();
+ }
+
+ if ($rangeEnd !== false or $rangeEnd <= 0) {
+ $rangeEnd = new DateTime('2038/01/18');
+ } else {
+ $rangeEnd = new DateTime($rangeEnd);
+ }
+
+ $rangeStart = $rangeStart->format('U');
+ $rangeEnd = $rangeEnd->format('U');
+
+
+
+ // loop through all events by adding two new elements
+ foreach ($events as $anEvent) {
+ $timestamp = $this->iCalDateToUnixTimestamp($anEvent['DTSTART']);
+ if ($timestamp >= $rangeStart && $timestamp <= $rangeEnd) {
+ $extendedEvents[] = $anEvent;
+ }
+ }
+
+ return $extendedEvents;
+ }
+
+ /**
+ * Returns a boolean value whether thr current calendar has events or not
+ *
+ * @param {array} $events An array with events.
+ * @param {array} $sortOrder Either SORT_ASC, SORT_DESC, SORT_REGULAR,
+ * SORT_NUMERIC, SORT_STRING
+ *
+ * @return {boolean}
+ */
+ public function sortEventsWithOrder($events, $sortOrder = SORT_ASC)
+ {
+ $extendedEvents = array();
+
+ // loop through all events by adding two new elements
+ foreach ($events as $anEvent) {
+ if (!array_key_exists('UNIX_TIMESTAMP', $anEvent)) {
+ $anEvent['UNIX_TIMESTAMP'] =
+ $this->iCalDateToUnixTimestamp($anEvent['DTSTART']);
+ }
+
+ if (!array_key_exists('REAL_DATETIME', $anEvent)) {
+ $anEvent['REAL_DATETIME'] =
+ date("d.m.Y", $anEvent['UNIX_TIMESTAMP']);
+ }
+
+ $extendedEvents[] = $anEvent;
+ }
+
+ foreach ($extendedEvents as $key => $value) {
+ $timestamp[$key] = $value['UNIX_TIMESTAMP'];
+ }
+ array_multisort($timestamp, $sortOrder, $extendedEvents);
+
+ return $extendedEvents;
+ }
+}
+?>
// Load Management Events data abstract
require_once GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataManagement.php';
-require_once(GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataEvents.php');
-require_once(GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataRecurrences.php');
-require_once(GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataFeedImport.php');
+require_once GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataEvents.php';
+require_once GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataRecurrences.php';
+require_once GLM_MEMBERS_EVENTS_PLUGIN_CLASS_PATH.'/data/dataFeedImport.php';
/**
* GlmMembersAdmin_management_events
public function importEventImages()
{
- require_once(GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php');
+ require_once GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php';
$ImageUpload = new GlmMembersAdmin_ajax_imageUpload($this->wpdb, $this->config);
// get all events with images
$sql = "
'%d'
);
}
- if ( $feed_url = filter_var( $_REQUEST['feed_url'], FILTER_VALIDATE_URL ) ) {
+ if ( $option2 === 'refresh' && $feed_id = filter_var( $_REQUEST['id'], FILTER_VALIDATE_INT ) ) {
+ //$icalFeedResult .= '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
+ $icalFeedResult .= $this->importIcalFeed( $feed_id );
+ }
+ if ( isset( $_REQUEST['feed_url'] ) && $feed_url = filter_var( $_REQUEST['feed_url'], FILTER_VALIDATE_URL ) ) {
// Add this feed url to the table
$this->wpdb->insert(
GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "feed_import",
$import_result = '<pre>Failure: Not given owner id.</pre>';
}
-
break;
case 'eventFilesImport':
-
-
break;
case 'eventimport':
}
}
+ public function getCategoryId( $category )
+ {
+ $category_id = $this->wpdb->get_var(
+ $this->wpdb->prepare(
+ "SELECT id
+ FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "categories
+ WHERE name = %d",
+ $category
+ )
+ );
+ if ( $category_id ) {
+ return $category_id;
+ } else {
+ $this->wpdb->insert(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'categories',
+ array(
+ 'name' => $category,
+ 'parent' => 0
+ ),
+ arary(
+ '%s',
+ '%d'
+ )
+ );
+ $category_id = $this->wpdb->insert_id;
+ return $category_id;
+ }
+ }
/**
* addCategories
*
*/
public function getCityId($city_name)
{
+ if ( !$city_name ) {
+ return false;
+ }
$sql = "
SELECT id
FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "cities
public function addEvents()
{
// clear the events tables first
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "recurrences" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "event_categories" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "locations" );
+ $this->clearData();
$Recurrences = new GlmDataEventsRecurrences($this->wpdb, $this->config);
$return = '';
$old_event_format = ($this->settings['tablename'] == 'event');
}
}
if ( $old_event_format ) {
- $intro = substr(strip_tags($event['descr']), 0, 250);
+ $intro = substr(strip_tags($event['descr']), 0, 150);
$event_data = array(
'status' => (($event['visable'] == '1')
? $this->config['status_numb']['Active']
$recurring_event = 0;
}
}
- $day_of_week =
- $month_of_year =
- $week_of_month =
- $by_day_of_month =
+ $day_of_week =
+ $month_of_year =
+ $week_of_month =
+ $by_day_of_month =
$last_day_of_month = null;
if ( $recurring_event ) {
if ( $event['daysow'] ) {
}
return $return;
}
+ public function clearData()
+ {
+ $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events" );
+ $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "recurrences" );
+ $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times" );
+ $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "event_categories" );
+ $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "locations" );
+ }
public function importFromTimely() {
$limit = 25;
$debug = false;
}
if ( $start === 0 ) {
// clear the events tables first.
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "recurrences" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "event_categories" );
- $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "locations" );
+ $this->clearData();
// Add the Categories from Time.ly.
$return_string = $this->addTimelyCategories();
} else {
$custom_date_events = 0;
$Recurrences = new GlmDataEventsRecurrences($this->wpdb, $this->config);
- require_once(GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php');
+ require_once GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php';
$image_upload = new GlmMembersAdmin_ajax_imageUpload($this->wpdb, $this->config);
$sql = "
FROM " . $this->wpdb->prefix . "posts
WHERE post_type = 'ai1ec_event'
AND post_status = 'publish'";
- //$sql .= " AND ID IN ( SELECT post_id FROM " . $this->wpdb->prefix . "ai1ec_events
- //WHERE end >= " . time() . " )";
- //$sql .= " AND ID IN ( 3785 )";
$sql .= " LIMIT $limit OFFSET $start";
$results = $this->wpdb->get_results( $sql, ARRAY_A );
- //echo '<p>Total events: ' . count( $results ) . '</p>';
$event_counter = 0;
if ( !empty( $results ) ) {
echo '<div style="border:1px solid green;">';
}
++$event_counter;
- //echo '<pre>$post: ' . print_r($post, true) . '</pre>';
$sql = "
SELECT *
FROM " . $this->wpdb->prefix . "ai1ec_events
WHERE post_id = {$post['ID']}";
$event_data = $this->wpdb->get_row( $sql, ARRAY_A );
- //echo '<pre>$event_data: ' . print_r($event_data, true) . '</pre>';
$cost_data = unserialize( $event_data['cost'] );
$cost = $cost_data['cost'];
$is_free = $cost_data['is_free'];
$recurring_event =
$start_time_only =
- $recurring_event = 0;
+ $recurring_event = 0;
$weekly =
$daily = false;
. "&start=$start\">Next</a></p>";
return $return_string;
}
+ public function fetchIcalFile( $url )
+ {
+ $path = '/tmp';
+ $filename = tempnam( $path, "ICAL" );
+ $fp = fopen( $filename, 'w+' );
+ $ch = curl_init( $url );
+ curl_setopt( $ch, CURLOPT_TIMEOUT, 50 );
+ curl_setopt( $ch, CURLOPT_FILE, $fp );
+ curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
+ $fileData = curl_exec( $ch );
+ $httpCode = curl_getinfo( $ch );
+ curl_close( $ch );
+ fclose( $fp );
+ // Set correct file permissions
+ $oldUmask = umask( 0 );
+ chmod( $filename, 0660 );
+ umask( $oldUmask );
+ return $filename;
+ }
+ public function importIcalFeed( $feed_id )
+ {
+ $debug = false;
+ $clear_data = false;
+ $number_events = 0;
+ if ( $clear_data ) {
+ $this->clearData();
+ }
+ $feed_content = $out = '';
+ $event_data = array();
+
+ $feed_url = $this->wpdb->get_var(
+ $this->wpdb->prepare(
+ "SELECT feed_url
+ FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX. "feed_import
+ WHERE id = %d",
+ $feed_id
+ )
+ );
+
+ $Recurrences = new GlmDataEventsRecurrences($this->wpdb, $this->config);
+ require_once GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php';
+ $image_upload = new GlmMembersAdmin_ajax_imageUpload($this->wpdb, $this->config);
+
+ // Get the feed data
+ $filename = $this->fetchIcalFile( $feed_url );
+ require GLM_MEMBERS_EVENTS_PLUGIN_PATH . '/classes/icalReader.php';
+ $ical = new ical($filename);
+ $events = $ical->events();
+ if ( $debug ) {
+ $out .= '<pre>$events: ' . print_r( $events, true ) . '</pre>';
+ }
+ if ( $events ) {
+ foreach ( $events as $event ) {
+ $contact = array();
+ $image = '';
+ $event['DESCRIPTION']
+ = str_replace( '\n', "<br>", $event['DESCRIPTION'] );
+ $intro = substr($event['DESCRIPTION'], 0 ,150);
+ if ( isset( $event['CONTACT'] ) ) {
+ $contact_data = explode( ',', str_replace( '\\', '', $event['CONTACT'] ) );
+ if ( $debug ) {
+ //$out .= '<pre>$contact_data: ' . print_r( $contact_data, true ) . '</pre>';
+ }
+ $contact = array(
+ 'name' => $contact_data[0],
+ 'email' => $contact_data[1],
+ 'phone' => $contact_data[2],
+ );
+ } else {
+ $contact = array(
+ 'name' => '',
+ 'email' => '',
+ 'phone' => '',
+ );
+ }
+ if ( isset( $event['ATTACH'] ) ) {
+ $img_url = preg_replace( '%FMTTYPE=image/(jpeg|gif|png)[:]%', '', $event['ATTACH'] );
+ $res = $image_upload->storeImage( $img_url );
+ $image = $res['newFileName'];
+ }
+ $event_data = array(
+ 'status' => $this->config['status_numb']['Active'],
+ 'ref_type' => 10,
+ 'created' => $ical->iCalDateToUnixTimestamp( $event['CREATED'] ),
+ 'updated' => $ical->iCalDateToUnixTimestamp( $event['CREATED'] ),
+ 'approved' => null,
+ 'ical_uid' => $event['UID'],
+ 'name' => $event['SUMMARY'],
+ 'intro' => $intro,
+ 'descr' => $event['DESCRIPTION'],
+ 'image' => $image,
+ 'url' => ( isset( $event['URL'] ) ? $event['URL']: '' ),
+ 'contact_email' => $contact['name'],
+ 'contact_name' => $contact['email'],
+ 'contact_phone' => $contact['phone'],
+ );
+ if ( $debug ) {
+ //$out .= '<pre>$event_data: ' . print_r( $event_data, true ) . '</pre>';
+ }
+ $event_data_format = array(
+ '%d',
+ '%d',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ );
+ // check for this event record first to see if it can be
+ // updated instead of insert
+ $event_id = $this->wpdb->get_var(
+ $this->wpdb->prepare(
+ "SELECT id
+ FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events
+ WHERE ical_uid = %s",
+ $event['UID']
+ )
+ );
+ if ( $event_id ) {
+ $this->wpdb->update(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'events',
+ $event_data,
+ array( 'id' => $event_id ),
+ $event_data_format,
+ '%d'
+ );
+ } else {
+ $this->wpdb->insert(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'events',
+ $event_data,
+ $event_data_format
+ );
+ $event_id = $this->wpdb->insert_id;
+ }
+ if ( !$event_id ) {
+ die('something is wrong no event_id');
+ }
+ // generate the slug name for this new event
+ $event_abstract = new GlmDataEvents( $this->wpdb, $this->config );
+ $event_abstract->updateSlug( $event_id );
+ // Location Data
+ if ( isset( $event['LOCATION'] ) ) {
+ $location_data = explode( ',', str_replace( '\\', '', $event['LOCATION'] ) );
+ $place = ( isset( $location_data[0] ) ? $location_data[0]: '');
+ $address = ( isset( $location_data[1] ) ? $location_data[1]: '');
+ $city = ( isset( $location_data[2] ) ? $location_data[2]: '');
+ $state = ( isset( $location_data[3] ) ? $location_data[3]: '');
+ $zip = ( isset( $location_data[4] ) ? $location_data[4]: '');
+ $location = array(
+ 'event' => $event_id,
+ 'name' => $place,
+ 'address' => $address,
+ 'city' => $this->getCityId( $city ),
+ 'state' => $state,
+ 'zip' => $zip,
+ );
+ $location_format = array(
+ '%d', '%s', '%s', '%d', '%s', '%s'
+ );
+ if ( isset( $event['GEO'] ) ) {
+ $geo_data = explode( ';', $event['GEO'] );
+ $location['lat'] = $geo_data[0];
+ $location['lon'] = $geo_data[1];
+ $location_format[] = '%s';
+ $location_format[] = '%s';
+ }
+ // Remove any old location data for this event_id.
+ $this->wpdb->delete(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'locations',
+ array( 'event' => $event_id ),
+ '%d'
+ );
+ $this->wpdb->insert(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'locations',
+ $location,
+ $location_format
+ );
+ }
+ // Remove any old recurrences data for this event_id.
+ $this->wpdb->delete(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'recurrences',
+ array( 'event' => $event_id ),
+ '%d'
+ );
+ // Remove any old times data for this event_id.
+ $this->wpdb->delete(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'times',
+ array( 'event' => $event_id ),
+ '%d'
+ );
+ $serialized_times = null;
+ $day_of_week =
+ $day_of_month =
+ $month_of_year =
+ $week_of_month =
+ $by_day_of_month =
+ $last_day_of_month = null;
+ $start_time_only =
+ $all_day =
+ $recurring_event = 0;
+ $day_of_week = 127;
+ $month_of_year = 4095;
+ $week_of_month = 63;
+ $starting = $ical->iCalDateToUnixTimestamp( $event['DTSTART'] );
+ $ending = $ical->iCalDateToUnixTimestamp( $event['DTEND'] );
+ $from_date = date( 'Y-m-d', $starting );
+ $to_date = date( 'Y-m-d', $ending );
+ $btime = date( 'H:i', $starting );
+ $etime = date( 'H:i', $ending );
+ $freq = $byday = $until = '';
+ if ( isset( $event['RRULE'] ) ) {
+ $recurring_event = 1;
+ $rrule_data = explode( ';', $event['RRULE'] );
+ //echo '<pre>$rrule_data: ' . print_r( $rrule_data, true ) . '</pre>';
+ if ( $rrule_data ) {
+ foreach ( $rrule_data as $rule ) {
+ if ( preg_match( '%FREQ=(.*)%', $rule, $matches ) ) {
+ $freq = trim( $matches[1] );
+ }
+ if ( preg_match( '%BYDAY=(.*)%', $rule, $matches ) ) {
+ $byday = trim( $matches[1] );
+ }
+ if ( preg_match( '%UNTIL=(.*)%', $rule, $matches ) ) {
+ $until = trim( $matches[1] );
+ }
+ }
+ }
+ if ( $freq === 'WEEKLY' && $byday ) {
+ // separated by commas
+ $days = explode( ',',$byday );
+ //echo '<pre>$days: ' . print_r( $days, true ) . '</pre>';
+ if ( $days ) {
+ $day_of_week = 0;
+ foreach ( $days as $day ) {
+ if ( preg_match( '%([0-9])?([A-Z]{2})%', $day, $d_matches ) ) {
+ //echo '<pre>$d_matches: ' . print_r( $d_matches, true ) . '</pre>';
+ if ( $d_matches[1] ) {
+ $week_of_month = pow(2, $d_matches[1] );
+ }
+ switch ( $d_matches[2] ) {
+ case "SU":
+ $day_of_week += pow(2, 0);
+ break;
+ case "MO":
+ $day_of_week += pow(2, 1);
+ break;
+ case "TU":
+ $day_of_week += pow(2, 2);
+ break;
+ case "WE":
+ $day_of_week += pow(2, 3);
+ break;
+ case "TH":
+ $day_of_week += pow(2, 4);
+ break;
+ case "FR":
+ $day_of_week += pow(2, 5);
+ break;
+ case "SA":
+ $day_of_week += pow(2, 6);
+ break;
+ }
+ }
+ }
+ }
+ }
+ if ( $until != '' ) {
+ //echo '<pre>$until: ' . print_r( $until, true ) . '</pre>';
+ $test_date = $ical->iCalDateToUnixTimestamp( $until );
+ if ( $test_date ) {
+ $to_date = date( 'Y-m-d', $test_date );
+ }
+ //echo '<pre>$test_date: ' . print_r( date( 'm/d/Y', $test_date), true ) . '</pre>';
+ }
+ }
+ //echo '<pre>$freq: ' . print_r( $freq, true ) . '</pre>';
+ //echo '<pre>$byday: ' . print_r( $byday, true ) . '</pre>';
+ // for the recurrences part
+ $recur_data = array(
+ 'event' => $event_id,
+ 'name' => 'Imported',
+ 'start_time' => $btime,
+ 'end_time' => $etime,
+ 'start_time_only' => $start_time_only,
+ 'from_date' => $from_date,
+ 'to_date' => $to_date,
+ 'all_day' => $all_day,
+ 'recurring' => $recurring_event,
+ 'month_of_year' => $month_of_year,
+ 'week_of_month' => $week_of_month,
+ 'day_of_week' => $day_of_week,
+ 'day_of_month' => $day_of_month,
+ 'by_day_of_month' => $by_day_of_month,
+ 'last_day_of_month' => $last_day_of_month,
+ 'specific_dates' => $serialized_times
+ );
+ $this->wpdb->insert(
+ GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . 'recurrences',
+ $recur_data,
+ array(
+ '%d',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%s',
+ '%d',
+ '%d',
+ '%d',
+ '%d',
+ '%d',
+ '%d',
+ '%d',
+ '%d',
+ '%s'
+ )
+ );
+ $recurr_id = $this->wpdb->insert_id;
+ $Recurrences->createRecurrenceTimesEntries( $recurr_id, true, true );
+ ++$number_events;
+ }
+ }
+ if ( !$debug ) {
+ $out = $number_events . ' events imported';
+ }
+ return $out;
+ }
}
?>