From 7b623ff6fcb7ff76e874e5d7e89e58e0eabd87bd Mon Sep 17 00:00:00 2001 From: Emmanuel Lacour Date: Fri, 2 May 2025 15:34:10 +0200 Subject: [PATCH] Add CSV export of current values --- Changes | 1 + html/Admin/CustomFields/ExportValues.html | 28 ++++++++++++++++++++++ .../Elements/Tabs/Privileged | 4 ++++ 3 files changed, 33 insertions(+) create mode 100644 html/Admin/CustomFields/ExportValues.html diff --git a/Changes b/Changes index 063a0c8..4595b9c 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,7 @@ Revision history for RT-Extension-ImportCustomFieldValues 0.04 2025-05-02 - Makes it compatible with RT 5.x and 6.0.x + - Add CSV export of current values 0.03 2022-02-11 - Fix handling of utf-8 chars diff --git a/html/Admin/CustomFields/ExportValues.html b/html/Admin/CustomFields/ExportValues.html new file mode 100644 index 0000000..65da248 --- /dev/null +++ b/html/Admin/CustomFields/ExportValues.html @@ -0,0 +1,28 @@ +<%init> +my $CustomField = RT::CustomField->new( $session{'CurrentUser'} ); +unless ( $CustomField->Load( $id ) ) { + Abort(loc("CustomField not found")); +} +unless ( $session{CurrentUser}->HasRight( Right => 'AdminCustomFieldValues', Object => $CustomField ) + || $session{CurrentUser}->HasRight( Right => 'AdminCustomField', Object => $CustomField ) ) { + Abort(loc("No permissions to edit this customfield values")); +} +unless ( $CustomField->Type =~ m/^Select/ ) { + Abort(loc("CustomField is not of type select values")); +} +my $filename = 'export-'. $CustomField->Id . '.csv'; + +$r->content_type('application/vnd.ms-excel'); +$r->header_out( 'Content-disposition' => "attachment; filename=$filename" ); +$m->out("\"SortOrder\";\"Name\";\"Description\";\"Category\"\n"); +my $Values = $CustomField->Values; +my $i = 0; +while (my $Value = $Values->Next) { + $m->out(sprintf("\"%s\";\"%s\";\"%s\";\"%s\"\n", $Value->SortOrder || '', $Value->Name || '', $Value->Description || '', $Value->Category || '')); + $m->flush_buffer unless ++$i % 10; +} +$m->abort(); + +<%args> +$id => undef + diff --git a/html/Callbacks/ImportCustomFieldValues/Elements/Tabs/Privileged b/html/Callbacks/ImportCustomFieldValues/Elements/Tabs/Privileged index 528489f..b7c0ebb 100644 --- a/html/Callbacks/ImportCustomFieldValues/Elements/Tabs/Privileged +++ b/html/Callbacks/ImportCustomFieldValues/Elements/Tabs/Privileged @@ -9,6 +9,10 @@ if ( $request_path =~ qr{^/Admin/CustomFields/} && $m->request_args->{'id'} && || $session{CurrentUser}->HasRight( Right => 'AdminCustomField', Object => $CustomField ) ) ) { $tabs->child( + 'cf-export-values' => title => loc('Export to CSV'), + path => '/Admin/CustomFields/ExportValues.html?id=' . $m->request_args->{'id'} + ); + $tabs->child( 'cf-import-values' => title => loc('Import from CSV'), path => '/Admin/CustomFields/ImportValues.html?id=' . $m->request_args->{'id'} ); -- 2.11.0