public function postFlushBuild(Fixture $fixture) { $params = $fixture->getParameters(); $translations = $fixture->getTranslations(); $original = $fixture->getEntity(); if (!isset($params['page']) || empty($translations)) { throw new \Exception('No page reference and/or translations detected for pagepart fixture ' . $fixture->getName() . ' (' . $fixture->getClass() . ')'); } $pageFixture = $params['page']; if (!$pageFixture instanceof Fixture) { throw new \Exception('Could not find a reference "' . $params['page'] . '"" for fixture ' . $fixture->getName() . ' (' . $fixture->getClass() . ')'); } $additionalEntities = $pageFixture->getAdditionalEntities(); $pp = $original; $first = null; foreach ($translations as $language => $data) { $key = $pageFixture->getName() . '_' . $language; if (!isset($additionalEntities[$key])) { continue; } if ($first !== null) { $pp = clone $original; } $page = $additionalEntities[$key]; $this->populator->populate($pp, $data); $this->em->persist($pp); $this->em->flush($pp); // Find latest position. $position = array_key_exists('position', $params) ? $params['position'] : null; $context = isset($params['context']) ? $params['context'] : 'main'; if (is_null($position)) { $pageParts = $this->pagePartRepo->getPagePartRefs($page, $context); $position = count($pageParts) + 1; } $this->pagePartRepo->addPagePart($page, $pp, $position, $context); $first = false; } }
public function postBuild(Fixture $fixture) { $entity = $fixture->getEntity(); $fixtureParams = $fixture->getParameters(); $translations = $fixture->getTranslations(); if (empty($translations)) { throw new \Exception('No translations detected for page fixture ' . $fixture->getName() . ' (' . $fixture->getClass() . ')'); } $internalName = array_key_exists('page_internal_name', $fixtureParams) ? $fixtureParams['page_internal_name'] : null; $rootNode = null; foreach ($fixture->getTranslations() as $language => $data) { if ($rootNode == null) { $page = $entity; $rootNode = $this->createRootNode($page, $language, $internalName, $fixtureParams); $this->manager->persist($rootNode); } else { $cloned = clone $entity; $page = $cloned; $this->manager->persist($page); } // Create the translationNode. $translationNode = $this->createTranslationNode($rootNode, $language, $page); if (!$page instanceof StructureNode) { $translationNode->setOnline(isset($fixtureParams['set_online']) ? $fixtureParams['set_online'] : true); } $fixture->addAdditional($fixture->getName() . '_' . $language, $page); $fixture->addAdditional('translationNode_' . $language, $translationNode); $fixture->addAdditional('nodeVersion_' . $language, $translationNode->getPublicNodeVersion()); $fixture->addAdditional('rootNode', $rootNode); $this->populator->populate($translationNode, $data); $this->populator->populate($page, $data); if ($translationNode->getSlug() == null && $rootNode->getParent() !== null) { $translationNode->setSlug($this->slugifier->slugify($translationNode->getTitle())); } $this->ensureUniqueUrl($translationNode, $page); $this->manager->persist($translationNode); $rootNode->addNodeTranslation($translationNode); } $this->manager->flush(); $this->aclPermissionCreatorService->createPermission($rootNode); }