/** * * @param \Application\Entity\Event $event * @param \DateTime $enddate * @param type $messages */ private function changeEndDate(Event $event, $enddate, &$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->setEnddate($enddate)) { if ($enddate) { if (is_array($messages)) { $messages['success'][] = "Date et heure de fin modifiées au " . $formatter->format($event->getEnddate()); } } else { if (is_array($messages)) { $messages['success'][] = "Date et heure de fin supprimées."; } } $now = new \DateTime('now'); $now->setTimezone(new \DateTimeZone('UTC')); foreach ($event->getChildren() as $child) { if ($child->getCategory() instanceof FrequencyCategory) { $child->setEnddate($enddate); $objectManager->persist($child); } } $event->updateAlarms(); // passage au statut terminé si // - evt confirmé ou (evt nouveau et heure de début passée) // et // - heure de fin proche de l'heure de début (15min) if ($this->isGranted('events.confirme') && $event->getEnddate()) { $status = $objectManager->getRepository('Application\\Entity\\Status')->findOneBy(array('open' => false, 'defaut' => true)); if (($event->getStatus()->getId() == 2 || $event->getStatus()->getId() <= 2 && $event->getStartDate() < $now) && ($event->getEndDate()->format('U') - $now->format('U')) / 60 < 15) { $event->setStatus($status); // on ferme l'evt proprement $this->closeEvent($event); if (is_array($messages)) { $messages['success'][] = "Evènement passé au statut : \"Fin confirmée\"."; } } } $objectManager->persist($event); } else { if (is_array($messages)) { $messages['error'][] = "Impossible de changer la date de fin."; } } }