/** * Finds the alternative page language overlay records for a page based on * the sys_language_mode. * * Possible Language Modes: * 1) content_fallback --> all languages * 2) strict --> available languages with page overlay * 3) ignore --> available languages with page overlay * 4) unknown mode or blank --> all languages * * @param integer $pageId Page ID. * @return array An array of translation overlays (or fake overlays) found for the given page. */ protected function getTranslationOverlaysForPage($pageId) { $translationOverlays = array(); $pageId = intval($pageId); $site = Tx_Solr_Site::getSiteByPageId($pageId); $languageModes = array('content_fallback', 'strict', 'ignore'); $hasOverlayMode = in_array($site->getSysLanguageMode(), $languageModes, TRUE); $isContentFallbackMode = $site->getSysLanguageMode() === 'content_fallback'; if ($hasOverlayMode && !$isContentFallbackMode) { $translationOverlays = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('pid, sys_language_uid', 'pages_language_overlay', 'pid = ' . $pageId . t3lib_BEfunc::deleteClause('pages_language_overlay') . t3lib_BEfunc::BEenableFields('pages_language_overlay')); } else { // ! If no sys_language_mode is configured, all languages will be indexed ! $languages = t3lib_BEfunc::getSystemLanguages(); // remove default language (L = 0) array_shift($languages); foreach ($languages as $language) { $translationOverlays[] = array('pid' => $pageId, 'sys_language_uid' => $language[1]); } } return $translationOverlays; }
/** * Initializes resources commonly needed for several actions * * @return void */ protected function initializeAction() { try { $site = $this->request->getArgument('site'); if (is_numeric($site)) { $siteRootPageId = $this->request->getArgument('site'); $this->site = \Tx_Solr_Site::getSiteByPageId($siteRootPageId); } else { if ($site instanceof \Tx_Solr_Site) { $this->site = $site; } } } catch (NoSuchArgumentException $nsae) { $sites = \Tx_Solr_Site::getAvailableSites(); $site = array_shift($sites); $this->site = $site; } $this->request->setArgument('site', $this->site); $moduleData = $this->moduleDataStorageService->loadModuleData(); $moduleData->setSite($this->site); $this->moduleDataStorageService->persistModuleData($moduleData); }
/** * Queries Solr for the current page's documents. * * @return array An array of Apache_Solr_Document objects */ protected function getIndexDocuments() { $query = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Solr_Query', ''); $query->setQueryType('standard'); $query->useRawQueryString(TRUE); $query->setQueryString('*:*'); $query->addFilter('(type:pages AND uid:' . $this->pageId . ') OR (*:* AND pid:' . $this->pageId . ' NOT type:pages)'); $query->addFilter('siteHash:' . Tx_Solr_Site::getSiteByPageId($this->pageId)->getSiteHash()); $query->setFieldList('*'); $query->setSorting('type asc, title asc'); $this->search->search($query); return $this->search->getResultDocuments(); }
/** * Builds the Solr document for the current page. * * @return Apache_Solr_Document A document representing the page */ protected function getPageDocument() { $document = GeneralUtility::makeInstance('Apache_Solr_Document'); /* @var $document Apache_Solr_Document */ $site = Tx_Solr_Site::getSiteByPageId($this->page->id); $pageRecord = $this->page->page; self::$pageSolrDocumentId = $documentId = Tx_Solr_Util::getPageDocumentId($this->page->id, $this->page->type, $this->page->sys_language_uid, $this->getDocumentIdGroups()); $document->setField('id', $documentId); $document->setField('site', $site->getDomain()); $document->setField('siteHash', $site->getSiteHash()); $document->setField('appKey', 'EXT:solr'); $document->setField('type', 'pages'); // system fields $document->setField('uid', $this->page->id); $document->setField('pid', $pageRecord['pid']); $document->setField('typeNum', $this->page->type); $document->setField('created', $pageRecord['crdate']); $document->setField('changed', $pageRecord['tstamp']); $document->setField('rootline', $this->page->id); // access $document->setField('access', (string) $this->pageAccessRootline); if ($this->page->page['endtime']) { $document->setField('endtime', $pageRecord['endtime']); } // content $document->setField('title', $this->contentExtractor->getPageTitle()); $document->setField('subTitle', $pageRecord['subtitle']); $document->setField('navTitle', $pageRecord['nav_title']); $document->setField('author', $pageRecord['author']); $document->setField('description', $pageRecord['description']); $document->setField('abstract', $pageRecord['abstract']); $document->setField('content', $this->contentExtractor->getIndexableContent()); $document->setField('url', $this->pageUrl); // keywords, multi valued $keywords = array_unique(GeneralUtility::trimExplode(',', $pageRecord['keywords'], TRUE)); foreach ($keywords as $keyword) { $document->addField('keywords', $keyword); } // content from several tags like headers, anchors, ... $tagContent = $this->contentExtractor->getTagContent(); foreach ($tagContent as $fieldName => $fieldValue) { $document->setField($fieldName, $fieldValue); } return $document; }
/** * Resolves magic keywords in allowed sites configuration. * Supported keywords: * __solr_current_site - The domain of the site the query has been started from * __current_site - Same as __solr_current_site * __all - Adds all domains as allowed sites * * - Same as __all * * @param integer $pageId A page ID that is then resolved to the site it belongs to * @param string $allowedSitesConfiguration TypoScript setting for allowed sites * @return string List of allowed sites/domains, magic keywords resolved */ public static function resolveSiteHashAllowedSites($pageId, $allowedSitesConfiguration) { if ($allowedSitesConfiguration == '*' || $allowedSitesConfiguration == '__all') { $sites = Tx_Solr_Site::getAvailableSites(); $domains = array(); foreach ($sites as $site) { $domains[] = $site->getDomain(); } $allowedSites = implode(',', $domains); } else { $allowedSites = str_replace(array('__solr_current_site', '__current_site'), Tx_Solr_Site::getSiteByPageId($pageId)->getDomain(), $allowedSitesConfiguration); } return $allowedSites; }
/** * Adds a page to the Index Queue of a site mounting the page. * * @param integer $mountedPageId ID (uid) of the mounted page. * @param array $mountProperties Array of mount point properties mountPageSource, mountPageDestination, and mountPageOverlayed */ protected function addPageToMountingSiteIndexQueue($mountedPageId, array $mountProperties) { $mountingSite = Tx_Solr_Site::getSiteByPageId($mountProperties['mountPageDestination']); $pageInitializer = t3lib_div::makeInstance('Tx_Solr_IndexQueue_Initializer_Page'); $pageInitializer->setSite($mountingSite); $pageInitializer->initializeMountedPage($mountProperties, $mountedPageId); }
/** * Gets all the pages from a mounted page tree. * * @param integer $mountPageSourceId * @return array An array of page IDs in the mounted page tree */ protected function resolveMountPageTree($mountPageSourceId) { $mountedSite = Tx_Solr_Site::getSiteByPageId($mountPageSourceId); return $mountedSite->getPages($mountPageSourceId); }
/** * Adds a page to the Index Queue of a site mounting the page. * * @param integer $mountedPageId ID (uid) of the mounted page. * @param array $mountProperties Array of mount point properties mountPageSource, mountPageDestination, and mountPageOverlayed */ protected function addPageToMountingSiteIndexQueue($mountedPageId, array $mountProperties) { $mountingSite = Tx_Solr_Site::getSiteByPageId($mountProperties['mountPageDestination']); $pageInitializer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Solr_IndexQueue_Initializer_Page'); $pageInitializer->setSite($mountingSite); $pageInitializer->initializeMountedPage($mountProperties, $mountedPageId); }
/** * Sets the site to work with * * @param integer $site Site root page id * @return void */ public function setSiteAction($site) { $site = \Tx_Solr_Site::getSiteByPageId((int) $site); $this->moduleData->setSite($site); // when switching the site, reset the core $this->moduleData->setCore(''); $this->moduleDataStorageService->persistModuleData($this->moduleData); $this->forwardHome(); }