/** * @param PageLocalization $localization * @return array */ private function getPageLocalizationData(PageLocalization $localization) { $template = $localization->getTemplate(); $currentRevision = $this->getAuditReader()->getCurrentRevision($localization::CN(), $localization->getId()); $publishedLocalization = $this->findLocalizationPublishedVersion($localization); // @TODO: add to int cast inside AuditReader. $isLatestVersionPublished = $localization->isPublished() && $localization->getPublishedRevision() === (int) $currentRevision; // main data $localizationData = array('template' => $template->getId(), 'scheduled' => $localization->getScheduleTime() !== null, 'path' => $localization->getPathPart(), 'full_path' => (string) $localization->getFullPath(), 'date' => $localization->getCreationTime()->format('Y-m-d'), 'active' => $publishedLocalization ? $publishedLocalization->isActive() : $localization->isActive(), 'published' => $localization->isPublished(), 'published_latest' => $isLatestVersionPublished); // redirect data $localizationData = array_merge($localizationData, $this->getPageLocalizationRedirectData($localization)); // additional data for Application Page Localization if ($localization instanceof ApplicationLocalization) { $localizationData = array_merge($localizationData, $this->getApplicationPageLocalizationData($localization)); } // $applicationBasePath = new Path(''); // if ($localization instanceof Entity\PageLocalization) { // if ( ! $page->isRoot()) { // $parentPage = $page->getParent(); // $parentLocalization = $parentPage->getLocalization($locale); // // if ( ! is_null($parentLocalization) && $parentPage instanceof Entity\ApplicationPage) { // // $applicationId = $parentPage->getApplicationId(); // $application = PageApplicationCollection::getInstance() // ->createApplication($parentLocalization, $this->entityManager); // // if (empty($application)) { // throw new CmsException(null, "Application '$applicationId' was not found"); // } // // $applicationBasePath = $application->generatePath($data); // } // } // } // No public stuff for group/temporary pages // if ( ! $localization instanceof Entity\GroupLocalization) { // $localizationId = $data->getId(); // // FIXME: causes "N" queries for "N" pages loaded in sitemap. Bad. // $publicLocalization = $publicEm->find(Localization::CN(), $localizationId); // } // Additional base path received from application // $array['basePath'] = $applicationBasePath->getFullPath(Path::FORMAT_RIGHT_DELIMITER); return $localizationData; // $localizationCount = $page->getLocalizations()->count(); // $array['localization_count'] = $localizationCount; }
/** * @param PageLocalization $localization * @return Set\PageSet */ protected function getPageTemplateHierarchy(PageLocalization $localization) { $template = $localization->getTemplate(); $page = $localization->getPage(); if (empty($template)) { throw new RuntimeException("No template assigned to the page {$localization->getId()}"); } $pageSet = $this->getTemplateTemplateHierarchy($template); $pageSet[] = $page; return $pageSet; }