/**
  * Used by createEvent and updateEvent - saves all the various event meta 
  */
 public static function saveEventMeta($event_id, $data, $event = null)
 {
     $tribe_ecp = TribeEvents::instance();
     if (isset($data['EventAllDay']) && ($data['EventAllDay'] == 'yes' || $data['EventAllDay'] == true || !isset($data['EventStartDate']))) {
         $data['EventStartDate'] = TribeDateUtils::beginningOfDay($data['EventStartDate']);
         $data['EventEndDate'] = TribeDateUtils::endOfDay($data['EventEndDate']);
     } else {
         delete_post_meta($event_id, '_EventAllDay');
         if (isset($data['EventStartMeridian'])) {
             $data['EventStartDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventStartDate'] . " " . $data['EventStartHour'] . ":" . $data['EventStartMinute'] . ":00 " . $data['EventStartMeridian']));
             $data['EventEndDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventEndDate'] . " " . $data['EventEndHour'] . ":" . $data['EventEndMinute'] . ":00 " . $data['EventEndMeridian']));
         } else {
             $data['EventStartDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventStartDate'] . " " . $data['EventStartHour'] . ":" . $data['EventStartMinute'] . ":00"));
             $data['EventEndDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventEndDate'] . " " . $data['EventEndHour'] . ":" . $data['EventEndMinute'] . ":00"));
         }
     }
     if (!isset($data['EventHideFromUpcoming']) || !$data['EventHideFromUpcoming']) {
         delete_post_meta($event_id, '_EventHideFromUpcoming');
     }
     // sanity check that start date < end date
     $startTimestamp = strtotime($data['EventStartDate']);
     $endTimestamp = strtotime($data['EventEndDate']);
     if ($startTimestamp > $endTimestamp) {
         $data['EventEndDate'] = $data['EventStartDate'];
     }
     if (!isset($data['EventShowMapLink'])) {
         update_post_meta($event_id, '_EventShowMapLink', 'false');
     }
     if (!isset($data['EventShowMap'])) {
         update_post_meta($event_id, '_EventShowMap', 'false');
     }
     if (isset($data['post_status'])) {
         $post_status = $data['post_status'];
     } else {
         //print_r($data);
         if (isset($data["Organizer"]["OrganizerID"])) {
             $post_status = get_post($data["Organizer"]['OrganizerID'])->post_status;
         }
         if (isset($data['Venue']["VenueID"])) {
             $post_status = get_post($data['Venue']['VenueID'])->post_status;
         }
     }
     if (isset($data["Organizer"])) {
         $data['EventOrganizerID'] = TribeEventsAPI::saveEventOrganizer($data["Organizer"], $event, $post_status);
     }
     if (isset($data["Venue"])) {
         $data['EventVenueID'] = TribeEventsAPI::saveEventVenue($data["Venue"], $event, $post_status);
     }
     $tribe_ecp->do_action('tribe_events_event_save', $event_id);
     //update meta fields
     foreach ($tribe_ecp->metaTags as $tag) {
         $htmlElement = ltrim($tag, '_');
         if (isset($data[$htmlElement]) && $tag != TribeEvents::EVENTSERROROPT) {
             if (is_string($data[$htmlElement])) {
                 $data[$htmlElement] = filter_var($data[$htmlElement], FILTER_SANITIZE_STRING);
             }
             update_post_meta($event_id, $tag, $data[$htmlElement]);
         }
     }
     $tribe_ecp->do_action('tribe_events_update_meta', $event_id, false, $data, $event);
 }
 public static function addEventConditions($where, $cur_query)
 {
     global $wpdb;
     if ($cur_query->get('start_date')) {
         $start_date = TribeDateUtils::beginningOfDay($cur_query->get('start_date'));
     }
     if ($cur_query->get('end_date')) {
         $end_date = TribeDateUtils::endOfDay($cur_query->get('end_date'));
     }
     // we can't store end date directly because it messes up the distinc clause
     $endDate = " IFNULL(DATE_ADD(CAST(eventStart.meta_value AS DATETIME), INTERVAL eventDuration.meta_value SECOND), eventEnd.meta_value) ";
     if (!empty($start_date) && !empty($end_date)) {
         $start_clause = $wpdb->prepare("(eventStart.meta_value >= %s AND eventStart.meta_value <= %s)", $start_date, $end_date);
         $end_clause = $wpdb->prepare("({$endDate} >= %s AND eventStart.meta_value <= %s )", $start_date, $end_date);
         $within_clause = $wpdb->prepare("(eventStart.meta_value < %s AND {$endDate} >= %s )", $start_date, $end_date);
         $where .= " AND ({$start_clause} OR {$end_clause} OR {$within_clause})";
     } else {
         if (!empty($end_date)) {
             $start_clause = $wpdb->prepare("{$endDate} < %s", $end_date);
             $where .= " AND {$start_clause}";
         } else {
             if (!empty($start_date)) {
                 $end_clause = $wpdb->prepare("eventStart.meta_value > %s", $start_date);
                 $within_clause = $wpdb->prepare("(eventStart.meta_value <= %s AND {$endDate} >= %s )", $start_date, $start_date);
                 $where .= " AND ({$end_clause} OR {$within_clause})";
             }
         }
     }
     if ($cur_query->get('hide_upcoming')) {
         $where .= " AND (hideUpcoming.meta_value != 'yes' OR hideUpcoming.meta_value IS null) ";
     }
     return $where;
 }
 public function setup_list($template_file)
 {
     if (basename(dirname($template_file)) . '/' . basename($template_file) == 'mini-calendar/list.php') {
         if ($this->args['count'] == 0) {
             return;
         }
         // make sure the widget taxonomy filter setting is respected
         add_action('pre_get_posts', array($this, 'set_count'), 1000);
         global $wp_query;
         // hijack the main query to load the events via provided $args
         if (!is_null($this->args)) {
             $query_args = array('posts_per_page' => $this->args['count'], 'tax_query' => $this->args['tax_query'], 'eventDisplay' => 'custom', 'start_date' => $this->get_month(), 'post_status' => array('publish'), 'is_tribe_mini_calendar' => true, 'tribeHideRecurrence' => false);
             // set end date if initial load, or ajax month switch
             if (!defined('DOING_AJAX') || defined('DOING_AJAX') && $_POST['action'] == 'tribe-mini-cal') {
                 $query_args['end_date'] = substr_replace($this->get_month(TribeDateUtils::DBDATEFORMAT), TribeDateUtils::getLastDayOfMonth(strtotime($this->get_month())), -2);
                 // @todo use tribe_events_end_of_day() ?
                 $query_args['end_date'] = TribeDateUtils::endOfDay($query_args['end_date']);
             }
             $wp_query = TribeEventsQuery::getEvents($query_args, true);
         }
     }
 }
Esempio n. 4
0
 public function where($where, $wp_query)
 {
     global $ecp_apm, $wpdb;
     // run once
     remove_filter('posts_where', array($this, 'where'), 10, 2);
     foreach ($this->active as $key => $active) {
         $field = '';
         if ($key === 'ecp_start_date') {
             $field = "{$wpdb->postmeta}.meta_value";
         }
         if ($key === 'ecp_end_date') {
             $field = "IFNULL(DATE_ADD(CAST({$wpdb->postmeta}.meta_value AS DATETIME), INTERVAL eventDuration.meta_value SECOND), eventEnd.meta_value)";
         }
         if (empty($field)) {
             continue;
         }
         $value = $active['value'];
         switch ($active['is']) {
             case "is":
                 $where .= $wpdb->prepare(" AND {$field} BETWEEN %s AND %s ", TribeDateUtils::beginningOfDay($value), TribeDateUtils::endOfDay($value));
                 break;
             case "not":
                 $where .= $wpdb->prepare(" AND {$field} NOT BETWEEN %s AND %s ", TribeDateUtils::beginningOfDay($value), TribeDateUtils::endOfDay($value));
                 break;
             case "gte":
                 $where .= $wpdb->prepare(" AND {$field} >= %s ", TribeDateUtils::beginningOfDay($value));
                 break;
             case "lte":
                 $where .= $wpdb->prepare(" AND {$field} <= %s ", TribeDateUtils::endOfDay($value));
                 break;
         }
     }
     return $where;
 }
 /**
  * Do the actual work of saving a recurring series of events
  * @param array $postId The event that is being saved 
  * @return void
  */
 public static function saveEvents($postId)
 {
     extract(TribeEventsRecurrenceMeta::getRecurrenceMeta($postId));
     $rules = TribeEventsRecurrenceMeta::getSeriesRules($postId);
     // use the recurrence start meta if necessary because we can't guarantee which order the start date will come back in
     $recStart = strtotime(get_post_meta($postId, '_EventStartDate', true));
     $eventEnd = strtotime(get_post_meta($postId, '_EventEndDate', true));
     $duration = $eventEnd - $recStart;
     $recEnd = $recEndType == "On" ? strtotime(TribeDateUtils::endOfDay($recEnd)) : $recEndCount - 1;
     // subtract one because event is first occurrence
     // different update types
     delete_post_meta($postId, '_EventStartDate');
     delete_post_meta($postId, '_EventEndDate');
     delete_post_meta($postId, '_EventDuration');
     // add back original start and end date
     add_post_meta($postId, '_EventStartDate', date(DateSeriesRules::DATE_FORMAT, $recStart));
     add_post_meta($postId, '_EventEndDate', date(DateSeriesRules::DATE_FORMAT, $eventEnd));
     add_post_meta($postId, '_EventDuration', $duration);
     if ($recType != "None") {
         $recurrence = new TribeRecurrence($recStart, $recEnd, $rules, $recEndType == "After");
         $dates = (array) $recurrence->getDates();
         // add meta for all dates in recurrence
         foreach ($dates as $date) {
             add_post_meta($postId, '_EventStartDate', date(DateSeriesRules::DATE_FORMAT, $date));
         }
     }
 }
 private static function getRecurrenceForEvent($event_id)
 {
     /** @var string $recType */
     /** @var string $recEndType */
     /** @var string $recEnd */
     /** @var int $recEndCount */
     extract(TribeEventsRecurrenceMeta::getRecurrenceMeta($event_id));
     if ($recType == 'None') {
         require_once dirname(__FILE__) . '/tribe-null-recurrence.php';
         return new TribeNullRecurrence();
     }
     $rules = TribeEventsRecurrenceMeta::getSeriesRules($event_id);
     $recStart = strtotime(get_post_meta($event_id, '_EventStartDate', true) . '+00:00');
     switch ($recEndType) {
         case 'On':
             // @todo use tribe_events_end_of_day() ?
             $recEnd = strtotime(TribeDateUtils::endOfDay($recEnd));
             break;
         case 'Never':
             $recEnd = TribeRecurrence::NO_END;
             break;
         case 'After':
         default:
             $recEnd = $recEndCount - 1;
             // subtract one because event is first occurrence
             break;
     }
     $recurrence = new TribeRecurrence($recStart, $recEnd, $rules, $recEndType == "After", get_post($event_id));
     return $recurrence;
 }
 /**
  * Used by createEvent and updateEvent - saves all the various event meta 
  *
  * @param int $event_id The event ID we are modifying meta for.
  * @param array $data The meta fields we want saved.
  * @param WP_Post The event itself.
  * @return void
  */
 public static function saveEventMeta($event_id, $data, $event = null)
 {
     $tribe_ecp = TribeEvents::instance();
     if (isset($data['EventAllDay']) && ($data['EventAllDay'] == 'yes' || $data['EventAllDay'] == true || !isset($data['EventStartDate']))) {
         $data['EventStartDate'] = TribeDateUtils::beginningOfDay($data['EventStartDate']);
         $data['EventEndDate'] = TribeDateUtils::endOfDay($data['EventEndDate']);
     } else {
         delete_post_meta($event_id, '_EventAllDay');
         if (isset($data['EventStartMeridian'])) {
             $data['EventStartDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventStartDate'] . " " . $data['EventStartHour'] . ":" . $data['EventStartMinute'] . ":00 " . $data['EventStartMeridian']));
             $data['EventEndDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventEndDate'] . " " . $data['EventEndHour'] . ":" . $data['EventEndMinute'] . ":00 " . $data['EventEndMeridian']));
         } else {
             $data['EventStartDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventStartDate'] . " " . $data['EventStartHour'] . ":" . $data['EventStartMinute'] . ":00"));
             $data['EventEndDate'] = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($data['EventEndDate'] . " " . $data['EventEndHour'] . ":" . $data['EventEndMinute'] . ":00"));
         }
     }
     if (!isset($data['EventHideFromUpcoming']) || !$data['EventHideFromUpcoming']) {
         delete_post_meta($event_id, '_EventHideFromUpcoming');
     }
     // sanity check that start date < end date
     $startTimestamp = strtotime($data['EventStartDate']);
     $endTimestamp = strtotime($data['EventEndDate']);
     if ($startTimestamp > $endTimestamp) {
         $data['EventEndDate'] = $data['EventStartDate'];
     }
     $data['EventDuration'] = strtotime($data['EventEndDate']) - $startTimestamp;
     $old_data['EventStartDate'] = TribeEvents::get_series_start_date($event_id);
     update_post_meta($event_id, '_EventShowMapLink', isset($data['venue']['EventShowMapLink']));
     update_post_meta($event_id, '_EventShowMap', isset($data['venue']['EventShowMap']));
     if (isset($data['post_status'])) {
         $post_status = $data['post_status'];
     } else {
         //print_r($data);
         if (isset($data["Organizer"]["OrganizerID"])) {
             $post_status = get_post($data["Organizer"]['OrganizerID'])->post_status;
         }
         if (isset($data['Venue']["VenueID"])) {
             $post_status = get_post($data['Venue']['VenueID'])->post_status;
         }
     }
     if (isset($data["Organizer"])) {
         $data['EventOrganizerID'] = TribeEventsAPI::saveEventOrganizer($data["Organizer"], $event, $post_status);
     }
     if (isset($data["Venue"])) {
         $data['EventVenueID'] = TribeEventsAPI::saveEventVenue($data["Venue"], $event, $post_status);
     }
     $cost = isset($data['EventCost']) ? $data['EventCost'] : '';
     $data['EventCost'] = $cost;
     do_action('tribe_events_event_save', $event_id);
     $cost = isset($data['EventCost']) ? $data['EventCost'] : '';
     $data['EventCost'] = $cost;
     //update meta fields
     foreach ($tribe_ecp->metaTags as $tag) {
         $htmlElement = ltrim($tag, '_');
         if (isset($data[$htmlElement]) && $tag != TribeEvents::EVENTSERROROPT) {
             if (is_string($data[$htmlElement])) {
                 $data[$htmlElement] = filter_var($data[$htmlElement], FILTER_SANITIZE_STRING);
             }
             if (isset($old_data[$htmlElement])) {
                 update_post_meta($event_id, $tag, $data[$htmlElement], $old_data[$htmlElement]);
             } else {
                 update_post_meta($event_id, $tag, $data[$htmlElement]);
             }
         }
     }
     // Set sticky state for calendar view.
     if (isset($data['EventShowInCalendar']) && $data['EventShowInCalendar'] == 'yes' && $event->menu_order != '-1') {
         $update_event = array('ID' => $event_id, 'menu_order' => '-1');
         wp_update_post($update_event);
     } elseif ((!isset($data['EventShowInCalendar']) || $data['EventShowInCalendar'] != 'yes') && $event->menu_order == '-1') {
         $update_event = array('ID' => $event_id, 'menu_order' => '0');
         wp_update_post($update_event);
     }
     do_action('tribe_events_update_meta', $event_id, $data);
 }
 private static function getRecurrenceForEvent($event_id)
 {
     /** @var string $recType */
     /** @var string $recEndType */
     /** @var string $recEnd */
     /** @var int $recEndCount */
     extract(TribeEventsRecurrenceMeta::getRecurrenceMeta($event_id));
     if ($recType == 'None') {
         return NULL;
     }
     $rules = TribeEventsRecurrenceMeta::getSeriesRules($event_id);
     // use the recurrence start meta if necessary because we can't guarantee which order the start date will come back in
     $recStart = strtotime(self::get_series_start_date($event_id));
     switch ($recEndType) {
         case 'On':
             $recEnd = strtotime(TribeDateUtils::endOfDay($recEnd));
             break;
         case 'Never':
             $recEnd = TribeRecurrence::NO_END;
             break;
         case 'After':
         default:
             $recEnd = $recEndCount - 1;
             // subtract one because event is first occurrence
             break;
     }
     $recurrence = new TribeRecurrence($recStart, $recEnd, $rules, $recEndType == "After", get_post($event_id));
     return $recurrence;
 }
 private static function getRecurrenceForEvent($event_id)
 {
     /** @var string $recType */
     /** @var string $recEndType */
     /** @var string $recEnd */
     /** @var int $recEndCount */
     extract(TribeEventsRecurrenceMeta::getRecurrenceMeta($event_id));
     if ($recType == 'None') {
         return NULL;
     }
     $rules = TribeEventsRecurrenceMeta::getSeriesRules($event_id);
     $recStart = strtotime(get_post_meta($event_id, '_EventStartDate', TRUE));
     switch ($recEndType) {
         case 'On':
             $recEnd = strtotime(TribeDateUtils::endOfDay($recEnd));
             break;
         case 'Never':
             $recEnd = TribeRecurrence::NO_END;
             break;
         case 'After':
         default:
             $recEnd = $recEndCount - 1;
             // subtract one because event is first occurrence
             break;
     }
     $recurrence = new TribeRecurrence($recStart, $recEnd, $rules, $recEndType == "After", get_post($event_id));
     return $recurrence;
 }
 /**
  * Checks the recurrence amount and adds a filter to display an errir if it is not correct.
  *
  * @since 3.0
  * @author Paul Hughes
  *
  * @param int $post_id The post id.
  * @return void
  */
 public function checkRecurrenceAmount($post_id)
 {
     $is_success = true;
     if (get_post_type($post_id) == TribeEvents::POSTTYPE && get_post_meta($post_id, '_EventRecurrence')) {
         extract(TribeEventsRecurrenceMeta::getRecurrenceMeta($post_id));
         $rules = TribeEventsRecurrenceMeta::getSeriesRules($post_id);
         // use the recurrence start meta if necessary because we can't guarantee which order the start date will come back in
         $recStart = strtotime(get_post_meta($post_id, '_EventStartDate', true));
         $eventEnd = strtotime(get_post_meta($post_id, '_EventEndDate', true));
         $duration = $eventEnd - $recStart;
         $recEnd = $recEndType == "On" ? strtotime(TribeDateUtils::endOfDay($recEnd)) : $recEndCount - 1;
         // subtract one because event is first occurrence
         $old_start_dates = get_post_meta($post_id, '_EventStartDate');
         if ($recType != "None") {
             $recurrence = new TribeRecurrence($recStart, $recEnd, $rules, $recEndType == "After", get_post($post_id));
             $dates = (array) $recurrence->getDates(true, $old_start_dates);
             $max_recurrences = apply_filters('tribe_events_max_recurrences', 199);
             if (count($dates) > $max_recurrences) {
                 add_filter('redirect_post_location', array(__CLASS__, 'tooManyRecurrencesError'));
                 $is_success = false;
             }
         }
     }
     return $is_success;
 }