protected function insertFixtures() { $nodeRepo = self::$em->getRepository('Cx\\Core\\ContentManager\\Model\\Entity\\Node'); $root = $nodeRepo->getRoot(); $n1 = new \Cx\Core\ContentManager\Model\Entity\Node(); $n2 = new \Cx\Core\ContentManager\Model\Entity\Node(); $n3 = new \Cx\Core\ContentManager\Model\Entity\Node(); $n4 = new \Cx\Core\ContentManager\Model\Entity\Node(); //redirection $n5 = new \Cx\Core\ContentManager\Model\Entity\Node(); //alias $n1->setParent($root); $n2->setParent($n1); $n3->setParent($n2); $n4->setParent($root); $n5->setParent($root); $root->addChildren($n1); $n1->addChildren($n2); $n2->addChildren($n3); $root->addChildren($n4); $root->addChildren($n4); self::$em->persist($n1); self::$em->persist($n2); self::$em->persist($n3); self::$em->persist($n4); self::$em->flush(); $p1 = new \Cx\Core\ContentManager\Model\Entity\Page(); $p1->setLang(1); $p1->setTitle('resolver testpage1'); $p1->setNode($n1); $p1->setNodeIdShadowed($n1->getId()); $p1->setUseCustomContentForAllChannels(''); $p1->setUseCustomApplicationTemplateForAllChannels(''); $p1->setUseSkinForAllChannels(''); $p1->setCmd(''); $p1->setActive(1); $p4 = new \Cx\Core\ContentManager\Model\Entity\Page(); $p4->setLang(1); $p4->setTitle('testpage1_child'); $p4->setNode($n2); $p4->setNodeIdShadowed($n2->getId()); $p4->setUseCustomContentForAllChannels(''); $p4->setUseCustomApplicationTemplateForAllChannels(''); $p4->setUseSkinForAllChannels(''); $p4->setCmd(''); $p4->setActive(1); self::$em->persist($n1); self::$em->persist($n2); self::$em->persist($p1); self::$em->persist($p4); self::$em->flush(); self::$em->refresh($n1); self::$em->refresh($n2); $p5 = new \Cx\Core\ContentManager\Model\Entity\Page(); $p5->setLang(1); $p5->setTitle('subtreeTest_target'); $p5->setNode($n3); $p5->setNodeIdShadowed($n3->getId()); $p5->setUseCustomContentForAllChannels(''); $p5->setUseCustomApplicationTemplateForAllChannels(''); $p5->setUseSkinForAllChannels(''); $p5->setCmd(''); $p5->setActive(1); $p6 = new \Cx\Core\ContentManager\Model\Entity\Page(); $p6->setLang(0); $p6->setTitle('testalias'); $p6->setNode($n5); $p6->setType(\Cx\Core\ContentManager\Model\Entity\Page::TYPE_ALIAS); $p6->setTarget($p4->getId() . '|1'); $p6->setNodeIdShadowed($n5->getId()); $p6->setUseCustomContentForAllChannels(''); $p6->setUseCustomApplicationTemplateForAllChannels(''); $p6->setUseSkinForAllChannels(''); $p6->setCmd(''); $p6->setActive(1); self::$em->persist($n3); self::$em->persist($n5); self::$em->persist($p5); self::$em->persist($p6); self::$em->flush(); self::$em->refresh($n3); self::$em->refresh($n5); $p2 = new \Cx\Core\ContentManager\Model\Entity\Page(); $p2->setLang(1); $p2->setType(\Cx\Core\ContentManager\Model\Entity\Page::TYPE_REDIRECT); $p2->setTitle('redirection'); $p2->setNode($n4); $p2->setTarget(\Cx\Core\Routing\NodePlaceholder::fromNode($n2, 1, array('foo' => 'test'))->getPlaceholder()); $p2->setNodeIdShadowed($n4->getId()); $p2->setUseCustomContentForAllChannels(''); $p2->setUseCustomApplicationTemplateForAllChannels(''); $p2->setUseSkinForAllChannels(''); $p2->setCmd(''); $p2->setActive(1); self::$em->persist($p2); self::$em->flush(); self::$em->refresh($n4); self::$em->refresh($p2); }
function _saveAlias($slug, $target, $is_local, $id = '') { if ($slug == '') { return false; } // is internal target if ($is_local) { // get target page $temp_page = new \Cx\Core\ContentManager\Model\Entity\Page(); $temp_page->setTarget($target); $existing_aliases = $this->_getAliasesWithSameTarget($temp_page); // if alias already exists -> fail foreach ($existing_aliases as $existing_alias) { if (($id == '' || $existing_alias->getNode()->getId() != $id) && $slug == $existing_alias->getSlug()) { return false; } } } if ($id == '') { // create new node $node = new \Cx\Core\ContentManager\Model\Entity\Node(); $node->setParent($this->nodeRepository->getRoot()); $this->em->persist($node); // add a page $page = $this->_createTemporaryAlias(); $page->setNode($node); } else { $node = $this->nodeRepository->find($id); if (!$node) { return false; } $pages = $node->getPages(true); if (count($pages) != 1) { return false; } $page = $pages->first(); // we won't change anything on non aliases if ($page->getType() != \Cx\Core\ContentManager\Model\Entity\Page::TYPE_ALIAS) { return false; } } // set page attributes $page->setSlug($slug); $page->setTarget($target); $page->setTitle($page->getSlug()); // sanitize slug while (file_exists(ASCMS_PATH . '/' . $page->getSlug())) { $page->nextSlug(); } // save try { $page->validate(); } catch (\Cx\Core\ContentManager\Model\Entity\PageException $e) { return $e->getUserMessage(); } $this->em->persist($page); $this->em->flush(); $this->em->refresh($node); $this->em->refresh($page); return true; }
public function testTargetProperties() { $p = new \Cx\Core\ContentManager\Model\Entity\Page(); $p->setTarget('[[NODE_12]]querystring'); $this->assertEquals(1, $p->isTargetInternal()); $this->assertEquals(12, $p->getTargetNodeId()); $this->assertEquals(0, $p->getTargetLangId()); $this->assertEquals('querystring', $p->getTargetQueryString()); $p->setTarget('[[NODE_12_1]]querystring'); $this->assertEquals(1, $p->isTargetInternal()); $this->assertEquals(12, $p->getTargetNodeId()); $this->assertEquals(1, $p->getTargetLangId()); $this->assertEquals('querystring', $p->getTargetQueryString()); $p->setTarget('http://www.example.com'); $this->assertEquals(0, $p->isTargetInternal()); $this->assertEquals(0, $p->getTargetNodeId()); $this->assertEquals(0, $p->getTargetLangId()); $this->assertEquals(null, $p->getTargetQueryString()); }
/** * DO NOT CALL THIS METHOD! USE copyToLang() OR copyToNode() INSTEAD! * Copies data from another Page. * @param boolean $includeContent Whether to copy content. Defaults to true. * @param boolean $includeModuleAndCmd Whether to copy module and cmd. Defaults to true. * @param boolean $includeName Wheter to copy title, content title and slug. Defaults to true. * @param boolean $includeMetaData Wheter to copy meta data. Defaults to true. * @param boolean $includeProtection Wheter to copy protection. Defaults to true. * @param boolean $followRedirects Wheter to return a redirection page or the page its pointing at. Defaults to false, which returns the redirection page * @param boolean $followFallbacks Wheter to return a fallback page or the page its pointing at. Defaults to false, witch returns the fallback page * @param \Cx\Core\ContentManager\Model\Entity\Page Page to use as target * @return \Cx\Core\ContentManager\Model\Entity\Page The copy of $this or null on error */ public function copy($includeContent = true, $includeModuleAndCmd = true, $includeName = true, $includeMetaData = true, $includeProtection = true, $followRedirects = false, $followFallbacks = false, $page = null) { $targetPage = null; if ($followRedirects && $this->getType() == self::TYPE_REDIRECT) { $targetPage = $this->getTargetNodeId()->getPage($this->getTargetLangId()); } if ($followFallbacks && $this->getType() == self::TYPE_FALLBACK) { $fallbackLanguage = \FWLanguage::getFallbackLanguageIdById($this->getLang()); $targetPage = $this->getNode()->getPage($fallbackLanguage); } if ($targetPage) { return $targetPage->copy($includeContent, $includeModuleAndCmd, $includeName, $includeMetaData, $includeProtection, $followRedirects, $followFallbacks); } if (!$page) { $page = new \Cx\Core\ContentManager\Model\Entity\Page(); } if ($includeName) { $page->setContentTitle($this->getContentTitle()); $page->setTitle($this->getTitle()); $page->setSlug($this->getSlug()); } $newType = $this->getType(); if ($includeContent) { $page->setContent($this->getContent()); } else { $newType = self::TYPE_FALLBACK; } if ($includeModuleAndCmd) { $page->setModule($this->getModule()); $page->setCmd($this->getCmd()); } else { $page->setCmd(''); } if ($includeMetaData) { $page->setMetatitle($this->getMetatitle()); $page->setMetadesc($this->getMetadesc()); $page->setMetakeys($this->getMetakeys()); $page->setMetarobots($this->getMetarobots()); } $page->setNode($this->getNode()); $page->setActive($this->getActive()); $page->setDisplay($this->getDisplay()); $page->setLang($this->getLang()); $page->setType($newType); $page->setCaching($this->getCaching()); $page->setCustomContent($this->getCustomContent()); $page->setCssName($this->getCssName()); $page->setCssNavName($this->getCssNavName()); $page->setSkin($this->getSkin()); $page->setStart($this->getStart()); $page->setEnd($this->getEnd()); $page->setEditingStatus($this->getEditingStatus()); $page->setTarget($this->getTarget()); $page->setLinkTarget($this->getLinkTarget()); $page->setUpdatedBy(\FWUser::getFWUserObject()->objUser->getUsername()); if ($includeProtection) { if (!$this->copyProtection($page, true) || !$this->copyProtection($page, false)) { return null; } } return $page; }
/** * Returns the page path of the given target (node placeholder). * If the target page doesn't exist, the path of the error page will be returned. * * @param array $arguments * @return string $path */ public function getPathByTarget($arguments) { global $_CONFIG; $target = contrexx_input2raw($arguments['get']['target']); if (!\FWValidator::hasProto($target)) { $page = new \Cx\Core\ContentManager\Model\Entity\Page(); $page->setTarget($target); if ($page->isTargetInternal()) { $target = str_replace(array('[[', ']]'), array('{', '}'), $target); \LinkGenerator::parseTemplate($target); } elseif (ASCMS_PATH_OFFSET == '' || strpos($target, ASCMS_PATH_OFFSET) === false) { if (!isset($target[0]) || $target[0] !== '/') { $target = '/' . $target; } $target = ASCMS_PATH_OFFSET . $target; } $target = ASCMS_PROTOCOL . '://' . $_CONFIG['domainUrl'] . $target; } return $target; }