Esempio n. 1
0
 /**
  * Saves events and replaces old ones. Returns true if sucecssful or false if not.
  * @return boolean
  */
 function save_events()
 {
     global $wpdb;
     $event_ids = $post_ids = array();
     if ($this->can_manage('edit_events', 'edit_others_events') && $this->is_published()) {
         do_action('em_event_save_events_pre', $this);
         //actions/filters only run if event is recurring
         //Make template event index, post, and meta (and we just change event dates)
         $event = $this->to_array(true);
         //event template - for index
         $event['event_attributes'] = serialize($event['event_attributes']);
         $post_fields = $wpdb->get_row('SELECT * FROM ' . $wpdb->posts . ' WHERE ID=' . $this->post_id, ARRAY_A);
         //post to copy
         $post_name = $post_fields['post_name'];
         //save post slug since we'll be using this
         $post_fields['post_type'] = 'event';
         //make sure we'll save events, not recurrence templates
         $meta_fields_map = $wpdb->get_results('SELECT meta_key,meta_value FROM ' . $wpdb->postmeta . ' WHERE post_id=' . $this->post_id, ARRAY_A);
         $meta_fields = array();
         //convert meta_fields into a cleaner array
         foreach ($meta_fields_map as $meta_data) {
             $meta_fields[$meta_data['meta_key']] = $meta_data['meta_value'];
         }
         //remove id and we have a event template to feed to wpdb insert
         unset($event['event_id']);
         unset($post_fields['ID']);
         //remove recurrence meta info we won't need in events
         foreach (array_keys($this->recurrence_fields) as $recurrence_field) {
             unset($event[$recurrence_field]);
             unset($meta_fields['_' . $recurrence_field]);
         }
         $event['event_date_created'] = current_time('mysql');
         //since the recurrences are recreated
         unset($event['event_date_modified']);
         //Set the recurrence ID
         $event['recurrence_id'] = $meta_fields['_recurrence_id'] = $this->event_id;
         $event['recurrence'] = $meta_fields['_recurrence'] = 0;
         //Let's start saving!
         $this->delete_events();
         //Delete old events beforehand, this will change soon
         $event_saves = array();
         $matching_days = $this->get_recurrence_days();
         //Get days where events recur
         if (count($matching_days) > 0) {
             //first save event post data
             $recurring_date_format = apply_filters('em_event_save_events_format', 'Y-m-d');
             foreach ($matching_days as $day) {
                 //rewrite post fields if needed
                 $post_fields['post_name'] = $event['event_slug'] = $meta_fields['_event_slug'] = apply_filters('em_event_save_events_slug', $post_name . '-' . date($recurring_date_format, $day), $post_fields, $day, $matching_days, $this);
                 //adjust certain meta information
                 $event['event_start_date'] = $meta_fields['_event_start_date'] = date("Y-m-d", $day);
                 $meta_fields['_start_ts'] = strtotime($event['event_start_date'] . ' ' . $event['event_start_time']);
                 if (is_numeric($event['recurrence_rsvp_days'])) {
                     $event_rsvp_days = $event['recurrence_rsvp_days'] >= 0 ? '+' . $event['recurrence_rsvp_days'] : $event['recurrence_rsvp_days'];
                     $event_rsvp_date = date('Y-m-d', strtotime($event_rsvp_days . ' days', $meta_fields['_start_ts']));
                     $event['event_rsvp_date'] = $meta_fields['_event_rsvp_date'] = $event_rsvp_date;
                     $event['event_rsvp_time'] = $meta_fields['_event_rsvp_time'] = $event['event_rsvp_time'];
                 } else {
                     $event['event_rsvp_date'] = $meta_fields['_event_rsvp_date'] = $event['event_start_date'];
                     $event['event_rsvp_time'] = $meta_fields['_event_rsvp_time'] = $event['event_start_time'];
                 }
                 if ($this->recurrence_days > 0) {
                     $event['event_end_date'] = $meta_fields['_event_end_date'] = date("Y-m-d", $meta_fields['_start_ts'] + $this->recurrence_days * 60 * 60 * 24);
                 } else {
                     $event['event_end_date'] = $meta_fields['_event_end_date'] = $event['event_start_date'];
                 }
                 $meta_fields['_end_ts'] = strtotime($event['event_end_date'] . ' ' . $event['event_end_time']);
                 //create the event
                 if ($wpdb->insert($wpdb->posts, $post_fields)) {
                     $event['post_id'] = $meta_fields['_post_id'] = $post_id = $post_ids[] = $wpdb->insert_id;
                     //post id saved into event and also as a var for later user
                     // Set GUID and event slug as per wp_insert_post
                     $wpdb->update($wpdb->posts, array('guid' => get_permalink($post_id)), array('ID' => $post_id));
                     //insert into events index table
                     $event_saves[] = $wpdb->insert(EM_EVENTS_TABLE, $event);
                     $event_ids[$post_id] = $event_id = $wpdb->insert_id;
                     $event_dates[$event_id] = $meta_fields['_start_ts'];
                     //create the meta inserts for each event
                     $meta_fields['_event_id'] = $event_id;
                     foreach ($meta_fields as $meta_key => $meta_val) {
                         $meta_inserts[] = $wpdb->prepare("(%d, %s, %s)", array($post_id, $meta_key, $meta_val));
                     }
                 } else {
                     $event_saves[] = false;
                 }
                 //if( EM_DEBUG ){ echo "Entering recurrence " . date("D d M Y", $day)."<br/>"; }
             }
             //insert the metas in one go, faster than one by one
             if (count($meta_inserts) > 0) {
                 $result = $wpdb->query("INSERT INTO " . $wpdb->postmeta . " (post_id,meta_key,meta_value) VALUES " . implode(',', $meta_inserts));
                 if ($result === false) {
                     $this->add_error('There was a problem adding custom fields to your recurring events.', 'dbem');
                 }
             }
             //copy the event tags and categories
             $taxonomies = self::get_taxonomies();
             foreach ($taxonomies as $tax_name => $tax_data) {
                 //In MS Global mode, we also save category meta information for global lookups so we use our objects
                 if (EM_MS_GLOBAL && $tax_name == 'category') {
                     //use EM_Categories as this is a special taxonomy in global mode
                     $EM_Categories = new EM_Categories($this);
                     //we save index data for each category in in MS Global mode
                     foreach ($event_ids as $post_id => $event_id) {
                         foreach ($EM_Categories->categories as $EM_Category) {
                             $EM_Categories->event_id = $event_id;
                             $EM_Categories->post_id = $post_id;
                             $EM_Categories->save();
                         }
                     }
                 } else {
                     //general taxonomies including event tags
                     $terms = get_the_terms($this->post_id, $tax_data['name']);
                     $term_slugs = array();
                     if (is_array($terms)) {
                         foreach ($terms as $term) {
                             if (!empty($term->slug)) {
                                 $term_slugs[] = $term->slug;
                             }
                             //save of category will soft-fail if slug is empty
                         }
                     }
                     foreach ($post_ids as $post_id) {
                         wp_set_object_terms($post_id, $term_slugs, $tax_data['name']);
                     }
                 }
             }
             //featured images
             if (!empty($this->attributes['thumbnail_id'])) {
                 $image_inserts = array();
                 foreach ($post_ids as $post_ids) {
                     $image_inserts[] = "({$this->post_id}, '_thumbnail_id', {$this->attributes['thumbnail_id']})";
                 }
                 if (count($image_inserts) > 0) {
                     $wpdb->query('INSERT INTO ' . $wpdb->postmeta . ' (post_id, meta_key, meta_value) VALUES ' . implode(', ', $image_inserts));
                 }
             }
             //MS Global Categories
             if ($cat_slugs_count > 0 && EM_MS_GLOBAL) {
                 foreach ($categories as $EM_Category) {
                     foreach ($event_ids as $event_id) {
                         $wpdb->insert(EM_META_TABLE, array('meta_value' => $EM_Category->term_id, 'object_id' => $event_id, 'meta_key' => 'event-category'));
                     }
                 }
             }
             //now, save booking info for each event
             if ($this->event_rsvp) {
                 $meta_inserts = array();
                 foreach ($this->get_tickets() as $EM_Ticket) {
                     /* @var $EM_Ticket EM_Ticket */
                     //get array, modify event id and insert
                     $ticket = $EM_Ticket->to_array();
                     //empty cut-off dates of ticket, add them at per-event level
                     unset($ticket['ticket_start']);
                     unset($ticket['ticket_end']);
                     if (!empty($ticket['ticket_meta']['recurrences'])) {
                         $ticket_meta_recurrences = $ticket['ticket_meta']['recurrences'];
                         unset($ticket['ticket_meta']['recurrences']);
                     }
                     //unset id
                     unset($ticket['ticket_id']);
                     //clean up ticket values
                     foreach ($ticket as $k => $v) {
                         if (empty($v) && $k != 'ticket_name') {
                             $ticket[$k] = 'NULL';
                         } else {
                             $data_type = !empty($EM_Ticket->fields[$k]['type']) ? $EM_Ticket->fields[$k]['type'] : '%s';
                             if (is_array($ticket[$k])) {
                                 $v = serialize($ticket[$k]);
                             }
                             $ticket[$k] = $wpdb->prepare($data_type, $v);
                         }
                     }
                     foreach ($event_ids as $event_id) {
                         $ticket['event_id'] = $event_id;
                         //sort out cut-of dates
                         if (!empty($ticket_meta_recurrences)) {
                             if (array_key_exists('start_days', $ticket_meta_recurrences)) {
                                 $ticket_start_days = $ticket_meta_recurrences['start_days'] >= 0 ? '+' . $ticket_meta_recurrences['start_days'] : $ticket_meta_recurrences['start_days'];
                                 $ticket_start_date = date('Y-m-d', strtotime($ticket_start_days . ' days', $event_dates[$event_id]));
                                 $ticket['ticket_start'] = "'" . $ticket_start_date . ' ' . $ticket_meta_recurrences['start_time'] . "'";
                             }
                             if (array_key_exists('end_days', $ticket_meta_recurrences)) {
                                 $ticket_end_days = $ticket_meta_recurrences['end_days'] >= 0 ? '+' . $ticket_meta_recurrences['end_days'] : $ticket_meta_recurrences['end_days'];
                                 $ticket_end_date = date('Y-m-d', strtotime($ticket_end_days . ' days', $event_dates[$event_id]));
                                 $ticket['ticket_end'] = "'" . $ticket_end_date . ' ' . $ticket_meta_recurrences['end_time'] . "'";
                             }
                         }
                         //add insert data
                         $meta_inserts[] = "(" . implode(",", $ticket) . ")";
                     }
                 }
                 $keys = "(" . implode(",", array_keys($ticket)) . ")";
                 $values = implode(',', $meta_inserts);
                 $sql = "INSERT INTO " . EM_TICKETS_TABLE . " {$keys} VALUES {$values}";
                 $result = $wpdb->query($sql);
             }
         } else {
             $this->add_error('You have not defined a date range long enough to create a recurrence.', 'dbem');
             $result = false;
         }
         return apply_filters('em_event_save_events', !in_array(false, $event_saves) && $result !== false, $this, $event_ids, $post_ids);
     }
     return apply_filters('em_event_save_events', false, $this, $event_ids, $post_ids);
 }
 public static function create_event_from_feed(array $FEED_ = NULL, $event_id = NULL)
 {
     global $ESS_Notices, $current_site;
     $EM_Event = NULL;
     if ($FEED_ != NULL) {
         //dd( $FEED_ );
         $EM_Event = new EM_Event(intval($event_id) > 0 ? $event_id : 0);
         // set eventID for update
         // -- Populate $_POST global var for EM functions
         if (ESS_Import::set_post_from_feed($FEED_)) {
             //dd($_POST);
             if ($EM_Event->can_manage('edit_events', 'edit_recurring_events', 'edit_others_events') && $EM_Event->get_post()) {
                 // -- temporarily remove the save listener to prevent multi-pushing to search engines
                 ESS_IO::set_save_filter(FALSE);
                 $EM_Location = NULL;
                 $EM_Categories = NULL;
                 $EM_Tickets = NULL;
                 $blog_id = isset($current_site) ? $current_site->blog_id : NULL;
                 // used as global by some functions (Cf: EM_location::save())
                 if (empty($event_id)) {
                     $EM_Event->force_status = intval(get_option('ess_syndication_status')) >= 1 ? ESS_Database::EVENT_STATUS_PUBLISH : ESS_Database::EVENT_STATUS_DRAFT;
                     $EM_Event->event_status = 1;
                     $EM_Event->previous_status = 1;
                 } else {
                     $EM_Event->event_id = $event_id;
                     // -- Remove old images in case of event's update
                     if (get_option('ess_feed_import_images') && intval($EM_Event->post_id) > 0) {
                         ESS_Images::delete($EM_Event->post_id);
                     }
                 }
                 $EM_Event->post_status = strtolower($_POST['event_access']) == 'private' ? 'private' : ESS_Database::EVENT_STATUS_PUBLISH;
                 // == GENERAL
                 if (strlen($_POST['content']) > 0) {
                     if (get_option('ess_backlink_enabled')) {
                         $feed_uri = $FEED_['generals']['uri'];
                         $feed_uri_host = parse_url($feed_uri, PHP_URL_HOST);
                         $_POST['content'] .= "<h6>" . __("Source:", 'dbem') . " <a title=\"" . __("Source:", 'dbem') . " " . $feed_uri_host . "\" href=\"" . $feed_uri . "\">" . parse_url($feed_uri, PHP_URL_HOST) . "</a></h6>";
                     }
                 }
                 // == PLACE / LOCATION
                 //dd( $_POST['location_name'] );
                 if ($_POST['no_location'] === FALSE && strlen($_POST['location_name']) > 0 && get_option('dbem_locations_enabled')) {
                     $EM_Location = new EM_Location();
                     if ($EM_Location->can_manage('publish_locations') && $EM_Location->get_post(FALSE)) {
                         //d( $EM_Location );
                         // -- Search if this location already exists in the database
                         $similar_ = ESS_Import::load_similar_location(array('location_name' => $EM_Location->location_name, 'location_address' => $EM_Location->location_address, 'location_town' => $EM_Location->location_town, 'location_state' => $EM_Location->location_state, 'location_postcode' => $EM_Location->location_postcode, 'location_country' => $EM_Location->location_country));
                         //dd( $similar_ );
                         // if the location already exists use it instead.
                         if (@count($similar_) > 0 && $similar_ != NULL) {
                             foreach ($similar_ as $key => $val) {
                                 $EM_Location->{$key} = $val;
                             }
                         } else {
                             $EM_Location->post_status = 'publish';
                             $EM_Location->location_status = 1;
                             $EM_Location->post_content = '';
                         }
                         // -- Search & defines latitude / longitude if not set
                         if (FeedValidator::isValidLatitude((string) $_POST['location_latitude']) == FALSE || FeedValidator::isValidLongitude((string) $_POST['location_longitude']) == FALSE) {
                             require_once EM_ESS_DIR . "/inc/libs/geocoder/GoogleGeocode.php";
                             $geocode_ = GoogleGeocode::getGeocodeFromAddress(trim($EM_Location->location_address . " " . $EM_Location->location_town . " " . $EM_Location->location_postcode . " " . $EM_Location->location_country));
                             $lat = (string) $geocode_['results'][0]['geometry']['location']['lat'];
                             $lng = (string) $geocode_['results'][0]['geometry']['location']['lng'];
                             //echo "latitude: " .  $lat . " ==> ".((FeedValidator::isValidLatitude(  $lat ))?'TRUE':'FALSE')."<br/>";
                             //echo "longitude: " . $lng . " ==> ".((FeedValidator::isValidLongitude( $lng ))?'TRUE':'FALSE')."<br/>";
                             if (FeedValidator::isValidLatitude($lat) && FeedValidator::isValidLongitude($lng)) {
                                 $EM_Location->location_latitude = $lat;
                                 $EM_Location->location_longitude = $lng;
                             }
                         }
                         if ($EM_Location->save() === FALSE) {
                             $ESS_Notices->add_error($EM_Location->get_errors());
                         }
                         $EM_Event->location_id = $EM_Location->location_id;
                     } else {
                         $ESS_Notices->add_error($EM_Location->get_errors());
                     }
                 }
                 // end add location
                 //dd( $EM_Location );
                 // == PRICE / TICKETS
                 //dd( $_POST['em_tickets'] );
                 if (@count($_POST['em_tickets']) > 0 && get_option('dbem_rsvp_enabled')) {
                     $EM_Tickets = new EM_Tickets($EM_Event);
                     $ticket_data = NULL;
                     // Create tickets only if they doesn't exists
                     if (@count($EM_Tickets->tickets) <= 0) {
                         foreach ($_POST['em_tickets'] as $ticket_data) {
                             $EM_Ticket = new EM_Ticket();
                             $EM_Ticket->get_post($ticket_data);
                             $EM_Tickets->tickets[] = $EM_Ticket;
                         }
                     }
                     if ($ticket_data != NULL) {
                         $EM_Event->event_rsvp = TRUE;
                         $EM_Event->event_rsvp_date = $ticket_data['event_rsvp_date'];
                         $EM_Event->event_rsvp_time = $ticket_data['event_rsvp_time'];
                         $EM_Event->event_spaces = $ticket_data['event_spaces'];
                         $EM_Event->rsvp_time = $ticket_data['event_rsvp_time'];
                     }
                 }
                 // end add tickets
                 //dd( $EM_Tickets );
                 // == CATEGORIES
                 //dd( $_POST['event_categories'] );
                 if (@count($_POST['event_categories']) > 0 && get_option('dbem_categories_enabled')) {
                     $EM_Categories = new EM_Categories();
                     if ($EM_Categories->can_manage('edit_event_categories')) {
                         $caregory_ids_ = array();
                         foreach ($_POST['event_categories'] as $category_name) {
                             $category_term = get_term_by('name', $category_name, EM_TAXONOMY_CATEGORY);
                             // DEBUG: 2014-01-30
                             // Fix a internationalization bug report: http://wordpress.org/support/topic/finding-event-category-by-slug-is-not-always-a-good-idea
                             //$category_slug = sanitize_title_with_dashes( $category_name );
                             //$category_term = get_term_by( 'slug', $category_slug, EM_TAXONOMY_CATEGORY );
                             if ($category_term === FALSE) {
                                 // Term (with category taxonomy) not created yet, let's create it
                                 //$term_array = wp_insert_term( $category_name, EM_TAXONOMY_CATEGORY, array( 'slug' => $category_slug ) );
                                 $term_array = wp_insert_term($category_name, EM_TAXONOMY_CATEGORY, array('name' => $category_name));
                                 if (intval($term_array['term_id']) > 0) {
                                     array_push($caregory_ids_, intval($term_array['term_id']));
                                 }
                             } else {
                                 if (intval($category_term->term_id) > 0) {
                                     array_push($caregory_ids_, intval($category_term->term_id));
                                 }
                             }
                         }
                         $_POST['event_categories'] = $caregory_ids_;
                         if ($EM_Categories->get_post() === FALSE) {
                             $ESS_Notices->add_error($EM_Categories->get_errors());
                         }
                     } else {
                         $ESS_Notices->add_error($EM_Categories->get_errors());
                     }
                 }
                 // end add categories
                 $EM_Event->categories = $EM_Categories;
                 //dd( $EM_Categories );
                 // == TAGS
                 //dd( $_POST['event_tags'] );
                 if (@count($_POST['event_tags']) > 0 && get_option('dbem_tags_enabled')) {
                     $EM_Tags = new EM_Tags();
                     $tag_ids_ = array();
                     foreach ($_POST['event_tags'] as $tag_name) {
                         $tag_slug = sanitize_title_with_dashes($tag_name);
                         $tag_term = get_term_by('slug', $tag_slug, EM_TAXONOMY_TAG);
                         if ($tag_term === FALSE) {
                             // -- Term (with tag taxonomy) not created yet, let's create it
                             $term_array = wp_insert_term($tag_name, EM_TAXONOMY_TAG, array('slug' => $tag_slug));
                             if (intval($term_array['term_id']) > 0) {
                                 array_push($tag_ids_, intval($term_array['term_id']));
                             }
                         } else {
                             if (intval($tag_term->term_id) > 0) {
                                 array_push($tag_ids_, intval($tag_term->term_id));
                             }
                         }
                     }
                     $_POST['event_tags'] = $tag_ids_;
                     if ($EM_Tags->get_post() === FALSE) {
                         $ESS_Notices->add_error($EM_Categories->get_errors());
                     }
                 }
                 // end add tags
                 //dd( $EM_Tags );
                 // == DATE (force date values)
                 if (strlen($_POST['event_start_date']) > 0) {
                     $EM_Event->event_start_date = $_POST['event_start_date'];
                     $EM_Event->start_date = $_POST['event_start_date'];
                     $EM_Event->event_start_time = $_POST['event_start_time'];
                     $EM_Event->start_time = $_POST['event_start_time'];
                     $EM_Event->event_end_date = $_POST['event_end_date'];
                     $EM_Event->end_date = $_POST['event_end_date'];
                     $EM_Event->event_end_time = $_POST['event_end_time'];
                     $EM_Event->end_time = $_POST['event_end_time'];
                     $EM_Event->start = strtotime($EM_Event->event_start_date . " " . $EM_Event->event_start_time);
                     $EM_Event->end = strtotime($EM_Event->event_end_date . " " . $EM_Event->event_end_time);
                     if ($EM_Event->end < date('U')) {
                         $ESS_Notices->add_info(__("An event imported is already finished: " . ESS_Elements::get_ahref($FEED_['generals']['uri']), 'dbem'));
                     }
                 }
                 // end add date
                 // == PEOPLE
                 $EM_Event->post_excerpt = strlen($_POST['event_excerpt']) > 0 ? $_POST['event_excerpt'] : '';
                 // -- update the information already set line 187
                 //dd( get_option( 'ess_syndication_status' ) );
                 $EM_Event->force_status = intval(get_option('ess_syndication_status')) >= 1 ? ESS_Database::EVENT_STATUS_PUBLISH : ESS_Database::EVENT_STATUS_DRAFT;
                 //dd( $EM_Event );
                 // == SAVE EVENT ======
                 $res = $EM_Event->save();
                 //dd( $res ); // return FALSE if two of some functions are not updated in EM_Events()
                 //echo "event post id: ". $EM_Event->post_id ."<br/>";
                 //echo "event event id: ". $EM_Event->event_id."<br/>";
                 if (intval($EM_Event->post_id) > 0) {
                     // == MEDIA ==========
                     if (@count($_POST['event_media'])) {
                         //var_dump( $_POST['event_media'] );
                         $media_attachement_ = array();
                         foreach ($_POST['event_media'] as $media_) {
                             if (ESS_IO::is_file_exists($media_['uri'])) {
                                 // Use the same 'manage' value to control the importation of 'images', 'sounds' or 'videos'.
                                 if ($EM_Event->can_manage('upload_event_images')) {
                                     // == IMAGES
                                     if (FeedValidator::getMediaType($media_['uri']) == 'image' && get_option('ess_feed_import_images')) {
                                         $attachment_id = ESS_Images::add(array('uri' => $media_['uri'], 'name' => $media_['name'], 'post_id' => $EM_Event->post_id));
                                         if ($attachment_id !== FALSE && intval($attachment_id) > 0) {
                                             array_push($media_attachement_, array('attachement_id' => $attachment_id, 'uri' => $media_['uri']));
                                         } else {
                                             $ESS_Notices->add_error(__("Impossible to upload the event's image: ", 'dbem') . ESS_Elements::get_ahref($media_['uri']));
                                         }
                                     }
                                     // end add images
                                     // == VIDEOS (TODO...)
                                     if (FeedValidator::getMediaType($media_['uri']) == 'video' && get_option('ess_feed_import_videos')) {
                                         if (ESS_Videos::add(array('uri' => $media_['uri'], 'name' => $media_['name'], 'post_id' => $EM_Event->post_id)) === FALSE) {
                                             $ESS_Notices->add_error(__("Impossible to upload the event's video: ", 'dbem') . ESS_Elements::get_ahref($media_['uri']));
                                         }
                                     }
                                     // end add videos
                                     // == SOUNDS (TODO...)
                                     if (FeedValidator::getMediaType($media_['uri']) == 'sound' && get_option('ess_feed_import_sounds')) {
                                         if (ESS_Sounds::add(array('uri' => $media_['uri'], 'name' => $media_['name'], 'post_id' => $EM_Event->post_id)) === FALSE) {
                                             $ESS_Notices->add_error(__("Impossible to upload the event's audio file: ", 'dbem') . ESS_Elements::get_ahref($media_['uri']));
                                         }
                                     }
                                     // end add sounds
                                 } else {
                                     $ESS_Notices->add_error($EM_Event->get_errors());
                                 }
                             } else {
                                 $ESS_Notices->add_info(sprintf(__("A media file defined in the ESS feed is not reachable: <a href='%s' target='_blank'>%s</a>", 'dbem'), $media_['uri'], $media_['uri']));
                             }
                         }
                         // -- Define image with the highest 'priority' as first attachement
                         $priority_test = 1;
                         foreach ($_POST['event_media'] as $media_) {
                             if (get_option('ess_feed_import_images') == FALSE) {
                                 break;
                             }
                             if (@$media_['priority'] == $priority_test) {
                                 if (FeedValidator::getMediaType($media_['uri']) == 'image') {
                                     foreach ($media_attachement_ as $ma_) {
                                         if ($ma_['uri'] == $media_['uri'] && $ma_['attachement_id'] > 0) {
                                             ESS_Images::delete($EM_Event->post_id, $ma_['attachement_id']);
                                             $err = ESS_Images::add(array('uri' => $media_['uri'], 'name' => $media_['name'], 'post_id' => $EM_Event->post_id));
                                         }
                                     }
                                 } else {
                                     $priority_test++;
                                 }
                             }
                         }
                         // -- Display all the media files thumbnail at the bottom of the event's description
                         $imgs_ = ESS_Images::get_thumbnails($EM_Event->post_id);
                         //var_dump( $imgs_ );die;
                         if (@count($imgs_) > 0) {
                             $EM_Event->post_content .= "<br/><hr/>";
                             foreach ($imgs_ as $img_) {
                                 if (FeedValidator::isValidURL($img_['url'])) {
                                     $EM_Event->post_content .= "<img src='" . $img_['url'] . "' width='" . $img_['width'] . "' height='" . $img_['height'] . "' style='display:inline;margin:5px;'/>";
                                 }
                             }
                             // -- UPDATE event's description with thumbnail images at the bottom
                             $res = $EM_Event->save();
                         }
                     }
                     // end add media
                     // == TICKETS ==========
                     if (@count($EM_Tickets->tickets) > 0 && get_option('dbem_rsvp_enabled')) {
                         $EM_Tickets->blog_id = $blog_id;
                         $EM_Tickets->event_id = $EM_Event->event_id;
                         if ($EM_Tickets->save() === FALSE) {
                             $ESS_Notices->add_error($EM_Tickets->get_errors());
                         }
                     }
                     // end assign event to categories
                     // == CATEGORIES ==========
                     if (@count($EM_Categories->categories) > 0 && get_option('dbem_categories_enabled')) {
                         $EM_Categories->blog_id = $blog_id;
                         $EM_Categories->event_id = $EM_Event->event_id;
                         if ($EM_Categories->save() === FALSE) {
                             $ESS_Notices->add_error($EM_Categories->get_errors());
                         }
                     }
                     // end assign event to categories
                     // == TAGS ==========
                     if (@count($EM_Tags->tags) > 0 && get_option('dbem_tags_enabled')) {
                         //var_dump( $EM_Tags->tags );
                         $EM_Tags->blog_id = $blog_id;
                         $EM_Tags->event_id = $EM_Event->event_id;
                         // this function doesn't seem to work...
                         if ($EM_Tags->save() === FALSE) {
                             $ESS_Notices->add_error($EM_Tags->get_errors());
                         }
                         $tags_ = array();
                         foreach ($EM_Tags->tags as $EM_Tag) {
                             if (strlen($EM_Tag->slug) > 0) {
                                 array_push($tags_, $EM_Tag->slug);
                             }
                         }
                         if (@count($tags_) > 0) {
                             wp_set_object_terms($EM_Event->post_id, $tags_, EM_TAXONOMY_TAG);
                         }
                     }
                     // end assign event to tags
                     // == LOCATION ==========
                     ESS_Database::clear_locations();
                     //dd( $EM_Event );
                     ESS_IO::set_save_filter(TRUE);
                 }
             } else {
                 $ESS_Notices->add_error($EM_Event->get_errors());
             }
         }
     }
     return $EM_Event;
 }