/** * 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; }