/** * @TODO: can we avoid use of entity manager here? * * @param ApplicationLocalization $page * @param EntityManager $entityManager * @return PageApplication */ public function createApplicationFor(ApplicationLocalization $localization, EntityManager $entityManager) { $applicationPage = $localization->getMaster(); if (!$applicationPage instanceof ApplicationPage) { throw new \UnexpectedValueException('Expecting ApplicationPage to be master of [%], [%s] received', $localization->getId(), get_class($applicationPage)); } $appId = $applicationPage->getApplicationId(); // @TODO: this looks lame $application = clone $this->getApplication($appId); $application->setApplicationLocalization($localization); $application->setEntityManager($entityManager); return $application; }
protected function prepareData(ClassMetadata $metadata, array $data) { foreach ($data as $name => &$entityData) { switch ($metadata->name) { case Localization::CN(): case PageLocalization::CN(): case TemplateLocalization::CN(): case ApplicationLocalization::CN(): $entityData['publishedRevision'] = null; $args = array($entityData['locale']); break; case PageLocalizationPath::CN(): $args = array(str_ireplace('pageLocalizationPath', '', $name), $entityData['locale']); break; case TemplateLayout::CN(): $args = array($entityData['media']); break; case BlockPropertyMetadata::CN(): $args = array($entityData['name'], $entityData['blockProperty']); break; case BlockProperty::CN(): $args = array($entityData['name']); break; case PagePlaceHolder::CN(): case TemplatePlaceHolder::CN(): $args = array($entityData['name']); break; default: $constructor = new \ReflectionMethod($metadata->name, '__construct'); if ($constructor->getNumberOfRequiredParameters() === 0) { return parent::prepareData($metadata, $data); } throw new \RuntimeException(sprintf('Don\'t know how to build constructor required for [%s].', $metadata->name)); } $entityData = array_merge(array('__construct' => $args), $entityData); } return parent::prepareData($metadata, $data); }
/** * @param ApplicationLocalization $localization * @return array */ private function getApplicationPageLocalizationData(ApplicationLocalization $localization) { $applicationId = $localization->getMaster()->getApplicationId(); $application = $this->getPageApplicationManager()->getApplication($applicationId); $applicationData = $this->getPageApplicationData($application); $applicationData['application_id'] = $applicationData['id']; return $applicationData; }