예제 #1
0
 /**
  * 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));
     }
 }
예제 #3
0
 /**
  * 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);">&laquo; ' . _x('Back', 'As in "go back to previous page"', 'tribe-events-community') . '</a>';
     $output .= '</div>';
     return $output;
 }
예제 #6
0
 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;
 }