function page_actions()
 {
     global $EO_Errors;
     add_action('admin_notices', array($this, 'admin_notices'));
     //Determine action if any
     $action = $this->current_action();
     $venue = isset($_REQUEST['event-venue']) ? $_REQUEST['event-venue'] : false;
     if ($action && $venue || $action == 'add') {
         if (!current_user_can('manage_venues')) {
             wp_die(__('You do not have permission to manage venues', 'eventorganiser'));
         }
         switch ($action) {
             case 'update':
                 if (!check_admin_referer('eventorganiser_update_venue_' . $venue)) {
                     wp_die(__('You do not have permission to edit this venue.', 'eventorganiser'));
                 }
                 $venue = get_term_by('slug', esc_attr($venue), 'event-venue');
                 $return = eo_update_venue($venue->term_id, $_POST['eo_venue']);
                 if (is_wp_error($return)) {
                     $EO_Errors->add('eo_error', __('Venue <strong>was not</strong> updated', 'eventorganiser') . ': ' . $return->get_error_message());
                 } else {
                     $term_id = (int) $return['term_id'];
                     $venue = get_term($term_id, 'event-venue');
                     $url = add_query_arg(array('page' => 'venues', 'action' => 'edit', 'event-venue' => $venue->slug, 'message' => 2), admin_url('edit.php?post_type=event'));
                     wp_redirect(esc_url_raw($url));
                     exit;
                 }
                 break;
             case 'add':
                 if (!check_admin_referer('eventorganiser_add_venue')) {
                     wp_die(__('You do not have permission to edit this venue.', 'eventorganiser'));
                 }
                 $args = $_POST['eo_venue'];
                 $name = isset($args['name']) ? $args['name'] : '';
                 //Venue may already exist in database since it may have been added via ajax (by pro plug-in);
                 if (!empty($args['venue_id']) && ($_venue = eo_get_venue_by('id', $args['venue_id']))) {
                     //Since we're updating, need to explicitly provide slug to update it. Slug will be 'new-venue'.
                     $args['slug'] = sanitize_title($args['name']);
                     $return = eo_update_venue($_venue->term_id, $args);
                 } else {
                     $return = eo_insert_venue($name, $args);
                 }
                 if (is_wp_error($return)) {
                     $EO_Errors->add('eo_error', __('Venue <strong>was not</strong> created', 'eventorganiser') . ': ' . $return->get_error_message());
                     $_REQUEST['action'] = 'create';
                 } else {
                     $term_id = (int) $return['term_id'];
                     $venue = get_term($term_id, 'event-venue');
                     $url = add_query_arg(array('page' => 'venues', 'action' => 'edit', 'event-venue' => $venue->slug, 'message' => 1), admin_url('edit.php?post_type=event'));
                     wp_redirect(esc_url_raw($url));
                     exit;
                 }
                 break;
             case 'delete':
                 if (is_array($_REQUEST['event-venue'])) {
                     $nonce = 'bulk-venues';
                 } else {
                     $nonce = 'eventorganiser_delete_venue_' . $venue;
                 }
                 if (!check_admin_referer($nonce)) {
                     wp_die(__('You do not have permission to delete this venue', 'eventorganiser'));
                 }
                 $venues = (array) $venue;
                 //Count the number of deleted venues
                 $deleted = 0;
                 foreach ($venues as $venue) {
                     $venue = get_term_by('slug', esc_attr($venue), 'event-venue');
                     $resp = eo_delete_venue($venue->term_id);
                     if (!is_wp_error($resp) && true === $resp) {
                         $deleted++;
                     }
                 }
                 if ($deleted > 0) {
                     $url = add_query_arg(array('page' => 'venues', 'message' => 3), admin_url('edit.php?post_type=event'));
                     wp_redirect(esc_url_raw($url));
                     exit;
                 } else {
                     $EO_Errors = new WP_Error('eo_error', __('Venue(s) <strong>were not </strong> deleted', 'eventorganiser'));
                 }
                 break;
         }
     }
     $action = $this->current_action();
     if (in_array($action, array('edit', 'update', 'create'))) {
         $venue = isset($_REQUEST['event-venue']) ? $_REQUEST['event-venue'] : false;
         //Venued edit page
         add_meta_box('submitdiv', __('Save', 'eventorganiser'), 'eventorganiser_venue_submit', 'event_page_venues', 'side', 'high');
         /**
          * Fires after all built-in meta boxes for venues have been added.
          *
          * @param Object $venue Venue (term object)
          */
         do_action('add_meta_boxes_event_page_venues', $venue);
         /**
          * @ignore
          */
         do_action('add_meta_boxes', 'event_page_venues', $venue);
         add_screen_option('layout_columns', array('max' => 2, 'default' => 2));
     } else {
         //Venue admin list
         require_once 'classes/class-eo-venue-list-table.php';
         add_filter('manage_event_page_venues_columns', 'eventorganiser_venue_admin_columns');
         add_screen_option('per_page', array('option' => 'edit_event_venue_per_page', 'label' => __('Venues', 'eventorganiser'), 'default' => 20));
     }
 }
/**
* A utility function for getting the venue ID from a venue ID or slug.
* Useful for when we don't know which is being passed to us, but we want the ID.
* IDs **must** be cast as integers
* @since 1.6
*
* @param mixed $venue_slug_or_id The venue ID as an integer. Or Slug as string. Uses venue of current event if empty.
* @return int The corresponding venue (event-venue term) ID or false if not found.
*/
function eo_get_venue_id_by_slugorid($venue_slug_or_id = '')
{
    $venue = $venue_slug_or_id;
    if (empty($venue)) {
        return eo_get_venue();
    }
    if (is_int($venue)) {
        return (int) $venue;
    }
    $venue = eo_get_venue_by('slug', $venue);
    if ($venue) {
        return (int) $venue->term_id;
    }
    return false;
}
 /**
  * Update an EO venue given a CiviEvent location
  *
  * @since 0.1
  *
  * @param array $location The CiviEvent location data
  * @return int $term_id The numeric ID of the venue
  */
 public function update_venue($location)
 {
     // check permissions
     if (!$this->allow_venue_edit()) {
         return;
     }
     // does this location have an existing venue?
     $venue_id = $this->get_venue_id($location);
     // if we do not get one...
     if ($venue_id === false) {
         // create venue
         $term_id = $this->create_venue($location);
         // --<
         return $term_id;
     } else {
         // get full venue object
         $venue = eo_get_venue_by('id', $venue_id);
         // if for some reason the linkage fails
         if (!is_object($venue)) {
             // create venue
             $term_id = $this->create_venue($location);
             // --<
             return $term_id;
         }
         // construct args
         $args = array('name' => $venue->name);
         // add street address if present
         if (isset($location['address']['street_address']) and !empty($location['address']['street_address'])) {
             $args['address'] = $location['address']['street_address'];
         }
         // add city if present
         if (isset($location['address']['city']) and !empty($location['address']['city'])) {
             $args['city'] = $location['address']['city'];
         }
         // add postcode if present
         if (isset($location['address']['postal_code']) and !empty($location['address']['postal_code'])) {
             $args['postcode'] = $location['address']['postal_code'];
         }
         // add geocodes if present
         if (isset($location['address']['geo_code_1']) and !empty($location['address']['geo_code_1'])) {
             $args['latitude'] = $location['address']['geo_code_1'];
         }
         if (isset($location['address']['geo_code_2']) and !empty($location['address']['geo_code_2'])) {
             $args['longtitude'] = $location['address']['geo_code_2'];
         }
         // remove actions to prevent recursion
         remove_action('eventorganiser_save_venue', array($this, 'save_venue'), 10);
         // insert venue
         $result = eo_update_venue($venue_id, $args);
         /*
         error_log( print_r( array(
         	'method' => __METHOD__,
         	'location' => $location,
         	'venue_id' => $venue_id,
         	'venue' => $venue,
         	'result' => $result,
         	'args' => $args
         ), true ) );
         */
         // add actions again
         add_action('eventorganiser_save_venue', array($this, 'save_venue'), 10, 1);
         // if not an error
         if (is_wp_error($result) or !isset($result['term_id'])) {
             return false;
         }
         // create venue meta data, if present
         if (isset($location['email']['email'])) {
             eo_update_venue_meta($result['term_id'], '_civi_email', esc_sql($location['email']['email']));
         }
         if (isset($location['phone']['phone'])) {
             eo_update_venue_meta($result['term_id'], '_civi_phone', esc_sql($location['phone']['phone']));
         }
         // always store location ID
         eo_update_venue_meta($result['term_id'], '_civi_loc_id', $location['id']);
     }
     /*
     print_r( array(
     	'action' => 'update_venue',
     	'location' => $location,
     	'result' => $result,
     ) ); die();
     */
     // --<
     return $result['term_id'];
 }
function eventorgniaser_130_update()
{
    global $wpdb;
    $eventorganiser_venue_table = $wpdb->prefix . "eo_venues";
    //Venues being converted to taxonomy terms
    $venues = $wpdb->get_results(" SELECT* FROM {$eventorganiser_venue_table}");
    $slimetrail = array();
    //Track changes from an old slug to another
    //For each term insert it as a taxonomy term.
    foreach ($venues as $venue) {
        $old_slug = esc_attr($venue->venue_slug);
        $term = wp_insert_term(esc_attr($venue->venue_name), 'event-venue', array('description' => $venue->venue_description, 'slug' => $old_slug));
        if (!is_wp_error($term)) {
            $term = get_term_by('id', $term['term_id'], 'event-venue');
            $slimetrail[$old_slug] = $term->slug;
            //WordPress may have changed the slug
            if ($term->slug != $old_slug) {
                $wpdb->update($eventorganiser_venue_table, array('venue_slug' => $term->slug), array('venue_id' => $venue->venue_id), '%s', '%d');
            }
        }
    }
    //Loop through ALL events...
    $events = new WP_Query(array('post_type' => 'event', 'posts_per_page' => -1, 'showpastevents' => 1, 'showrepeats' => 0, 'post_status' => array('publish', 'private', 'pending', 'draft', 'future', 'trash')));
    global $post;
    if ($events->have_posts()) {
        while ($events->have_posts()) {
            $events->the_post();
            if (empty($post->Venue)) {
                continue;
            }
            //Doesn't have a venue
            $post_id = intval($post->ID);
            $venue_id = intval($post->Venue);
            $venue = eo_get_venue_by('id', $venue_id);
            //Get venue meta.
            if (!empty($venue)) {
                $slug = esc_attr($venue->slug);
                $venue_tax = get_term_by('slug', $slug, 'event-venue');
                if ($venue_tax) {
                    $venue_tax_id = (int) $venue_tax->term_id;
                    wp_set_object_terms($post_id, array($venue_tax_id), 'event-venue');
                    //Change Venue column to tax ID
                    $wpdb->update($wpdb->eo_events, array('Venue' => $venue_tax_id), array('post_id' => $post_id, 'Venue' => $venue_id), '%d', '%d');
                }
            }
        }
        wp_reset_postdata();
    }
}
 /**
  * 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));
 }