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));
     }
 }
 /**
  * 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'];
 }
Esempio n. 3
0
 /**
  * Check that the upgrade routine run for users updating EO after
  * updating to WP 4.2 is able to recover 'lost' data.
  */
 public function testPostSplitTermsUpgrade()
 {
     global $wpdb;
     if (version_compare(get_bloginfo('version'), '4.2-alpha-31007-src', '<')) {
         $this->markTestSkipped(sprintf('This test applies only to 4.2-alpha-31007-src+, running %s', get_bloginfo('version')));
         return;
     }
     remove_action('split_shared_term', '_eventorganiser_handle_split_shared_terms', 10);
     register_taxonomy('wptests_tax', 'event');
     //Create terms - they'll have unique term IDs
     $t1 = wp_insert_term('Foo', 'wptests_tax');
     $t2 = eo_insert_venue('Foo', array('address' => 'Edinburgh Castle', 'city' => 'Edinburgh', 'country' => 'UK'));
     $t3 = wp_insert_term('Foo', 'event-category');
     //Manually modify the terms so they share term IDs
     $wpdb->update($wpdb->term_taxonomy, array('term_id' => $t1['term_id']), array('term_taxonomy_id' => $t2['term_taxonomy_id']), array('%d'), array('%d'));
     $wpdb->update($wpdb->term_taxonomy, array('term_id' => $t1['term_id']), array('term_taxonomy_id' => $t3['term_taxonomy_id']), array('%d'), array('%d'));
     //Insert/move data so it is assigned to 'pre-split ID'.
     update_option('eo-event-category_' . $t1['term_id'], array('colour' => '#ff0000'));
     $wpdb->update($wpdb->eo_venuemeta, array('eo_venue_id' => $t1['term_id']), array('eo_venue_id' => $t2['term_id']));
     //Create event and assign terms so we can retrieve term IDs
     $events = $this->factory->event->create_many(3);
     wp_set_object_terms($events[0], array('Foo'), 'wptests_tax');
     wp_set_object_terms($events[1], array('Foo'), 'event-venue');
     wp_set_object_terms($events[2], array('Foo'), 'event-category');
     // Verify that the term IDs are shared.
     $t1_terms = wp_get_object_terms($events[0], 'wptests_tax');
     $t2_terms = wp_get_object_terms($events[1], 'event-venue');
     $t3_terms = wp_get_object_terms($events[2], 'event-category');
     $this->assertSame($t1_terms[0]->term_id, $t2_terms[0]->term_id);
     $this->assertSame($t1_terms[0]->term_id, $t3_terms[0]->term_id);
     //Split by updating venue
     eo_update_venue($t2_terms[0]->term_id, array('name' => 'Venue Foo'));
     wp_update_term($t3_terms[0]->term_id, 'event-category', array('name' => 'Category Foo'));
     //Check meta data is "lost"
     $t2_terms = wp_get_object_terms($events[1], 'event-venue');
     $t3_terms = wp_get_object_terms($events[2], 'event-category');
     $address = eo_get_venue_address($t2_terms[0]->term_id);
     $this->assertEquals('', '');
     $meta = get_option('eo-event-category_' . $t3_terms[0]->term_id);
     $this->assertEquals(false, $meta);
     //Run upgrade routine
     eventorganiser_021200_update();
     //Check data is recovered
     $t2_terms = wp_get_object_terms($events[1], 'event-venue');
     $t3_terms = wp_get_object_terms($events[2], 'event-category');
     $address = eo_get_venue_address($t2_terms[0]->term_id);
     $this->assertEquals('Edinburgh', $address['city']);
     $meta = get_option('eo-event-category_' . $t3_terms[0]->term_id);
     $this->assertEquals('#ff0000', $meta['colour']);
     add_action('split_shared_term', '_eventorganiser_handle_split_shared_terms', 10, 4);
 }
 function page_actions()
 {
     global $EO_Errors;
     //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');
                     $_REQUEST['event-venue'] = $venue->slug;
                     $EO_Errors->add('eo_notice', __("Venue <strong>updated</strong>", 'eventorganiser'));
                 }
                 $_REQUEST['action'] = 'edit';
                 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'] : '';
                 $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 {
                     $EO_Errors->add('eo_notice', __("Venue <strong>created</strong>", 'eventorganiser'));
                     $term_id = (int) $return['term_id'];
                     $venue = get_term($term_id, 'event-venue');
                     $_REQUEST['action'] = 'edit';
                     $_REQUEST['event-venue'] = $venue->slug;
                 }
                 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) {
                     $EO_Errors = new WP_Error('eo_notice', __("Venue(s) <strong>deleted</strong>", 'eventorganiser'));
                 } 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');
         do_action('add_meta_boxes_event_page_venues', $venue);
         do_action('add_meta_boxes', 'event_page_venues', $venue);
     } 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));
     }
 }