From 0f7a86d1d23ba171a796ba75b5beff26cc8e46cd Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Wed, 3 Jan 2024 09:10:53 +0000 Subject: [PATCH] resurrect missing changes, fixes #3604 Closes #3604 Merge request studip/studip!2495 --- app/controllers/course/members.php | 1 - app/controllers/course/statusgroups.php | 1 - app/controllers/institute/members.php | 1 - app/controllers/studip_controller.php | 42 +++++++++++++++---------- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php index 5f5a859af02..b6807c59b84 100644 --- a/app/controllers/course/members.php +++ b/app/controllers/course/members.php @@ -1770,7 +1770,6 @@ class Course_MembersController extends AuthenticatedController $filename = _('Teilnehmendenexport') . ' ' . $this->course_title . '.' . $export_format; $this->render_spreadsheet($header, $members, $export_format, $filename); - $this->render_nothing(); } public function toggle_student_mailing_action($state) diff --git a/app/controllers/course/statusgroups.php b/app/controllers/course/statusgroups.php index 826cd07fbf2..02f4579cd40 100644 --- a/app/controllers/course/statusgroups.php +++ b/app/controllers/course/statusgroups.php @@ -362,7 +362,6 @@ class Course_StatusgroupsController extends AuthenticatedController $filename = FileManager::cleanFileName(_('Gruppenliste') . ' ' . $this->course_title . '.' . $export_format); $this->render_spreadsheet($header, $statusgroup_data, $export_format, $filename); - $this->render_nothing(); } /** diff --git a/app/controllers/institute/members.php b/app/controllers/institute/members.php index 5cbefe22de6..1d49012fab7 100644 --- a/app/controllers/institute/members.php +++ b/app/controllers/institute/members.php @@ -566,7 +566,6 @@ class Institute_MembersController extends AuthenticatedController $filename = FileManager::cleanFileName(_('Mitarbeitendenexport') . ' ' . $this->institute->name . ' ' . $faculty . '.' . $export_format); $this->render_spreadsheet($header, $temp, $export_format, $filename); - $this->render_nothing(); } private function setupSidebar() diff --git a/app/controllers/studip_controller.php b/app/controllers/studip_controller.php index 06383ec9cda..7444dba4ce1 100644 --- a/app/controllers/studip_controller.php +++ b/app/controllers/studip_controller.php @@ -803,34 +803,44 @@ abstract class StudipController extends Trails_Controller /** * Export xlsx and csv files via PhpSpreadsheet - * @param $header - * @param $data - * @param $format - * @param $filename - * @param $filepath - * @return void + * * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception */ - public function render_spreadsheet($header, $data, $format, $filename, $filepath = null) - { + public function render_spreadsheet( + array $header, + array $data, + string $format, + string $filename, + ?string $filepath = null + ): void { + $render_to_browser = false; if ($filepath == null) { - $filepath = 'php://output'; + $render_to_browser = true; + $filepath = tempnam($GLOBALS['TMP_PATH'], 'spreadsheet'); } $spreadsheet = new Spreadsheet(); $activeWorksheet = $spreadsheet->getActiveSheet(); - $activeWorksheet->fromArray($header, NULL, 'A1'); - $activeWorksheet->fromArray($data, NULL, 'A2'); + $activeWorksheet->fromArray($header); + $activeWorksheet->fromArray($data, null, 'A2'); - $this->set_content_type('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - $this->response->add_header('Content-Disposition', 'attachment;' . encode_header_parameter('filename', $filename)); - $this->response->add_header('Cache-Control', 'cache, must-revalidate'); - if ($format == 'xlsx') { + if ($format === 'xlsx') { $writer = new Xlsx($spreadsheet); - } else if ($format == 'csv') { + } elseif ($format === 'csv') { $writer = new Csv($spreadsheet); + } else { + throw new Exception("Format {$format} is not supported"); } $writer->save($filepath); + + if ($render_to_browser) { + $this->response->add_header('Cache-Control', 'cache, must-revalidate'); + $this->render_temporary_file( + $filepath, + $filename, + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ); + } } /** -- GitLab