/** * {@inheritDoc} */ public function visitResult(DatagridConfiguration $config, ResultsObject $result) { $rows = $result->offsetGetByPath('[data]'); $rows = is_array($rows) ? $rows : []; $rows = array_map(function (ResultRecordInterface $record) { if ($rootEntity = $record->getRootEntity()) { return $rootEntity; } $entityName = $record->getValue('entityName'); $recordId = $record->getValue('recordId'); if ($entityName && $recordId) { return new ResultItem($this->em, $entityName, $recordId, null, null, null, $this->mapper->getEntityConfig($entityName)); } return null; }, $rows); $entities = $this->resultFormatter->getResultEntities($rows); $resultRows = []; /** @var ResultItem $item */ foreach ($rows as $item) { $entityName = $item->getEntityName(); $entityId = $item->getRecordId(); if (!isset($entities[$entityName][$entityId])) { continue; } $entity = $entities[$entityName][$entityId]; $this->dispatcher->dispatch(PrepareResultItemEvent::EVENT_NAME, new PrepareResultItemEvent($item, $entity)); $resultRows[] = new ResultRecord(['entity' => $entity, 'indexer_item' => $item]); } // set results $result->offsetSet('data', $resultRows); }
/** * {@inheritdoc} */ public function visitResult(DatagridConfiguration $config, ResultsObject $result) { $rows = $result->offsetGetByPath('[data]'); if (!is_array($rows)) { throw new UnexpectedTypeException($rows, 'array'); } $mappingConfig = $this->mapper->getMappingConfig(); $rows = array_map(function (ResultRecordInterface $record) use($mappingConfig) { $entityClass = $record->getValue('entityName'); $entityId = $record->getValue('recordId'); $entityConfig = array_key_exists($entityClass, $mappingConfig) ? $entityConfig = $this->mapper->getEntityConfig($entityClass) : []; return new ResultItem($this->em, $entityClass, $entityId, null, null, $entityConfig); }, $rows); $entities = $this->resultFormatter->getResultEntities($rows); $resultRows = []; /** @var ResultItem $item */ foreach ($rows as $item) { $entityClass = $item->getEntityName(); $entityId = $item->getRecordId(); $entity = $entities[$entityClass][$entityId]; $this->dispatcher->dispatch(PrepareResultItemEvent::EVENT_NAME, new PrepareResultItemEvent($item, $entity)); $resultRows[] = new ResultRecord(['entity' => $entity, 'indexer_item' => $item]); } $result->offsetSet('data', $resultRows); }
public function testGetOrderedResultEntities() { $this->prepareEntityManager(); $this->prepareStubEntities(); /** @var $indexer Indexer */ $indexer = $this->getMock('Oro\\Bundle\\SearchBundle\\Engine\\Indexer', array(), array(), '', false); $indexerRows = $this->getIndexerRows(); $resultFormatter = new ResultFormatter($this->entityManager, $indexer); $actualResult = $resultFormatter->getOrderedResultEntities($indexerRows); $expectedResult = $this->getOrderedEntities(); $this->assertEquals($expectedResult, $actualResult); }