/** * 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); } } }
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; }