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()); }
/** * 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); }
/** * 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; }
public function createRootPage() { $page = new Page('test', array('title' => 'title', 'url' => 'url')); $layout = new Layout(); $page->setLayout($layout->setDataObject($this->getDefaultLayoutZones())); return $page; }
/** * @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); }
public function createRootPage($uid = null) { $page = new Page($uid, ['title' => 'title', 'url' => 'url']); $page->setLayout($this->createLayout('test')); return $page; }