Example #1
0
 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));
 }