title ) ) { $data = self::translate_service_data( $data ); } $this->data = $data; } public static function translate_service_data( $item ) { $event = array(); $item = (object) $item; $field_map = array( 'title' => 'post_title', 'description' => 'post_content', 'start_date' => 'EventStartDate', 'start_hour' => 'EventStartHour', 'start_minute' => 'EventStartMinute', 'start_meridian' => 'EventStartMeridian', 'end_date' => 'EventEndDate', 'end_hour' => 'EventEndHour', 'end_minute' => 'EventEndMinute', 'end_meridian' => 'EventEndMeridian', 'timezone' => 'EventTimezone', 'url' => 'EventURL', 'all_day' => 'EventAllDay', 'image' => 'image', 'facebook_id' => 'EventFacebookID', 'meetup_id' => 'EventMeetupID', 'uid' => 'uid', 'parent_uid' => 'parent_uid', 'recurrence' => 'recurrence', 'categories' => 'categories', ); $venue_field_map = array( 'facebook_id' => 'VenueFacebookID', 'meetup_id' => 'VenueMeetupID', 'venue' => 'Venue', 'address' => 'Address', 'city' => 'City', 'country' => 'Country', 'province' => 'Province', 'state' => 'State', 'stateprovince' => 'StateProvince', 'province' => 'Province', 'zip' => 'Zip', 'phone' => 'Phone', ); $organizer_field_map = array( 'facebook_id' => 'OrganizerFacebookID', 'meetup_id' => 'OrganizerMeetupID', 'organizer' => 'Organizer', 'phone' => 'Phone', 'email' => 'Email', 'website' => 'Website', ); foreach ( $field_map as $origin_field => $target_field ) { if ( ! isset( $item->$origin_field ) ) { continue; } $event[ $target_field ] = $item->$origin_field; } if ( ! empty( $item->venue ) ) { $event['Venue'] = array(); foreach ( $venue_field_map as $origin_field => $target_field ) { if ( ! isset( $item->venue->$origin_field ) ) { continue; } $event['Venue'][ $target_field ] = $item->venue->$origin_field; } } if ( ! empty( $item->organizer ) ) { $event['Organizer'] = array(); foreach ( $organizer_field_map as $origin_field => $target_field ) { if ( ! isset( $item->organizer->$origin_field ) ) { continue; } $event['Organizer'][ $target_field ] = $item->organizer->$origin_field; } } /** * Filter the translation of service data to Event data * * @param array $event EA Service data converted to Event API fields * @param object $item EA Service item being being translated */ $event = apply_filters( 'tribe_aggregator_translate_service_data', $event, $item ); return $event; } /** * Fetch all existing unique IDs from the provided list that exist in meta * * @param string $key Meta key * @param array $values Array of meta values * * @return array */ public function get_existing_ids( $origin, $values ) { global $wpdb; $fields = Tribe__Events__Aggregator__Record__Abstract::$unique_id_fields; if ( empty( $fields[ $origin ] ) ) { return array(); } if ( empty( $values ) ) { return array(); } $key = "_{$fields[ $origin ]['target']}"; $sql = " SELECT meta_value, post_id FROM {$wpdb->postmeta} WHERE meta_value IN ( '" . implode( "','", $values ) ."' ) "; /** * Allows us to check for legacy meta keys */ if ( ! empty( $fields[ $origin ]['legacy'] ) ) { $keys[] = $key; $keys[] = "_{$fields[ $origin ]['legacy']}"; $sql .= 'AND meta_key IN ( "' . implode( '", "', array_map( 'esc_sql', $keys ) ) .'" )'; } else { $sql .= 'AND meta_key = "' . esc_sql( $key ) . '"'; } return $wpdb->get_results( $sql, OBJECT_K ); } /** * Preserves changed fields by resetting array indexes back to the stored post/meta values * * @param array $event Event array to reset * * @return array */ public static function preserve_changed_fields( $event ) { if ( empty( $event['ID'] ) ) { return $event; } $post = get_post( $event['ID'] ); $post_meta = Tribe__Events__API::get_and_flatten_event_meta( $event['ID'] ); if ( empty( $post_meta[ Tribe__Events__API::$modified_field_key ] ) ) { $modified = array(); } else { $modified = $post_meta[ Tribe__Events__API::$modified_field_key ]; } $post_fields_to_reset = array( 'post_title', 'post_content', 'post_status', ); // reset any modified post fields foreach ( $post_fields_to_reset as $field ) { // don't bother resetting if the field hasn't been modified if ( ! isset( $modified[ $field ] ) ) { continue; } // don't bother resetting if we aren't trying to update the field if ( ! isset( $event[ $field ] ) ) { continue; } // don't bother resetting if we don't have a field to reset to if ( ! isset( $post->$field ) ) { continue; } $event[ $field ] = $post->$field; } $tec = Tribe__Events__Main::instance(); // reset any modified meta fields foreach ( $tec->metaTags as $field ) { // don't bother resetting if the field hasn't been modified if ( ! isset( $modified[ $field ] ) ) { continue; } // if we don't have a field to reset to, let's unset the event meta field if ( ! isset( $post_meta[ $field ] ) ) { unset( $event[ $field ] ); continue; } $event[ $field ] = $post_meta[ $field ]; } return $event; } }