Example #1
0
 public function findAllByEventForChanges(Race $race)
 {
     $all = $this->findAllForEvent($race->getEvent()->getId());
     $checkGender = !$this->isMixedGender($race);
     foreach (array_keys($all) as $key) {
         if ($all[$key]->getId() == $race->getId()) {
             // remove the given race from result set
             unset($all[$key]);
         } elseif ($race->getTeamsize() < $all[$key]->getTeamsize()) {
             // number of max starters per team has to be same or
             // greater so that the moved one fits into
             unset($all[$key]);
         } elseif ($race->getAgeMin() > $all[$key]->getAgeMax()) {
             // competitors allowed to start against older teams but not against younger ones
             unset($all[$key]);
         } elseif ($race->getAgeMax() * 1.3 < $all[$key]->getAgeMin()) {
             // it does not make sence to let people start in classes with much older ones
             unset($all[$key]);
         } elseif ($checkGender && !$this->isMixedGender($all[$key])) {
             // gender has to match
             if ($race->getGender() != $all[$key]->getGender()) {
                 unset($all[$key]);
             }
         }
     }
     // convert change array key values so that they match the ID in the database
     $result = array();
     /** @var Race $r */
     foreach ($all as $r) {
         $result[$r->getId()] = $r;
     }
     return $result;
 }
 /**
  * Show page to modify participation (re-register for different race or de-register from this race)
  *
  * @Route("/race/{race}/change", name="registration_edit")
  * @Method("POST")
  * @Security("has_role('ROLE_REGISTRATION')")
  */
 public function editAction(Request $request, Race $race)
 {
     $em = $this->getDoctrine()->getManager();
     /** @var \AppBundle\Repository\RaceRepository $repo */
     $repo = $em->getRepository('AppBundle:Race');
     $all_races = $repo->findAllForEvent($race->getEvent()->getId());
     $form = $this->getEditForm($all_races);
     $csrf_token = $this->getCsrfToken($form);
     $form->handleRequest($request);
     if (count($form->getErrors(true)) > 0) {
         /** @var \Psr\Log\LoggerInterface $logger */
         $logger = $this->get('logger');
         $errors = array();
         /** @var \Symfony\Component\Form\FormError $err */
         foreach ($form->getErrors(true) as $err) {
             if ('Symfony\\Component\\Validator\\ConstraintViolation' == get_class($err->getCause())) {
                 /** @var \Symfony\Component\Validator\ConstraintViolation $cause */
                 $cause = $err->getCause();
                 $logger->warning("Error while evaluating form: " . $err->getMessage() . ' ' . $cause->getPropertyPath() . ' got: ' . $cause->getInvalidValue());
             } elseif (get_class($this) == get_class($err->getCause())) {
                 $errors[] = $err->getMessage();
             }
         }
         $this->addFlash('error', 'Beim Ummelden sind Fehler aufgetreten!');
         foreach ($errors as $e) {
             $this->addFlash('error', $e);
         }
     }
     if ($form->isSubmitted() && $form->isValid()) {
         $formData = $form->getData();
         /** @var Race $newRace */
         $newRace = $formData["race"];
         /** @var integer $regId */
         $regId = (int) $formData["registration"];
         if ($newRace == $race) {
             $this->addFlash('error', 'Ummelden in das identische Rennen nicht sinnvoll!');
         } else {
             /** @var \AppBundle\Repository\RegistrationRepository $regRepo */
             $regRepo = $em->getRepository('AppBundle:Registration');
             /** @var \AppBundle\Entity\Registration $registration */
             $registration = $regRepo->find($regId);
             $regRepo->changeRace($registration, $race, $newRace);
             $this->addFlash('notice', 'Mannschaft umgemeldet!');
         }
     }
     return $this->redirectToRoute('race_show', array('event' => $race->getEvent()->getId(), 'race' => $race->getId()));
 }