/** * {@inheritdoc} */ public function resolve(RequestInterface $request, array $documentIds) { $data = $this->config->get($request->getName()); $bucketKeys = isset($data['aggregations']) ? array_keys($data['aggregations']) : []; $attributeCodes = $this->getApplicableAttributeCodes($documentIds); $resolvedAggregation = array_filter($request->getAggregation(), function ($bucket) use($attributeCodes, $bucketKeys) { /** @var BucketInterface $bucket */ return in_array($bucket->getField(), $attributeCodes) || in_array($bucket->getName(), $bucketKeys); }); return array_values($resolvedAggregation); }
/** * @param RequestInterface $request * @param Table $documentsTable * @return array */ private function processAggregations(RequestInterface $request, Table $documentsTable) { $aggregations = []; $buckets = $request->getAggregation(); $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; }