/** * Create structures of the given type using the given data. * * Data should be of the form: * * array( * array( * 'title' => null, * 'url' => null, * 'template' => null, * 'locale' => 'de', * 'data' => '{}', * 'parent' => null, * ), * ), * * @param string $type * @param array $data */ protected function createStructures($type, $data) { foreach ($data as $structureData) { $structureData = array_merge(['title' => null, 'url' => null, 'template' => null, 'locale' => 'de', 'data' => '{}', 'parent' => null], $structureData); $parentUuid = null; if ($structureData['parent']) { $parentPath = $type === 'page' ? '/cmf/sulu_io/contents' : '/cmf/snippets'; $parentNode = $this->getPhpcrSession()->getNode($parentPath . $structureData['parent']); $parentUuid = $parentNode->getIdentifier(); } $propertyData = []; if ($structureData['data']) { $propertyData = json_decode($structureData['data'], true); if (null === $propertyData) { throw new \Exception('Could not decode json string: "%s"', $structureData['data']); } } $request = ContentMapperRequest::create()->setTemplateKey($structureData['template'])->setType($type)->setUserId($this->getUserId())->setLocale('de')->setData(array_merge(['title' => $structureData['title'], 'url' => $structureData['url']], $propertyData)); if ($type === 'page') { $request->setWebspaceKey('sulu_io'); $request->setState(StructureInterface::STATE_PUBLISHED); if ($parentUuid) { $request->setParentUuid($parentUuid); } } $this->getContentMapper()->saveRequest($request); } }
/** * @dataProvider provideSaveSnippetPage */ public function testSaveLoadSnippetPage($webspaceKey, $templateKey, $locale, $data) { foreach ($data['hotels'] as &$varName) { $varName = $this->{$varName}->getUUid(); } $req = ContentMapperRequest::create()->setType(Structure::TYPE_PAGE)->setWebspaceKey($webspaceKey)->setTemplateKey($templateKey)->setLocale($locale)->setState(StructureInterface::STATE_PUBLISHED)->setUserId(1)->setData($data); $page = $this->contentMapper->saveRequest($req); foreach ($data as $key => $value) { $this->assertEquals($value, $page->getPropertyValue($key)); } $this->assertInstanceOf(PageBridge::class, $page); $this->assertEquals($templateKey, $page->getKey()); $page = $this->contentMapper->load($page->getUuid(), $webspaceKey, $locale); $this->assertInstanceOf(PageBridge::class, $page); $this->assertEquals($templateKey, $page->getKey()); foreach ($data as $key => $value) { if ($key === 'hotels') { continue; } $this->assertEquals($value, $page->getPropertyValue($key), 'Checking property "' . $key . '"'); } $hotels = $page->getPropertyValue('hotels'); $this->assertCount(count($data['hotels']), $hotels); $this->assertEquals($data['hotels'], $hotels); }
/** * @Given I am editing a page of type :arg1 */ public function iAmEditingAPageOfType($arg1) { $request = ContentMapperRequest::create()->setTemplateKey($arg1)->setType('page')->setWebspaceKey('sulu_io')->setUserId($this->getUserId())->setState(StructureInterface::STATE_PUBLISHED)->setLocale('de')->setData(['title' => 'Behat Test Content', 'url' => '/behat-test-content']); $page = $this->getContentMapper()->saveRequest($request); $this->visitPath('/admin/#content/contents/sulu_io/de/edit:' . $page->getUuid() . '/content'); $this->getSession()->wait(5000, '$("#content-form").length'); sleep(1); // wait one more second to avoid flaky tests }
public function testRequest() { $request = ContentMapperRequest::create('page'); foreach (['data' => 'Foobar data', 'templateKey' => 'template_key', 'webspaceKey' => 'webspace_key', 'locale' => 'language_code', 'userId' => 5, 'partialUpdate' => true, 'uuid' => '1234', 'parentUuid' => '4321', 'state' => 2, 'isShadow' => true, 'shadowBaseLanguage' => 'de'] as $key => $value) { $request->{'set' . ucfirst($key)}($value); $res = $request->{'get' . ucfirst($key)}(); $this->assertEquals($value, $res); } }
/** * Load fixtures for snippet functional tests. */ protected function loadFixtures() { // HOTELS (including page) $req = ContentMapperRequest::create()->setType('snippet')->setTemplateKey('hotel')->setLocale('de')->setUserId(1)->setData(['title' => 'Le grande budapest']); $this->hotel1 = $this->contentMapper->saveRequest($req); // HOTELS (including page) $req = ContentMapperRequest::create()->setType('snippet')->setTemplateKey('hotel')->setLocale('en')->setUserId(1)->setUuid($this->hotel1->getUuid())->setData(['title' => 'Le grande budapest (en)']); $this->hotel1 = $this->contentMapper->saveRequest($req); $req = ContentMapperRequest::create()->setType('snippet')->setTemplateKey('hotel')->setLocale('de')->setUserId(1)->setData(['title' => 'L\'Hôtel New Hampshire']); $this->hotel2 = $this->contentMapper->saveRequest($req); $req = ContentMapperRequest::create()->setType('page')->setWebspaceKey('sulu_io')->setState(StructureInterface::STATE_PUBLISHED)->setTemplateKey('hotel_page')->setLocale('de')->setUserId(1)->setData(['title' => 'Hotels page', 'url' => '/hotels', 'hotels' => [$this->hotel1->getUuid(), $this->hotel2->getUuid()]]); $hotels = $this->contentMapper->saveRequest($req); $req = ContentMapperRequest::create()->setType('page')->setWebspaceKey('sulu_io')->setState(StructureInterface::STATE_PUBLISHED)->setTemplateKey('hotel_page')->setLocale('en')->setUserId(1)->setUuid($hotels->getUuid())->setIsShadow(true)->setShadowBaseLanguage('de')->setData(['title' => 'Hotels']); $this->contentMapper->saveRequest($req); // CARS $req = ContentMapperRequest::create()->setType('snippet')->setTemplateKey('car')->setLocale('de')->setUserId(1)->setData(['title' => 'C car']); $this->car1 = $this->contentMapper->saveRequest($req); $req = ContentMapperRequest::create()->setType('snippet')->setTemplateKey('car')->setLocale('de')->setUserId(1)->setData(['title' => 'A car']); $this->contentMapper->saveRequest($req); $req = ContentMapperRequest::create()->setType('snippet')->setTemplateKey('car')->setLocale('de')->setUserId(1)->setData(['title' => 'B car']); $this->contentMapper->saveRequest($req); }
public function propertiesProvider() { $nodes = []; $max = 15; for ($i = 0; $i < $max; ++$i) { $data = ['title' => 'News ' . $i, 'url' => '/news/news-' . $i, 'ext' => ['excerpt' => ['title' => 'Excerpt Title ' . $i, 'tags' => []]]]; $template = 'simple'; if ($i > 2 * $max / 3) { $template = 'block'; $data['article'] = [['title' => 'Block Title ' . $i, 'article' => 'Blockarticle ' . $i, 'type' => 'test'], ['title' => 'Block Title 2 ' . $i, 'article' => 'Blockarticle2 ' . $i, 'type' => 'test']]; } elseif ($i > $max / 3) { $template = 'article'; $data['article'] = 'Text article ' . $i; } $request = ContentMapperRequest::create()->setData($data)->setTemplateKey($template)->setWebspaceKey('sulu_io')->setLocale('en')->setUserId(1)->setType('page')->setState(Structure::STATE_PUBLISHED); $node = $this->mapper->saveRequest($request); $nodes[$node->getUuid()] = $node; } return $nodes; }
/** * {@inheritDoc} */ public function saveRequest(ContentMapperRequest $request) { return $this->save($request->getData(), $request->getTemplateKey(), $request->getWebspaceKey(), $request->getLocale(), $request->getUserId(), $request->getPartialUpdate(), $request->getUuid(), $request->getParentUuid(), $request->getState(), $request->getIsShadow(), $request->getShadowBaseLanguage(), $request->getType()); }
public function testLoadWithSmartContent() { $startPage = $this->mapper->loadStartPage('sulu_io', 'de'); $data = ContentMapperRequest::create('page')->setLocale('de')->setTemplateKey('overview_smart_content')->setData(['title' => 'Testname', 'tags' => ['tag1', 'tag2'], 'url' => '/news', 'article' => 'sulu_io', 'smartcontent' => ['dataSource' => $startPage->getUuid()]])->setWebspaceKey('sulu_io')->setState(Structure::STATE_PUBLISHED)->setUserId(1); $structure = $this->mapper->saveRequest($data); $childData = ContentMapperRequest::create('page')->setLocale('de')->setTemplateKey('default')->setData(['title' => 'Testname', 'url' => '/news/child', 'article' => 'sulu_io'])->setWebspaceKey('sulu_io')->setState(Structure::STATE_PUBLISHED)->setUserId(1); $childStructure = $this->mapper->saveRequest($childData); $content = $this->mapper->load($structure->getUuid(), 'sulu_io', 'de'); $smartContentType = $this->contentTypeManager->get('smart_content'); $smartContentData = $smartContentType->getContentData($content->getProperty('smartcontent')); $this->assertInstanceOf('DateTime', $smartContentData[0]['published']); }
/** * Updates a content item and returns result as JSON String. * * @param \Symfony\Component\HttpFoundation\Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function postAction(Request $request) { try { $language = $this->getLanguage($request); $webspace = $this->getWebspace($request); $template = $this->getRequestParameter($request, 'template', true); $isShadow = $this->getRequestParameter($request, 'isShadow', false); $shadowBaseLanguage = $this->getRequestParameter($request, 'shadowBaseLanguage', null); $parent = $this->getRequestParameter($request, 'parent'); $state = $this->getRequestParameter($request, 'state'); if ($state !== null) { $state = intval($state); } $type = $request->query->get('type', Structure::TYPE_PAGE); $data = $request->request->all(); $mapperRequest = ContentMapperRequest::create()->setType($type)->setTemplateKey($template)->setWebspaceKey($webspace)->setUserId($this->getUser()->getId())->setState($state)->setIsShadow($isShadow)->setShadowBaseLanguage($shadowBaseLanguage)->setLocale($language)->setParentUuid($parent)->setData($data); $result = $this->getRepository()->saveNodeRequest($mapperRequest); return $this->handleView($this->view($result)); } catch (ResourceLocatorNotValidException $e) { $restException = new RestException('The chosen ResourceLocator is not valid'); return $this->handleView($this->view($restException->toArray(), 409)); } }
/** * @expectedException Sulu\Component\DocumentManager\Exception\DocumentNotFoundException * @expectedExceptionMessage Requested document of type "page" but got */ public function testUpdatePageWrongType() { $req = ContentMapperRequest::create()->setUuid($this->snippet1->getUuid())->setType(Structure::TYPE_PAGE)->setWebspaceKey('sulu_io')->setTemplateKey('test_page')->setLocale('de')->setState(StructureInterface::STATE_PUBLISHED)->setUserId(1)->setData(['title' => 'Foo']); $this->contentMapper->saveRequest($req); }
/** * Saves a new existing snippet. * * @param Request $request * @param string $uuid * * @return \Symfony\Component\HttpFoundation\Response */ public function putSnippetAction(Request $request, $uuid) { $this->initEnv($request); $data = $request->request->all(); $mapperRequest = ContentMapperRequest::create()->setType('snippet')->setTemplateKey($this->getRequired($request, 'template'))->setUuid($uuid)->setLocale($this->languageCode)->setUserId($this->getUser()->getId())->setData($data)->setState(intval($request->get('state', StructureInterface::STATE_PUBLISHED))); $snippet = $this->contentMapper->saveRequest($mapperRequest); $view = View::create($this->decorateSnippet($snippet->toArray(), $this->languageCode)); return $this->viewHandler->handle($view); }