function editDetails($slug, Request $request, Application $app) { if (!$this->build($slug, $request, $app)) { $app->abort(404, "Venue does not exist."); } if ($this->parameters['venue']->getIsDeleted()) { die("No"); // TODO } $form = $app['form.factory']->create(new VenueEditForm($app), $this->parameters['venue']); if ('POST' == $request->getMethod()) { $form->bind($request); if ($form->isValid()) { $area = null; if (is_array($request->request->get('areas'))) { $areaRepository = new AreaRepository(); $countryRepository = new CountryRepository(); foreach ($request->request->get('areas') as $areaCode) { if (substr($areaCode, 0, 9) == 'EXISTING:') { $area = $areaRepository->loadBySlug($app['currentSite'], substr($areaCode, 9)); } else { if (substr($areaCode, 0, 4) == 'NEW:' && $app['currentUserPermissions']->hasPermission('org.openacalendar', 'AREAS_CHANGE')) { $newArea = new AreaModel(); $newArea->setTitle(substr($areaCode, 4)); $areaRepository->create($newArea, $area, $app['currentSite'], $this->parameters['country'], $app['currentUser']); $areaRepository->buildCacheAreaHasParent($newArea); $area = $newArea; } } } } if ($area) { $this->parameters['venue']->setAreaId($area->getId()); } else { $this->parameters['venue']->setAreaId(null); } foreach ($app['extensions']->getExtensionsIncludingCore() as $extension) { $extension->addDetailsToVenue($this->parameters['venue']); } $venueEditMetaData = new VenueEditMetaDataModel(); $venueEditMetaData->setUserAccount($app['currentUser']); if ($form->has('edit_comment')) { $venueEditMetaData->setEditComment($form->get('edit_comment')->getData()); } $venueEditMetaData->setFromRequest($request); $venueRepository = new VenueRepository(); $venueRepository->editWithMetaData($this->parameters['venue'], $venueEditMetaData); return $app->redirect("/venue/" . $this->parameters['venue']->getSlugForURL()); } } $this->parameters['form'] = $form->createView(); return $app['twig']->render('site/venue/edit.html.twig', $this->parameters); }