userJobRepository = $userJobRepository; $this->translatableStringHelper = $translatableStringHelper; } public function addRole(): ?string { return null; } public function alterQuery(QueryBuilder $qb, $data) { if (!in_array('actusers', $qb->getAllAliases(), true)) { $qb->leftJoin('activity.users', 'actusers'); } $qb ->addSelect('IDENTITY(actusers.userJob) AS activity_users_job_aggregator') ->addGroupBy('activity_users_job_aggregator'); } public function applyOn() { return Declarations::ACTIVITY; } public function buildForm(FormBuilderInterface $builder) { // nothing to add in the form } public function getLabels($key, array $values, $data) { return function ($value): string { if ('_header' === $value) { return 'Users \'s job'; } if (null === $value) { return ''; } $j = $this->userJobRepository->find($value); return $this->translatableStringHelper->localize( $j->getLabel() ); }; } public function getQueryKeys($data): array { return ['activity_users_job_aggregator']; } public function getTitle() { return 'Aggregate by users job'; } }