aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/admin
diff options
context:
space:
mode:
authorElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2025-03-21 15:55:27 +0000
committerElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2025-03-21 15:55:27 +0000
commit1184752084f6914a320060de6a9993caced447a7 (patch)
treedc4b54f20e5c32fc2e1b5e5a3dea95f28f0247d2 /app/controllers/admin
parentcea11a881bf6e2a46ac78fd0b1cfe236703783ef (diff)
move batch_export_members to the correct controller, fixes #5395 and #5396
Closes #5395 and #5396 Merge request studip/studip!4057
Diffstat (limited to 'app/controllers/admin')
-rw-r--r--app/controllers/admin/courses.php75
-rw-r--r--app/controllers/admin/user.php86
2 files changed, 71 insertions, 90 deletions
diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php
index b01cfa1..6c0b16b 100644
--- a/app/controllers/admin/courses.php
+++ b/app/controllers/admin/courses.php
@@ -481,7 +481,7 @@ class Admin_CoursesController extends AuthenticatedController
$data['buttons_bottom'] = (string) \Studip\Button::createAccept(
_('Teilnehmendenexport'), 'batch_export_members',
[
- 'formaction' => URLHelper::getURL('dispatch.php/admin/user/batch_export_members'),
+ 'formaction' => URLHelper::getURL('dispatch.php/admin/courses/batch_export_members'),
'data-dialog' => 'size=big'
]);
break;
@@ -841,7 +841,7 @@ class Admin_CoursesController extends AuthenticatedController
$d['action'] = $template->render();
break;
case 22: //Masssenexport Teilnehmendendaten
- $template = $tf->open('admin/courses/batch_export_members');
+ $template = $tf->open('admin/courses/export_members');
$template->course = $course;
$d['action'] = $template->render();
break;
@@ -1330,6 +1330,73 @@ class Admin_CoursesController extends AuthenticatedController
$this->notice = $course->config->COURSE_ADMIN_NOTICE;
}
+ public function batch_export_members_action()
+ {
+ PageLayout::setTitle(_('Teilnehmendendaten exportieren'));
+
+ $courseIds = Request::optionArray('export_members');
+ $order = Config::get()->IMPORTANT_SEMNUMBER
+ ? "ORDER BY `VeranstaltungsNummer`, `Name`"
+ : "ORDER BY `Name`";
+ $this->courses = Course::findMany($courseIds, $order);
+
+ // check if at least one course was selected (this can only happen from admin courses overview):
+ if (count($this->courses) === 0) {
+ PageLayout::postWarning('Es wurde keine Veranstaltung gewählt.');
+ $this->relocate('admin/courses');
+ }
+ }
+
+ /*
+ * Export member data of all selected courses
+ */
+ public function do_batch_export_action()
+ {
+ if (Request::submitted('xlsx')) {
+ $export_format = 'xlsx';
+ } else if (Request::submitted('csv')) {
+ $export_format = 'csv';
+ } else {
+ PageLayout::postError('Nicht unterstütztes Exportformat.');
+ $this->relocate('admin/courses');
+ }
+
+ $tmp_folder = $GLOBALS['TMP_PATH'] . '/temp_folder_' . md5(uniqid());
+ mkdir($tmp_folder);
+
+ $courses = Course::findMany(Request::optionArray('courses'));
+ $header = [
+ _('Status'),
+ _('Anrede'),
+ _('Titel'),
+ _('Vorname'),
+ _('Nachname'),
+ _('Titel nachgestellt'),
+ _('Benutzername'),
+ _('Adresse'),
+ _('Telefonnr.'),
+ _('E-Mail'),
+ _('Anmeldedatum'),
+ _('Matrikelnummer'),
+ _('Studiengänge'),
+ _('Position'),
+ ];
+ foreach ($courses as $course) {
+ if ($GLOBALS['perm']->have_studip_perm('dozent', $course->id)) {
+ $members = $course->getMembersData();
+
+ $filename = FileManager::cleanFileName('Teilnehmendenexport ' . $course->Name . '.' . $export_format);
+ $filepath = $tmp_folder . '/'. $filename;
+
+ $this->render_spreadsheet($header, $members, $export_format, $filename, $filepath);
+ }
+ }
+ $archive_file_path = $GLOBALS['TMP_PATH'] . '/archiv.zip';
+ $archive_filename = 'Export_Teilnehmendendaten.zip';
+ FileArchiveManager::createArchiveFromPhysicalFolder($tmp_folder, $archive_file_path);
+ rmdirr($tmp_folder);
+ $this->render_temporary_file($archive_file_path, $archive_filename, 'application/zip');
+ }
/**
* Return a specifically action or all available actions
@@ -1440,10 +1507,10 @@ class Admin_CoursesController extends AuthenticatedController
22 => [
'name' => _('Teilnehmendenexport'),
'title' => _('Teilnehmendenexport'),
- 'url' => 'dispatch.php/admin/user/batch_export_members',
+ 'url' => 'dispatch.php/admin/courses/batch_export_members',
'dialogform' => true,
'multimode' => true,
- 'partial' => 'batch_export_members.php'
+ 'partial' => 'export_members.php'
],
23 => [
diff --git a/app/controllers/admin/user.php b/app/controllers/admin/user.php
index 9a61059..b8a67dd 100644
--- a/app/controllers/admin/user.php
+++ b/app/controllers/admin/user.php
@@ -16,10 +16,6 @@
* @since 2.1
*/
-use PhpOffice\PhpSpreadsheet\Spreadsheet;
-use PhpOffice\PhpSpreadsheet\Writer\Csv;
-use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-
require_once 'vendor/email_message/blackhole_message.php';
require_once 'lib/statusgruppe.inc.php';
@@ -1662,88 +1658,6 @@ class Admin_UserController extends AuthenticatedController
$this->redirect($this->show_user_coursesURL($user));
}
- public function batch_export_members_action()
- {
- PageLayout::setTitle(_('Teilnehmendendaten exportieren'));
-
- $courseIds = Request::optionArray('export_members');
- $order = Config::get()->IMPORTANT_SEMNUMBER
- ? "ORDER BY `VeranstaltungsNummer`, `Name`"
- : "ORDER BY `Name`";
- $this->courses = array_filter(
- Course::findMany($courseIds, $order),
- function (Course $course): bool {
- /*
- * Check if sem_tree entries are allowed and may be changed and remove all courses
- * where this is not the case.
- */
- return !LockRules::Check($course->id, 'sem_tree', 'sem')
- && $course->getSemClass()['bereiche'];
- }
- );
-
- // check if at least one course was selected (this can only happen from admin courses overview):
- if (count($this->courses) === 0) {
- PageLayout::postWarning('Es wurde keine Veranstaltung gewählt.');
- $this->relocate('admin/courses');
- }
-
- }
-
- /*
- * Export member data of all selected courses
- */
- public function do_batch_export_action()
- {
- CSRFProtection::verifyUnsafeRequest();
-
- if (Request::submitted('xlsx')) {
- $export_format = 'xlsx';
- } else if (Request::submitted('csv')) {
- $export_format = 'csv';
- } else {
- PageLayout::postError('Nicht unterstütztes Exportformat.');
- $this->relocate('admin/courses');
- }
-
- $tmp_folder = $GLOBALS['TMP_PATH'] . '/temp_folder_' . md5(uniqid());
- mkdir($tmp_folder);
-
- $courses = Course::findMany(Request::optionArray('courses'));
- $header = [
- _('Status'),
- _('Anrede'),
- _('Titel'),
- _('Vorname'),
- _('Nachname'),
- _('Titel nachgestellt'),
- _('Benutzername'),
- _('Adresse'),
- _('Telefonnr.'),
- _('E-Mail'),
- _('Anmeldedatum'),
- _('Matrikelnummer'),
- _('Studiengänge'),
- _('Position'),
- ];
- foreach ($courses as $course) {
-
- $members = $course->getMembersData();
-
- $filename = FileManager::cleanFileName('Teilnehmendenexport ' . $course->Name . '.' . $export_format);
- $filepath = $tmp_folder . '/'. $filename;
-
- $this->render_spreadsheet($header, $members, $export_format, $filename, $filepath);
-
- }
- $archive_file_path = $GLOBALS['TMP_PATH'] . '/archiv.zip';
- $archive_filename = 'Export_Teilnehmendendaten.zip';
- FileArchiveManager::createArchiveFromPhysicalFolder($tmp_folder, $archive_file_path);
- rmdirr($tmp_folder);
- $this->render_temporary_file($archive_file_path, $archive_filename, 'application/zip');
- }
-
-
/**
* Init sidebar
*/