Add CSV export of current values
authorEmmanuel Lacour <elacour@easter-eggs.com>
Fri, 2 May 2025 13:34:10 +0000 (15:34 +0200)
committerEmmanuel Lacour <elacour@easter-eggs.com>
Fri, 2 May 2025 13:34:10 +0000 (15:34 +0200)
Changes
html/Admin/CustomFields/ExportValues.html [new file with mode: 0644]
html/Callbacks/ImportCustomFieldValues/Elements/Tabs/Privileged

diff --git a/Changes b/Changes
index 063a0c8..4595b9c 100644 (file)
--- 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 (file)
index 0000000..65da248
--- /dev/null
@@ -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();
+</%init>
+<%args>
+$id => undef
+</%args>
index 528489f..b7c0ebb 100644 (file)
@@ -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'}
         );