/** * End Date * * Returns the event end date * * @param int $event (optional) * @param bool $displayTime If true shows date and time, if false only shows date * @param string $dateFormat Allows date and time formating using standard php syntax (http://php.net/manual/en/function.date.php) * @return string Date * @since 2.0 */ function tribe_get_end_date($event = null, $displayTime = true, $dateFormat = '') { if (is_null($event)) { global $post; $event = $post; } if (is_numeric($event)) { $event = get_post($event); } if (tribe_event_is_all_day($event)) { $displayTime = false; } if (empty($event->EventEndDate) && is_object($event)) { $event->EventEndDate = tribe_get_event_meta($event->ID, '_EventEndDate', true); } if (isset($event->EventEndDate)) { if (tribe_event_is_all_day($event) && empty($event->_end_date_fixed) && TribeDateUtils::timeOnly($event->EventEndDate) != '23:59:59' && TribeDateUtils::timeOnly(tribe_event_end_of_day()) != '23:59') { // set the event end date to be one day earlier, if it's an all day event and the cutoff is past midnight // @todo remove this once we can have all day events without a start / end time $event->EventEndDate = date_create($event->EventEndDate); $event->EventEndDate->modify('-1 day'); $event->EventEndDate = $event->EventEndDate->format(TribeDateUtils::DBDATEFORMAT); $event->_end_date_fixed = true; } $date = strtotime($event->EventEndDate); } else { return; // '—'; } return tribe_event_format_date($date, $displayTime, $dateFormat); }
public function setReccuringEventDates($post) { if (function_exists('tribe_is_recurring_event') && is_singular(self::POSTTYPE) && tribe_is_recurring_event() && !tribe_is_showing_all() && !tribe_is_upcoming() && !tribe_is_past() && !tribe_is_month() && !tribe_is_by_date()) { $startTime = get_post_meta($post->ID, '_EventStartDate', true); $startTime = TribeDateUtils::timeOnly($startTime); $post->EventStartDate = TribeDateUtils::addTimeToDate($this->date, $startTime); $post->EventEndDate = date(TribeDateUtils::DBDATETIMEFORMAT, strtotime($post->EventStartDate) + get_post_meta($post->ID, '_EventDuration', true)); } }
/** * Adds a style chooser to the write post page * * @param WP_Post $event * @return void */ public function EventsChooserBox($event = null) { $saved = false; if (!$event) { global $post; if (isset($_GET['post']) && $_GET['post']) { $saved = true; } } else { $post = $event; //echo $post->ID; if ($post->ID) { $saved = true; } else { $saved = false; } } $options = ''; $style = ''; if (isset($post->ID)) { $postId = $post->ID; } else { $postId = 0; } foreach ($this->metaTags as $tag) { if ($postId && $saved) { //if there is a post AND the post has been saved at least once. // Sort the meta to make sure it is correct for recurring events $meta = get_post_meta($postId, $tag); sort($meta); if (isset($meta[0])) { ${$tag} = $meta[0]; } } else { $cleaned_tag = str_replace('_Event', '', $tag); //allow posted data to override default data if (isset($_POST['Event' . $cleaned_tag])) { ${$tag} = stripslashes_deep($_POST['Event' . $cleaned_tag]); } else { ${$tag} = class_exists('TribeEventsPro') && $this->defaultValueReplaceEnabled() ? tribe_get_option('eventsDefault' . $cleaned_tag) : ""; } } } if (isset($_EventOrganizerID) && $_EventOrganizerID) { foreach ($this->organizerTags as $tag) { ${$tag} = get_post_meta($_EventOrganizerID, $tag, true); } } else { foreach ($this->organizerTags as $tag) { $cleaned_tag = str_replace('_Organizer', '', $tag); if (isset($_POST['organizer'][$cleaned_tag])) { ${$tag} = stripslashes_deep($_POST['organizer'][$cleaned_tag]); } } } if (isset($_EventVenueID) && $_EventVenueID) { foreach ($this->venueTags as $tag) { ${$tag} = get_post_meta($_EventVenueID, $tag, true); } } else { $defaults = $this->venueTags; $defaults[] = '_VenueState'; $defaults[] = '_VenueProvince'; foreach ($defaults as $tag) { $cleaned_tag = str_replace('_Venue', '', $tag); //echo $tag.' | '.$cleaned_tag.'<BR>'; $var_name = '_Venue' . $cleaned_tag; if ($cleaned_tag != 'Cost') { ${$var_name} = class_exists('TribeEventsPro') && $this->defaultValueReplaceEnabled() ? tribe_get_option('eventsDefault' . $cleaned_tag) : ""; } if (isset($_POST['venue'][$cleaned_tag])) { ${$var_name} = stripslashes_deep($_POST['venue'][$cleaned_tag]); } } if (isset($_VenueState) && !empty($_VenueState)) { $_VenueStateProvince = $_VenueState; } elseif (isset($_VenueProvince)) { $_VenueStateProvince = $_VenueProvince; } else { $_VenueStateProvince = null; } if (isset($_POST['venue']['Country'])) { if ($_POST['venue']['Country'] == 'United States') { $_VenueStateProvince = stripslashes_deep($_POST['venue']['State']); } else { $_VenueStateProvince = stripslashes_deep($_POST['venue']['Province']); } } } $_EventAllDay = isset($_EventAllDay) ? $_EventAllDay : false; $_EventStartDate = isset($_EventStartDate) ? $_EventStartDate : null; if (isset($_EventEndDate)) { if ($_EventAllDay && TribeDateUtils::timeOnly($_EventEndDate) != '23:59:59' && TribeDateUtils::timeOnly(tribe_event_end_of_day()) != '23:59:59') { // If it's an all day event and the EOD cutoff is later than midnight // set the end date to be the previous day so it displays correctly in the datepicker // so the datepickers will match. we'll set the correct end time upon saving // @todo: remove this once we're allowed to have all day events without a start/end time $_EventEndDate = date_create($_EventEndDate); $_EventEndDate->modify('-1 day'); $_EventEndDate = $_EventEndDate->format(TribeDateUtils::DBDATETIMEFORMAT); } } else { $_EventEndDate = null; } $isEventAllDay = $_EventAllDay == 'yes' || !TribeDateUtils::dateOnly($_EventStartDate) ? 'checked="checked"' : ''; // default is all day for new posts $startMonthOptions = TribeEventsViewHelpers::getMonthOptions($_EventStartDate); $endMonthOptions = TribeEventsViewHelpers::getMonthOptions($_EventEndDate); $startYearOptions = TribeEventsViewHelpers::getYearOptions($_EventStartDate); $endYearOptions = TribeEventsViewHelpers::getYearOptions($_EventEndDate); $startMinuteOptions = TribeEventsViewHelpers::getMinuteOptions($_EventStartDate, true); $endMinuteOptions = TribeEventsViewHelpers::getMinuteOptions($_EventEndDate); $startHourOptions = TribeEventsViewHelpers::getHourOptions($_EventAllDay == 'yes' ? null : $_EventStartDate, true); $endHourOptions = TribeEventsViewHelpers::getHourOptions($_EventAllDay == 'yes' ? null : $_EventEndDate); $startMeridianOptions = TribeEventsViewHelpers::getMeridianOptions($_EventStartDate, true); $endMeridianOptions = TribeEventsViewHelpers::getMeridianOptions($_EventEndDate); if ($_EventStartDate) { $start = TribeDateUtils::dateOnly($_EventStartDate); } $EventStartDate = isset($start) && $start ? $start : date('Y-m-d'); if (!empty($_REQUEST['eventDate'])) { $EventStartDate = esc_attr($_REQUEST['eventDate']); } if ($_EventEndDate) { $end = TribeDateUtils::dateOnly($_EventEndDate); } $EventEndDate = isset($end) && $end ? $end : date('Y-m-d'); $recStart = isset($_REQUEST['event_start']) ? esc_attr($_REQUEST['event_start']) : null; $recPost = isset($_REQUEST['post']) ? absint($_REQUEST['post']) : null; if (!empty($_REQUEST['eventDate'])) { $duration = get_post_meta($postId, '_EventDuration', true); $start_time = isset($_EventStartDate) ? TribeDateUtils::timeOnly($_EventStartDate) : TribeDateUtils::timeOnly(tribe_get_start_date($post->ID)); $EventEndDate = TribeDateUtils::dateOnly(strtotime($_REQUEST['eventDate'] . ' ' . $start_time) + $duration, true); } $events_meta_box_template = $this->pluginPath . 'admin-views/events-meta-box.php'; $events_meta_box_template = apply_filters('tribe_events_meta_box_template', $events_meta_box_template); include $events_meta_box_template; }
/** * Deletes a single occurrence of an event * @param integer $postId ID of the event that occurrence will be deleted from * @param string $date date of occurrence to delete * @return void */ private static function removeOccurrence($postId, $date) { $startDate = TribeEvents::getRealStartDate($postId); $date = TribeDateUtils::addTimeToDate($date, TribeDateUtils::timeOnly($startDate)); delete_post_meta($postId, '_EventStartDate', $date); }
/** * Delete view for an event. * * @param int $tribe_event_id The event's ID. * @return string The deletion view. * @author Nick Ciske * @since 1.0 */ public function doDelete($tribe_event_id) { $this->default_template_compatibility(); if (isset($_GET['eventDate'])) { $eventDate = date('Y-m-d', strtotime($_GET['eventDate'])); } if (isset($_GET['deleteAll'])) { $deleteAll = true; } $current_user = wp_get_current_user(); if (wp_verify_nonce($_GET['_wpnonce'], 'tribe_community_events_delete') && current_user_can('delete_post', $tribe_event_id)) { //does this event even exist? $event = get_post($tribe_event_id); if (isset($event->ID)) { if (isset($deleteAll) && $deleteAll || !isset($eventDate)) { if ($this->trashItemsVsDelete) { wp_trash_post($tribe_event_id); $this->enqueueOutputMessage(__('Trashed Event #', 'tribe-events-community') . $tribe_event_id); } else { wp_delete_post($tribe_event_id, true); $this->enqueueOutputMessage(__('Deleted Event #', 'tribe-events-community') . $tribe_event_id); } } else { $date = $eventDate; $startDate = TribeEvents::get_series_start_date($tribe_event_id); $date = TribeDateUtils::addTimeToDate($date, TribeDateUtils::timeOnly($startDate)); delete_post_meta($tribe_event_id, '_EventStartDate', $date); $this->enqueueOutputMessage(sprintf(__('Removed occurence %s from Event #', 'tribe-events-community') . $tribe_event_id, $eventDate)); } } else { $this->enqueueOutputMessage(sprintf(__('This event (#%s) does not appear to exist.', 'tribe-events-community'), $tribe_event_id)); } } else { $this->enqueueOutputMessage(__('You do not have permission to delete this event.', 'tribe-events-community')); } $output = '<div id="tribe-community-events" class="delete">'; ob_start(); $this->addScriptsAndStyles(); include TribeEventsTemplates::getTemplateHierarchy('community/modules/delete'); $output .= ob_get_clean(); $output .= '<a href="javascript:history.go(-1);">« ' . _x('Back', 'As in "go back to previous page"', 'tribe-events-community') . '</a>'; $output .= '</div>'; return $output; }
public function iCalFeed($post = null, $eventCatSlug = null, $eventDate = null) { $tribeEvents = TribeEvents::instance(); $postId = $post ? $post->ID : null; $getstring = isset($_GET['ical']) ? $_GET['ical'] : null; $wpTimezoneString = get_option('timezone_string'); $postType = TribeEvents::POSTTYPE; $events = ''; $lastBuildDate = ''; $eventsTestArray = array(); $blogHome = get_bloginfo('url'); $blogName = get_bloginfo('name'); $includePosts = $postId ? '&include=' . $postId : ''; $eventsCats = $eventCatSlug ? '&' . TribeEvents::TAXONOMY . '=' . $eventCatSlug : ''; if ($post) { $eventPosts = array(); $eventPosts[] = $post; } else { $eventPosts = get_posts('posts_per_page=-1&post_type=' . $postType . $includePosts . $eventsCats); } foreach ($eventPosts as $eventPost) { if ($eventDate) { $duration = TribeDateUtils::timeBetween($eventPost->EventStartDate, $eventPost->EventEndDate); $startDate = TribeDateUtils::addTimeToDate($eventDate, TribeDateUtils::timeOnly($eventPost->EventStartDate)); $endDate = TribeDateUtils::dateAndTime(strtotime($startDate) + $duration, true); } else { $startDate = $eventPost->EventStartDate; $endDate = $eventPost->EventEndDate; } // convert 2010-04-08 00:00:00 to 20100408T000000 or YYYYMMDDTHHMMSS $startDate = str_replace(array('-', ' ', ':'), array('', 'T', ''), $startDate); $endDate = str_replace(array('-', ' ', ':'), array('', 'T', ''), $endDate); if (get_post_meta($eventPost->ID, '_EventAllDay', true) == 'yes') { $startDate = substr($startDate, 0, 8); $endDate = substr($endDate, 0, 8); // endDate bumped ahead one day to counter iCal's off-by-one error $endDateStamp = strtotime($endDate); $endDate = date('Ymd', $endDateStamp + 86400); $type = 'DATE'; } else { $type = 'DATE-TIME'; } $description = preg_replace("/[\n\t\r]/", ' ', strip_tags($eventPost->post_content)); // add fields to iCal output $item = array(); $item[] = "DTSTART;VALUE={$type}:" . $startDate; $item[] = "DTEND;VALUE={$type}:" . $endDate; $item[] = 'DTSTAMP:' . date('Ymd\\THis', time()); $item[] = 'CREATED:' . str_replace(array('-', ' ', ':'), array('', 'T', ''), $eventPost->post_date); $item[] = 'LAST-MODIFIED:' . str_replace(array('-', ' ', ':'), array('', 'T', ''), $eventPost->post_modified); $item[] = 'UID:' . $eventPost->ID . '-' . strtotime($startDate) . '-' . strtotime($endDate) . '@' . $blogHome; $item[] = 'SUMMARY:' . $eventPost->post_title; $item[] = 'DESCRIPTION:' . str_replace(',', '\\,', $description); $item[] = 'LOCATION:' . html_entity_decode($tribeEvents->fullAddressString($eventPost->ID), ENT_QUOTES); $item[] = 'URL:' . get_permalink($eventPost->ID); $item = apply_filters('tribe_ical_feed_item', $item, $eventPost); $events .= "BEGIN:VEVENT\n" . implode("\n", $item) . "\nEND:VEVENT\n"; } header('Content-type: text/calendar'); header('Content-Disposition: attachment; filename="iCal-TribeEvents.ics"'); $content = "BEGIN:VCALENDAR\n"; $content .= "VERSION:2.0\n"; $content .= 'PRODID:-//' . $blogName . ' - ECPv' . TribeEvents::VERSION . "//NONSGML v1.0//EN\n"; $content .= "CALSCALE:GREGORIAN\n"; $content .= "METHOD:PUBLISH\n"; $content .= 'X-WR-CALNAME:' . apply_filters('tribe_ical_feed_calname', $blogName) . "\n"; $content .= 'X-ORIGINAL-URL:' . $blogHome . "\n"; $content .= 'X-WR-CALDESC:Events for ' . $blogName . "\n"; if ($wpTimezoneString) { $content .= 'X-WR-TIMEZONE:' . $wpTimezoneString . "\n"; } $content = apply_filters('tribe_ical_properties', $content); $content .= $events; $content .= 'END:VCALENDAR'; echo $content; exit; }