function tribe_rss_feed_add_eventdate() { ?> <ev:tribe_event_meta xmlns:ev="Event"> <?php if (tribe_get_start_date() !== tribe_get_end_date()) { ?> <ev:startdate><?php echo tribe_get_start_date(); ?> </ev:startdate> <ev:enddate><?php echo tribe_get_end_date(); ?> </ev:enddate> <?php } else { ?> <ev:startdate><?php echo tribe_get_start_date(); ?> </ev:startdate> <?php } ?> </ev:tribe_event_meta> <?php }
/** * Compile the schema.org event data into an array */ private function build_data() { global $post; $id = $post->ID; $events_data = array(); // Index by ID: this will allow filter code to identify the actual event being referred to // without injecting an additional property $events_data[$id] = new stdClass(); $events_data[$id]->{'@context'} = 'http://schema.org'; $events_data[$id]->{'@type'} = 'Event'; $events_data[$id]->name = get_the_title(); if (has_post_thumbnail()) { $events_data[$id]->image = wp_get_attachment_url(get_post_thumbnail_id($post->ID)); } $events_data[$id]->url = get_the_permalink($post->ID); $events_data[$id]->startDate = get_gmt_from_date(tribe_get_start_date($post, true, TribeDateUtils::DBDATETIMEFORMAT), 'c'); $events_data[$id]->endDate = get_gmt_from_date(tribe_get_end_date($post, true, TribeDateUtils::DBDATETIMEFORMAT), 'c'); if (tribe_has_venue($id)) { $events_data[$id]->location = new stdClass(); $events_data[$id]->location->{'@type'} = 'Place'; $events_data[$id]->location->name = tribe_get_venue($post->ID); $events_data[$id]->location->address = strip_tags(str_replace("\n", '', tribe_get_full_address($post->ID))); } /** * Allows the event data to be modifed by themes and other plugins. * * @param array $events_data objects representing the Google Markup for each event. */ $events_data = apply_filters('tribe_google_event_data', $events_data); // Strip the post ID indexing before returning $events_data = array_values($events_data); return $events_data; }
/** * Get the event date * * @param int $meta_id * @return string */ public static function event_date($meta_id) { $time_format = get_option('time_format', TribeDateUtils::TIMEFORMAT); $start_time = tribe_get_start_date(null, false, $time_format); $end_time = tribe_get_end_date(null, false, $time_format); if (tribe_event_is_all_day()) { if (tribe_event_is_multiday()) { $html = Tribe_Meta_Factory::template(__('Start:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>', tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_start_date()), $meta_id); $html .= Tribe_Meta_Factory::template(__('End:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>', tribe_get_end_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_end_date()), $meta_id); } else { // If all day event, show only start date $html = Tribe_Meta_Factory::template(__('Date:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>', tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_start_date()), $meta_id); } } elseif (tribe_event_is_multiday()) { // If multiday, show start date+time and end date+time $html = Tribe_Meta_Factory::template(__('Start:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>', tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_start_date()), $meta_id); $html .= Tribe_Meta_Factory::template(__('End:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>', tribe_get_end_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_end_date()), $meta_id); } else { // show start date $html = Tribe_Meta_Factory::template(__('Date:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>', tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_start_date(null, false)), $meta_id); if ($start_time == $end_time) { // if start and end time are the same, just show the start time $html .= Tribe_Meta_Factory::template(__('Time:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>', tribe_get_end_date(null, false, TribeDateUtils::DBDATEFORMAT), $start_time), $meta_id); } else { // show start and end time $html .= Tribe_Meta_Factory::template(__('Time:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>', tribe_get_end_date(null, false, TribeDateUtils::DBDATEFORMAT), $start_time . ' - ' . $end_time), $meta_id); } } return apply_filters('tribe_event_meta_event_date', $html); }
/** * Set up the notices for this template * * @return void * @since 3.0 **/ public function set_notices() { parent::set_notices(); // Check if event has passed $gmt_offset = get_option('gmt_offset') >= '0' ? ' +' . get_option('gmt_offset') : " " . get_option('gmt_offset'); $gmt_offset = str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), $gmt_offset); if (!tribe_is_showing_all() && strtotime(tribe_get_end_date(get_the_ID(), false, 'Y-m-d G:i') . $gmt_offset) <= time()) { TribeEvents::setNotice('event-past', __('This event has passed.', 'tribe-events-calendar')); } }
function front_end($args, $instance) { extract($args); $limit = intval($instance['load']); $title = $instance['title']; $events = tribe_get_events(array('eventDisplay' => 'upcoming', 'posts_per_page' => $event_count)); if (!empty($events)) { echo $title ? $before_title . $title . $after_title : ''; foreach ($events as $event) { $start_date = strtotime(tribe_get_start_date($event->ID)); $start_date_day = date('Y-m-d', $start_date); $end_date = strtotime(tribe_get_end_date($event->ID)); $end_date_day = date('Y-m-d', $end_date); $all_day = tribe_event_is_all_day($event->ID); $time_format = get_option('time_format'); if ($all_day) { $date_format = date('F jS', $start_date) . '<span>•</span> <em>' . __('All day', 'espresso') . '</em>'; } else { if ($end_date_day) { if ($start_date_day == $end_date_day) { $date_format = date('F jS', $start_date) . '<span>•</span> <em>' . date($time_format, $start_date) . ' – ' . date($time_format, $end_date) . '</em>'; } else { $date_format = date('F jS', $start_date) . ' <em>@ ' . date($time_format, $start_date) . '<br />' . __('to', 'espresso') . '</em> ' . date('F jS', $end_date) . ' <em>@' . date($time_format, $end_date) . '</em>'; } } } ?> <article class="upcoming-event-block clearfix"> <h3><a href="<?php echo get_permalink($event->ID); ?> "><?php echo apply_filters('the_title', $event->post_title); ?> </a></h3> <small><?php echo $date_format; ?> </small> <p><?php echo $event->post_excerpt ? $event->post_excerpt : espressoTruncate($event->post_content, 155) . ' ...'; ?> </p> <a class="es-button" href="<?php echo get_permalink($event->ID); ?> "><?php _e('Event Information', 'espresso'); ?> </a> </article><?php } } wp_reset_query(); }
protected function maintain_gap(array &$meta, $original) { // Original event start/end times and difference between them $start = tribe_get_start_date($original->ID, false, Tribe__Events__Date_Utils::DBDATETIMEFORMAT); $end = tribe_get_end_date($original->ID, false, Tribe__Events__Date_Utils::DBDATETIMEFORMAT); $diff = strtotime($end) - strtotime($start); // Adjust new event end time to maintain the same difference $start = strtotime($meta['_EventStartDate']); $end = $start + $diff; $meta['_EventEndDate'] = date(Tribe__Events__Date_Utils::DBDATETIMEFORMAT, $end); }
/** * Get the event date * * @param int $meta_id * @return string */ function event_date($meta_id) { if (tribe_get_start_date() !== tribe_get_end_date()) { // Start & end date $html = Tribe_Meta_Factory::template(__('Start:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>', tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_start_date()), $meta_id); $html .= Tribe_Meta_Factory::template(__('End:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>', tribe_get_end_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_end_date()), $meta_id); } else { // If all day event, show only start date $html = Tribe_Meta_Factory::template(__('Date:', 'tribe-events-calendar'), sprintf('<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>', tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT), tribe_get_start_date()), $meta_id); } return apply_filters('tribe_event_meta_event_date', $html); }
/** * Set up the notices for this template **/ public function set_notices() { parent::set_notices(); $events_label_singular_lowercase = tribe_get_event_label_singular_lowercase(); global $post; // Check if event has passed $gmt_offset = get_option('gmt_offset') >= '0' ? ' +' . get_option('gmt_offset') : ' ' . get_option('gmt_offset'); $gmt_offset = str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), $gmt_offset); if (!tribe_is_showing_all() && strtotime(tribe_get_end_date($post, false, 'Y-m-d G:i') . $gmt_offset) <= time()) { Tribe__Notices::set_notice('event-past', sprintf(esc_html__('This %s has passed.', 'the-events-calendar'), $events_label_singular_lowercase)); } }
/** * Compile the schema.org event data into an array */ protected function build_data() { global $post; $id = $post->ID; $event_data = parent::build_data(); $event_data[$id]->{'@type'} = 'Event'; $event_data[$id]->startDate = get_gmt_from_date(tribe_get_start_date($post, true, Tribe__Events__Date_Utils::DBDATETIMEFORMAT), 'c'); $event_data[$id]->endDate = get_gmt_from_date(tribe_get_end_date($post, true, Tribe__Events__Date_Utils::DBDATETIMEFORMAT), 'c'); if (tribe_has_venue($id)) { $event_data[$id]->location = new stdClass(); $event_data[$id]->location->{'@type'} = 'Place'; $event_data[$id]->location->name = tribe_get_venue($post->ID); $event_data[$id]->location->address = strip_tags(str_replace("\n", '', tribe_get_full_address($post->ID))); } return $event_data; }
public function form($instance) { $defaults = array('title' => '', 'type' => 'single-event', 'event' => null, 'show_seconds' => true, 'complete' => esc_attr__('Hooray!', 'tribe-events-calendar-pro'), 'event_ID' => null, 'event_date' => null); $instance = wp_parse_args((array) $instance, $defaults); if (empty($instance['event'])) { $instance['event'] = $instance['event_ID']; } $limit = apply_filters('tribe_events_pro_countdown_widget_limit', 250); $paged = apply_filters('tribe_events_pro_countdown_widget_paged', 1); $events = tribe_get_events(array('eventDisplay' => 'list', 'posts_per_page' => $limit, 'paged' => $paged)); if (is_numeric($instance['event'])) { $event = get_post($instance['event']); if ($event instanceof WP_Post && !in_array($event->ID, wp_list_pluck($events, 'ID'))) { $event->EventStartDate = tribe_get_start_date($event->ID, false, Tribe__Date_Utils::DBDATETIMEFORMAT); $event->EventEndDate = tribe_get_end_date($event->ID, false, Tribe__Date_Utils::DBDATETIMEFORMAT); $events = array_merge(array($event), $events); } } include Tribe__Events__Pro__Main::instance()->pluginPath . 'src/admin-views/widget-admin-countdown.php'; }
/** * Intelligently updates our record of the earliest start date/latest event date in * the system. If the existing earliest/latest values have not been superseded by the new post's * start/end date then no update takes place. * * This is deliberately hooked into save_post, rather than save_post_tribe_events, to avoid issues * where the removal/restoration of hooks within addEventMeta() etc might stop this method from * actually being called (relates to a core WP bug). * * @param int $event_id */ public function update_known_range($event_id) { $is_earliest_date_marker = in_array($event_id, tribe_get_option('earliest_date_markers', array())); $is_latest_date_marker = in_array($event_id, tribe_get_option('latest_date_markers', array())); if ($is_earliest_date_marker || $is_latest_date_marker) { $this->rebuild_known_range(); return; } $current_min = tribe_events_earliest_date(); $current_max = tribe_events_latest_date(); $event_start = tribe_get_start_date($event_id, false, Tribe__Date_Utils::DBDATETIMEFORMAT); $event_end = tribe_get_end_date($event_id, false, Tribe__Date_Utils::DBDATETIMEFORMAT); if ($current_min > $event_start) { $this->rebuild_known_range(); tribe_update_option('earliest_date', $event_start); } if ($current_max < $event_end) { $this->rebuild_known_range(); tribe_update_option('latest_date', $event_end); } }
/** * Fetches the JSON-LD data for this type of object * * @param int|WP_Post|null $post The post/event * @param array $args * @return array */ public function get_data($posts = null, $args = array()) { $posts = $posts instanceof WP_Post ? array($posts) : (array) $posts; $return = array(); foreach ($posts as $i => $post) { $data = parent::get_data($post, $args); // If we have an Empty data we just skip if (empty($data)) { continue; } // Fetch first key $post_id = key($data); // Fetch first Value $data = reset($data); $event_tz_string = get_post_meta($post_id, '_EventTimezone', true); $tz_mode = tribe_get_option('tribe_events_timezone_mode', 'event'); $tz_string = $event_tz_string && $tz_mode === 'event' ? $event_tz_string : Tribe__Events__Timezones::wp_timezone_string(); $data->startDate = Tribe__Events__Timezones::to_utc(tribe_get_start_date($post_id, true, Tribe__Date_Utils::DBDATETIMEFORMAT), $tz_string, 'c'); $data->endDate = Tribe__Events__Timezones::to_utc(tribe_get_end_date($post_id, true, Tribe__Date_Utils::DBDATETIMEFORMAT), $tz_string, 'c'); if (tribe_has_venue($post_id)) { $venue_id = tribe_get_venue_id($post_id); $venue_data = Tribe__Events__JSON_LD__Venue::instance()->get_data($venue_id); $data->location = reset($venue_data); } if (tribe_has_organizer($post_id)) { $organizer_id = tribe_get_organizer_id($post_id); $organizer_data = Tribe__Events__JSON_LD__Organizer::instance()->get_data($organizer_id); $data->organizer = reset($organizer_data); } $price = tribe_get_cost($post_id); $price = $this->normalize_price($price); if ('' !== $price) { // Manually Include the Price for non Event Tickets $data->offers = (object) array('@type' => 'Offer', 'price' => $price, 'url' => $data->url); } $return[$post_id] = $data; } return $return; }
/** * Alters the provided formatted time to include all recurrence times for the day * * @since 4.0.3 * * @param string $formatted_time Formatted time range for the given event * @param int $event_id Event ID * * @return string */ public function maybe_render_multiple_formatted_times($formatted_time, $event_id) { if (!tribe_is_recurring_event($event_id)) { return $formatted_time; } $date = tribe_get_start_date($event_id, false, Tribe__Date_Utils::DBDATEFORMAT); $time_format = get_option('time_format', Tribe__Date_Utils::TIMEFORMAT); $time_range_separator = tribe_get_option('timeRangeSeparator', ' - '); $events = $this->get_recurring_events_for_date($event_id, $date); $formatted_time = null; foreach ($events as $child) { $start_time = tribe_get_start_date($child->ID, false, $time_format); $end_time = tribe_get_end_date($child->ID, false, $time_format); $formatted_time .= '<div class="tribe-recurring-event-time">'; if ($start_time === $end_time) { $formatted_time .= esc_html($start_time); } else { $formatted_time .= esc_html($start_time . $time_range_separator . $end_time); } $formatted_time .= '</div>'; } return $formatted_time; }
<div id="filters-wrap" class="postbox"> <h3 title="Click to toggle"><?php _e('Event Summary', 'tribe-events-calendar'); ?> </h3> <table class="eventtable ticket_list"> <tr> <td width="33%" valign="top"> <?php echo sprintf('<h4>%s</h4>', esc_html(__('Event Details', 'tribe-events-calendar'))); echo sprintf('<strong>%s </strong> %s', esc_html(__('Start Date / Time:', 'tribe-events-calendar')), tribe_get_start_date($event_id, false, get_option('date_format') . ' ' . get_option('time_format'))); echo "<br/>"; echo sprintf('<strong>%s </strong> %s', esc_html(__('End Date / Time:', 'tribe-events-calendar')), tribe_get_end_date($event_id, false, get_option('date_format') . ' ' . get_option('time_format'))); $venue_id = tribe_get_venue_id($event_id); if (!empty($venue_id)) { $venue = get_post($venue_id); } if (!empty($venue)) { echo "<br/>"; echo sprintf('<strong>%s </strong> %s', esc_html(__('Venue:', 'tribe-events-calendar')), esc_html($venue->post_title)); $phone = get_post_meta($venue_id, '_VenuePhone', true); if (!empty($phone)) { echo "<br/>"; echo sprintf('<strong>%s </strong> %s', esc_html(__('Phone:', 'tribe-events-calendar')), esc_html($phone)); } $website = get_post_meta($venue_id, '_VenueURL', true); if (!empty($website)) { echo "<br/>";
public function end_time() { return tribe_get_end_date(null, false, get_option('time_format', 'H:i')); }
/** * Updates the next batch of non-timezone ready events. * * @param int $batch_size (defaults to -1 meaning "update all") */ public function process($batch_size = -1) { $site_timezone = Tribe__Timezones::wp_timezone_string(); foreach ($this->get_ids($batch_size) as $event_id) { $local_start_time = tribe_get_start_date($event_id, true, Tribe__Date_Utils::DBDATETIMEFORMAT); $utc_start_time = Tribe__Timezones::to_utc($local_start_time, $site_timezone); $local_end_time = tribe_get_end_date($event_id, true, Tribe__Date_Utils::DBDATETIMEFORMAT); $utc_end_time = Tribe__Timezones::to_utc($local_end_time, $site_timezone); // The abbreviation needs to be calculated per event as it can vary according to the actual date $site_timezone_abbr = Tribe__Timezones::wp_timezone_abbr($local_start_time); update_post_meta($event_id, '_EventTimezone', $site_timezone); update_post_meta($event_id, '_EventTimezoneAbbr', $site_timezone_abbr); update_post_meta($event_id, '_EventStartDateUTC', $utc_start_time); update_post_meta($event_id, '_EventEndDateUTC', $utc_end_time); } }
<div class="thumbnail"> <?php the_post_thumbnail('thumbnail'); ?> </div> <?php } ?> <h3 class="tribe-events-month-event-title entry-title summary"> <a href="<?php tribe_event_link($post); ?> " class="url"> <?php the_title(); ?> </a> </h3> <div class="date"> <i class="fa fa-clock-o"></i><?php echo tribe_get_start_date(get_the_id(), false, 'H:i m/d/Y'); ?> <span> - </span> <?php echo tribe_get_end_date(get_the_id(), false, 'H:i m/d/Y'); ?> </div> <div class="clearfix"></div> </div><!-- #tribe-events-event-# -->
* * Override this template in your own theme by creating a file at: * [your-theme]/tribe-events/modules/meta/details.php * * @package TribeEventsCalendar */ $time_format = get_option('time_format', Tribe__Events__Date_Utils::TIMEFORMAT); $time_range_separator = tribe_get_option('timeRangeSeparator', ' - '); $start_datetime = tribe_get_start_date(); $start_date = tribe_get_start_date(null, false); $start_time = tribe_get_start_date(null, false, $time_format); $start_ts = tribe_get_start_date(null, false, Tribe__Events__Date_Utils::DBDATEFORMAT); $end_datetime = tribe_get_end_date(); $end_date = tribe_get_end_date(null, false); $end_time = tribe_get_end_date(null, false, $time_format); $end_ts = tribe_get_end_date(null, false, Tribe__Events__Date_Utils::DBDATEFORMAT); $instructor = get_post_meta(get_the_ID(), 'Instructor', true); $cost = tribe_get_formatted_cost(); $website = tribe_get_event_website_link(); ?> <div class="tribe-events-meta-group tribe-events-meta-group-details"> <h3 class="tribe-events-single-section-title"> <?php esc_html_e('Details', 'the-events-calendar'); ?> </h3> <dl> <?php do_action('tribe_events_single_meta_details_section_start'); // All day (multiday) events
/** * Breaks the possible collection of events down by grid date * * @param string $date Y-m-d formatted date to retrieve events for * * @return array */ private function get_event_ids_by_day($date) { if (!$this->event_ids_by_day) { $this->event_ids_by_day = array(); // Let's loop over all of the events in the month and assign them to days foreach ($this->events_in_month as $event) { // if we're querying by category and the event doesn't have it, skip the event if (!empty($this->queried_event_cats)) { if (!has_term($this->queried_event_cats, Tribe__Events__Main::TAXONOMY, $event)) { continue; } } $event_start = strtotime(tribe_get_start_date($event->ID, true, Tribe__Date_Utils::DBDATETIMEFORMAT)); $event_end = strtotime(tribe_get_end_date($event->ID, true, Tribe__Date_Utils::DBDATETIMEFORMAT)); $start = date('Y-m-d', $event_start); $end = date('Y-m-d', $event_end); $beginning_of_start = $this->get_cutoff_details($start, 'beginning'); $beginning_of_start_timestamp = $this->get_cutoff_details($start, 'beginning_timestamp'); $end_of_start = $this->get_cutoff_details($start, 'end'); $end_of_start_timestamp = $this->get_cutoff_details($start, 'end_timestamp'); $beginning_of_end = $this->get_cutoff_details($end, 'beginning'); $beginning_of_end_timestamp = $this->get_cutoff_details($end, 'beginning_timestamp'); // if the start of the event is earlier than the beginning of the day, consider the event // as starting on the day before // // Example 1: // Assuming a cut-off of 6:00am and an event start date/time of August 2nd @ 5:00am. The // "start" DATE would be August 2nd and the beginning of the "start" DATE would be August // 2nd @ 6:00am. Therefore, the event start DATE shoud be altered to be a day earlier // (August 1st) (Note: the following if statement conditional would be true) if ($event_start < $beginning_of_start_timestamp) { $start = date('Y-m-d', strtotime('-1 day', strtotime($start))); } // Subtract a day from the $end if it is: // * earlier than the beginning of the start DATE OR // * earlier than the beginning of the end DATE OR // * earlier than the end of the start DATE (as long as the beginning of the end DATE is greater than that of the start DATE) // // Example 1: // Assuming a cut-off of 6:00am and an event end date/time of August 2nd @ 7:00am. The // "end" DATE would be August 2nd and the beginning of the "end" DATE would be August // 2nd @ 6:00am. Therefore, the event end DATE shoud remain as August 2nd. (Note: the // following if statement conditional would be false) // // Example 2: // Assuming a cut-off of 6:00am and an event end date/time of August 2nd @ 5:00am. The // "end" DATE would be August 2nd and the beginning of the "end" DATE would be August // 2nd @ 6:00am. Therefore, the event end DATE shoud be altered to be a day earlier // (August 1st) (Note: this following if statement conditional would be true) if ($event_end < $beginning_of_start_timestamp || $event_end < $beginning_of_end_timestamp || $event_end < $end_of_start_timestamp && $beginning_of_end_timestamp > $end_of_start_timestamp) { $end = date('Y-m-d', strtotime('-1 day', strtotime($end))); } // determine if there's a difference in days between start and end $diff = strtotime($end) - strtotime($start); if ($diff > 0) { // There IS a difference. How many days? $diff_in_days = $diff / DAY_IN_SECONDS; // add the event to each day until the event end $new_start = $start; for ($i = 0; $i <= $diff_in_days; $i++) { if (!isset($this->event_ids_by_day[$new_start])) { $this->event_ids_by_day[$new_start] = array(); } $this->event_ids_by_day[$new_start][] = $event->ID; $new_start = date('Y-m-d', strtotime('+1 day', strtotime($new_start))); } } else { // nope. The event is a single day event. Add it to the array if (!isset($this->event_ids_by_day[$start])) { $this->event_ids_by_day[$start] = array(); } $this->event_ids_by_day[$start][] = $event->ID; } } // Now that we've built our event_ids_by_day, let's array_unique and sort foreach ($this->event_ids_by_day as &$day) { $day = array_unique($day); sort($day); } } if (empty($this->event_ids_by_day[$date])) { return array(); } return $this->event_ids_by_day[$date]; }
/** * Returns json for javascript templating functions throughout the plugin. * * @category Events * * @param $event * @param $additional * * @return string */ function tribe_events_template_data($event, array $additional = null) { $has_image = false; $image_src = ''; $image_tool_src = ''; $date_display = ''; //Disable recurring event info in tooltip if (class_exists('Tribe__Events__Pro__Main')) { $ecp = Tribe__Events__Pro__Main::instance(); $ecp->disable_recurring_info_tooltip(); $date_display = strip_tags(tribe_events_event_schedule_details($event)); // Re-enable recurring event info $ecp->enable_recurring_info_tooltip(); } else { $date_display = strip_tags(tribe_events_event_schedule_details($event)); } if (function_exists('has_post_thumbnail') && has_post_thumbnail($event->ID)) { $has_image = true; $image_arr = wp_get_attachment_image_src(get_post_thumbnail_id($event->ID), 'medium'); $image_src = $image_arr[0]; } if ($has_image) { $image_tool_arr = wp_get_attachment_image_src(get_post_thumbnail_id($event->ID), array(75, 75)); $image_tool_src = $image_tool_arr[0]; } if (has_excerpt($event->ID)) { $excerpt = $event->post_excerpt; } else { $excerpt = $event->post_content; } $excerpt = Tribe__Events__Main::instance()->truncate($excerpt, 30); $category_classes = tribe_events_event_classes($event->ID, false); $json = array('eventId' => $event->ID, 'title' => $event->post_title, 'permalink' => tribe_get_event_link($event->ID), 'imageSrc' => $image_src, 'dateDisplay' => $date_display, 'imageTooltipSrc' => $image_tool_src, 'excerpt' => $excerpt, 'categoryClasses' => $category_classes); /** * Template overrides (of month/tooltip.php) set up in 3.9.3 or earlier may still expect * these vars and will break without them, so they are being kept temporarily for * backwards compatibility purposes. * * @todo consider removing in 4.0 */ $json['startTime'] = tribe_get_start_date($event); $json['endTime'] = tribe_get_end_date($event); if ($additional) { $json = array_merge((array) $json, (array) $additional); } $json = apply_filters('tribe_events_template_data_array', $json, $event, $additional); $json = tribe_prepare_for_json_deep($json); return json_encode($json); }
$has_venue_address = $venue_address ? ' location' : ''; // Organizer $organizer = tribe_get_organizer(); ?> <!-- Event Image --> <?php echo tribe_event_featured_image(null, 'medium'); ?> <!-- Event Time --> <?php $time_format = get_option('time_format', TribeDateUtils::TIMEFORMAT); $time_range_separator = tribe_get_option('timeRangeSeparator', ' - '); $start_time = tribe_get_start_date(null, false, $time_format); $end_time = tribe_get_end_date(null, false, $time_format); ?> <div class="tribe-events-info"> <div class="tribe-events-date icon-calendar"><?php echo date('j M', strtotime($post->EventStartDate)); ?> </div> <!-- <div class="tribe-events-time icon-clock-1"><?php echo date('h:ia', strtotime($post->EventStartDate)) . '<br /> - ' . date('h:ia', strtotime($post->EventEndDate)); ?> </div> --> <div class="tribe-events-time icon-clock-1"><?php echo $start_time . '<br /> ' . $time_range_separator . ' ' . $end_time; ?> </div>
/** * Given a date and an event, returns true or false if the event is happening on that date * This function properly adjusts for the EOD cutoff and multi-day events * * @param null $date * @param null $event * * @return mixed|void */ function tribe_event_is_on_date($date = null, $event = null) { if (null === $date) { $date = current_time('mysql'); } if (null === $event) { global $post; $event = $post; if (empty($event)) { _doing_it_wrong(__FUNCTION__, esc_html__('The function needs to be passed an $event or used in the loop.', 'the-events-calendar')); return false; } } $start_of_day = tribe_beginning_of_day($date, 'U'); $end_of_day = tribe_end_of_day($date, 'U'); $event_start = tribe_get_start_date($event, null, 'U'); $event_end = tribe_get_end_date($event, null, 'U'); // kludge if (!empty($event->_end_date_fixed)) { // @todo remove this once we can have all day events without a start / end time $event_end = date_create(date(Tribe__Date_Utils::DBDATETIMEFORMAT, $event_end)); $event_end->modify('+1 day'); $event_end = $event_end->format('U'); } /* note: * events that start exactly on the EOD cutoff will count on the following day * events that end exactly on the EOD cutoff will count on the previous day */ $event_is_on_date = Tribe__Date_Utils::range_coincides($start_of_day, $end_of_day, $event_start, $event_end); return apply_filters('tribe_event_is_on_date', $event_is_on_date, $date, $event); }
} post_class($alt_text, $post->ID); $class = ob_get_contents(); ob_end_clean(); ?> <li <?php echo $class; ?> > <div class="when"> <?php $space = false; $output = ''; echo tribe_get_start_date($post->ID); if (tribe_is_multiday($post->ID) || !$event->AllDay) { echo ' - ' . tribe_get_end_date($post->ID); } if ($event->AllDay) { echo ' <small>(' . __('All Day', 'tribe-events-calendar') . ')</small>'; } ?> </div> <div class="event"> <a href="<?php echo get_permalink($post->ID); ?> "><?php echo $post->post_title; ?> </a>
*/ if (!defined('ABSPATH')) { die('-1'); } //Check if any posts were found if ($posts) { ?> <ol class="hfeed vcalendar"> <?php foreach ($posts as $post) { setup_postdata($post); $time_format = get_option('time_format', TribeDateUtils::TIMEFORMAT); $time_range_separator = tribe_get_option('timeRangeSeparator', ' - '); $start_time = tribe_get_start_date($event, false, $time_format); $end_time = tribe_get_end_date($event, false, $time_format); ?> <li class="tribe-events-list-widget-events <?php tribe_events_event_classes(); ?> "> <div class="event-info-box"> <div class="event-date"> <span class="icon-calendar"><?php echo date('j M', strtotime($post->EventStartDate)); ?> </span> </div> <div class="event-time"> <span class="clock icon-clock-1"></span>
<div class="row"> <div class="col-sm-2"> <div class="event-date"> <?php if (trim(tribe_get_start_date(get_the_ID(), false, 'Y-m-d')) != trim($event_date)) { echo '00:00'; } else { echo tribe_get_start_date(get_the_ID(), false, 'H:i'); } ?> <span>-</span> <?php if (trim(tribe_get_end_date(get_the_ID(), false, 'Y-m-d')) != trim($event_date)) { echo '23:59'; } else { echo tribe_get_end_date(get_the_ID(), false, 'H:i'); } ?> </div> <div class="clearfix"></div> <div class="event_room text-right"> <span><?php echo esc_html($room); ?> </span> </div> <div class="clearfix"></div> <div class="speaker"> <?php foreach ($galleries as $key => $_img) { echo '<div class="item ' . ($key == 0 ? 'active' : '') . '">';
/** * Build data attributes for an event; needed for week view js * * @param $event * * @return array */ public static function get_event_attributes($event) { $event = Tribe__Events__Main::postIdHelper($event); $event = get_post($event); $attrs = array(); $event_start_timestamp = tribe_get_start_date($event, null, 'U'); $event_end_timestamp = tribe_get_end_date($event, null, 'U'); if (tribe_event_is_all_day($event)) { $attrs['data-hour'] = 'all-day'; } else { $start_of_day_timestamp = self::get_rounded_beginning_of_day(self::get_current_date()); $end_of_day_timestamp = tribe_end_of_day(self::get_current_date(), 'U'); if (has_filter('tribe_events_week_get_hours')) { // if we're filtering the hour range on week view, stop the events at that hour $last_hour_timestamp = strtotime(self::get_current_date() . tribe_events_week_get_hours('last-hour')); $end_of_day_timestamp = min($end_of_day_timestamp, $last_hour_timestamp); } $data_hour = date('G', $event_start_timestamp); $data_min = date('i', $event_start_timestamp); if ($event_start_timestamp < $start_of_day_timestamp) { if ($event_end_timestamp > $end_of_day_timestamp) { // if there is a day in between start/end we just want to fill the spacer with the total mins in the day. $duration = ($end_of_day_timestamp - $start_of_day_timestamp) / 60; } else { $duration = ($event_end_timestamp - $start_of_day_timestamp) / 60; } $data_hour = date('G', $start_of_day_timestamp); $data_min = date('i', $start_of_day_timestamp); } elseif ($event_end_timestamp > $end_of_day_timestamp) { // if the event is longer than a day we want to account for that with an offset $duration = ($end_of_day_timestamp - $event_start_timestamp) / 60; } else { // for a default event continue as everything is normal $remaining_minutes_in_day = $end_of_day_timestamp - $event_start_timestamp / 60; $duration = get_post_meta($event->ID, '_EventDuration', true) / 60; if ($duration > $remaining_minutes_in_day) { // this will happen in the case of a multi-day event that extends beyond the end of the day $duration = $remaining_minutes_in_day; } } $attrs['data-duration'] = abs($duration); $attrs['data-hour'] = $data_hour; $attrs['data-min'] = $data_min; } return $attrs; }
the_permalink(); ?> "> <?php the_title(); ?> </a><br /> <?php if (tribe_get_start_date() !== tribe_get_end_date()) { ?> <?php echo tribe_get_start_date(); ?> - <?php echo tribe_get_end_date(); ?> <?php } else { ?> <?php echo tribe_get_start_date(); ?> <?php } ?> <?php the_content(); ?>
/** * Convert the event recurrence meta into a human readable string * * @TODO: there's a great deal of duplication between this method and tribe_events_pro_admin.recurrence.update_rule_recurrence_text (events-recurrence.js) * let's consider generating once (by JS?) and saving the result for re-use instead * * @param array $rule * @param string $start_date * @param int $event_id * * @return string human readable string */ public static function recurrenceToText($rule, $start_date, $event_id) { $text = ''; $recurrence_strings = Tribe__Events__Pro__Recurrence__Strings::recurrence_strings(); $date_strings = self::date_strings(); $interval = 1; $is_custom = false; $same_time = true; $year_filtered = false; $rule['type'] = str_replace(' ', '-', strtolower($rule['type'])); $rule['end-type'] = str_replace(' ', '-', strtolower($rule['end-type'])); $formatted_end = _x('an unspecified date', 'An unspecified end date', 'tribe-events-calendar-pro'); if (!empty($rule['end'])) { $formatted_end = date(tribe_get_date_format(true), strtotime($rule['end'])); } // if the type is "none", then there's no rules to parse if ('none' === $rule['type']) { return; } // if there isn't an end date, then there isn't a recurrence set up if ('on' === $rule['end-type'] && empty($rule['end'])) { return; } if ('custom' === $rule['type']) { $is_custom = true; $same_time = false; if ('yes' === @$rule['custom'][Tribe__Events__Pro__Recurrence__Custom_Types::to_key($rule['custom']['type'])]['same-time']) { $same_time = true; } if ('Yearly' === $rule['custom']['type']) { $year_filtered = !empty($rule['custom']['year']['filter']); } } $start_date = strtotime(tribe_get_start_date($event_id, true, Tribe__Date_Utils::DBDATETIMEFORMAT)); $end_date = strtotime(tribe_get_end_date($event_id, true, Tribe__Date_Utils::DBDATETIMEFORMAT)); $num_days = floor(($end_date - $start_date) / DAY_IN_SECONDS); // make sure we always round hours UP to when dealing with decimal lengths more than 2. Example: 4.333333 would become 4.34 $num_hours = ceil((($end_date - $start_date) / HOUR_IN_SECONDS - $num_days * 24) * 100) / 100; if ($is_custom && 'custom' === $rule['type'] && !$same_time) { $formatted_start = date('Y-m-d', $start_date) . ' ' . $rule['custom']['start-time']['hour'] . ':' . $rule['custom']['start-time']['minute']; if (isset($rule['custom']['start-time']['meridian'])) { $formatted_start .= ' ' . $rule['custom']['start-time']['meridian']; } if (isset($rule['custom']['duration'])) { try { $end_date = new DateTime('@' . $start_date); $end_date->modify('+' . absint($rule['custom']['duration']['days']) . ' days'); $end_date->modify('+' . absint($rule['custom']['duration']['hours']) . ' hours'); $end_date->modify('+' . absint($rule['custom']['duration']['minutes']) . ' minutes'); $formatted_end = Tribe__View_Helpers::is_24hr_format() ? $end_date->format('Y-m-d H:i') : $end_date->format('Y-m-d g:i'); $end_date = $end_date->format('U'); } catch (Exception $e) { // $formatted_end will default to the "unspecified end date" text in this case } } $new_num_days = floor(($end_date - $start_date) / DAY_IN_SECONDS); // make sure we always round hours UP to when dealing with decimal lengths more than 2. Example: 4.333333 would become 4.34 $new_num_hours = ceil((($end_date - $start_date) / HOUR_IN_SECONDS - $new_num_days * 24) * 100) / 100; } $weekdays = array(); $months = array(); $month_number = null; $month_day = null; $month_day_description = null; if ($is_custom && 'Weekly' === $rule['custom']['type'] && !empty($rule['custom']['week']['day'])) { foreach ($rule['custom']['week']['day'] as $day) { $weekdays[] = $date_strings['weekdays'][$day - 1]; } if (!$weekdays) { $weekdays = $date_strings['day_placeholder']; } elseif (2 === count($weekdays)) { $weekdays = implode(" {$date_strings['collection_joiner']} ", $weekdays); } else { $weekdays = implode(', ', $weekdays); $weekdays = preg_replace('/(.*),/', '$1, ' . $date_strings['collection_joiner'], $weekdays); } } elseif ($is_custom && 'Monthly' === $rule['custom']['type'] && !empty($rule['custom']['month']['number']) && !empty($rule['custom']['month']['day'])) { $month_number = $rule['custom']['month']['number']; $month_day = $rule['custom']['month']['day']; } elseif ($is_custom && 'Yearly' === $rule['custom']['type'] && !empty($rule['custom']['year']['month-number']) && !empty($rule['custom']['year']['month-day'])) { $month_number = $rule['custom']['year']['month-number']; $month_day = $rule['custom']['year']['month-day']; if (!empty($rule['custom']['year']['month'])) { foreach ($rule['custom']['year']['month'] as $month) { $months[] = $date_strings['months'][$month - 1]; } } if (!$months) { $months = $date_strings['month_placeholder']; } elseif (2 === count($months)) { $months = implode(" {$date_strings['collection_joiner']} ", $months); } else { $months = implode(', ', $months); $months = preg_replace('/(.*),/', '$1, ' . $date_strings['collection_joiner'], $months); } } $key = $rule['type']; if ('custom' === $rule['type']) { $key .= "-{$rule['custom']['type']}-{$rule['end-type']}-" . ($same_time ? 'same' : 'diff') . '-time'; if ('monthly' === $rule['custom']['type'] && is_numeric($month_number)) { $key .= '-numeric'; } elseif ('yearly' === $rule['custom']['type'] && !$year_filtered) { $key .= '-unfiltered'; } } else { $key = "simple-{$key}"; $key .= "-{$rule['end-type']}"; } $key = strtolower($key); // if custom rules were set but the custom-specific data is missing, then revert to standard // rules (weekly, monthly, and yearly) if ($is_custom && 'Weekly' === $rule['custom']['type'] && !$weekdays) { $key = 'every-week-on'; } elseif ($is_custom && 'Monthly' === $rule['custom']['type'] && !$month_number && !$month_day) { $key = 'every-month-on'; } elseif ($is_custom && 'Yearly' === $rule['custom']['type'] && !$month_number && !$month_day) { $key = 'every-year-on'; } $text = $recurrence_strings[$key]; switch ($key) { case 'simple-every-day-on': case 'simple-every-week-on': case 'simple-every-month-on': case 'simple-every-year-on': $text = sprintf($text, $formatted_end); break; case 'every-day-on': case 'every-week-on': case 'every-month-on': case 'every-year-on': case 'every-day-never': case 'every-week-never': case 'every-month-never': case 'every-year-never': $text = sprintf($text, $num_days, $num_hours, $formatted_end); break; case 'every-day-after': case 'every-week-after': case 'every-month-after': case 'every-year-after': $text = sprintf($text, $num_days, $num_hours, $rule['end-count']); break; case 'custom-daily-on-same-time': case 'custom-daily-never-same-time': $text = sprintf($text, $interval, $num_days, $num_hours, $formatted_end); break; case 'custom-daily-after-same-time': $text = sprintf($text, $interval, $num_days, $num_hours, $rule['end-count']); break; case 'custom-daily-on-diff-time': case 'custom-daily-never-diff-time': $text = sprintf($text, $interval, $formatted_start, $new_num_days, $new_num_hours, $formatted_end); break; case 'custom-daily-after-diff-time': $text = sprintf($text, $interval, $formatted_start, $new_num_days, $new_num_hours, $rule['end-count']); break; case 'custom-weekly-on-same-time': case 'custom-weekly-never-same-time': $text = sprintf($text, $interval, $weekdays, $num_days, $num_hours, $formatted_end); break; case 'custom-weekly-after-same-time': $text = sprintf($text, $interval, $weekdays, $num_days, $num_hours, $rule['end-count']); break; case 'custom-weekly-on-diff-time': case 'custom-weekly-never-diff-time': $text = sprintf($text, $interval, $weekdays, $formatted_start, $new_num_days, $new_num_hours, $formatted_end); break; case 'custom-weekly-after-diff-time': $text = sprintf($text, $interval, $weekdays, $formatted_start, $new_num_days, $new_num_hours, $rule['end-count']); break; case 'custom-monthly-on-same-time-numeric': case 'custom-monthly-never-same-time-numeric': case 'custom-monthly-on-same-time': case 'custom-monthly-never-same-time': $text = sprintf($text, $interval, $month_day_description, $num_days, $num_hours, $formatted_end); break; case 'custom-monthly-after-same-time-numeric': case 'custom-monthly-after-same-time': $text = sprintf($text, $interval, $month_day_description, $num_days, $num_hours, $rule['end-count']); break; case 'custom-monthly-on-diff-time-numeric': case 'custom-monthly-never-diff-time-numeric': case 'custom-monthly-on-diff-time': case 'custom-monthly-never-diff-time': $text = sprintf($text, $interval, $month_day_description, $formatted_start, $new_num_days, $new_num_hours, $formatted_end); break; case 'custom-monthly-after-diff-time-numeric': case 'custom-monthly-after-diff-time': $text = sprintf($text, $interval, $month_day_description, $formatted_start, $new_num_days, $new_num_hours, $rule['end-count']); break; case 'custom-yearly-on-same-time-unfiltered': case 'custom-yearly-never-same-time-unfiltered': case 'custom-yearly-on-same-time': case 'custom-yearly-never-same-time': $text = sprintf($text, $interval, $months, $month_day_description, $num_days, $num_hours, $formatted_end); break; case 'custom-yearly-after-same-time-unfiltered': case 'custom-yearly-after-same-time': $text = sprintf($text, $interval, $months, $month_day_description, $num_days, $num_hours, $rule['end-count']); break; case 'custom-yearly-on-diff-time-unfiltered': case 'custom-yearly-never-diff-time-unfiltered': case 'custom-yearly-on-diff-time': case 'custom-yearly-never-diff-time': $text = sprintf($text, $interval, $months, $month_day_description, $formatted_start, $new_num_days, $new_num_hours, $formatted_end); break; case 'custom-yearly-after-diff-time-unfiltered': case 'custom-yearly-after-diff-time': $text = sprintf($text, $interval, $months, $month_day_description, $formatted_start, $new_num_days, $new_num_hours, $rule['end-count']); break; } return $text; }
<div class="tribe-events-meta-group tribe-events-meta-group-details"> <div class="event-details-container"> <?php do_action('tribe_events_single_meta_details_section_start'); $time_format = get_option('time_format', TribeDateUtils::TIMEFORMAT); $time_range_separator = tribe_get_option('timeRangeSeparator', ' - '); $start_datetime = tribe_get_start_date(); $start_date = tribe_get_start_date(null, false); $start_time = tribe_get_start_date(null, false, $time_format); $start_ts = tribe_get_start_date(null, false, TribeDateUtils::DBDATEFORMAT); $end_datetime = tribe_get_end_date(); $end_date = tribe_get_end_date(null, false); $end_time = tribe_get_end_date(null, false, $time_format); $end_ts = tribe_get_end_date(null, false, TribeDateUtils::DBDATEFORMAT); // All day (multiday) events if (tribe_event_is_all_day() && tribe_event_is_multiday()) { ?> <div class="event-details-item"> <span class="icon-info"><?php _e('Start:', 'vh'); ?> </span> <div class="tribe-events-abbr updated published dtstart" title="<?php echo $start_ts; ?> "> <?php echo $start_date; ?>
/** * Intelligently updates our record of the earliest start date/latest event date in * the system. If the existing earliest/latest values have not been superseded by the new post's * start/end date then no update takes place. * * This is deliberately hooked into save_post, rather than save_post_tribe_events, to avoid issues * where the removal/restoration of hooks within addEventMeta() etc might stop this method from * actually being called (relates to a core WP bug). */ public function update_known_range($object_id) { $current_min = tribe_events_earliest_date(); $current_max = tribe_events_latest_date(); $event_start = tribe_get_start_date($object_id, false, Tribe__Events__Date_Utils::DBDATETIMEFORMAT); $event_end = tribe_get_end_date($object_id, false, Tribe__Events__Date_Utils::DBDATETIMEFORMAT); if ($current_min > $event_start) { tribe_update_option('earliest_date', $event_start); } if ($current_max < $event_end) { tribe_update_option('latest_date', $event_end); } }