示例#1
0
 /**
  * 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);
     }
 }
示例#2
0
 /**
  * @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);
 }
示例#3
0
 /**
  * @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);
     }
 }
示例#5
0
 /**
  * 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;
 }
示例#7
0
 /**
  * {@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());
 }
示例#8
0
 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']);
 }
示例#9
0
 /**
  * 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);
 }
示例#11
0
 /**
  * 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);
 }