/**
  * @covers \BackBee\NestedNode\Builder\PageBuilder::getPage
  * @covers \BackBee\NestedNode\Builder\PageBuilder::doPersistIfValid
  */
 public function testGetPagePersisted()
 {
     $chid1 = self::$builder->setUid('first-child')->setTitle('title')->setSite($this->site)->setLayout($this->layout)->setParent($this->root)->setPersistMode(PageBuilder::PERSIST_AS_FIRST_CHILD)->getPage();
     $this->assertTrue(self::$em->getUnitOfWork()->isScheduledForInsert($chid1));
     self::$em->flush();
     self::$em->refresh($this->root);
     $this->assertFalse($chid1->isRoot());
     $this->assertFalse($chid1->hasMainSection());
     $this->assertEquals(1, $this->root->getLeftnode());
     $this->assertEquals(2, $this->root->getRightnode());
     $this->assertEquals(1, $chid1->getPosition());
     $this->assertEquals(1, $chid1->getLevel());
     $child2 = self::$builder->setUid('second-child')->setTitle('title')->setSite($this->site)->setLayout($this->layout)->setParent($this->root)->setPersistMode(PageBuilder::PERSIST_AS_LAST_CHILD)->getPage();
     self::$em->flush();
     $this->assertEquals(2, $child2->getPosition());
     $this->assertEquals(1, $child2->getLevel());
     $section = self::$builder->setUid('section')->setTitle('title')->setSite($this->site)->setLayout($this->layout)->setParent($this->root)->isSection(true)->setPersistMode(PageBuilder::PERSIST_AS_FIRST_CHILD)->getPage();
     self::$em->flush();
     self::$em->refresh($this->root);
     $this->assertTrue($section->hasMainSection());
     $this->assertEquals(0, $section->getPosition());
     $this->assertEquals(1, $section->getLevel());
     $this->assertEquals(2, $section->getLeftnode());
     $this->assertEquals(3, $section->getRightnode());
     $this->assertEquals(1, $this->root->getLeftnode());
     $this->assertEquals(4, $this->root->getRightnode());
 }
 /**
  * @covers \BackBee\NestedNode\Repository\PageRepository::moveAsNextSiblingOf
  * @covers \BackBee\NestedNode\Repository\PageRepository::moveAsSiblingOf
  * @covers \BackBee\NestedNode\Repository\PageRepository::movePageAsSiblingOf
  * @covers \BackBee\NestedNode\Repository\PageRepository::moveSectionAsSiblingOf
  */
 public function testMoveAsNextSiblingOf()
 {
     $section1 = $this->repository->find('section1');
     $section2 = $this->repository->find('section2');
     $page1 = $this->repository->find('page1');
     $page2 = $this->repository->find('page2');
     $page3 = $this->repository->find('page3');
     $this->assertEquals($page3, $this->repository->moveAsNextSiblingOf($page3, $page2));
     self::$em->refresh($page1);
     self::$em->refresh($page2);
     self::$em->flush($page3);
     $this->assertEquals($section1, $page3->getParent());
     $this->assertEquals(2, $page3->getLevel());
     $this->assertEquals(1, $page2->getPosition());
     $this->assertEquals(2, $page3->getPosition());
     $this->assertEquals(3, $page1->getPosition());
     $this->assertEquals($section1, $this->repository->moveAsNextSiblingOf($section1, $section2));
     self::$em->refresh($section2);
     self::$em->flush($section1);
     $this->assertEquals(1, $this->root->getLeftnode());
     $this->assertEquals(6, $this->root->getRightnode());
     $this->assertEquals(2, $section2->getLeftnode());
     $this->assertEquals(3, $section2->getRightnode());
     $this->assertEquals(4, $section1->getLeftnode());
     $this->assertEquals(5, $section1->getRightnode());
 }
Example #3
0
 /**
  * Returns the next online sibling of $page.
  *
  * @param  Page                 $page               The page to look for next sibling.
  *
  * @return Page|null                                The next page or null if the entity can not be found.
  */
 public function getOnlineNextSibling(Page $page)
 {
     $query = $this->createQueryBuilder('p');
     if (true === $page->hasMainSection()) {
         $query->andWhere($query->getSectionAlias() . '._leftnode >= :leftnode')->orWhere('p._section IN (:sections)')->setParameter('leftnode', $page->getLeftnode())->setParameter('sections', [$page->getSection(), $page->getSection()->getParent()]);
     } else {
         $query->andWhere('p._position > :position')->setParameter('position', $page->getPosition());
     }
     return $query->andIsSiblingsOf($page, true, ['_position' => 'ASC', '_leftnode' => 'ASC'], 1, 0)->andIsOnline()->getQuery()->getOneOrNullResult();
 }
 /**
  * Replace root contentset for a page and its descendants.
  *
  * @param \BackBee\NestedNode\Page            $page
  * @param \BackBee\ClassContent\ContentSet    $oldContentSet
  * @param \BackBee\ClassContent\ContentSet    $newContentSet
  * @param \BackBee\Security\Token\BBUserToken $userToken
  */
 public function updateRootContentSetByPage(Page $page, ContentSet $oldContentSet, ContentSet $newContentSet, BBUserToken $userToken)
 {
     $em = $this->_em;
     $q = $this->createQueryBuilder('c');
     $results = $q->leftJoin('c._pages', 'p')->leftJoin('p._section', 'sp')->leftJoin('c._subcontent', 'subcontent')->where('subcontent = :contentToReplace')->andWhere('sp._root = :cpageRoot')->andWhere('sp._leftnode > :cpageLeftnode')->andWhere('sp._rightnode < :cpageRightnode')->setParameters(['contentToReplace' => $oldContentSet, 'cpageRoot' => $page->getSection()->getRoot(), 'cpageLeftnode' => $page->getLeftnode(), 'cpageRightnode' => $page->getRightnode()])->getQuery()->getResult();
     if ($results) {
         foreach ($results as $parentContentSet) {
             /* create draft for the main container */
             $draft = $em->getRepository('BackBee\\ClassContent\\Revision')->getDraft($parentContentSet, $userToken, true);
             if (null !== $draft) {
                 $parentContentSet->setDraft($draft);
             }
             /* Replace the old ContentSet by the new one */
             $parentContentSet->replaceChildBy($oldContentSet, $newContentSet);
             $em->persist($parentContentSet);
         }
     }
 }
Example #5
0
 /**
  * @covers BackBee\NestedNode\Page::getLeftnode()
  * @covers BackBee\NestedNode\Page::getRightnode()
  */
 public function testGetNode()
 {
     $this->assertEquals(1, $this->page->getLeftnode());
     $this->assertEquals(2, $this->page->getRightnode());
     $child = new Page('child');
     $child->setSection($this->page->getSection());
     $this->assertEquals(1, $child->getLeftnode());
     $this->assertEquals(2, $child->getRightnode());
 }
 /**
  * Set a page to filter the query on a nested portion.
  *
  * @param  BackBee\NestedNode\Page $page
  */
 public function addPageFilter(Page $page)
 {
     if ($page && !$page->isRoot()) {
         $this->leftJoin('cc._mainnode', 'p')->leftJoin('p._section', 'sp')->andWhere('sp._root = :selectedPageRoot')->andWhere('sp._leftnode >= :selectedPageLeftnode')->andWhere('sp._rightnode <= :selectedPageRightnode')->setParameters(['selectedPageRoot' => $page->getSection()->getRoot(), 'selectedPageLeftnode' => $page->getLeftnode(), 'selectedPageRightnode' => $page->getRightnode()]);
     }
 }