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); }
public function update(VenueModel $venue, $fields, VenueEditMetaDataModel $venueEditMetaDataModel) { $alreadyInTransaction = $this->db->inTransaction(); // Make Information Data $fieldsSQL1 = array(); $fieldsParams1 = array('id' => $venue->getId()); foreach ($fields as $field) { $fieldsSQL1[] = " " . $field . "=:" . $field . " "; if ($field == 'title') { $fieldsParams1['title'] = substr($venue->getTitle(), 0, VARCHAR_COLUMN_LENGTH_USED); } else { if ($field == 'lat') { $fieldsParams1['lat'] = $venue->getLat(); } else { if ($field == 'lng') { $fieldsParams1['lng'] = $venue->getLng(); } else { if ($field == 'description') { $fieldsParams1['description'] = $venue->getDescription(); } else { if ($field == 'address') { $fieldsParams1['address'] = $venue->getAddress(); } else { if ($field == 'address_code') { $fieldsParams1['address_code'] = substr($venue->getAddressCode(), 0, VARCHAR_COLUMN_LENGTH_USED); } else { if ($field == 'country_id') { $fieldsParams1['country_id'] = $venue->getCountryId(); } else { if ($field == 'area_id') { $fieldsParams1['area_id'] = $venue->getAreaId(); } else { if ($field == 'is_duplicate_of_id') { $fieldsParams1['is_duplicate_of_id'] = $venue->getIsDuplicateOfId(); } else { if ($field == 'is_deleted') { $fieldsParams1['is_deleted'] = $venue->getIsDeleted() ? 1 : 0; } } } } } } } } } } } // Make History Data $fieldsSQL2 = array('venue_id', 'user_account_id', 'created_at', 'approved_at'); $fieldsSQLParams2 = array(':venue_id', ':user_account_id', ':created_at', ':approved_at'); $fieldsParams2 = array('venue_id' => $venue->getId(), 'user_account_id' => $venueEditMetaDataModel->getUserAccount() ? $venueEditMetaDataModel->getUserAccount()->getId() : null, 'created_at' => $this->timesource->getFormattedForDataBase(), 'approved_at' => $this->timesource->getFormattedForDataBase()); if ($venueEditMetaDataModel->getEditComment()) { $fieldsSQL2[] = ' edit_comment '; $fieldsSQLParams2[] = ' :edit_comment '; $fieldsParams2['edit_comment'] = $venueEditMetaDataModel->getEditComment(); } foreach ($this->possibleFields as $field) { if (in_array($field, $fields) || $field == 'title') { $fieldsSQL2[] = " " . $field . " "; $fieldsSQLParams2[] = " :" . $field . " "; if ($field == 'title') { $fieldsParams2['title'] = substr($venue->getTitle(), 0, VARCHAR_COLUMN_LENGTH_USED); } else { if ($field == 'lat') { $fieldsParams2['lat'] = $venue->getLat(); } else { if ($field == 'lng') { $fieldsParams2['lng'] = $venue->getLng(); } else { if ($field == 'description') { $fieldsParams2['description'] = $venue->getDescription(); } else { if ($field == 'address') { $fieldsParams2['address'] = $venue->getAddress(); } else { if ($field == 'address_code') { $fieldsParams2['address_code'] = substr($venue->getAddressCode(), 0, VARCHAR_COLUMN_LENGTH_USED); } else { if ($field == 'country_id') { $fieldsParams2['country_id'] = $venue->getCountryId(); } else { if ($field == 'area_id') { $fieldsParams2['area_id'] = $venue->getAreaId(); } else { if ($field == 'is_duplicate_of_id') { $fieldsParams2['is_duplicate_of_id'] = $venue->getIsDuplicateOfId(); } else { if ($field == 'is_deleted') { $fieldsParams2['is_deleted'] = $venue->getIsDeleted() ? 1 : 0; } } } } } } } } } } $fieldsSQL2[] = " " . $field . "_changed "; $fieldsSQLParams2[] = " 0 "; } else { $fieldsSQL2[] = " " . $field . "_changed "; $fieldsSQLParams2[] = " -2 "; } } try { if (!$alreadyInTransaction) { $this->db->beginTransaction(); } // Information SQL $stat = $this->db->prepare("UPDATE venue_information SET " . implode(",", $fieldsSQL1) . " WHERE id=:id"); $stat->execute($fieldsParams1); // History SQL $stat = $this->db->prepare("INSERT INTO venue_history (" . implode(",", $fieldsSQL2) . ") VALUES (" . implode(",", $fieldsSQLParams2) . ")"); $stat->execute($fieldsParams2); if (!$alreadyInTransaction) { $this->db->commit(); } } catch (Exception $e) { if (!$alreadyInTransaction) { $this->db->rollBack(); } throw $e; } }
function newVenue(Request $request, Application $app) { $areaRepository = new AreaRepository(); $countryRepository = new CountryRepository(); $venue = new VenueModel(); $this->parameters = array('country' => null, 'parentAreas' => array(), 'area' => null, 'childAreas' => array(), 'startAreaBrowserFromScratch' => true); if (isset($_GET['area_id'])) { $ar = new AreaRepository(); $this->parameters['area'] = $ar->loadBySlug($app['currentSite'], $_GET['area_id']); if ($this->parameters['area']) { $checkArea = $this->parameters['area']->getParentAreaId() ? $ar->loadById($this->parameters['area']->getParentAreaId()) : null; while ($checkArea) { array_unshift($this->parameters['parentAreas'], $checkArea); $checkArea = $checkArea->getParentAreaId() ? $ar->loadById($checkArea->getParentAreaId()) : null; } $cr = new CountryRepository(); $this->parameters['country'] = $cr->loadById($this->parameters['area']->getCountryID()); $venue->setCountryId($this->parameters['country']->getId()); $areaRepoBuilder = new AreaRepositoryBuilder(); $areaRepoBuilder->setSite($app['currentSite']); $areaRepoBuilder->setCountry($this->parameters['country']); $areaRepoBuilder->setParentArea($this->parameters['area']); $areaRepoBuilder->setIncludeDeleted(false); $this->parameters['childAreas'] = $areaRepoBuilder->fetchAll(); $this->parameters['startAreaBrowserFromScratch'] = false; } } $form = $app['form.factory']->create(new VenueNewForm($app['currentTimeZone'], $app), $venue); if ('POST' == $request->getMethod()) { $form->bind($request); if ($form->isValid()) { $postAreas = $request->request->get('areas'); if (is_array($postAreas)) { $area = null; foreach ($postAreas 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'], $countryRepository->loadById($venue->getCountryId()), $app['currentUser']); $areaRepository->buildCacheAreaHasParent($newArea); $area = $newArea; } } } if ($area) { $venue->setAreaId($area->getId()); } } foreach ($app['extensions']->getExtensionsIncludingCore() as $extension) { $extension->addDetailsToVenue($venue); } $venueEditMetaData = new VenueEditMetaDataModel(); $venueEditMetaData->setUserAccount($app['currentUser']); if ($form->has('edit_comment')) { $venueEditMetaData->setEditComment($form->get('edit_comment')->getData()); } $venueRepository = new VenueRepository(); $venueRepository->createWithMetaData($venue, $app['currentSite'], $venueEditMetaData); return $app->redirect("/venue/" . $venue->getSlug()); } } $this->parameters['form'] = $form->createView(); return $app['twig']->render('site/venuenew/new.html.twig', $this->parameters); }
public function markDuplicateWithMetaData(AreaModel $duplicateArea, AreaModel $originalArea, AreaEditMetaDataModel $areaEditMetaDataModel) { global $DB; if ($duplicateArea->getId() == $originalArea->getId()) { return; } try { $DB->beginTransaction(); $duplicateArea->setIsDuplicateOfId($originalArea->getId()); $duplicateArea->setIsDeleted(true); $this->areaDBAccess->update($duplicateArea, array('is_duplicate_of_id', 'is_deleted'), $areaEditMetaDataModel); // Move Venues $venueDBAccess = new VenueDBAccess($DB, new \TimeSource()); $vrb = new VenueRepositoryBuilder(); $vrb->setArea($duplicateArea); $venueEditMetaData = new VenueEditMetaDataModel(); $venueEditMetaData->setUserAccount($areaEditMetaDataModel->getUserAccount()); foreach ($vrb->fetchAll() as $venue) { $venue->setAreaId($originalArea->getId()); $venueDBAccess->update($venue, array('area_id'), $venueEditMetaData); } // Move Events $eventRepoBuilder = new EventRepositoryBuilder(); $eventRepoBuilder->setArea($duplicateArea); $eventDBAccess = new EventDBAccess($DB, new \TimeSource()); $eventEditMetaData = new EventEditMetaDataModel(); $eventEditMetaData->setUserAccount($areaEditMetaDataModel->getUserAccount()); foreach ($eventRepoBuilder->fetchAll() as $event) { // Check Area actually matches here because we may get events at a venue. // Based on the order we do things in (ie Move Venue, Move Event) we shouldn't but let's be safe. if ($event->getAreaId() == $duplicateArea->getId() && $event->getVenueId() == null) { $event->setAreaId($originalArea->getId()); $eventDBAccess->update($event, array('area_id'), $eventEditMetaData); } } // Move Child Areas $areaRepoBuilder = new AreaRepositoryBuilder(); $areaRepoBuilder->setParentArea($duplicateArea); $areaRepoBuilder->setIncludeParentLevels(0); $flag = false; foreach ($areaRepoBuilder->fetchAll() as $area) { // lets just double check we haven't got any child areas. if ($area->getParentAreaId() == $duplicateArea->getId()) { $area->setParentAreaId($originalArea->getId()); $this->areaDBAccess->update($area, array('parent_area_id'), $areaEditMetaDataModel); $flag = true; } } if ($flag) { // now must clear caches $this->deleteParentCacheForArea($originalArea); $this->deleteParentCacheForArea($duplicateArea); } $DB->commit(); } catch (Exception $e) { $DB->rollBack(); } }
public function markDuplicate(VenueModel $duplicateVenue, VenueModel $originalVenue, UserAccountModel $user = null) { $venueEditMetaDataModel = new VenueEditMetaDataModel(); $venueEditMetaDataModel->setUserAccount($user); $this->markDuplicateWithMetaData($duplicateVenue, $originalVenue, $venueEditMetaDataModel); }
function addDataToEventBeforeSave(EventModel $eventModel) { $this->addDataToEventBeforeCheck($eventModel); if ($this->draftEvent->getDetailsValue('event.newvenue')) { $venueModel = new VenueModel(); $venueModel->setSiteId($this->site->getId()); $venueModel->setCountryId($this->draftEvent->getDetailsValue('event.country_id')); $venueModel->setTitle($this->draftEvent->getDetailsValue('venue.title')); $venueModel->setAddress($this->draftEvent->getDetailsValue('venue.address')); $venueModel->setAddressCode($this->draftEvent->getDetailsValue('venue.address_code')); $venueModel->setDescription($this->draftEvent->getDetailsValue('venue.description')); if ($this->draftEvent->getDetailsValue('venue.lat')) { $venueModel->setLat($this->draftEvent->getDetailsValue('venue.lat')); $venueModel->setLng($this->draftEvent->getDetailsValue('venue.lng')); } if ($this->draftEvent->getDetailsValue('area.id')) { $venueModel->setAreaId($this->draftEvent->getDetailsValue('area.id')); } foreach ($this->application['extensions']->getExtensionsIncludingCore() as $extension) { $extension->addDetailsToVenue($venueModel); } $vee = new VenueEditMetaDataModel(); $vee->setUserAccount($this->application['currentUser']); // TODO $vee->setFromRequest(); $venueRepository = new VenueRepository(); $venueRepository->createWithMetaData($venueModel, $this->site, $vee); $eventModel->setVenueId($venueModel->getId()); } }