jobRepository = $jobRepository; $this->translatableStringHelper = $translatableStringHelper; } public function addRole(): ?string { return null; } public function alterQuery(QueryBuilder $qb, $data) { if (!in_array('caluser', $qb->getAllAliases(), true)) { $qb->join('cal.mainUser', 'caluser'); } $qb->addSelect('IDENTITY(caluser.userJob) as job_aggregator'); $qb->addGroupBy('job_aggregator'); } public function applyOn(): string { return Declarations::CALENDAR_TYPE; } public function buildForm(FormBuilderInterface $builder) { // no form } public function getFormDefaultData(): array { return []; } public function getLabels($key, array $values, $data): Closure { return function ($value): string { if ('_header' === $value) { return 'Job'; } if (null === $value || '' === $value) { return ''; } $j = $this->jobRepository->find($value); return $this->translatableStringHelper->localize( $j->getLabel() ); }; } public function getQueryKeys($data): array { return ['job_aggregator']; } public function getTitle(): string { return 'Group calendars by agent job'; } }