public function testClearReturnsDocumentToDefaultState() { // set the document boost $this->_fixture->setBoost(0.5); // set a field $this->_fixture->someField = "some value"; // clear the document to remove boost and fields $this->_fixture->clear(); // document boost should now be false $this->assertFalse($this->_fixture->getBoost()); // document fields should now be empty $this->assertEquals(0, count($this->_fixture->getFieldNames())); $this->assertEquals(0, count($this->_fixture->getFieldValues())); $this->assertEquals(0, count($this->_fixture->getFieldBoosts())); // document iterator should now be empty $this->assertEquals(0, iterator_count($this->_fixture)); }
/** * 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; }
/** * 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 * * utf8Decode - decodes utf8 * * 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': $parsedTime = strptime($document->{$fieldName}, '%Y-%m-%dT%H:%M:%SZ'); $processedFieldValue = mktime($parsedTime['tm_hour'], $parsedTime['tm_min'], $parsedTime['tm_sec'], $parsedTime['tm_mon'] + 1, $parsedTime['tm_mday'], $parsedTime['tm_year'] + 1900); break; case 'utf8Decode': $processedFieldValue = $this->utf8Decode($document->{$fieldName}); break; case 'skip': continue 2; default: $processedFieldValue = $document->{$fieldName}; } $result[$fieldName] = $processedFieldValue; } return $result; }
/** * 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; }