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']; }
/** * 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)); } }