public static function hydrate(array $hit, $position) { $data = $hit['_source']; $highlight = isset($hit['highlight']) ? $hit['highlight'] : []; // Strip field prefix $private_prefix = 'private_'; $prefix = 'caption.'; foreach ($highlight as $key => $value) { unset($highlight[$key]); if (substr($key, 0, strlen($private_prefix)) === $private_prefix) { $key = substr($key, strlen($private_prefix)); } if (substr($key, 0, strlen($prefix)) == $prefix) { $key = substr($key, strlen($prefix)); } $highlight[$key] = $value; } $record = new ElasticsearchRecord(); $record->setPosition($position); $record->setBaseId(igorw\get_in($data, ['base_id'], 0)); $record->setCollectionName(igorw\get_in($data, ['collection_name'], null)); $record->setCollectionId(igorw\get_in($data, ['collection_id'], 0)); $createdOn = igorw\get_in($data, ['created_on']); $record->setCreated($createdOn ? new \DateTime($createdOn) : $createdOn); $record->setDataboxId(igorw\get_in($data, ['databox_id'], 0)); $record->setIsStory(igorw\get_in($data, ['record_type']) === 'story'); $record->setMimeType(igorw\get_in($data, ['mime'], 'application/octet-stream')); $record->setOriginalName(igorw\get_in($data, ['original_name'], '')); $record->setRecordId(igorw\get_in($data, ['record_id'], 0)); $record->setSha256(igorw\get_in($data, ['sha256'], '')); $record->setType(igorw\get_in($data, ['type'], 'unknown')); $updatedOn = igorw\get_in($data, ['updated_on']); $record->setUpdated($updatedOn ? new \DateTime($updatedOn) : $updatedOn); $record->setUuid(igorw\get_in($data, ['uuid'], '')); $record->setStatusBitField(igorw\get_in($data, ['flags_bitfield'], 0)); $record->setTitles((array) igorw\get_in($data, ['title'], [])); $record->setCaption((array) igorw\get_in($data, ['caption'], [])); $record->setPrivateCaption((array) igorw\get_in($data, ['private_caption'], [])); $record->setExif((array) igorw\get_in($data, ['exif'], [])); $record->setSubdefs((array) igorw\get_in($data, ['subdefs'], [])); $record->setFlags((array) igorw\get_in($data, ['flags'], [])); $record->setHighlight((array) $highlight); return $record; }
/** * @param \record_adapter $record * @return \Alchemy\Phrasea\Application */ protected function mockElasticsearchResult(\record_adapter $record) { $app = $this->getApplication(); $elasticsearchRecord = new ElasticsearchRecord(); $elasticsearchRecord->setDataboxId($record->get_sbas_id()); $elasticsearchRecord->setRecordId($record->get_record_id()); $result = new SearchEngineResult(new ArrayCollection([$elasticsearchRecord]), '', 0, 0, 1, 1, 0, 0, new ArrayCollection(), null, null); $searchEngine = $this->prophesize(SearchEngineInterface::class); $searchEngine->query('', 0, Argument::any(), Argument::any())->willReturn($result); $searchEngine->excerpt(Argument::any(), Argument::any(), Argument::any(), Argument::any())->willReturn([]); $app['search_engine'] = $searchEngine->reveal(); return $app; }