Skip to content
Snippets Groups Projects
Commit 1df3bb88 authored by David Siegfried's avatar David Siegfried Committed by Jan-Hendrik Willms
Browse files

reimplemnt export, fixes #3785

Closes #3785

Merge request studip/studip!2705
parent b3f9cb4b
No related branches found
No related tags found
No related merge requests found
...@@ -190,44 +190,13 @@ class Course_GroupingController extends AuthenticatedController ...@@ -190,44 +190,13 @@ class Course_GroupingController extends AuthenticatedController
// Export all participants. // Export all participants.
if (Config::get()->EXPORT_ENABLE) { if (Config::get()->EXPORT_ENABLE) {
$widget = new ExportWidget(); $widget = new ExportWidget();
$widget->addLink(
// create csv-export link _('Als CSV-Datei exportieren'),
$csvExport = export_link( URLHelper::getURL('dispatch.php/course/members/export', [
$this->course->id, 'course_id' => $this->course_id,
'person', 'format' => 'csv',
htmlReady(sprintf( ]),
'%s %s', Icon::create('export')
get_title_for_status('autor', 2),
$this->course->getFullname()
)),
'csv',
'csv-teiln',
'',
_('Teilnehmendenliste als CSV-Dokument exportieren'),
'passthrough'
);
$widget->addLinkFromhtmL(
$csvExport,
Icon::create('file-office', 'clickable')
);
// create csv-export link
$rtfExport = export_link(
$this->course->id,
'person',
htmlReady(sprintf(
'%s %s',
get_title_for_status('autor', 2), $this->course->getFullname()
)),
'rtf',
'rtf-teiln',
'',
_('Teilnehmendenliste als rtf-Dokument exportieren'),
'passthrough'
);
$widget->addLinkFromHTML(
$rtfExport,
Icon::create('file-text', 'clickable')
); );
$sidebar->addWidget($widget); $sidebar->addWidget($widget);
...@@ -267,7 +236,7 @@ class Course_GroupingController extends AuthenticatedController ...@@ -267,7 +236,7 @@ class Course_GroupingController extends AuthenticatedController
{ {
CSRFProtection::verifyUnsafeRequest(); CSRFProtection::verifyUnsafeRequest();
if (Request::submitted('single_action')) { if (Request::submitted('single_action')) {
list($course_id, $permission) = explode('-', Request::get('single_action')); [$course_id, $permission] = explode('-', Request::get('single_action'));
$selected = Request::getArray('members'); $selected = Request::getArray('members');
......
...@@ -1675,33 +1675,13 @@ class Course_MembersController extends AuthenticatedController ...@@ -1675,33 +1675,13 @@ class Course_MembersController extends AuthenticatedController
); );
if (count($this->awaiting) > 0) { if (count($this->awaiting) > 0) {
$awaiting_rtf = export_link( $widget->addLink(
$this->course_id, _('Warteliste CSV-Datei exportieren'),
'person', URLHelper::getURL('dispatch.php/course/members/export', [
sprintf(_('Warteliste %s'), $this->course_title), 'course_id' => $this->course_id,
'rtf', 'format' => 'csv',
'rtf-warteliste', 'status' => $this->waiting_type,
$this->waiting_type, ]),
_('Warteliste als rtf-Dokument exportieren'),
'passthrough'
);
$widget->addLinkFromHTML(
$awaiting_rtf,
Icon::create('export')
);
$awaiting_csv = export_link(
$this->course_id,
'person',
sprintf(_('Warteliste %s'), $this->course_title),
'csv',
'csv-warteliste',
$this->waiting_type,
_('Warteliste als csv-Dokument exportieren'),
'passthrough'
);
$widget->addLinkFromHTML(
$awaiting_csv,
Icon::create('export') Icon::create('export')
); );
} }
...@@ -1753,21 +1733,44 @@ class Course_MembersController extends AuthenticatedController ...@@ -1753,21 +1733,44 @@ class Course_MembersController extends AuthenticatedController
public function export_action() public function export_action()
{ {
$export_format = Request::get('format'); $export_format = Request::get('format');
$status = Request::get('status');
if ($export_format !== 'csv' && $export_format !== 'xlsx') { if ($export_format !== 'csv' && $export_format !== 'xlsx') {
throw new Exception('Wrong format'); throw new Exception('Wrong format');
} }
$header = [_('Status'), _('Anrede'), _('Titel'), _('Vorname'), _('Nachname'), _('Titel nachgestellt'), _('Benutzername'), _('Adresse'), _('Telefonnr.'), $header = [
_('E-Mail'), _('Anmeldedatum'), _('Matrikelnummer'), _('Studiengänge')]; _('Status'),
$members = CourseMember::getMemberDataByCourse($this->course_id); _('Anrede'),
_('Titel'),
_('Vorname'),
_('Nachname'),
_('Titel nachgestellt'),
_('Benutzername'),
_('Adresse'),
_('Telefonnr.'),
_('E-Mail'),
_('Anmeldedatum'),
_('Matrikelnummer'),
];
if (in_array($status, ['awaiting', 'claiming'])) {
$header[] = _('Position');
$filename = _('Wartelistenexport');
} else {
$filename = _('Teilnehmendenexport');
}
$header[] = _('Studiengänge');
$members = CourseMember::getMemberDataByCourse($this->course_id, $status);
foreach ($members as &$member) { foreach ($members as &$member) {
$member['Anmeldedatum'] = $member['Anmeldedatum'] ? date("d.m.Y", $member['Anmeldedatum']) : _("unbekannt"); $member['Anmeldedatum'] = $member['Anmeldedatum'] ? date("d.m.Y", $member['Anmeldedatum']) : _("unbekannt");
unset($member['user_id']); unset($member['user_id']);
} }
$filename = _('Teilnehmendenexport') . ' ' . $this->course_title . '.' . $export_format; $filename = $filename . ' ' . $this->course_title . '.' . $export_format;
$this->render_spreadsheet($header, $members, $export_format, $filename); $this->render_spreadsheet($header, $members, $export_format, $filename);
} }
......
...@@ -324,7 +324,7 @@ class Course_StatusgroupsController extends AuthenticatedController ...@@ -324,7 +324,7 @@ class Course_StatusgroupsController extends AuthenticatedController
if ($groups) { if ($groups) {
foreach ($groups as $group) { foreach ($groups as $group) {
foreach ($group['members'] as $mem) { foreach ($group['members'] as $mem) {
$member_data = CourseMember::getMemberDataByCourse($this->course_id, $mem['user_id']); $member_data = CourseMember::getMemberDataByCourse($this->course_id, '', $mem['user_id']);
foreach ($member_data as &$mem_data) { foreach ($member_data as &$mem_data) {
$mem_data['Anmeldedatum'] = $mem_data['Anmeldedatum'] ? date('d.m.Y', $mem_data['Anmeldedatum']) : _('unbekannt'); $mem_data['Anmeldedatum'] = $mem_data['Anmeldedatum'] ? date('d.m.Y', $mem_data['Anmeldedatum']) : _('unbekannt');
......
...@@ -442,7 +442,7 @@ class CourseMember extends SimpleORMap implements PrivacyObject ...@@ -442,7 +442,7 @@ class CourseMember extends SimpleORMap implements PrivacyObject
* Get user information for all users in this course * Get user information for all users in this course
* *
*/ */
public static function getMemberDataByCourse(string $seminar_id, ?string $user_id = null): array public static function getMemberDataByCourse(string $seminar_id, ?string $status = '', ?string $user_id = null,): array
{ {
$query = "SELECT `datafield_id` $query = "SELECT `datafield_id`
FROM `datafields` FROM `datafields`
...@@ -455,11 +455,39 @@ class CourseMember extends SimpleORMap implements PrivacyObject ...@@ -455,11 +455,39 @@ class CourseMember extends SimpleORMap implements PrivacyObject
':seminar_id' => $seminar_id, ':seminar_id' => $seminar_id,
':datafield_id' => $datafield_id, ':datafield_id' => $datafield_id,
]; ];
if (func_num_args() > 1) { if ($user_id !== null) {
$user_condition = " AND su.`user_id` = :user_id"; $user_condition = " AND su.`user_id` = :user_id";
$parameters[':user_id'] = $user_id; $parameters[':user_id'] = $user_id;
} }
if (in_array($status, ['awaiting', 'claiming'])) {
$query = "SELECT su.`user_id`,
su.`status`,
ui.`geschlecht`,
ui.`title_front` AS Titel,
aum.`Vorname`,
aum.`Nachname`,
ui.`title_rear` AS Titel2,
aum.`username`,
ui.`privadr`,
ui.`privatnr`,
aum.`Email`,
ui.`mkdate` AS Anmeldedatum,
IFNULL(aum.`matriculation_number`, dfe.`content`) AS Matrikelnummer,
su.position AS admission_position
FROM admission_seminar_user AS su
LEFT JOIN user_info AS ui USING (user_id)
LEFT JOIN auth_user_md5 AS aum USING (user_id)
LEFT JOIN `datafields_entries` AS dfe
ON dfe.`range_id` = su.`user_id`
AND dfe.`datafield_id` = :datafield_id
WHERE seminar_id = :seminar_id AND su.status = :status
{$user_condition}
GROUP BY aum.user_id
ORDER BY Nachname, Vorname";
$parameters[':status'] = $status;
} else {
$query = "SELECT su.`user_id`, $query = "SELECT su.`user_id`,
su.`status`, su.`status`,
ui.`geschlecht`, ui.`geschlecht`,
...@@ -483,6 +511,8 @@ class CourseMember extends SimpleORMap implements PrivacyObject ...@@ -483,6 +511,8 @@ class CourseMember extends SimpleORMap implements PrivacyObject
{$user_condition} {$user_condition}
GROUP BY su.`user_id` GROUP BY su.`user_id`
ORDER BY `status` DESC, `Nachname`, `Vorname`"; ORDER BY `status` DESC, `Nachname`, `Vorname`";
}
return DBManager::get()->fetchAll( return DBManager::get()->fetchAll(
$query, $query,
$parameters, $parameters,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment