/** * Check to make sure that the event data is saved properly. * */ function test_tribe_create_event_template_tag_meta_information() { $post = get_post(tribe_create_event($this->postExampleSettings)); $this->assertEquals(3, $post->post_author); $this->assertEquals('This is event content!', $post->post_content); $this->assertEquals('', get_post_meta($post->ID, '_EventAllDay', true)); $this->assertEquals(1, get_post_meta($post->ID, '_EventHideFromUpcoming', true)); $this->assertEquals(5, get_post_meta($post->ID, '_EventOrganizerID', true)); $this->assertEquals(8, get_post_meta($post->ID, '_EventVenueID', true)); $this->assertEquals(1, get_post_meta($post->ID, '_EventShowMapLink', true)); $this->assertEquals(1, get_post_meta($post->ID, '_EventShowMapLink', true)); $this->assertEquals(1, get_post_meta($post->ID, '_EventShowMap', true)); $this->assertEquals('2012-01-03 15:25:00', get_post_meta($post->ID, '_EventEndDate', true)); }
/** * Ensure we have events with a range of different costs and also * some events where the cost is not defined. */ public function setUp() { // This needs to come first so that the post_example_settings template is created parent::setUp(); $costs = [null, '4,92', '4,999', '5', '5.99', '25', '100', '180.067', '3.00 8.00 125.95', '*&^$@#%@', '東京は都会です', '1995.95']; $iterations = 0; foreach ($costs as $event_cost) { $iterations++; $new_event = $this->post_example_settings; $new_event['post_title'] .= uniqid(); $new_event['EventStartDate'] = date_i18n('Y-m-d', strtotime("+{$iterations} days")); if (null !== $event_cost) { $new_event['EventCost'] = $event_cost; } $this->test_events[] = [$event_cost, tribe_create_event($new_event)]; } }
/** * Imports the schedule. * * @access public * @since 1.0.0 */ public function import_wordcamp_schedule() { global $wpdb; // There's no point if TEC doesn't exist if (!function_exists('tribe_create_event')) { return false; } // Get the schedule if (($response = wp_remote_get('https://central.wordcamp.org/wp-json/posts?type=wordcamp&filter[posts_per_page]=30')) && ($body = wp_remote_retrieve_body($response)) && ($schedule = json_decode($body))) { // Get current WordCamp IDs so we don't duplicate events $wordcamp_ids = $wpdb->get_col("SELECT meta.meta_value FROM {$wpdb->postmeta} meta INNER JOIN {$wpdb->posts} posts ON posts.ID = meta.post_id AND posts.post_type = 'tribe_events' WHERE meta.meta_key = '_wordcamp_id'"); // Set datetime format $date_format = 'Y-m-d'; // H:i:s'; foreach ($schedule as $event) { // Get post ID $event_post_id = in_array($event->ID, $wordcamp_ids) ? $wpdb->get_var("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wordcamp_id' AND meta_value = '{$event->ID}'") : false; // Setup event args $event_args = array('post_title' => $event->title, 'post_content' => $event->content, 'post_status' => 'publish', 'EventAllDay' => true, 'EventTimezone' => $event->date_tz); // Set timezone $event_timezone = new DateTimeZone($event->date_tz); // Will hold venue info $event_venue = array(); // Process all the meta foreach ($event->post_meta as $meta) { // Get meta value $meta_value = $meta->value; // Get start date if (preg_match('/^Start\\sDate/i', $meta->key)) { // We must have a value if ($meta_value) { // Create DateTime $start_date = new DateTime(date('Y-m-d', $meta_value), $event_timezone); // Store for event $event_args['EventStartDate'] = $start_date->format($date_format); } else { // Change status to draft since no start date $event_args['post_status'] = 'draft'; // No start date $event_args['EventStartDate'] = null; } } else { if (preg_match('/^End\\sDate/i', $meta->key)) { // We must have a value if ($meta_value) { // Create DateTime $end_date = new DateTime(date('Y-m-d', $meta_value), $event_timezone); // Store for event $event_args['EventEndDate'] = $end_date->format($date_format); } } else { if ($meta_value) { switch ($meta->key) { case 'URL': $event_args['_EventURL'] = $meta_value; break; case 'Venue Name': $event_venue['Venue'] = $meta_value; break; } } } } } // If we have event info if (!empty($event_venue)) { $event_args['Venue'] = $event_venue; } // If we have event info... if (!empty($event_args)) { // Make sure we have an end date if (!$event_args['EventEndDate']) { $event_args['EventEndDate'] = $event_args['EventStartDate']; } // Update the event if (in_array($event->ID, $wordcamp_ids)) { // Update the event if ($event_post_id > 0) { // @TODO Don't update the post content // until I figure out how to not override changes unset($event_args['post_content']); tribe_update_event($event_post_id, $event_args); } } else { if ($event_post_id = tribe_create_event($event_args)) { // Store the WordCamp ID if ($event_post_id > 0) { add_post_meta($event_post_id, '_wordcamp_id', $event->ID, true); } } } // Make sure the category is set if ($event_post_id > 0) { wp_set_object_terms($event_post_id, 'wordcamps', 'tribe_events_cat', true); } } } } }
function fbes_send_events($events) { $eids = array(); $query = new WP_Query(array('post_type' => 'tribe_events', 'posts_per_page' => '-1')); foreach ($query->posts as $post) { if (!empty($post->to_ping)) { $segments = fbes_segments($post->to_ping); $eid = array_pop($segments); $eids[$eid] = $post->ID; } //if you're reading this and you want to delete all those duplicate events, uncomment this temporarially. Note, it will also delete all manually made events since June 13 //http://codex.wordpress.org/Version_3.4 - June 13, 2012 //depending on many duplicates you had, you might end up re-loading this script a bunch of times after it times out. Me, I had 14k duplicates. Had to run the script like 10 times. /* else { $post_date = trim(substr($post->post_date, 0, 10)); if($post->post_date > '2012-06-12') wp_delete_post($post->ID); } */ } //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/fbevent.log', print_r(array(time(),$events,$eids),1)."\n".str_repeat('=',40)."\n", FILE_APPEND); foreach ($events as $event) { $args['post_title'] = $event['name']; $offset = get_option('gmt_offset') * 3600; $offsetStart = $event['start_time'] + $offset; $offsetEnd = $event['end_time'] + $offset; //don't update or insert events from the past. if ($offsetStart > time()) { $args['EventStartDate'] = date("Y-m-d", $offsetStart); $args['EventStartHour'] = date("H", $offsetStart); $args['EventStartMinute'] = date("i", $offsetStart); $args['EventEndDate'] = date("Y-m-d", $offsetEnd); $args['EventEndHour'] = date("H", $offsetEnd); $args['EventEndMinute'] = date("i", $offsetEnd); $args['post_content'] = $event['description']; $args['Venue']['Venue'] = $event['location']; $args['post_status'] = "Publish"; $args['post_type'] = "tribe_events"; //$args['to_ping'] = $event['eid']; //damn you, sanitize_trackback_urls in 3.4 $args['to_ping'] = 'https://www.facebook.com/events/' . $event['id'] . '/'; $inserting = $post_id = false; if (!array_key_exists($event['id'], $eids)) { //double check $already_exists = false; foreach ($query->posts as $post) { if ($post->to_ping == $args['to_ping'] || trim($post->pinged) == $args['to_ping']) { $already_exists = true; } } if (!$already_exists) { file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/fbevent.log', print_r(array(time(), 'creating', $args, $eids, $query->posts), 1) . "\n" . str_repeat('=', 40) . "\n", FILE_APPEND); $post_id = tribe_create_event($args); echo "<br />Inserting: " . $post_id; $inserting = true; } } if (!$inserting) { $post_id = $eids[$event['id']]; echo "{$post_id}"; tribe_update_event($post_id, $args); echo "<br />Updating: " . $eids[$event['id']]; } if ($post_id) { update_metadata('post', $post_id, 'fb_event_obj', $event); } //eid, name, start_time, end_time, location, description } if ($eids) { reset($eids); } } }
/** * Inserts events, venues, and organizers for the Import Record * * @param array $data Dummy data var to allow children to optionally react to passed in data * * @return array|WP_Error */ public function insert_posts($items = array()) { add_filter('tribe-post-origin', array(Tribe__Events__Aggregator__Records::instance(), 'filter_post_origin'), 10); // Creates an Activity to log what Happened $activity = new Tribe__Events__Aggregator__Record__Activity(); $args = array('post_status' => $this->meta['post_status']); $unique_field = $this->get_unique_field(); $existing_ids = $this->get_existing_ids_from_import_data($items); //cache $possible_parents = array(); $found_organizers = array(); $found_venues = array(); //if we have no non recurring events the message may be different $non_recurring = false; $show_map_setting = Tribe__Events__Aggregator__Settings::instance()->default_map($this->meta['origin']); $update_authority_setting = Tribe__Events__Aggregator__Settings::instance()->default_update_authority($this->meta['origin']); $unique_inserted = array(); foreach ($items as $item) { $event = Tribe__Events__Aggregator__Event::translate_service_data($item); // set the event ID if it can be set if ($unique_field && isset($event[$unique_field['target']]) && isset($existing_ids[$event[$unique_field['target']]])) { $event['ID'] = $existing_ids[$event[$unique_field['target']]]->post_id; } // only set the post status if there isn't an ID if (empty($event['ID'])) { $event['post_status'] = $args['post_status']; } /** * Should events that have previously been imported be overwritten? * * By default this is turned off (since it would reset the post status, description * and any other fields that have subsequently been edited) but it can be enabled * by returning true on this filter. * * @var bool $overwrite * @var int $event_id */ if (!empty($event['ID']) && 'retain' === $update_authority_setting) { // Log this Event was Skipped $activity->add('event', 'skipped', $event['ID']); continue; } if ($show_map_setting) { $event['EventShowMap'] = $show_map_setting; $event['EventShowMapLink'] = $show_map_setting; } if (empty($event['recurrence'])) { $non_recurring = true; } // set the parent if (!empty($event['ID']) && ($id = wp_get_post_parent_id($event['ID']))) { $event['post_parent'] = $id; } elseif (!empty($event['parent_uid']) && ($k = array_search($event['parent_uid'], $possible_parents))) { $event['post_parent'] = $k; } //if we should create a venue or use existing if (!empty($event['Venue']['Venue'])) { $v_id = array_search($event['Venue']['Venue'], $found_venues); if (false !== $v_id) { $event['EventVenueID'] = $v_id; } elseif ($venue = get_page_by_title($event['Venue']['Venue'], 'OBJECT', Tribe__Events__Main::VENUE_POST_TYPE)) { $found_venues[$venue->ID] = $event['Venue']['Venue']; $event['EventVenueID'] = $venue->ID; } else { $event['Venue']['ShowMap'] = $show_map_setting; $event['Venue']['ShowMapLink'] = $show_map_setting; $event['EventVenueID'] = Tribe__Events__Venue::instance()->create($event['Venue'], $this->meta['post_status']); // Log this Venue was created $activity->add('venue', 'created', $event['EventVenueID']); } // Remove the Venue to avoid duplicates unset($event['Venue']); } //if we should create an organizer or use existing if (!empty($event['Organizer']['Organizer'])) { $o_id = array_search($event['Organizer']['Organizer'], $found_organizers); if (false !== $o_id) { $event['EventOrganizerID'] = $o_id; } elseif ($organizer = get_page_by_title($event['Organizer']['Organizer'], 'OBJECT', Tribe__Events__Main::ORGANIZER_POST_TYPE)) { $found_organizers[$organizer->ID] = $event['Organizer']['Organizer']; $event['EventOrganizerID'] = $organizer->ID; } else { $event['EventOrganizerID'] = Tribe__Events__Organizer::instance()->create($event['Organizer'], $this->meta['post_status']); // Log this Organizer was created $activity->add('organizer', 'created', $event['EventOrganizerID']); } // Remove the Organizer to avoid duplicates unset($event['Organizer']); } $event['post_type'] = Tribe__Events__Main::POSTTYPE; /** * Filters the event data before any sort of saving of the event * * @param array $event Event data to save * @param Tribe__Events__Aggregator__Record__Abstract Importer record */ $event = apply_filters('tribe_aggregator_before_save_event', $event, $this); if (!empty($event['ID'])) { if ('preserve_changes' === $update_authority_setting) { $event = Tribe__Events__Aggregator__Event::preserve_changed_fields($event); } add_filter('tribe_aggregator_track_modified_fields', '__return_false'); /** * Filters the event data before updating event * * @param array $event Event data to save * @param Tribe__Events__Aggregator__Record__Abstract Importer record */ $event = apply_filters('tribe_aggregator_before_update_event', $event, $this); $event['ID'] = tribe_update_event($event['ID'], $event); // since the Event API only supports the _setting_ of these meta fields, we need to manually // delete them rather than relying on Tribe__Events__API::saveEventMeta() if (isset($event['EventShowMap']) && (empty($event['EventShowMap']) || 'no' === $event['EventShowMap'])) { delete_post_meta($event['ID'], '_EventShowMap'); } if (isset($event['EventShowMapLink']) && (empty($event['EventShowMapLink']) || 'no' === $event['EventShowMapLink'])) { delete_post_meta($event['ID'], '_EventShowMapLink'); } remove_filter('tribe_aggregator_track_modified_fields', '__return_false'); // Log that this event was updated $activity->add('event', 'updated', $event['ID']); } else { /** * Filters the event data before inserting event * * @param array $event Event data to save * @param Tribe__Events__Aggregator__Record__Abstract Importer record */ $event = apply_filters('tribe_aggregator_before_insert_event', $event, $this); $event['ID'] = tribe_create_event($event); // Log this event was created $activity->add('event', 'created', $event['ID']); } Tribe__Events__Aggregator__Records::instance()->add_record_to_event($event['ID'], $this->id, $this->origin); //add post parent possibility if (empty($event['parent_uid'])) { $possible_parents[$event['ID']] = $event[$unique_field['target']]; } if (!empty($event[$unique_field['target']])) { update_post_meta($event['ID'], "_{$unique_field['target']}", $event[$unique_field['target']]); } //Save the meta data in case of updating to pro later on if (!empty($event['EventRecurrenceRRULE'])) { update_post_meta($event['ID'], '_EventRecurrenceRRULE', $event['EventRecurrenceRRULE']); } $terms = array(); if (!empty($event['categories'])) { foreach ($event['categories'] as $cat) { if (!($term = term_exists($cat, Tribe__Events__Main::TAXONOMY))) { $term = wp_insert_term($cat, Tribe__Events__Main::TAXONOMY); if (!is_wp_error($term)) { $terms[] = (int) $term['term_id']; // Track that we created a Term $activity->add('cat', 'created', $term['term_id']); } } else { $terms[] = (int) $term['term_id']; } } } // if we are setting all events to a category specified in saved import if (!empty($this->meta['category'])) { $terms[] = (int) $this->meta['category']; } wp_set_object_terms($event['ID'], $terms, Tribe__Events__Main::TAXONOMY, false); // If we have a Image Field from Service if (!empty($event['image'])) { // Attempt to grab the event image $image_import = Tribe__Events__Aggregator::instance()->api('image')->get($event['image']->id); /** * Filters the returned event image url * * @param array|bool $image Attachment information * @param array $event Event array */ $image = apply_filters('tribe_aggregator_event_image', $image_import, $event); // If there was a problem bail out if (false === $image) { continue; } // Verify for more Complex Errors if (is_wp_error($image)) { continue; } if (isset($image->status) && 'created' === $image->status) { // Set as featured image $featured_status = set_post_thumbnail($event['ID'], $image->post_id); if ($featured_status) { // Log this attachment was created $activity->add('attachment', 'created', $image->post_id); } } } } remove_filter('tribe-post-origin', array(Tribe__Events__Aggregator__Records::instance(), 'filter_post_origin'), 10); return $activity; }
/** * Test a non-linear closest event list * * The order should be: * * ID EventStartDate * 2 2015-12-01 12:00:00 * 1 2015-12-02 15:00:00 * 3 2015-12-02 15:00:00 * 4 2015-12-02 15:00:00 * 5 2015-12-03 16:00:00 */ public function test_closest_event_non_linear() { $main = \Tribe__Events__Main::instance(); $settings = $this->post_example_settings; unset($settings['EventHideFromUpcoming']); $settings['EventStartDate'] = date('Y-m-d', strtotime('+2 days')); $settings['EventEndDate'] = date('Y-m-d', strtotime('+2 days')); $settings['EventStartHour'] = '3'; $settings['EventStartMinute'] = '00'; $settings['EventStartMeridian'] = 'pm'; $settings['EventEndHour'] = '4'; $settings['EventEndMinute'] = '00'; $settings['EventEndMeridian'] = 'pm'; $post_id = tribe_create_event($settings); $post_1 = tribe_get_events(array('p' => $post_id))[0]; $settings['post_title'] = 'Test event 2'; $settings['EventStartDate'] = date('Y-m-d', strtotime('+1 day')); $settings['EventEndDate'] = date('Y-m-d', strtotime('+1 day')); $settings['EventStartHour'] = '12'; $settings['EventEndHour'] = '1'; $post_id = tribe_create_event($settings); $post_2 = tribe_get_events(array('p' => $post_id))[0]; $settings['post_title'] = 'Test event 3'; $settings['EventStartDate'] = date('Y-m-d', strtotime('+2 days')); $settings['EventEndDate'] = date('Y-m-d', strtotime('+2 days')); $settings['EventStartHour'] = '3'; $settings['EventEndHour'] = '4'; $post_id = tribe_create_event($settings); $post_3 = tribe_get_events(array('p' => $post_id))[0]; $settings['post_title'] = 'Test event 4'; $post_id = tribe_create_event($settings); $post_4 = tribe_get_events(array('p' => $post_id))[0]; $settings['post_title'] = 'Test event 5'; $settings['EventStartDate'] = date('Y-m-d', strtotime('+3 days')); $settings['EventEndDate'] = date('Y-m-d', strtotime('+3 days')); $settings['EventStartHour'] = '4'; $settings['EventEndHour'] = '5'; $post_id = tribe_create_event($settings); $post_5 = tribe_get_events(array('p' => $post_id))[0]; $this->assertEquals($post_2->ID, $main->get_closest_event($post_1, 'previous')->ID, "Post 1's previous post should be Post 2"); $this->assertEquals($post_3->ID, $main->get_closest_event($post_1, 'next')->ID, "Post 1's next post should be Post 3"); $this->assertEquals(null, $main->get_closest_event($post_2, 'previous'), "Post 2's previous post should be null"); $this->assertEquals($post_1->ID, $main->get_closest_event($post_2, 'next')->ID, "Post 2's next post should be Post 1"); $this->assertEquals($post_1->ID, $main->get_closest_event($post_3, 'previous')->ID, "Post 3's previous post should be Post 1"); $this->assertEquals($post_4->ID, $main->get_closest_event($post_3, 'next')->ID, "Post 3's next post should be Post 4"); $this->assertEquals($post_3->ID, $main->get_closest_event($post_4, 'previous')->ID, "Post 4's previous post should be Post 3"); $this->assertEquals($post_5->ID, $main->get_closest_event($post_4, 'next')->ID, "Post 4's next post should be Post 5"); $this->assertEquals($post_4->ID, $main->get_closest_event($post_5, 'previous')->ID, "Post 5's previous post should be Post 4"); $this->assertEquals(null, $main->get_closest_event($post_5, 'next'), "Post 5's next post should be null"); }
function bp_ning_import_get_events() { global $wpdb; $ning_id_array = get_option('bp_ning_user_array'); //delete_option('bp_ning_events_imported'); $imported = get_option('bp_ning_events_imported', array()); $events = bp_ning_import_prepare_json('events', false); $counter = 0; foreach ((array) $events as $event) { if (isset($imported[$event->id])) { continue; } if ($counter >= 30) { update_option('bp_ning_events_imported', $imported); printf(__('%d out of %d events done.'), count($imported), count($events)); return false; } $post_date = date('Y-m-d H:i:s', strtotime($event->createdDate)); if ($post_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_title = %s AND post_type=%s AND post_date = %s", $event->title, TribeEvents::POSTTYPE, $post_date))) { echo "<strong>Event already exists: {$event->title}</strong><br />"; $imported[$event->id] = true; continue; } $ning_group_creator_id = $event->contributorName; $creator_id = $ning_id_array[$ning_group_creator_id]; $creator = get_userdata($creator_id); $start = strtotime($event->startDate); $end = strtotime($event->endDate); $args = array('post_title' => $event->title, 'post_content' => $event->description, 'post_date' => $post_date, 'post_modified' => date('Y-m-d H:i:s', strtotime($event->updatedDate)), 'post_status' => 'publish', 'post_author' => $creator_id, 'EventStartDate' => date('Y-m-d', $start), 'EventEndDate' => date('Y-m-d', $end), 'Venue' => array(), 'Organizer' => array('Organizer' => $creator->display_name, 'Email' => $creator->user_email)); if (isset($event->isPrivate) && $event->isPrivate) { $args['post_status'] = 'private'; } if (isset($event->allDay) && $event->allDay) { $args['EventAllDay'] = true; } else { $args['EventStartHour'] = date('h', $start); $args['EventStartMinute'] = date('i', $start); $args['EventStartMeridian'] = date('a', $start); $args['EventEndHour'] = date('h', $end); $args['EventEndMinute'] = date('i', $end); $args['EventEndMeridian'] = date('a', $end); } if (isset($event->location)) { $args['Venue'] = array('Venue' => $event->location, 'Country' => 'AU'); if (isset($event->street)) { $args['Venue']['Address'] = $event->street; } if (isset($event->city)) { $args['Venue']['City'] = $event->city; } if (isset($event->contactInfo)) { $args['Venue']['Phone'] = $event->contactInfo; } } $event_id = tribe_create_event($args); if (is_wp_error($event_id)) { echo "<strong>Unable to create event: {$event->title} - Error was " . $event_id->get_error_message() . '</strong><br />'; continue; } if (isset($event->website)) { add_post_meta($event_id, '_bp_ning_event_website', $event->website); } $imported[$event->id] = true; $counter++; echo "<strong>Event created: {$event->title}</strong><br />"; } update_option('bp_ning_events_imported', $imported); return true; }