diff options
| author | Thomas Hackl <hackl@data-quest.de> | 2025-10-01 14:33:20 +0200 |
|---|---|---|
| committer | Thomas Hackl <hackl@data-quest.de> | 2025-10-01 14:33:20 +0200 |
| commit | 97abcd222884db2dddb88889e253663082e759f5 (patch) | |
| tree | 82e7390e049b50c450649671ef5e1d99df2d1dee /app | |
| parent | c1a659702122401c9c197aa5fb64d62767c4dead (diff) | |
Resolve "RTF-Export als Word-Dokument wiederbeleben"
Closes #5887
Merge request studip/studip!4489
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/course/members.php | 52 | ||||
| -rw-r--r-- | app/controllers/course/statusgroups.php | 44 |
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() |
