aboutsummaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorThomas Hackl <hackl@data-quest.de>2025-10-01 14:33:20 +0200
committerThomas Hackl <hackl@data-quest.de>2025-10-01 14:33:20 +0200
commit97abcd222884db2dddb88889e253663082e759f5 (patch)
tree82e7390e049b50c450649671ef5e1d99df2d1dee /app/controllers
parentc1a659702122401c9c197aa5fb64d62767c4dead (diff)
Resolve "RTF-Export als Word-Dokument wiederbeleben"
Closes #5887 Merge request studip/studip!4489
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/course/members.php52
-rw-r--r--app/controllers/course/statusgroups.php44
2 files changed, 89 insertions, 7 deletions
diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php
index adeb4a8..d016862 100644
--- a/app/controllers/course/members.php
+++ b/app/controllers/course/members.php
@@ -15,6 +15,9 @@
* @since 2.5
*/
+use PhpOffice\PhpWord\PhpWord;
+use Services\Export\CourseMemberService;
+
require_once 'lib/messaging.inc.php'; //Funktionen des Nachrichtensystems
class Course_MembersController extends AuthenticatedController
@@ -1766,7 +1769,7 @@ class Course_MembersController extends AuthenticatedController
$widget->addLink(
_('Als Excel-Datei exportieren'),
- URLHelper::getURL('dispatch.php/course/members/export', [
+ $this->exportURL([
'course_id' => $this->course_id,
'format' => 'xlsx',
]),
@@ -1775,17 +1778,25 @@ class Course_MembersController extends AuthenticatedController
$widget->addLink(
_('Als CSV-Datei exportieren'),
- URLHelper::getURL('dispatch.php/course/members/export', [
+ $this->exportURL([
'course_id' => $this->course_id,
'format' => 'csv',
]),
Icon::create('export')
);
+ $widget->addLink(
+ _('Als Word-Datei exportieren'),
+ $this->export_wordURL([
+ 'course_id' => $this->course_id
+ ]),
+ Icon::create('export')
+ );
+
if (count($this->awaiting) > 0) {
$widget->addLink(
_('Warteliste als Excel-Datei exportieren'),
- URLHelper::getURL('dispatch.php/course/members/export', [
+ $this->exportURL([
'course_id' => $this->course_id,
'format' => 'xlsx',
'status' => $this->waiting_type,
@@ -1794,13 +1805,22 @@ class Course_MembersController extends AuthenticatedController
);
$widget->addLink(
_('Warteliste als CSV-Datei exportieren'),
- URLHelper::getURL('dispatch.php/course/members/export', [
+ $this->exportURL([
'course_id' => $this->course_id,
'format' => 'csv',
'status' => $this->waiting_type,
]),
Icon::create('export')
);
+
+ $widget->addLink(
+ _('Als Word-Datei exportieren'),
+ $this->export_wordURL([
+ 'course_id' => $this->course_id,
+ 'status' => $this->waiting_type
+ ]),
+ Icon::create('export')
+ );
}
}
@@ -1840,12 +1860,34 @@ class Course_MembersController extends AuthenticatedController
}
}
+ /**
+ * Handles the export of the course member list as a Word document.
+ *
+ * @return void
+ * @throws \PhpOffice\PhpWord\Exception\Exception
+ */
+ public function export_word_action(): void
+ {
+ $status = Request::get('status', '');
+ $course = Course::findCurrent();
+
+ $file = new CourseMemberService($course, $status);
+ $file->save();
+
+ $this->response->add_header('Cache-Control', 'cache, must-revalidate');
+ $this->render_temporary_file(
+ $file->getFilePath(),
+ $file->getFilename(),
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ );
+ }
+
public function export_action()
{
$export_format = Request::get('format');
$status = Request::get('status');
- if ($export_format !== 'csv' && $export_format !== 'xlsx') {
+ if (!in_array($export_format, ['csv', 'xlsx'])) {
throw new Exception('Wrong format');
}
$header = [
diff --git a/app/controllers/course/statusgroups.php b/app/controllers/course/statusgroups.php
index 7b0a62c..f768f9e 100644
--- a/app/controllers/course/statusgroups.php
+++ b/app/controllers/course/statusgroups.php
@@ -247,7 +247,7 @@ class Course_StatusgroupsController extends AuthenticatedController
$export = new ExportWidget();
$export->addLink(
_('Als Excel-Datei exportieren'),
- URLHelper::getURL('dispatch.php/course/statusgroups/export', [
+ $this->exportURL([
'course_id' => $this->course_id,
'format' => 'xlsx',
]),
@@ -256,7 +256,26 @@ class Course_StatusgroupsController extends AuthenticatedController
$export->addLink(
_('Als CSV-Datei exportieren'),
- URLHelper::getURL('dispatch.php/course/statusgroups/export', [
+ $this->exportURL([
+ 'course_id' => $this->course_id,
+ 'format' => 'csv',
+ ]),
+ Icon::create('export')
+ );
+
+ $export->addLink(
+ _('Als CSV-Datei exportieren'),
+ $this->exportURL([
+ 'course_id' => $this->course_id,
+ 'format' => 'csv',
+ ]),
+ Icon::create('export')
+ );
+
+
+ $export->addLink(
+ _('Als Word-Datei exportieren'),
+ $this->export_wordURL([
'course_id' => $this->course_id,
'format' => 'csv',
]),
@@ -292,6 +311,27 @@ class Course_StatusgroupsController extends AuthenticatedController
}
/**
+ * Handles the export of the course member list as a Word document.
+ *
+ * @return void
+ * @throws \PhpOffice\PhpWord\Exception\Exception
+ */
+ public function export_word_action(): void
+ {
+ $course = Course::findCurrent();
+
+ $file = new \Services\Export\StatusGroupsService($course);
+ $file->save();
+
+ $this->response->add_header('Cache-Control', 'cache, must-revalidate');
+ $this->render_temporary_file(
+ $file->getFilePath(),
+ $file->getFilename(),
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ );
+ }
+
+ /**
*
*/
public function export_action()