public function testPartDayForeignWeeklyEvent() { //A Monday 10pm event in New York would be a Tuesday event in UTC //This shouldn't be fixed here - but in eo_insert/update_event $ical = new EO_ICAL_Parser(); $ical->parse(EO_DIR_TESTDATA . '/ical/foreignPartDayWeeklyEvent.ics'); //Check the number of events have imported correctly //$this->assertEquals( array( 'TU' ), $ical->events[0]['schedule_meta'] ); }
/** * Reads in an ICAL file into an array, then parses the array and inserts events into database * @since 1.1.0 * @param string $cal_file - the file to import */ function import_file($ical_file) { global $EO_Errors; if (!current_user_can('manage_options') || !current_user_can('edit_events')) { wp_die(__('You do not have sufficient permissions to import events.', 'eventorganiser')); } $ical = new EO_ICAL_Parser(); $ical->parse($ical_file); $import_venues = isset($_POST['eo_import_venue']) ? true : false; $import_cats = isset($_POST['eo_import_cat']) ? true : false; $events_imported = 0; $events_updated = 0; $venues_imported = 0; $categories_imported = 0; if ($import_venues && $ical->venues) { foreach ($ical->venues as $venue) { if (!eo_get_venue_by('name', $venue)) { $args = array(); //If lat/lng meta data is set, include that if (isset($ical->venue_meta[$venue]['latitude']) && isset($ical->venue_meta[$venue]['longtitude'])) { $args['latitude'] = $ical->venue_meta[$venue]['latitude']; $args['longtitude'] = $ical->venue_meta[$venue]['longtitude']; } $new_venue = eo_insert_venue($venue, $args); if (!is_wp_error($new_venue) && $new_venue) { $venues_imported++; } } } } if ($import_cats && $ical->categories) { foreach ($ical->categories as $category) { if (!get_term_by('name', $category, 'event-category')) { $new_cat = wp_insert_term($category, 'event-category', array()); if (!is_wp_error($new_cat) && $new_cat) { $categories_imported++; } } } } foreach ($ical->events as $event) { //TODO refactor eo_insert_event & eo_update_event... $uid = !empty($event['uid']) ? $event['uid'] : false; //TODO Check if event already exists //$found_event = eo_get_event_by_uid( $uid ); //Create event if (!empty($event['event-venue'])) { $venue = eo_get_venue_by('name', $event['event-venue']); if ($venue) { $event['tax_input']['event-venue'][] = intval($venue->term_id); } } if (!empty($event['event-category'])) { $event['tax_input']['event-category'] = array(); foreach ($event['event-category'] as $category) { $cat = get_term_by('name', $category, 'event-category'); if ($cat) { $event['tax_input']['event-category'][] = intval($cat->term_id); } } } $event_id = eo_insert_event($event); if (is_wp_error($event_id)) { $ical->errors[] = $event_id; } else { $events_updated++; } } if ($events_updated == 0) { $EO_Errors->add('eo_error', __("No events were imported.", 'eventorganiser')); } if (count($ical->errors) > 0) { foreach ($ical->errors as $error) { $codes = $error->get_error_codes(); foreach ($codes as $code) { $error_messages = $error->get_error_messages(); foreach ($error_messages as $error_message) { $EO_Errors->add('eo_error', '<strong>' . __('Error:', 'eventorganiser') . '</strong> ' . $error_message); } } } } $message = array(); if ($ical->warnings) { foreach ($ical->warnings as $warning) { $message[] = '<strong>' . __('Warning:', 'eventorganiser') . '</strong> ' . $warning->get_error_message(); } } if (count($ical->events) == 1) { $message[] = __("1 event was successfully imported", 'eventorganiser'); } elseif (count($ical->events) > 1) { $message[] = sprintf(__("%d events were successfully imported", 'eventorganiser'), count($ical->events)) . "."; } if ($venues_imported == 1) { $message[] = __("1 venue was created", 'eventorganiser'); } elseif ($venues_imported > 1) { $message[] = sprintf(__("%d venues were created", 'eventorganiser'), $venues_imported); } if ($categories_imported == 1) { $message[] = __("1 category was created", 'eventorganiser'); } elseif ($categories_imported > 1) { $message[] = sprintf(__("%d categories were created", 'eventorganiser'), $categories_imported); } $EO_Errors->add('eo_notice', implode('<br/>', $message)); }