provider = $provider; } /** * @param DataboxGroupable|PerDataboxRecordId|RecordReference[] $references * @return RecordTechnicalDataSet[] */ public function fetchRecordsTechnicalData($references) { if (!($references instanceof DataboxGroupable && $references instanceof PerDataboxRecordId)) { $references = new RecordReferenceCollection($references); } $sets = []; foreach ($references->getDataboxIds() as $databoxId) { $recordIds = $references->getDataboxRecordIds($databoxId); $setPerRecordId = []; foreach ($this->provider->getRepositoryFor($databoxId)->findByRecordIds($recordIds) as $set) { $setPerRecordId[$set->getRecordId()] = $set; } $sets[$databoxId] = $setPerRecordId; } $reorder = []; foreach ($references as $index => $reference) { $databoxId = $reference->getDataboxId(); $recordId = $reference->getRecordId(); $reorder[$index] = isset($sets[$databoxId][$recordId]) ? $sets[$databoxId][$recordId] : new RecordTechnicalDataSet($recordId); } return $reorder; } }