Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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());
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }