From b7562e74b0c97ebb8c3840720447ddd34a383fd5 Mon Sep 17 00:00:00 2001
From: Elke Kreim <elke.kreim@hs-hannover.de>
Date: Fri, 7 Feb 2025 17:35:35 +0100
Subject: [PATCH] Replace special characters in filename

---
 classes/local/exporter.php | 17 +++--------------
 export.php                 |  5 ++---
 2 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/classes/local/exporter.php b/classes/local/exporter.php
index acaa32d..3ef3581 100644
--- a/classes/local/exporter.php
+++ b/classes/local/exporter.php
@@ -37,8 +37,6 @@ class exporter {
     private int $courseid;
     /** @var string Identifier for the evaluation of a course. */
     private string $code;
-    /** @var string identifier for the course. */
-    private string $codereplacement;
     /** @var int[] Array of role ids. */
     private array $roles;
     /** @var string Name of the file to download. */
@@ -54,10 +52,9 @@ class exporter {
      * @param string $codereplacement
      * @param array $roles
      */
-    public function __construct($courseid=0, $code=null, $codereplacement=null, $roles=[]) {
+    public function __construct($courseid=0, $code=null, $roles=[]) {
         $this->courseid = $this->set_courseid($courseid);
         $this->code = $code;
-        $this->codereplacement = $codereplacement;
         $this->roles = $this->set_roles($roles);
         $this->filename = $this->set_filename();
         $this->content = $this->set_content();
@@ -97,14 +94,6 @@ class exporter {
         return \csv_export_writer::print_array($rows, $delimiter, '"', true);
     }
 
-    private function get_base_filename() {
-        $base = $this->code;
-        if (!$base) {
-            $base = str_replace(',', '-', $this->codereplacement);
-        }
-        return $base;
-    }
-
     /**
      * Create filename.
      *
@@ -116,8 +105,8 @@ class exporter {
      */
     private function set_filename() {
 
-        // Use course shortname if no course code is given.
-        $filename = $this->get_base_filename();
+        // Replace special characters with '-' to create a "clean" filename.
+        $filename = preg_replace("/[^A-Za-z0-9_-]/", '-', $this->code);
         // Extend filename with prefix and timestamp.
         $filename = $this->add_prefix($filename);
         $filename = $this->add_timestamp($filename);
diff --git a/export.php b/export.php
index d75c691..b0b3ce5 100644
--- a/export.php
+++ b/export.php
@@ -62,10 +62,9 @@ if ($mform->is_cancelled()) {
     redirect($returnurl);
 } else if ($formdata) {
     $courseid = $formdata->courseid;
-    $code = $formdata->coursecode;
-    $codereplacement = $course->shortname;
+    $code = $formdata->coursecode ? $formdata->coursecode : $course->shortname;
     $roles = $formdata->roles;
-    $exporter = new exporter($courseid, $code, $codereplacement, $roles);
+    $exporter = new exporter($courseid, $code, $roles);
     $exporter->send_file();
 } else {
     $mform->set_data($formdata);
-- 
GitLab