twig = $twig; $this->dispatcher = $dispatcher; } /** * @param MetaDisplayEventInterface $event * @return MetaTableTypeInterface[] */ protected function findMetaColumns(MetaDisplayEventInterface $event): array { $this->dispatcher->dispatch($event); return $event->getFields(); } /** * @param Timesheet[] $timesheets * @param TimesheetQuery $query * @return Response * @throws \Twig\Error\LoaderError * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError */ public function render(array $timesheets, TimesheetQuery $query): Response { $timesheetMetaFields = $this->findMetaColumns(new TimesheetMetaDisplayEvent($query, TimesheetMetaDisplayEvent::EXPORT)); $customerMetaFields = $this->findMetaColumns(new CustomerMetaDisplayEvent($query, CustomerMetaDisplayEvent::EXPORT)); $projectMetaFields = $this->findMetaColumns(new ProjectMetaDisplayEvent($query, ProjectMetaDisplayEvent::EXPORT)); $activityMetaFields = $this->findMetaColumns(new ActivityMetaDisplayEvent($query, ActivityMetaDisplayEvent::EXPORT)); $event = new UserPreferenceDisplayEvent(UserPreferenceDisplayEvent::EXPORT); $this->dispatcher->dispatch($event); $userPreferences = $event->getPreferences(); $content = $this->twig->render('export/renderer/default.html.twig', [ 'entries' => $timesheets, 'query' => $query, 'summaries' => $this->calculateSummary($timesheets), 'timesheetMetaFields' => $timesheetMetaFields, 'customerMetaFields' => $customerMetaFields, 'projectMetaFields' => $projectMetaFields, 'activityMetaFields' => $activityMetaFields, 'userPreferences' => $userPreferences, ]); $response = new Response(); $response->setContent($content); return $response; } /** * @return string */ public function getId(): string { return 'html'; } /** * @return string */ public function getIcon(): string { return 'print'; } /** * @return string */ public function getTitle(): string { return 'print'; } }