aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2024-01-03 09:10:53 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2024-01-03 09:10:53 +0000
commit0f7a86d1d23ba171a796ba75b5beff26cc8e46cd (patch)
tree323b6001822124a190a55badc2bbd5ce566cf430
parentd0911bbc9929a4d09ee5b0d1d111fad9a27bce3e (diff)
resurrect missing changes, fixes #3604
Closes #3604 Merge request studip/studip!2495
-rw-r--r--app/controllers/course/members.php1
-rw-r--r--app/controllers/course/statusgroups.php1
-rw-r--r--app/controllers/institute/members.php1
-rw-r--r--app/controllers/studip_controller.php42
4 files changed, 26 insertions, 19 deletions
diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php
index 5f5a859..b6807c5 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 826cd07..02f4579 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 5cbefe2..1d49012 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 06383ec..7444dba 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'
+ );
+ }
}
/**