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())); }