public function markDuplicateWithMetaData(EventModel $duplicateEvent, EventModel $originalEvent, EventEditMetaDataModel $eventEditMetaDataModel) { global $DB; if ($duplicateEvent->getId() == $originalEvent->getId()) { return; } try { $DB->beginTransaction(); $duplicateEvent->setIsDeleted(true); $duplicateEvent->setIsDuplicateOfId($originalEvent->getId()); $this->eventDBAccess->update($duplicateEvent, array('is_deleted', 'is_duplicate_of_id'), $eventEditMetaDataModel); $uaeRepo = new UserAtEventRepository(); $uaerb = new UserAtEventRepositoryBuilder(); $uaerb->setEventOnly($duplicateEvent); foreach ($uaerb->fetchAll() as $uaeDuplicate) { if ($uaeDuplicate->getIsPlanAttending() || $uaeDuplicate->getIsPlanMaybeAttending()) { $uaeOriginal = $uaeRepo->loadByUserIDAndEventOrInstanciate($uaeDuplicate->getUserAccountId(), $originalEvent); // does user already have plans for this event? If so leave them. if (!$uaeOriginal->getIsPlanAttending() && !$uaeOriginal->getIsPlanMaybeAttending()) { $uaeOriginal->setIsPlanAttending($uaeDuplicate->getIsPlanAttending()); $uaeOriginal->setIsPlanMaybeAttending($uaeDuplicate->getIsPlanMaybeAttending()); $uaeOriginal->setIsPlanPublic($uaeDuplicate->getIsPlanPublic()); $uaeRepo->save($uaeOriginal); } } } $DB->commit(); } catch (Exception $e) { $DB->rollBack(); } }