public function testResolveWithKnownLayout()
 {
     $content = new MockContent();
     $content->title->value = 'content title';
     $layout = self::$kernel->createLayout('layout-test-label', 'layout-test-uid');
     $page = new Page();
     $page->setLayout($layout, $content);
     $bag = $this->resolver->resolve($page);
     $expected = ['title' => ['content' => 'content title'], 'description' => ['content' => 'content title'], 'robots' => ['content' => 'follow'], 'og-url' => ['content' => '']];
     $this->assertInstanceOf('BackBee\\MetaData\\MetaDataBag', $bag);
     $this->assertEquals($expected, $bag->jsonSerialize());
     $this->assertEquals($page, $content->title->getMainNode());
 }
Example #2
0
 /**
  * Update page.
  *
  * @return \Symfony\Component\HttpFoundation\Response
  *
  * @Rest\RequestParam(name="title", description="Page title", requirements={
  *   @Assert\NotBlank(message="title is required")
  * })
  * @Rest\RequestParam(name="url", description="page url", requirements={
  *   @Assert\NotBlank(message="url is required")
  * })
  * @Rest\RequestParam(name="target", description="page target", requirements={
  *   @Assert\NotBlank(message="target is required")
  * })
  * @Rest\RequestParam(name="state", description="page state", requirements={
  *   @Assert\NotBlank(message="state is required")
  * })
  * @Rest\RequestParam(name="publishing", description="Publishing flag", requirements={
  *   @Assert\Type(type="digit", message="The value should be a positive number")
  * })
  * @Rest\RequestParam(name="archiving", description="Archiving flag", requirements={
  *   @Assert\Type(type="digit", message="The value should be a positive number")
  * })
  *
  * @Rest\ParamConverter(name="page", class="BackBee\NestedNode\Page")
  * @Rest\ParamConverter(name="layout", id_name="layout_uid", class="BackBee\Site\Layout", id_source="request")
  * @Rest\ParamConverter(
  *   name="parent", id_name="parent_uid", class="BackBee\NestedNode\Page", id_source="request", required=false
  * )
  * @Rest\ParamConverter(
  *   name="workflow", id_name="workflow_uid", id_source="request", class="BackBee\Workflow\State", required=false
  * )
  * @Rest\Security(expression="is_granted('EDIT', page)")
  * @Rest\Security(expression="is_granted('VIEW', layout)")
  */
 public function putAction(Page $page, Layout $layout, Request $request, Page $parent = null)
 {
     $page->setLayout($layout);
     $this->trySetPageWorkflowState($page, $this->getEntityFromAttributes('workflow'));
     $requestRedirect = $request->request->get('redirect');
     $redirect = $requestRedirect === '' || $requestRedirect === null ? null : $requestRedirect;
     $page->setTitle($request->request->get('title'))->setUrl($request->request->get('url'))->setTarget($request->request->get('target'))->setState($request->request->get('state'))->setRedirect($redirect)->setAltTitle($request->request->get('alttitle', null));
     if ($parent !== null) {
         $page->setParent($parent);
         if ($this->isFinal($parent)) {
             return $this->createFinalResponse($parent->getLayout());
         }
     }
     if ($request->request->has('publishing')) {
         $publishing = $request->request->get('publishing');
         $page->setPublishing(null !== $publishing ? new \DateTime(date('c', $publishing)) : null);
     }
     if ($request->request->has('archiving')) {
         $archiving = $request->request->get('archiving');
         $page->setArchiving(null !== $archiving ? new \DateTime(date('c', $archiving)) : null);
     }
     if (true === $page->isOnline(true)) {
         $this->granted('PUBLISH', $page);
     }
     $this->getEntityManager()->flush($page);
     return $this->createJsonResponse(null, 204);
 }
Example #3
0
 /**
  * Returns the built page instance.
  *
  * @return Page                                     The built page.
  */
 public function getPage()
 {
     if (null === $this->site || null === $this->layout || null === $this->title) {
         $this->reset();
         throw new \Exception("Required data missing");
     }
     $page = new Page($this->uid);
     $page->setTitle($this->title);
     $page->setSite($this->site);
     if (null !== $this->parent) {
         $page->setParent($this->insureParentIsSection($this->parent));
     }
     $page->setLayout($this->layout, $this->itemToPushInMainZone);
     if (null !== $this->url) {
         $page->setUrl($this->url);
     }
     if (null !== $this->redirect) {
         $page->setRedirect($this->redirect);
     }
     if (null !== $this->target) {
         $page->setTarget($this->target);
     }
     if (null !== $this->altTitle) {
         $page->setAltTitle($this->altTitle);
     }
     if (null !== $this->state) {
         $page->setState($this->state);
     }
     if (null !== $this->publishedAt) {
         $page->setPublishing($this->publishedAt);
     }
     if (null !== $this->createdAt) {
         $page->setCreated($this->createdAt);
     }
     if (null !== $this->archiving) {
         $page->setArchiving($this->archiving);
     }
     $pageContentSet = $page->getContentSet();
     $this->updateContentRevision($pageContentSet);
     while ($column = $pageContentSet->next()) {
         $this->updateContentRevision($column);
     }
     if (0 < count($this->elements)) {
         foreach ($this->elements as $e) {
             $column = $pageContentSet->item($e['content_set_position']);
             if ($e['set_main_node']) {
                 $e['content']->setMainNode($page);
             }
             $column->push($e['content']);
         }
         $pageContentSet->rewind();
     }
     $this->doPersistIfValid($page);
     $this->reset();
     return $page;
 }
Example #4
0
 public function createRootPage()
 {
     $page = new Page('test', array('title' => 'title', 'url' => 'url'));
     $layout = new Layout();
     $page->setLayout($layout->setDataObject($this->getDefaultLayoutZones()));
     return $page;
 }
Example #5
0
 /**
  * @covers BackBee\NestedNode\Page::getParentZoneAtSamePositionIfExists
  */
 public function testGetParentZoneAtSamePositionIfExists()
 {
     $page = new Page('test', array('title' => 'title', 'url' => 'url'));
     $page->setLayout(self::$kernel->createLayout('test'));
     $this->assertFalse($this->page->getParentZoneAtSamePositionIfExists($page->getContentSet()->first()));
     $this->assertFalse($this->page->getParentZoneAtSamePositionIfExists($page->getContentSet()->last()));
     $child = new Page('child', array('title' => 'child', 'url' => 'url'));
     $child->setParent($page)->setLayout($page->getLayout());
     $this->assertFalse($child->getParentZoneAtSamePositionIfExists(new ContentSet()));
     $this->assertEquals($page->getContentSet()->first(), $child->getParentZoneAtSamePositionIfExists($child->getContentSet()->first()));
     $this->assertEquals($page->getContentSet()->last(), $child->getParentZoneAtSamePositionIfExists($child->getContentSet()->last()));
     $thirdcolumn = new \stdClass();
     $thirdcolumn->id = 'third';
     $thirdcolumn->defaultContainer = null;
     $thirdcolumn->target = '#target';
     $thirdcolumn->gridClassPrefix = 'row';
     $thirdcolumn->gridSize = 4;
     $thirdcolumn->mainZone = false;
     $thirdcolumn->defaultClassContent = 'inherited';
     $thirdcolumn->options = null;
     $data = self::$kernel->getDefaultLayoutZones();
     $data->templateLayouts[] = $thirdcolumn;
     $layout = new Layout();
     $child->setLayout($layout->setDataObject($data));
     $this->assertEquals($page->getContentSet()->last(), $child->getParentZoneAtSamePositionIfExists($child->getContentSet()->item(1)));
     $this->assertFalse($child->getParentZoneAtSamePositionIfExists($child->getContentSet()->last()));
 }
 /**
  * @covers \BackBee\NestedNode\Repository\PageRepository::insertNode
  * @expectedException BackBee\Exception\InvalidArgumentException
  */
 public function testInsertNodeInNonSection()
 {
     $page1 = $this->repository->find('page1');
     $newpage = new Page('new-page', array('title' => 'new-page'));
     $newpage->setLayout(new Layout());
     $this->repository->insertNode($newpage, $page1, 1);
 }
Example #7
0
 public function createRootPage($uid = null)
 {
     $page = new Page($uid, ['title' => 'title', 'url' => 'url']);
     $page->setLayout($this->createLayout('test'));
     return $page;
 }