Ejemplo n.º 1
0
 /**
  * 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, useful 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 = $this->configuration->getSearchResultsFieldProcessingInstructionsConfiguration();
     $availableFields = $document->getFieldNames();
     $result = array();
     foreach ($availableFields as $fieldName) {
         $processingInstruction = $processingInstructions[$fieldName];
         // TODO switch to field processors
         // TODO allow to have multiple (comma-separated) instructions for each field
         switch ($processingInstruction) {
             case 'timestamp':
                 $processedFieldValue = 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 = Template::escapeMarkers($processedFieldValue);
         $result[$fieldName] = $processedFieldValue;
     }
     return $result;
 }