diff options
| author | Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> | 2025-03-21 15:55:27 +0000 |
|---|---|---|
| committer | Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> | 2025-03-21 15:55:27 +0000 |
| commit | 1184752084f6914a320060de6a9993caced447a7 (patch) | |
| tree | dc4b54f20e5c32fc2e1b5e5a3dea95f28f0247d2 /app/controllers/admin | |
| parent | cea11a881bf6e2a46ac78fd0b1cfe236703783ef (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.php | 75 | ||||
| -rw-r--r-- | app/controllers/admin/user.php | 86 |
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 */ |
