Exemplo n.º 1
0
 /**
  * Returns list of custom-url data-arrays.
  *
  * @param string $path
  * @param string $locale
  *
  * @return \Iterator
  */
 public function findList($path, $locale)
 {
     // TODO pagination
     $session = $this->sessionManager->getSession();
     $queryManager = $session->getWorkspace()->getQueryManager();
     $qomFactory = $queryManager->getQOMFactory();
     $queryBuilder = new QueryBuilder($qomFactory);
     $queryBuilder->select('a', 'jcr:uuid', 'uuid');
     $queryBuilder->addSelect('a', 'title', 'title');
     $queryBuilder->addSelect('a', 'published', 'published');
     $queryBuilder->addSelect('a', 'domainParts', 'domainParts');
     $queryBuilder->addSelect('a', 'baseDomain', 'baseDomain');
     $queryBuilder->addSelect('a', 'sulu:content', 'targetDocument');
     $queryBuilder->addSelect('a', 'sulu:created', 'created');
     $queryBuilder->addSelect('a', 'sulu:creator', 'creator');
     $queryBuilder->addSelect('a', 'sulu:changed', 'changed');
     $queryBuilder->addSelect('a', 'sulu:changer', 'changer');
     $queryBuilder->from($queryBuilder->qomf()->selector('a', 'nt:unstructured'));
     $queryBuilder->where($queryBuilder->qomf()->comparison($queryBuilder->qomf()->propertyValue('a', 'jcr:mixinTypes'), QueryObjectModelConstantsInterface::JCR_OPERATOR_EQUAL_TO, $queryBuilder->qomf()->literal('sulu:custom_url')));
     $queryBuilder->andWhere($queryBuilder->qomf()->descendantNode('a', $path));
     $query = $queryBuilder->getQuery();
     $result = $query->execute();
     $uuids = array_map(function (Row $item) {
         return $item->getValue('a.targetDocument');
     }, iterator_to_array($result->getRows()));
     $targets = $this->contentRepository->findByUuids(array_unique($uuids), $locale, MappingBuilder::create()->addProperties(['title'])->getMapping());
     return new RowsIterator($result->getRows(), $result->getColumnNames(), $targets, $this->generator, $this->userManager);
 }
Exemplo n.º 2
0
 /**
  * {@inheritdoc}
  */
 public function preload(array $hrefs, $locale, $published = true)
 {
     $request = $this->requestStack->getCurrentRequest();
     $scheme = 'http';
     if ($request) {
         $scheme = $request->getScheme();
     }
     $contents = $this->contentRepository->findByUuids(array_unique(array_values($hrefs)), $locale, MappingBuilder::create()->setResolveUrl(true)->addProperties(['title', 'published'])->setOnlyPublished($published)->setHydrateGhost(false)->getMapping());
     return array_map(function (Content $content) use($locale, $scheme) {
         return $this->getLinkItem($content, $locale, $scheme);
     }, $contents);
 }
Exemplo n.º 3
0
 /**
  * {@inheritdoc}
  */
 public function build($page, $portalKey, $locale)
 {
     $pages = $this->contentRepository->findAllByPortal($locale, $portalKey, MappingBuilder::create()->addProperties(['changed', 'seo-hideInSitemap'])->setResolveUrl(true)->setHydrateGhost(false)->getMapping());
     $result = [];
     foreach ($pages as $contentPage) {
         if (!$contentPage->getUrl() || true === $contentPage['seo-hideInSitemap']) {
             continue;
         }
         $changed = $contentPage['changed'];
         if (is_string($changed)) {
             $changed = new \DateTime($changed);
         }
         $result[] = $sitemapUrl = new SitemapUrl($contentPage->getUrl(), $changed);
         foreach ($contentPage->getUrls() as $urlLocale => $href) {
             $sitemapUrl->addAlternateLink(new SitemapAlternateLink($href, $urlLocale));
         }
     }
     return $result;
 }
Exemplo n.º 4
0
 /**
  * Returns a rendered xmlsitemap.
  *
  * @return Response
  */
 public function indexAction(Request $request)
 {
     /** @var RequestAnalyzerInterface $requestAnalyzer */
     $requestAnalyzer = $this->get('sulu_core.webspace.request_analyzer');
     /** @var SitemapXMLGeneratorInterface $sitemapXMLGenerator */
     $sitemapXMLGenerator = $this->get('sulu_website.sitemap_xml_generator');
     $sitemap = $this->get('sulu_content.content_repository')->findAll($requestAnalyzer->getWebspace()->getXDefaultLocalization()->getLocalization(), $requestAnalyzer->getWebspace()->getKey(), MappingBuilder::create()->addProperties(['changed'])->setResolveUrl(true)->getMapping());
     $webspaceSitemaps = [['localizations' => array_map(function (Localization $localization) {
         return $localization->getLocalization();
     }, $requestAnalyzer->getWebspace()->getAllLocalizations()), 'defaultLocalization' => $requestAnalyzer->getWebspace()->getXDefaultLocalization()->getLocalization(), 'sitemap' => $sitemap]];
     $preferredDomain = $request->getHttpHost();
     // XML Response
     $response = new Response();
     $response->setMaxAge(240);
     $response->setSharedMaxAge(960);
     $response->headers->set(HttpCache::HEADER_REVERSE_PROXY_TTL, $response->getAge() + $this->container->getParameter('sulu_website.sitemap.cache.lifetime'));
     $response->headers->set('Content-Type', 'text/xml');
     $response->setContent($sitemapXMLGenerator->generate($webspaceSitemaps, $preferredDomain, $request->getScheme()));
     // Generate XML
     return $response;
 }
Exemplo n.º 5
0
 /**
  * Returns content array by parent or webspace root.
  *
  * @param Request $request
  *
  * @return Response
  *
  * @throws MissingParameterChoiceException
  * @throws MissingParameterException
  * @throws ParameterDataTypeException
  */
 private function cgetContent(Request $request)
 {
     $parent = $request->get('parent');
     $properties = array_filter(explode(',', $request->get('fields', '')));
     $excludeGhosts = $this->getBooleanRequestParameter($request, 'exclude-ghosts', false, false);
     $excludeShadows = $this->getBooleanRequestParameter($request, 'exclude-shadows', false, false);
     $webspaceNodes = $this->getRequestParameter($request, 'webspace-nodes');
     $locale = $this->getRequestParameter($request, 'language', true);
     $webspaceKey = $this->getRequestParameter($request, 'webspace', false);
     if (!$webspaceKey && !$webspaceNodes) {
         throw new MissingParameterChoiceException(get_class($this), ['webspace', 'webspace-nodes']);
     }
     if (!in_array($webspaceNodes, [self::WEBSPACE_NODE_SINGLE, static::WEBSPACE_NODES_ALL, null])) {
         throw new ParameterDataTypeException(get_class($this), 'webspace-nodes');
     }
     $contentRepository = $this->get('sulu_content.content_repository');
     $user = $this->getUser();
     $mapping = MappingBuilder::create()->setHydrateGhost(!$excludeGhosts)->setHydrateShadow(!$excludeShadows)->setResolveConcreteLocales(true)->addProperties($properties)->setResolveUrl(true)->getMapping();
     $contents = [];
     if ($webspaceKey) {
         if (!$parent) {
             $contents = $contentRepository->findByWebspaceRoot($locale, $webspaceKey, $mapping, $user);
         } else {
             $contents = $contentRepository->findByParentUuid($parent, $locale, $webspaceKey, $mapping, $user);
         }
     }
     if ($webspaceNodes === static::WEBSPACE_NODES_ALL) {
         $contents = $this->getWebspaceNodes($mapping, $contents, $webspaceKey, $locale, $user);
     } elseif ($webspaceNodes === static::WEBSPACE_NODE_SINGLE) {
         $contents = $this->getWebspaceNode($mapping, $contents, $webspaceKey, $locale, $user);
     }
     $list = new CollectionRepresentation($contents, static::$relationName);
     $view = $this->view($list);
     return $this->handleView($view);
 }
Exemplo n.º 6
0
 public function testFindByPaths()
 {
     $this->initPhpcr();
     $page1 = $this->createPage('test-1', 'de');
     $page11 = $this->createPage('test-1/test-1', 'de', [], $page1);
     $page2 = $this->createPage('test-2', 'de');
     $page3 = $this->createPage('test-3', 'de');
     $result = $this->contentRepository->findByPaths(['/cmf/sulu_io/contents', '/cmf/sulu_io/contents/test-1', '/cmf/sulu_io/contents/test-2'], 'de', MappingBuilder::create()->addProperties(['title'])->getMapping());
     $this->assertCount(3, $result);
     $this->assertEquals($this->sessionManager->getContentNode('sulu_io')->getIdentifier(), $result[0]->getId());
     $this->assertTrue($result[0]->hasChildren());
     $this->assertEmpty($result[0]->getChildren());
     $this->assertEquals($page1->getUuid(), $result[1]->getId());
     $this->assertTrue($result[1]->hasChildren());
     $this->assertEmpty($result[1]->getChildren());
     $this->assertEquals($page2->getUuid(), $result[2]->getId());
     $this->assertFalse($result[2]->hasChildren());
     $this->assertEmpty($result[2]->getChildren());
 }
Exemplo n.º 7
0
 public function testFindConcreteLanguages()
 {
     $this->initPhpcr();
     $page = $this->createShadowPage('test', 'de', 'en');
     $result = $this->contentRepository->find($page->getUuid(), 'de', 'sulu_io', MappingBuilder::create()->setResolveConcreteLocales(true)->getMapping());
     $this->assertEquals(['de'], $result->getConcreteLanguages());
 }