/**
  * Renders the complete facet.
  *
  * @see	Tx_Solr_FacetRenderer::render()
  * @return	string	Rendered HTML representing the facet.
  */
 public function renderFacetOptions()
 {
     $facetOptionLinks = array();
     $solrConfiguration = Tx_Solr_Util::getSolrConfiguration();
     $this->template->workOnSubpart('single_facet_option');
     if (!empty($this->facetConfiguration['manualSortOrder'])) {
         $this->sortFacetOptionsByUserDefinedOrder();
     }
     if (!empty($this->facetConfiguration['reverseOrder'])) {
         $this->facetOptions = array_reverse($this->facetOptions, true);
     }
     $i = 0;
     foreach ($this->facetOptions as $facetOption => $facetOptionResultCount) {
         $facetOption = (string) $facetOption;
         if ($facetOption == '_empty_') {
             // TODO - for now we don't handle facet missing.
             continue;
         }
         $facetOption = t3lib_div::makeInstance('Tx_Solr_Facet_FacetOption', $this->facetName, $facetOption, $facetOptionResultCount);
         /* @var $facetOption Tx_Solr_Facet_FacetOption */
         $facetLinkBuilder = t3lib_div::makeInstance('Tx_Solr_Facet_LinkBuilder', $this->query, $this->facetName, $facetOption);
         /* @var $facetLinkBuilder Tx_Solr_Facet_LinkBuilder */
         $facetLinkBuilder->setLinkTargetPageId($this->linkTargetPageId);
         $optionText = $facetOption->render();
         $optionLink = $facetLinkBuilder->getAddFacetOptionLink($optionText);
         $optionLinkUrl = $facetLinkBuilder->getAddFacetOptionUrl();
         $optionHidden = '';
         if (++$i > $solrConfiguration['search.']['faceting.']['limit']) {
             $optionHidden = 'tx-solr-facet-hidden';
         }
         $optionSelected = $facetOption->isSelectedInFacet($this->facetName);
         // negating the facet option links to remove a filter
         if ($this->facetConfiguration['selectingSelectedFacetOptionRemovesFilter'] && $optionSelected) {
             $optionLink = $facetLinkBuilder->getRemoveFacetOptionLink($optionText);
             $optionLinkUrl = $facetLinkBuilder->getRemoveFacetOptionUrl();
         } elseif ($this->facetConfiguration['singleOptionMode']) {
             $optionLink = $facetLinkBuilder->getReplaceFacetOptionLink($optionText);
             $optionLinkUrl = $facetLinkBuilder->getReplaceFacetOptionUrl();
         }
         $facetOptionLinks[] = array('hidden' => $optionHidden, 'link' => $optionLink, 'url' => $optionLinkUrl, 'text' => $optionText, 'value' => $facetOption->getValue(), 'count' => $facetOption->getNumberOfResults(), 'selected' => $optionSelected ? '1' : '0', 'facet_name' => $this->facetName);
     }
     $this->template->addLoop('facet_links', 'facet_link', $facetOptionLinks);
     return $this->template->render();
 }
Example #2
0
 /**
  * Prepares the content for the last search markers
  *
  * @return	array	An array with content for the last search markers
  */
 protected function getLastSearches()
 {
     $lastSearchesKeywords = array();
     switch ($this->configuration['search.']['lastSearches.']['mode']) {
         case 'user':
             $lastSearchesKeywords = $this->getLastSearchesFromSession();
             break;
         case 'global':
             $lastSearchesKeywords = $this->getLastSearchesFromDatabase($this->configuration['search.']['lastSearches.']['limit']);
             break;
     }
     // fill array for output
     $i = 0;
     $lastSearches = array();
     foreach ($lastSearchesKeywords as $keywords) {
         if (++$i > $this->configuration['search.']['lastSearches.']['limit']) {
             break;
         }
         $keywords = stripslashes($keywords);
         $lastSearches[] = array('q' => Tx_Solr_Template::escapeMarkers($keywords), 'parameters' => '&q=' . html_entity_decode($keywords, ENT_NOQUOTES, 'UTF-8'), 'pid' => $this->parentPlugin->getLinkTargetPageId());
     }
     return $lastSearches;
 }
Example #3
0
 /**
  * Post initialization of the template engine, adding some Solr variables.
  *
  * @see Tx_Solr_pluginbase_PluginBase#postInitializeTemplate($template)
  * @param Tx_Solr_Template $template The template object as initialized thus far.
  * @return Tx_Solr_Template The modified template instance with additional variables available for rendering.
  */
 protected function postInitializeTemplateEngine($template)
 {
     $template->addVariable('tx_solr', $this->getSolrVariables());
     return $template;
 }
 /**
  * Gets the user's query term and cleans it so that it can be used in
  * templates f.e.
  *
  * @return string The cleaned user query.
  */
 public function getCleanUserQuery()
 {
     $userQuery = $this->getRawUserQuery();
     if (!is_null($userQuery)) {
         $userQuery = Tx_Solr_Query::cleanKeywords($userQuery);
     }
     // escape triple hashes as they are used in the template engine
     // TODO remove after switching to fluid templates
     $userQuery = Tx_Solr_Template::escapeMarkers($userQuery);
     return $userQuery;
 }
 /**
  * Builds the properties for the frequent search term markers.
  *
  * @param array $frequentSearchTerms Frequent search terms as array with terms as keys and hits as the value
  * @return array An array with content for the frequent terms markers
  */
 protected function getSearchTermMarkerProperties(array $frequentSearchTerms)
 {
     $frequentSearches = array();
     $minimumSize = $this->configuration['search.']['frequentSearches.']['minSize'];
     $maximumSize = $this->configuration['search.']['frequentSearches.']['maxSize'];
     if (count($frequentSearchTerms)) {
         $maximumHits = max(array_values($frequentSearchTerms));
         $minimumHits = min(array_values($frequentSearchTerms));
         $spread = $maximumHits - $minimumHits;
         $step = $spread == 0 ? 1 : ($maximumSize - $minimumSize) / $spread;
         foreach ($frequentSearchTerms as $term => $hits) {
             $size = round($minimumSize + ($hits - $minimumHits) * $step);
             $frequentSearches[] = array('term' => Tx_Solr_Template::escapeMarkers($term), 'hits' => $hits, 'style' => 'font-size: ' . $size . 'px', 'class' => 'tx-solr-frequent-term-' . $size, 'parameters' => '&q=' . html_entity_decode($term, ENT_NOQUOTES, 'UTF-8'), 'pid' => $this->parentPlugin->getLinkTargetPageId());
         }
     }
     return $frequentSearches;
 }
Example #6
0
 /**
  * Helper method to escape/encode keywords for use in HTML
  *
  * @param string $keywords Keywords to prepare for use in HTML
  * @return string Encoded keywords
  */
 public static function cleanKeywords($keywords)
 {
     $keywords = trim($keywords);
     $keywords = t3lib_div::removeXSS($keywords);
     $keywords = htmlentities($keywords, ENT_QUOTES, $GLOBALS['TSFE']->metaCharset);
     // escape triple hashes as they are used in the template engine
     // TODO remove after switching to fluid templates
     $keywords = Tx_Solr_Template::escapeMarkers($keywords);
     return $keywords;
 }
 /**
  * takes a search result document and processes its fields according to the
  * instructions configured in TS. Currently available instructions are
  * 	* timestamp - converts a date field into a unix timestamp
  * 	* serialize - uses serialize() to encode multivalue fields which then can be put out using the MULTIVALUE view helper
  * 	* skip - skips the whole field so that it is not available in the result, usefull for the spell field f.e.
  * The default is to do nothing and just add the document's field to the
  * resulting array.
  *
  * @param	Apache_Solr_Document	$document the Apache_Solr_Document result document
  * @return	array	An array with field values processed like defined in TS
  */
 protected function processDocumentFieldsToArray(Apache_Solr_Document $document)
 {
     $processingInstructions = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_solr.']['search.']['results.']['fieldProcessingInstructions.'];
     $availableFields = $document->getFieldNames();
     $result = array();
     foreach ($availableFields as $fieldName) {
         $processingInstruction = $processingInstructions[$fieldName];
         // TODO switch to field processors
         // TODO allow to have multiple (commaseparated) instructions for each field
         switch ($processingInstruction) {
             case 'timestamp':
                 $processedFieldValue = Tx_Solr_Util::isoToTimestamp($document->{$fieldName});
                 break;
             case 'serialize':
                 if (!empty($document->{$fieldName})) {
                     $processedFieldValue = serialize($document->{$fieldName});
                 } else {
                     $processedFieldValue = '';
                 }
                 break;
             case 'skip':
                 continue 2;
             default:
                 $processedFieldValue = $document->{$fieldName};
         }
         // escape markers in document fields
         // TODO remove after switching to fluid templates
         $processedFieldValue = Tx_Solr_Template::escapeMarkers($processedFieldValue);
         $result[$fieldName] = $processedFieldValue;
     }
     return $result;
 }