public function queueAction($id, Request $request) { $event = $this->getDoctrine()->getRepository('ProdekoIlmoBundle:Event')->findOneBy(array('id' => $id)); //Jos ilmo on alkanut, ohjataan tapahtumasivulle if ($event->registrationOpen() || $event->registrationEnded()) { return $this->redirect($this->generateUrl('show', array('id' => $id))); } $registration = Helpers::createRegistrationObject($event); $form = $this->createForm(new RegistrationType($event), $registration); $variables = array('event' => $event, 'form' => $form->createView()); return $this->render('ProdekoIlmoBundle:Ilmo:queue.html.twig', $variables); }
public function createEventFormAction($id, Request $request) { if ($id != 0) { $event = $this->getDoctrine()->getRepository('ProdekoIlmoBundle:Event')->findOneBy(array('id' => $id)); if ($event) { $registrations = $event->getRegistrations(); if ($registrations && count($registrations) > 0) { $state = self::STATE_OLD_EVENT_REGISTRANTS; // Sellaisen tapahtuman muokkaus, jolla on ilmoittautumisia. } else { $state = self::STATE_OLD_EVENT_NO_REGISTRANTS; // Muokkaus, ei ilmoittautumisia. } } else { throw $this->createNotFoundException('Tapahtumaa ei löydy'); //echo "Ei löydy tapahtumaa!"; die; //TODO: Tähän ehkä joku exception handling } } else { $state = self::STATE_NEW_EVENT; // Uuden tapahtuman luonti. $event = new Event(); /* $quota_names = array('I','II','III','IV','N'); for($i=1;$i<=5;$i++) { $quota = new Quota(); $quota->setYearOfStudiesValue($i); $quota->setName($quota_names[$i-1]); $quota->setEvent($event); $event->addQuota($quota); }*/ $now = new \DateTime('today midnight'); $event->setTakesPlace($now); $event->setRegistrationStarts($now); $event->setRegistrationEnds($now); $event->setKiltisilmo(true); $event->setSizeOfOpenQuota(0); } //Tee ilmoittautumislomake, määrittely löytyy Prodeko\IlmoBundle\Form\Type\EventType $form = $this->createForm(new EventType(), $event); //Jos kyseessä on lomakkeen käsittely, eikä lomakkeen näyttö if ($request->getMethod() == 'POST') { $em = $this->getDoctrine()->getEntityManager(); if ($state == self::STATE_OLD_EVENT_REGISTRANTS) { // Eli jos muokataan tapahtumaa, jossa on ilmoittautumisia $originalTextFields = array(); $originalMcFields = array(); // Tallenna alkuperäiset kentät ennen kuin formista tuleet tiedot luetaan event-muuttujaan foreach ($event->getFreeTextFields() as $field) { $originalTextFields[] = $field; } foreach ($event->getMultipleChoiceFields() as $field) { $originalMcFields[] = $field; } } $form->bindRequest($request); if ($form->isValid()) { if ($state == self::STATE_OLD_EVENT_NO_REGISTRANTS) { $originalEvent = $this->getDoctrine()->getRepository('ProdekoIlmoBundle:Event')->findOneBy(array('id' => $event->getId())); foreach ($originalEvent->getQuotas() as $oldquota) { $em->remove($oldquota); $em->flush(); } } $event = $form->getData(); if ($state == self::STATE_OLD_EVENT_REGISTRANTS) { /* Kenttien lisäyksen ja poiston käsittely Tämä on relevanttia vain jos muokataan tapahtumaa, jolla on ilmoittautumisia. */ // Käytä helperseissä määriteltyä funktiota määrittämään lisätyt ja poistetut kentät. list($newTextFields, $deletedTextFields) = Helpers::filterFields($originalTextFields, $event->getFreeTextFields()); list($newMcFields, $deletedMcFields) = Helpers::filterFields($originalMcFields, $event->getMultipleChoiceFields()); // Lisää jokaiselle uudelle kentälle ilmoitukset kaikkiin olemassaoleviin ilmoittautumisiin, että kenttää ei ole täytetty. $em = Helpers::addDummyValues(array_merge($newTextFields, $newMcFields), $registrations, $em, "Ei täytetty"); // Poista kaikkien poistuneiden fieldien entryt (ei poista fieldejä, koska fieldien kierrätys $em = Helpers::deleteEntries(array_merge($deletedMcFields, $deletedTextFields), $registrations, $em); } foreach ($event->getQuotas() as $quota) { $quota->setEvent($event); } //Tallenna tapahtuma $em->persist($event); $em->flush(); //Ohjaa tarkastelemaan luotua tapahtumaa return $this->redirect($this->generateUrl("show", array('id' => $event->getId()))); } else { return $this->render('ProdekoIlmoBundle:Ilmo:createEvent.html.twig', array('form' => $form->createView(), 'id' => $id, 'event' => $event)); } } return $this->render('ProdekoIlmoBundle:Ilmo:createEvent.html.twig', array('form' => $form->createView(), 'id' => $id, 'event' => $event)); }