dataProviderContainer = $dataProviderContainer; $this->aggregationContainer = $aggregationContainer; $this->entityMetadata = $entityMetadata; $this->resource = $resource; $this->aggregationResolver = $aggregationResolver; } /** * Build aggregations. * * @param RequestInterface $request * @param Table $documentsTable * @param array $documents * @return array */ public function build(RequestInterface $request, Table $documentsTable, array $documents = []) { return $this->processAggregations($request, $documentsTable, $documents); } /** * Process aggregations. * * @param RequestInterface $request * @param Table $documentsTable * @param array $documents * @return array */ private function processAggregations(RequestInterface $request, Table $documentsTable, $documents) { $aggregations = []; $documentIds = $documents ? $this->extractDocumentIds($documents) : $this->getDocumentIds($documentsTable); $buckets = $this->aggregationResolver->resolve($request, $documentIds); $dataProvider = $this->dataProviderContainer->get($request->getIndex()); foreach ($buckets as $bucket) { $aggregationBuilder = $this->aggregationContainer->get($bucket->getType()); $aggregations[$bucket->getName()] = $aggregationBuilder->build( $dataProvider, $request->getDimensions(), $bucket, $documentsTable ); } return $aggregations; } /** * Extract document ids. * * @param array $documents * @return array */ private function extractDocumentIds(array $documents) { return $documents ? array_keys($documents) : []; } /** * Get document ids. * * @param Table $documentsTable * @return array * @deprecated 100.1.0 Added for backward compatibility */ private function getDocumentIds(Table $documentsTable) { $select = $this->getConnection() ->select() ->from($documentsTable->getName(), TemporaryStorage::FIELD_ENTITY_ID); return $this->getConnection()->fetchCol($select); } /** * Get Connection. * * @return AdapterInterface */ private function getConnection() { return $this->resource->getConnection(); } }