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;
     }
 }
예제 #2
0
 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);
 }