/** * Gets errors that may have been found with the user's query. * * @return array An array of errors, each error is an array itself and has a message and a code key. */ protected function getErrors() { $errors = array(); // detect empty user queries $resultService = $this->parentPlugin->getSearchResultSetService(); $searchWasTriggeredWithEmptyQuery = $resultService->getLastSearchWasExecutedWithEmptyQueryString(); if ($searchWasTriggeredWithEmptyQuery && !$this->configuration->getSearchQueryAllowEmptyQuery()) { $errors[] = array('message' => '###LLL:error_emptyQuery###', 'code' => 1300893669); } // hook to provide additional error messages if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['solr']['addSearchErrors'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['solr']['addSearchErrors'] as $classReference) { $errorDetector = GeneralUtility::getUserObj($classReference); if ($errorDetector instanceof ErrorDetector) { if ($errorDetector instanceof CommandPluginAware) { $errorDetector->setParentPlugin($this->parentPlugin); } $additionalErrors = $errorDetector->getErrors(); if (is_array($additionalErrors)) { $errors = array_merge($errors, $additionalErrors); } else { throw new \UnexpectedValueException($classReference . ' must return an array', 1359156111); } } else { throw new \InvalidArgumentException('Error detector "' . $classReference . '" must implement interface ApacheSolrForTypo3\\Solr\\Plugin\\Results\\ErrorDetector.', 1359156192); } } } return $errors; }
/** * Generates the options for the results per page switch. * * @return array Array of results per page switch options. */ public function getResultsPerPageOptions() { $resultsPerPageOptions = array(); $resultsPerPageSwitchOptions = $this->configuration->getSearchResultsPerPageSwitchOptionsAsArray(); $currentNumberOfResultsShown = $this->parentPlugin->getSearchResultSetService()->getLastResultSet()->getResultsPerPage(); $queryLinkBuilder = GeneralUtility::makeInstance('ApacheSolrForTypo3\\Solr\\Query\\LinkBuilder', $this->parentPlugin->getSearchResultSetService()->getSearch()->getQuery()); $queryLinkBuilder->removeUnwantedUrlParameter('resultsPerPage'); $queryLinkBuilder->setLinkTargetPageId($this->parentPlugin->getLinkTargetPageId()); foreach ($resultsPerPageSwitchOptions as $option) { $selected = ''; $selectedClass = ''; if ($option == $currentNumberOfResultsShown) { $selected = ' selected="selected"'; $selectedClass = ' class="currentNumberOfResults"'; } $resultsPerPageOptions[] = array('value' => $option, 'selected' => $selected, 'selectedClass' => $selectedClass, 'url' => $queryLinkBuilder->getQueryUrl(array('resultsPerPage' => $option))); } return $resultsPerPageOptions; }
/** * @param $numberOfResults * @return string */ protected function getPageBrowser($numberOfResults) { $pageBrowserMarkup = ''; $solrPageBrowserConfiguration = $this->configuration->getSearchResultsPageBrowserConfiguration(); if ($solrPageBrowserConfiguration['enabled']) { $resultsPerPage = $this->parentPlugin->getSearchResultSetService()->getLastResultSet()->getResultsPerPage(); $numberOfPages = intval($numberOfResults / $resultsPerPage) + ($numberOfResults % $resultsPerPage == 0 ? 0 : 1); $solrGetParameters = GeneralUtility::_GET('tx_solr'); if (!is_array($solrGetParameters)) { $solrGetParameters = array(); } $currentPage = $solrGetParameters['page']; unset($solrGetParameters['page']); $pageBrowserConfiguration = array_merge($solrPageBrowserConfiguration, array('numberOfPages' => $numberOfPages, 'currentPage' => $currentPage, 'extraQueryString' => GeneralUtility::implodeArrayForUrl('tx_solr', $solrGetParameters), 'templateFile' => $this->configuration->getTemplateByFileKey('pagebrowser'))); $pageBrowser = GeneralUtility::makeInstance('ApacheSolrForTypo3\\Solr\\Plugin\\Results\\PageBrowser', $pageBrowserConfiguration, $this->getPageBrowserLabels()); $pageBrowserMarkup = $pageBrowser->render(); } return $pageBrowserMarkup; }
/** * Gets the results for the suggested keywords. * * Conducts a new search using the suggested keywords and uses that search * to render the regular results command. * * @return string The rendered results command for the results of the suggested keywords. */ protected function getSuggestionResults() { $spellChecker = GeneralUtility::makeInstance('ApacheSolrForTypo3\\Solr\\SpellChecker'); $suggestedKeywords = $spellChecker->getCollatedSuggestion(); $suggestionResults = ''; if (empty($suggestedKeywords)) { return $suggestionResults; } $plugin = $this->parentPlugin; $searchResultSetService = $this->parentPlugin->getSearchResultSetService(); // repeat the last search with suggestion as query string $usedRequest = $searchResultSetService->getLastResultSet()->getUsedSearchRequest(); $usedRequest->setRawQueryString($suggestedKeywords); $searchResultSetService->search($usedRequest); $resultsCommand = GeneralUtility::makeInstance('ApacheSolrForTypo3\\Solr\\Plugin\\Results\\ResultsCommand', $plugin); $commandVariables = $resultsCommand->execute(); $suggestionResults = $plugin->renderCommand('results', $commandVariables); return $suggestionResults; }