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)); }