예제 #1
0
 /**
  * Возвращает сформированный массив дат
  * @param Calendar_Event $event
  * @param string $period
  * @return array
  */
 private function _repeat(Calendar_Event $event, $period)
 {
     $datetime = new DateTime($event->getDate());
     $week = $event->getWeek();
     // Массив с датами события
     $arrayDays = array();
     $lastDate = strtotime($event->getLast());
     // Если мы идём до даты окончания
     if ($lastDate > 0) {
         // Устанавливаем максимальное число повторов
         $endRepeat = self::MAX_EVENTS;
     } else {
         $endRepeat = $event->getRepeat();
     }
     for ($i = 1; $i <= $endRepeat; $i++) {
         if ($lastDate > 0 && $datetime->format('U') > $lastDate) {
             return $arrayDays;
         }
         if (count($arrayDays) > self::MAX_EVENTS) {
             $this->_errors['repeat'] = "Максимальное количество повторений = " . self::MAX_EVENTS . " раз, у вас " . count($arrayDays);
             return false;
         }
         if ($period == 'week') {
             if ($week[$datetime->format('N') - 1] == 1) {
                 $arrayDays[] = $datetime->format('Y-m-d');
             }
             // День недели для выбранной даты, от 1 (пнд) до 7 (вск)
             $dwr = $datetime->format('N');
             // Перебираем по циклу неделю, на один день меньше
             for ($j = 0; $j < 6; $j++) {
                 $dw = $dwr + $j;
                 if ($dw > 6) {
                     $dw = $dw - 7;
                 }
                 if ($week[$dw] == 1) {
                     $arrayDays[] = date('Y-m-d', $datetime->format('U') + ($j + 1) * 86400);
                 }
             }
         } else {
             $arrayDays[] = $datetime->format('Y-m-d');
         }
         $datetime->modify("+1 " . $period);
     }
     return $arrayDays;
 }
예제 #2
0
 /**
  * Создаёт цепочку операций
  * @param oldUser $user Пользователь
  * @param Calendar_Event $event Событие
  * @param array $arrayDays Массив с днями, повторениями
  * @return bool
  */
 public static function create(oldUser $user, Calendar_Event $event, $arrayDays)
 {
     // Создаём само событие
     $sql = "INSERT INTO calendar_chains (`user_id`,`start`,`last`,`every`, `repeat`, `week`)\n            VALUES (?, ?, ?, ?, ?, ?);";
     // Создаём событие в календаре
     $calId = Core::getInstance()->db->query($sql, $user->getId(), $event->getDate(), $event->getLast(), $event->getEvery(), $event->getRepeat(), $event->getWeek());
     return self::createOperations($user, $event, $calId, $arrayDays);
 }