translator = $translator; } public function addRole(): ?string { return null; } public function alterQuery(QueryBuilder $qb, $data) { $qb->addSelect('cal.urgent AS urgency_aggregator'); $groupBy = $qb->getDQLPart('groupBy'); if (!empty($groupBy)) { $qb->addGroupBy('urgency_aggregator'); } else { $qb->groupBy('urgency_aggregator'); } } public function applyOn(): string { return Declarations::CALENDAR_TYPE; } public function buildForm(FormBuilderInterface $builder) { // no form } public function getLabels($key, array $values, $data): Closure { return function ($value): string { if ('_header' === $value) { return 'Urgency'; } switch ($value) { case true: return $this->translator->trans('is urgent'); case false: return $this->translator->trans('is not urgent'); default: throw new LogicException(sprintf('The value %s is not valid', $value)); } }; } public function getQueryKeys($data): array { return ['urgency_aggregator']; } public function getTitle(): string { return 'Group calendars by urgency'; } }