Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 /**
  * @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;
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }