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->setForSecondaryEditFromPrimaryEditMeta($areaEditMetaDataModel); 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->setForSecondaryEditFromPrimaryEditMeta($areaEditMetaDataModel); 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 markDuplicateWithMetaData(VenueModel $duplicateVenue, VenueModel $originalVenue, VenueEditMetaDataModel $venueEditMetaDataModel) { global $DB; if ($duplicateVenue->getId() == $originalVenue->getId()) { return; } try { $DB->beginTransaction(); $duplicateVenue->setIsDeleted(true); $duplicateVenue->setIsDuplicateOfId($originalVenue->getId()); $this->venueDBAccess->update($duplicateVenue, array('is_deleted', 'is_duplicate_of_id'), $venueEditMetaDataModel); // Move any Events $eventEditMetaData = new EventEditMetaDataModel(); $eventEditMetaData->setForSecondaryEditFromPrimaryEditMeta($venueEditMetaDataModel); $eventRepoBuilder = new EventRepositoryBuilder(); $eventRepoBuilder->setVenue($duplicateVenue); $eventDBAccess = new EventDBAccess($DB, new \TimeSource()); foreach ($eventRepoBuilder->fetchAll() as $event) { $event->setVenueId($originalVenue->getId()); $eventDBAccess->update($event, array('venue_id'), $eventEditMetaData); } $DB->commit(); } catch (Exception $e) { $DB->rollBack(); } }