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