Example #1
0
 /**
  * Resolve a single result row to a content object.
  *
  * @param Row $row
  * @param string $locale
  * @param string $locales
  * @param string $webspaceKey
  * @param MappingInterface $mapping Includes array of property names.
  * @param UserInterface $user
  *
  * @return Content
  */
 private function resolveContent(Row $row, $locale, $locales, $webspaceKey, MappingInterface $mapping, UserInterface $user = null)
 {
     if (!$webspaceKey) {
         $webspaceKey = $this->nodeHelper->extractWebspaceFromPath($row->getPath());
     }
     $originalLocale = $locale;
     $ghostLocale = $this->localizationFinder->findAvailableLocale($webspaceKey, $this->resolveAvailableLocales($row), $locale);
     $type = null;
     if ($row->getValue('shadowOn')) {
         if (!$mapping->shouldHydrateShadow()) {
             return;
         }
         $type = StructureType::getShadow($row->getValue('shadowBase'));
     } elseif ($ghostLocale !== $originalLocale) {
         if (!$mapping->shouldHydrateGhost()) {
             return;
         }
         $locale = $ghostLocale;
         $type = StructureType::getGhost($locale);
     }
     if ($row->getValue('nodeType') === RedirectType::INTERNAL && $mapping->followInternalLink() && $row->getValue('internalLink') !== '' && $row->getValue('internalLink') !== $row->getValue('uuid')) {
         // TODO collect all internal link contents and query once
         return $this->resolveInternalLinkContent($row, $locale, $webspaceKey, $mapping, $type, $user);
     }
     $shadowBase = null;
     if ($row->getValue('shadowOn')) {
         $shadowBase = $row->getValue('shadowBase');
     }
     $data = [];
     foreach ($mapping->getProperties() as $item) {
         $data[$item] = $this->resolveProperty($row, $item, $locale, $shadowBase);
     }
     $content = new Content($locale, $webspaceKey, $row->getValue('uuid'), $this->resolvePath($row, $webspaceKey), $row->getValue('state'), $row->getValue('nodeType'), $this->resolveHasChildren($row), $data, $this->resolvePermissions($row, $user), $type);
     $content->setRow($row);
     if ($mapping->resolveUrl()) {
         $url = $this->resolveUrl($row, $locale);
         $urls = [];
         array_walk($locales, function ($item) use(&$urls, $row) {
             $urls[$item] = $this->resolveUrl($row, $item);
         });
         $content->setUrl($url);
         $content->setUrls($urls);
     }
     if ($mapping->resolveConcreteLocales()) {
         $locales = $this->resolveAvailableLocales($row);
         $content->setConcreteLanguages($locales);
     }
     return $content;
 }
Example #2
0
 /**
  * Returns new link item.
  *
  * @param Content $content
  * @param string $locale
  * @param string $scheme
  *
  * @return LinkItem
  */
 protected function getLinkItem(Content $content, $locale, $scheme)
 {
     $published = !empty($content->getPropertyWithDefault('published'));
     $url = $this->webspaceManager->findUrlByResourceLocator($content->getUrl(), $this->environment, $locale, $content->getWebspaceKey(), null, $scheme);
     return new LinkItem($content->getId(), $content->getPropertyWithDefault('title'), $url, $published);
 }