Esempio n. 1
0
 public function repeatWeekly(Calendar_Event $event)
 {
     if (!isset($_POST['weekday_repeat']) || !is_array($_POST['weekday_repeat'])) {
         $this->message = dgettext('calendar', 'You must choose which weekdays to repeat.');
         return false;
     }
     $time_unit = $event->start_time + 86400;
     $copy_event = $event->repeatClone();
     $time_diff = $event->end_time - $event->start_time;
     $max_count = 0;
     $repeat_days =& $_POST['weekday_repeat'];
     $dst_start = date('I', $event->start_time);
     while ($time_unit <= $event->end_repeat) {
         if (!in_array(strftime('%u', $time_unit), $repeat_days)) {
             $time_unit += 86400;
             continue;
         }
         $dst_current = date('I', $time_unit);
         if ($dst_current != $dst_start) {
             if ($dst_current) {
                 $time_unit -= 3600;
             } else {
                 $time_unit += 3600;
             }
             $dst_start = $dst_current;
         }
         $copy_event->id = 0;
         $max_count++;
         if ($max_count > CALENDAR_MAXIMUM_REPEATS) {
             return PHPWS_Error::get(CAL_REPEAT_LIMIT_PASSED, 'calendar', 'Calendar_Admin::repeatWeekly');
         }
         $copy_event->start_time = $time_unit;
         $copy_event->end_time = $time_unit + $time_diff;
         $result = $copy_event->save();
         if (PHPWS_Error::isError($result)) {
             return $result;
         }
         $time_unit += 86400;
     }
     return TRUE;
 }