/** * Change la date de début d'un evt et * - vérifie la cohérence des évènements fils * - vérifie la cohérence du statut * * @param \Application\Entity\Event $event * @param \DateTime $startdate * @param * array Messages * @return true Si tout s'est bien passé */ private function changeStartDate(Event $event, \DateTime $startdate, &$messages = null) { $objectManager = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $formatter = \IntlDateFormatter::create(\Locale::getDefault(), \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, 'UTC', \IntlDateFormatter::GREGORIAN, 'dd LLL, HH:mm'); if ($event->setStartdate($startdate)) { if (is_array($messages)) { $messages['success'][] = "Date et heure de début modifiées au " . $formatter->format($event->getStartdate()); } // passage au statut confirmé si pertinent, droits ok et heure de début proche de l'heure actuelle if ($this->isGranted('events.confirme')) { $now = new \DateTime('now'); $now->setTimezone(new \DateTimeZone('UTC')); $status = $objectManager->getRepository('Application\\Entity\\Status')->findOneBy(array('open' => true, 'defaut' => false)); if ($event->getStatus()->getId() == 1 && ($event->getStartDate()->format('U') - $now->format('U')) / 60 < 15) { $event->setStatus($status); if (is_array($messages)) { $messages['success'][] = "Evènement passé au statut : confirmé."; } } } // changement de l'heure de début des évènements fils si pertinent foreach ($event->getChildren() as $child) { if ($child->getCategory() instanceof FrequencyCategory) { $child->setStartdate($startdate); $objectManager->persist($child); } } $event->updateAlarms(); $objectManager->persist($event); } else { if (is_array($messages)) { $messages['error'][] = "Impossible de changer l'heure de début."; } } }
public function exclude(Event $event) { $exdate = new RecurrenceExDate($event->getStartdate()); $this->addExDates($exdate); $this->events->removeElement($event); }
/** * Renvoit un nouvel évènement créé à partir d'un évènement et d'une date de début * Les notes ne sont pas copiées, le statut est mis à "nouveau" * @param Event $event * @param \DateTime $start UTC start date */ public function createFromEvent(Event $event, $start) { $newevent = new Event(); $newevent->setAuthor($event->getAuthor()); $newevent->setOrganisation($event->getOrganisation()); $newevent->setCategory($event->getCategory()); $newevent->setImpact($event->getImpact()); $newevent->setStatus($this->getEntityManager()->getRepository('Application\\Entity\\Status')->find(1)); if ($event->getPlace() !== null) { $newevent->setPlace($event->getPlace()); } //horaires $newevent->setScheduled($event->isScheduled()); $newevent->setPunctual($event->isPunctual()); if ($start !== null) { //actions can have no start date $newevent->setStartdate($start); if (!$event->isPunctual() && $event->getEnddate() !== null) { $diff = $event->getStartdate()->diff($event->getEnddate()); $end = clone $start; $end->add($diff); $newevent->setEnddate($end); } } //enfants foreach ($event->getChildren() as $child) { $childdate = $start; if ($child->getCategory() instanceof AlarmCategory) { $diff = $event->getStartdate()->diff($child->getStartdate()); $alarmdate = clone $newevent->getStartdate(); $alarmdate->add($diff); $childdate = $alarmdate; } else { if ($child->getCategory() instanceof ActionCategory) { $childdate = null; } } $childEvent = $this->createFromEvent($child, $childdate); $childEvent->setParent($newevent); $newevent->addChild($childEvent); } //champs foreach ($event->getCustomFieldsValues() as $customFieldsValue) { $customFieldValue = new CustomFieldValue(); $customFieldValue->setEvent($newevent); $customFieldValue->setCustomField($customFieldsValue->getCustomField()); $customFieldValue->setValue($customFieldsValue->getValue()); $newevent->addCustomFieldValue($customFieldValue); } //fichiers foreach ($event->getFiles() as $file) { $newevent->addFile($file); } return $newevent; }