/** * @param Season $season * @param array $ignore */ public function buildFromPlanning(Season $season, array $ignore) { // Existing lessons $lessons = new ArrayCollection(); foreach ($this->em->getRepository('AppBundle:Lesson')->findBySeason($season) as $l) { $lessons->add($l->getDate()->format('Y-m-d') . '-' . $l->getStart()->format('H-i') . '-' . $l->getLevel()->getId()); } // Periods to ignore $ignorePeriods = new ArrayCollection(); foreach ($ignore as $i) { foreach (new \DatePeriod($i['start'], new \DateInterval('P1D'), $i['stop']) as $d) { $ignorePeriods->add($d->format('Y-m-d')); } $ignorePeriods->add($i['stop']->format('Y-m-d')); } // Planning $planning = $this->em->getRepository('AppBundle:Planning')->findAll(); foreach ($planning as $p) { $start = new \DateTime($season->getStart()->format('Y-m-d') . ' 00:00:00'); $start->modify('+' . ($p->getWeekday() - $start->format('N')) . ' day'); $stop = new \DateTime($season->getStop()->format('Y-m-d') . ' 23:59:59'); foreach (new \DatePeriod($start, new \DateInterval('P1W'), $stop) as $date) { if ($ignorePeriods->contains($date->format('Y-m-d'))) { continue; } if ($lessons->contains($date->format('Y-m-d') . '-' . $p->getStart()->format('H-i') . '-' . $p->getLevel()->getId())) { continue; } $l = new Lesson(); $l->setDate($date)->setDuration($p->getDuration())->setLevel($p->getLevel())->setStart($p->getStart()); $this->em->persist($l); } } $this->em->flush(); }
/** * @param Request $request * @param \DateTime $day * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response * * @Route("/lesson/add/{day}", * name="app_lesson_add", * methods={"GET","POST"}, * requirements={"day"="[0-9]{4}-[0-9]{2}-[0-9]{2}"}) */ public function addAction(Request $request, \DateTime $day) { // Lesson manager $lm = $this->get('app.lesson_manager'); // Edit form $lesson = new Lesson(); $lesson->setDate($day); $formEdit = $this->createForm(LessonType::class, $lesson); $formEdit->handleRequest($request); if ($formEdit->isSubmitted() && $formEdit->isValid()) { // Save data $lm->updateLesson($lesson); // Flash message $this->addFlash('success', $this->get('translator')->trans('lesson_add.success.added', [], 'lesson')); // Redirect return $this->redirectToRoute('app_lesson_day', ['day' => $lesson->getDate()->format('Y-m-d')]); } // Render return $this->render('lesson/add.html.twig', ['day' => $day, 'formEdit' => $formEdit->createView()]); }