/** * Возвращает сформированный массив дат * @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; }
/** * Добавляет рег. операции * @param oldUser $user * @param Calendar_Event $event * @param int $chain * @param array $arrayDays */ private function createOperations(oldUser $user, Calendar_Event $event, $chain, $arrayDays) { // Создаём повторы события в виде неподтверждённых операций $operationsArray = array(); foreach ($arrayDays as $value) { // @TODO Посмотреть, как можно адаптировать $event->__getArray() $operationsArray[] = array('type' => $event->getType(), 'account' => $event->getAccount(), 'amount' => $event->getAmount(), 'category' => $event->getCategory(), 'date' => $value, 'comment' => $event->getComment(), 'tags' => $event->getTags(), 'convert' => $event->getConvert(), 'close' => $event->getClose(), 'currency' => $event->getCurrency(), 'toAccount' => $event->getToAccount(), 'target' => $event->getTarget(), 'last' => $event->getLast(), 'time' => $event->getTime(), 'every' => $event->getEvery(), 'repeat' => $event->getRepeat(), 'week' => $event->getWeek(), 'accepted' => 0, 'chain' => $chain, 'mailEnabled' => $event->getMailEnabled(), 'mailDaysBefore' => $event->getMailDaysBefore(), 'mailHour' => $event->getMailHour(), 'mailMinutes' => $event->getMailMinutes(), 'smsEnabled' => $event->getSmsEnabled(), 'smsDaysBefore' => $event->getSmsDaysBefore(), 'smsHour' => $event->getSmsHour(), 'smsMinutes' => $event->getSmsMinutes()); } $operation = new Operation_Model(); // Расход и доход if ($event->getType() <= 1) { return $operation->addSome($operationsArray); } elseif ($event->getType() == 2) { return $operation->addSomeTransfer($operationsArray); } }