Tribe__Events__Aggregator__Record__Abstract::insert_posts( array $items = array() )
Inserts events, venues, and organizers for the Import Record
Contents
Parameters
- $items
-
(array) (Optional) Dummy data var to allow children to optionally react to passed in data.
Default value: array()
Return
(Tribe__Events__Aggregator__Record__Activity) The import activity record.
Source
File: src/Tribe/Aggregator/Record/Abstract.php
public function insert_posts( $items = array() ) {
add_filter( 'tribe-post-origin', array( Tribe__Events__Aggregator__Records::instance(), 'filter_post_origin' ), 10 );
/**
* Fires before events and linked posts are inserted in the database.
*
* @since 4.5.13
*
* @param array $items An array of items to insert.
* @param array $meta The record meta information.
*/
do_action( 'tribe_aggregator_before_insert_posts', $items, $this->meta );
// sets the default user ID to that of the first user that can edit events
$default_user_id = $this->get_default_user_id();
// Creates an Activity to log what Happened
$activity = new Tribe__Events__Aggregator__Record__Activity();
$initial_created_events = $activity->count( Tribe__Events__Main::POSTTYPE );
$expected_created_events = $initial_created_events + count( $items );
$args = array(
'post_status' => 'draft',
);
if ( ! empty( $this->meta['post_status'] ) && 'do_not_override' !== $this->meta['post_status'] ) {
$args['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();
$origin = $this->meta['origin'];
$show_map_setting = tribe_is_truthy( tribe( 'events-aggregator.settings' )->default_map( $origin ) );
$update_authority_setting = tribe( 'events-aggregator.settings' )->default_update_authority( $origin );
$import_settings = tribe( 'events-aggregator.settings' )->default_settings_import( $origin );
$should_import_settings = tribe_is_truthy( $import_settings ) ? true : false;
/**
* When an event/venue/organizer is being updated/inserted in the context of an import then any change
* should not be tracked as if made by the user. So doing would result results in posts
* "locked", under the "Import events but preserve local changes to event fields" event
* authority, after an update/insertion.
*/
add_filter( 'tribe_tracker_enabled', '__return_false' );
foreach ( $items as $item ) {
$event = Tribe__Events__Aggregator__Event::translate_service_data( $item );
// Configure the Post Type (enforcing)
$event['post_type'] = Tribe__Events__Main::POSTTYPE;
// Set the event ID if it can be set
if (
$this->origin !== 'url'
&& $unique_field
&& isset( $event[ $unique_field['target'] ] )
&& isset( $existing_ids[ $event[ $unique_field['target'] ] ] )
) {
$event_post_id = $existing_ids[ $event[ $unique_field['target'] ] ]->post_id;
if ( tribe_is_event( $event_post_id ) ) {
$event['ID'] = $event_post_id;
}
}
// Checks if we need to search for Global ID
if ( ! empty( $item->global_id ) ) {
$global_event = Tribe__Events__Aggregator__Event::get_post_by_meta( 'global_id', $item->global_id );
// If we found something we will only update that Post
if ( $global_event ) {
$event['ID'] = $global_event->ID;
}
}
// Only set the post status if there isn't an ID
if ( empty( $event['ID'] ) ) {
$event['post_status'] = Tribe__Utils__Array::get( $args, 'post_status', $this->meta['post_status'] );
/**
* Allows services to provide their own filtering of event post statuses before import, especially
* to handle the (do not override) status.
*
* @since 4.8.2
*
* @param string $post_status The event's post status before being filtered.
* @param array $event The WP event data about to imported and saved to the DB.
* @param Tribe__Events__Aggregator__Record__Abstract $record The import's EA Import Record.
*/
$event['post_status'] = apply_filters( 'tribe_aggregator_new_event_post_status_before_import', $event['post_status'], $event, $this );
}
/**
* 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 || (bool) isset( $event['show_map'] );
if ( $this->has_import_policy_for( $origin, 'show_map_link' ) ) {
$event['EventShowMapLink'] = isset( $event['show_map_link'] ) ? (bool) $event['show_map_link'] : $show_map_setting;
} else {
$event['EventShowMapLink'] = $show_map_setting;
}
}
unset( $event['show_map'], $event['show_map_link'] );
if ( $should_import_settings && isset( $event['hide_from_listings'] ) ) {
if ( $event['hide_from_listings'] == true ) {
$event['EventHideFromUpcoming'] = 'yes';
}
unset( $event['hide_from_listings'] );
}
if ( $should_import_settings && isset( $event['sticky'] ) ) {
if ( $event['sticky'] == true ) {
$event['EventShowInCalendar'] = 'yes';
$event['menu_order'] = - 1;
}
unset( $event['sticky'] );
}
if ( ! $should_import_settings ) {
unset( $event['feature_event'] );
}
// 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;
}
// Do we have an existing venue for this event that we should preserve?
// @todo review: should we care about the potential for multiple venue IDs?
if (
! empty( $event['ID'] )
&& 'preserve_changes' === $update_authority_setting
&& $existing_venue_id = tribe_get_venue_id( $event['ID'] )
) {
$event['EventVenueID'] = $existing_venue_id;
unset( $event['Venue'] );
}
// if we should create a venue or use existing
if ( ! empty( $event['Venue']['Venue'] ) ) {
$event['Venue']['Venue'] = trim( $event['Venue']['Venue'] );
if ( ! empty( $item->venue->global_id ) || in_array( $this->origin, array( 'ics', 'csv', 'gcal', 'ical' ) ) ) {
// Pre-set for ICS based imports
$venue = false;
if ( ! empty( $item->venue->global_id ) ) {
// Did we find a Post with a matching Global ID in History
$venue = Tribe__Events__Aggregator__Event::get_post_by_meta( 'global_id_lineage', $item->venue->global_id );
}
// Save the Venue Data for Updating
$venue_data = $event['Venue'];
if ( isset( $item->venue->description ) ) {
$venue_data['Description'] = $item->venue->description;
}
if ( isset( $item->venue->excerpt ) ) {
$venue_data['Excerpt'] = $item->venue->excerpt;
}
if ( isset( $item->venue->image ) ) {
$venue_data['FeaturedImage'] = $item->venue->image;
}
if ( $venue ) {
$venue_id = $event['EventVenueID'] = $venue_data['ID'] = $venue->ID;
$found_venues[ $venue->ID ] = $event['Venue']['Venue'];
// Here we might need to update the Venue depending on the main GlobalID
if ( 'retain' === $update_authority_setting ) {
// When we get here we say that we skipped an Venue
$activity->add( 'venue', 'skipped', $venue->ID );
} else {
if ( 'preserve_changes' === $update_authority_setting ) {
$venue_data = Tribe__Events__Aggregator__Event::preserve_changed_fields( $venue_data );
}
// Update the Venue
Tribe__Events__Venue::instance()->update( $venue->ID, $venue_data );
// Tell that we updated the Venue to the activity tracker
$activity->add( 'venue', 'updated', $venue->ID );
}
} else {
/**
* Allows filtering the venue ID while searching for it.
*
* Use this filter to define custom ways to find a matching Venue provided the EA
* record information; returning a non `null` value here will short-circuit the
* check Event Aggregator would make.
*
* @since 4.6.15
*
* @param int|null $venue_id The matching venue ID if any
* @param array $venue The venue data from the record.
*/
$venue_id = apply_filters( 'tribe_aggregator_find_matching_venue', null, $event['Venue'] );
if ( null === $venue_id ) {
// we search the venues already found in this request for this venue title
$venue_id = array_search( $event['Venue']['Venue'], $found_venues );
}
if ( ! $venue_id ) {
$venue_unique_field = $this->get_unique_field( 'venue' );
/**
* Whether Venues should be additionally searched by title when no match could be found
* using other methods.
*
* @since 4.6.5
*
* @param bool $lookup_venues_by_title
* @param stdClass $item The event data that is being currently processed, it includes the Venue data
* if any.
* @param Tribe__Events__Aggregator__Record__Abstract $record The current record that is processing events.
*/
$lookup_venues_by_title = apply_filters( 'tribe_aggregator_lookup_venues_by_title', true, $item, $this );
if ( ! empty( $venue_unique_field ) ) {
$target = $venue_unique_field['target'];
$value = $venue_data[ $target ];
$venue = Tribe__Events__Aggregator__Event::get_post_by_meta( "_Venue{$target}", $value );
}
if ( empty( $venue_unique_field ) || ( $lookup_venues_by_title && empty( $venue ) ) ) {
$venue = get_page_by_title( $event['Venue']['Venue'], 'OBJECT', Tribe__Events__Venue::POSTTYPE );
}
if ( $venue ) {
$venue_id = $venue->ID;
$found_venues[ $venue_id ] = $event['Venue']['Venue'];
}
}
// We didn't find any matching Venue for the provided one
if ( ! $venue_id ) {
$event['Venue']['ShowMap'] = $show_map_setting;
$event['Venue']['ShowMapLink'] = $show_map_setting;
$venue_id = $event['EventVenueID'] = Tribe__Events__Venue::instance()->create( $event['Venue'], $event['post_status'] );
$found_venues[ $event['EventVenueID'] ] = $event['Venue']['Venue'];
// Log this Venue was created
$activity->add( 'venue', 'created', $event['EventVenueID'] );
// Create the Venue Global ID
if ( ! empty( $item->venue->global_id ) ) {
update_post_meta( $event['EventVenueID'], Tribe__Events__Aggregator__Event::$global_id_key, $item->venue->global_id );
}
// Create the Venue Global ID History
if ( ! empty( $item->venue->global_id_lineage ) ) {
foreach ( $item->venue->global_id_lineage as $gid ) {
add_post_meta( $event['EventVenueID'], Tribe__Events__Aggregator__Event::$global_id_lineage_key, $gid );
}
}
} else {
$event['EventVenueID'] = $venue_data['ID'] = $venue_id;
// Here we might need to update the Venue depending we found something based on old code
if ( 'retain' === $update_authority_setting ) {
// When we get here we say that we skipped an Venue
$activity->add( 'venue', 'skipped', $venue_id );
} else {
if ( 'preserve_changes' === $update_authority_setting ) {
$venue_data = Tribe__Events__Aggregator__Event::preserve_changed_fields( $venue_data );
}
// Update the Venue
Tribe__Events__Venue::instance()->update( $venue_id, $venue_data );
// Tell that we updated the Venue to the activity tracker
$activity->add( 'venue', 'updated', $venue_id );
}
}
}
}
// Remove the Venue to avoid duplicates
unset( $event['Venue'] );
}
// Do we have an existing organizer(s) for this event that we should preserve?
if (
! empty( $event['ID'] )
&& 'preserve_changes' === $update_authority_setting
&& $existing_organizer_ids = tribe_get_organizer_ids( $event['ID'] )
) {
$event['Organizer'] = $existing_organizer_ids;
unset( $event['Organizer'] );
}
if ( ! empty( $event['Organizer'] ) ) {
$event_organizers = array();
// make sure organizers is an array
if ( $item->organizer instanceof stdClass ) {
$item->organizer = array( $item->organizer );
}
foreach ( $event['Organizer'] as $key => $organizer_data ) {
// if provided a valid Organizer ID right away use it
if ( ! empty( $organizer_data['OrganizerID'] ) ) {
if ( tribe_is_organizer( $organizer_data['OrganizerID'] ) ) {
$event_organizers[] = (int) $organizer_data['OrganizerID'];
continue;
}
unset( $organizer_data['OrganizerID'] );
}
// if we should create an organizer or use existing
if ( ! empty( $organizer_data['Organizer'] ) ) {
$organizer_data['Organizer'] = trim( $organizer_data['Organizer'] );
if (
! empty( $item->organizer[ $key ]->global_id )
|| in_array( $this->origin, array( 'ics', 'ical', 'csv', 'gcal' ) )
) {
// Pre-set for ICS based imports
$organizer = false;
if ( ! empty( $item->organizer[ $key ]->global_id ) ) {
// Did we find a Post with a matching Global ID in History
$organizer = Tribe__Events__Aggregator__Event::get_post_by_meta(
'global_id_lineage',
$item->organizer[ $key ]->global_id
);
}
if ( isset( $item->organizer[ $key ]->description ) ) {
$organizer_data['Description'] = $item->organizer[ $key ]->description;
}
if ( isset( $item->organizer[ $key ]->excerpt ) ) {
$organizer_data['Excerpt'] = $item->organizer[ $key ]->excerpt;
}
if ( $organizer ) {
$organizer_id = $organizer_data['ID'] = $organizer->ID;
$event_organizers[] = $organizer_id;
// If we have a Image Field for the Organizers from Service
if ( ! empty( $item->organizer[ $key ]->image ) ) {
$this->import_organizer_image( $organizer_id, $item->organizer[ $key ]->image, $activity );
}
$found_organizers[ $organizer->ID ] = $organizer_data['Organizer'];
// Here we might need to update the Organizer depending we found something based on old code
if ( 'retain' === $update_authority_setting ) {
// When we get here we say that we skipped an Organizer
$activity->add( 'organizer', 'skipped', $organizer->ID );
} else {
if ( 'preserve_changes' === $update_authority_setting ) {
$organizer_data = Tribe__Events__Aggregator__Event::preserve_changed_fields( $organizer_data );
}
// Update the Organizer
Tribe__Events__Organizer::instance()->update( $organizer->ID, $organizer_data );
// Tell that we updated the Organizer to the activity tracker
$activity->add( 'organizer', 'updated', $organizer->ID );
}
} else {
/**
* Allows filtering the organizer ID while searching for it.
*
* Use this filter to define custom ways to find a matching Organizer provided the EA
* record information; returning a non `null` value here will short-circuit the
* check Event Aggregator would make.
*
* @since 4.6.15
*
* @param int|null $organizer_id The matching organizer ID if any
* @param array $organizer The venue data from the record.
*/
$organizer_id = apply_filters( 'tribe_aggregator_find_matching_organizer', null, $organizer_data['Organizer'] );
if ( null === $organizer_id ) {
// we search the organizers already found in this request for this organizer title
$organizer_id = array_search( $organizer_data['Organizer'], $found_organizers );
}
if ( ! $organizer_id ) {
$organizer_unique_field = $this->get_unique_field( 'organizer' );
if ( ! empty( $organizer_unique_field ) ) {
$target = $organizer_unique_field['target'];
$value = $organizer_data[ $target ];
$organizer = Tribe__Events__Aggregator__Event::get_post_by_meta( "_Organizer{$target}", $value );
} else {
$organizer = get_page_by_title( $organizer_data['Organizer'], 'OBJECT', Tribe__Events__Organizer::POSTTYPE );
}
}
if ( ! $organizer_id ) {
if ( $organizer ) {
$organizer_id = $organizer->ID;
$found_organizers[ $organizer_id ] = $organizer_data['Organizer'];
}
}
// We didn't find any matching Organizer for the provided one
if ( ! $organizer_id ) {
$organizer_id = $event_organizers[] = Tribe__Events__Organizer::instance()->create( $organizer_data, $event['post_status'] );
$found_organizers[ $organizer_id ] = $organizer_data['Organizer'];
// Log this Organizer was created
$activity->add( 'organizer', 'created', $organizer_id );
// Create the Organizer Global ID
if ( ! empty( $item->organizer[ $key ]->global_id ) ) {
update_post_meta( $organizer_id, Tribe__Events__Aggregator__Event::$global_id_key,
$item->organizer[ $key ]->global_id );
}
// Create the Organizer Global ID History
if ( ! empty( $item->organizer[ $key ]->global_id_lineage ) ) {
foreach ( $item->organizer[ $key ]->global_id_lineage as $gid ) {
add_post_meta( $organizer_id, Tribe__Events__Aggregator__Event::$global_id_lineage_key,
$gid );
}
}
} else {
$event_organizers[] = $organizer_data['ID'] = $organizer_id;
// Here we might need to update the Organizer depending we found something based on old code
if ( 'retain' === $update_authority_setting ) {
// When we get here we say that we skipped an Organizer
$activity->add( 'organizer', 'skipped', $organizer_id );
} else {
if ( 'preserve_changes' === $update_authority_setting ) {
$organizer_data = Tribe__Events__Aggregator__Event::preserve_changed_fields( $organizer_data );
}
// Update the Organizer
Tribe__Events__Organizer::instance()->update( $organizer_id, $organizer_data );
// Tell that we updated the Organizer to the activity tracker
$activity->add( 'organizer', 'updated', $organizer_id );
}
}
}
}
}
}
// Update the organizer submission data
$event['Organizer']['OrganizerID'] = $event_organizers;
// Let's remove this Organizer from the Event information if we found it
if ( isset( $key ) && is_numeric( $key ) ) {
unset( $event['Organizer'][ $key ] );
}
}
/**
* 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_tracker_enabled', '__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 );
remove_filter( 'tribe_tracker_enabled', '__return_false' );
// 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'] ) && ! tribe_is_truthy( $event['EventShowMap'] ) ) {
delete_post_meta( $event['ID'], '_EventShowMap' );
}
if ( isset( $event['EventShowMapLink'] ) && ! tribe_is_truthy( $event['EventShowMapLink'] ) ) {
delete_post_meta( $event['ID'], '_EventShowMapLink' );
}
// Log that this event was updated
$activity->add( 'event', 'updated', $event['ID'] );
} else {
if ( 'url' !== $this->origin && isset( $event[ $unique_field['target'] ] ) ) {
if ( isset( $existing_ids[ $event[ $unique_field['target'] ] ] ) ) {
// we should not be here; probably a concurrency issue
continue;
}
}
// during cron runs the user will be set to 0; we assign the event to the first user that can edit events
if ( ! isset( $event['post_author'] ) ) {
$event['post_author'] = $default_user_id;
}
/**
* Filters the event data before inserting event
*
* @param array $event Event data to save
* @param Tribe__Events__Aggregator__Record__Abstract $record 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'] );
// Create the Event Global ID
if ( ! empty( $item->global_id ) ) {
update_post_meta( $event['ID'], Tribe__Events__Aggregator__Event::$global_id_key, $item->global_id );
}
// Create the Event Global ID History
if ( ! empty( $item->global_id_lineage ) ) {
foreach ( $item->global_id_lineage as $gid ) {
add_post_meta( $event['ID'], Tribe__Events__Aggregator__Event::$global_id_lineage_key, $gid );
}
}
}
Tribe__Events__Aggregator__Records::instance()->add_record_to_event( $event['ID'], $this->id, $this->origin );
// Add post parent possibility
if ( empty( $event['parent_uid'] ) && ! empty( $unique_field ) && ! empty( $event[ $unique_field['target'] ] ) ) {
$possible_parents[ $event['ID'] ] = $event[ $unique_field['target'] ];
}
// Save the unique field information
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'] );
}
// Are there any existing event categories for this event?
$terms = wp_get_object_terms( $event['ID'], Tribe__Events__Main::TAXONOMY );
if ( is_wp_error( $terms ) ) {
$terms = array();
}
// If so, should we preserve those categories?
if ( ! empty( $terms ) && 'preserve_changes' === $update_authority_setting ) {
$terms = wp_list_pluck( $terms, 'term_id' );
unset( $event['categories'] );
}
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 an event category
$activity->add( 'cat', 'created', $term['term_id'] );
}
} else {
$terms[] = (int) $term['term_id'];
}
}
}
$tags = array();
if ( ! empty( $event['tags'] ) ) {
foreach ( $event['tags'] as $tag_name ) {
if ( ! $tag = term_exists( $tag_name, 'post_tag' ) ) {
$tag = wp_insert_term( $tag_name, 'post_tag' );
if ( ! is_wp_error( $tag ) ) {
$tags[] = (int) $tag['term_id'];
// Track that we created a post tag
$activity->add( 'tag', 'created', $tag['term_id'] );
}
} else {
$tags[] = (int) $tag['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'];
}
$normalized_categories = tribe_normalize_terms_list( $terms, Tribe__Events__Main::TAXONOMY );
$normalized_tags = tribe_normalize_terms_list( $tags, 'post_tag' );
wp_set_object_terms( $event['ID'], $normalized_categories, Tribe__Events__Main::TAXONOMY, false );
wp_set_object_terms( $event['ID'], $normalized_tags, 'post_tag', false );
// If we have a Image Field from Service
if ( ! empty( $event['image'] ) ) {
$this->import_event_image( $event, $activity );
}
// If we have a Image Field for the Venue from Service
if ( ! empty( $item->venue->image ) && $venue_id ) {
$this->import_venue_image( $venue_id, $item->venue->image, $activity );
}
// update the existing IDs in the context of this batch
if ( $unique_field && isset( $event[ $unique_field['target'] ] ) ) {
$existing_ids[ $event[ $unique_field['target'] ] ] = (object) array(
'post_id' => $event['ID'],
'meta_value' => $event[ $unique_field['target'] ],
);
}
/**
* Fires after a single event has been created/updated, and with it its linked
* posts, with import data.
*
* @since 4.6.16
*
* @param array $event Which Event data was sent
* @param array $item Raw version of the data sent from EA
* @param self $record The record we are dealing with
*/
do_action( 'tribe_aggregator_after_insert_post', $event, $item, $this );
}
remove_filter( 'tribe-post-origin', array( Tribe__Events__Aggregator__Records::instance(), 'filter_post_origin' ), 10 );
/**
* Fires after events and linked posts have been inserted in the database.
*
* @since 4.5.13
*
* @param array $items An array of items to insert.
* @param array $meta The record meta information.
* @param Tribe__Events__Aggregator__Record__Activity $activity The record insertion activity report.
*/
do_action( 'tribe_aggregator_after_insert_posts', $items, $this->meta, $activity );
/**
* Finally resume tracking changes when all events, and linked posts, have been updated/inserted.
*/
remove_filter( 'tribe_tracker_enabled', '__return_false' );
$final_created_events = (int) $activity->count( Tribe__Events__Main::POSTTYPE );
if ( $expected_created_events === $final_created_events ) {
$activity->set_last_status( Tribe__Events__Aggregator__Record__Activity::STATUS_SUCCESS );
} elseif ( $initial_created_events === $final_created_events ) {
$activity->set_last_status( Tribe__Events__Aggregator__Record__Activity::STATUS_FAIL );
} else {
$activity->set_last_status( Tribe__Events__Aggregator__Record__Activity::STATUS_PARTIAL );
}
return $activity;
}