Bugzilla – Attachment 189230 Details for
Bug 33308
Add ability to to use SFTP with runreport.pl
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 33308: Add S/FTP upload support to runreport.pl
Bug-33308-Add-SFTP-upload-support-to-runreportpl.patch (text/plain), 8.77 KB, created by
Andrew Fuerste-Henry
on 2025-11-06 20:32:13 UTC
(
hide
)
Description:
Bug 33308: Add S/FTP upload support to runreport.pl
Filename:
MIME Type:
Creator:
Andrew Fuerste-Henry
Created:
2025-11-06 20:32:13 UTC
Size:
8.77 KB
patch
obsolete
>From f3dc9e45ade7b3445b31e113ec4045005fa2d319 Mon Sep 17 00:00:00 2001 >From: Jake Deery <jake.deery@openfifth.co.uk> >Date: Mon, 3 Nov 2025 11:32:14 +0000 >Subject: [PATCH] Bug 33308: Add S/FTP upload support to runreport.pl > >This patch adds S/FTP upload support to runreport.pl by adding additional command-line flags that will, when utilised, deposit a report onto the configured S/FTP Server. > >== TO TEST == >a) Goto /cgi-bin/koha/admin/file_transports.pl?op=add_form >b) Configure an S/FTP Server > *) If one needs an S/FTP Server to utilise, contact me directly >c) Configure an SQL report under Reports > Create from SQL > *) If you're stuck, you can use `SELECT * FROM items` to select every item in k.t.d to report on >== APPLY PATCH == >d) Run `./misc/cronjobs/runreport.pl` without arguments > *) Notice `--sftp-dest-id` and `--filename` > *) `--sftp-dest-id` specifies the ID of the configured server to use, which can be garnered from the URL when editing the server (look for the file_transport_id parameter) > *) `--filename` optionally specifies what the file should be called when uploaded, and can be customised with bash variables if necessary >e) Run `./misc/cronjons/runreport.pl --sftp-dest-id 1 1` > *) Notice the script outputs nothing, indicating success > *) On your S/FTP server, notice a report now named report(id)-(date).csv > *) Notice that the outputted file contains a CSV-formatted report >f) Run `./misc/cronjobs/runreport.pl --format html --sftp-dest-id 1 1` > *) Notice the script outputs nothing, indicating success > *) On your S/FTP server, notice a report now named report(id)-(date).html > *) Notice that the outputted file contains an HTML-formatted report >g) Run `./misc/cronjons/runreport.pl --filename custom.csv --sftp-dest-id 1 1` > *) Notice the script outputs nothing, indicating success > *) On your S/FTP server, notice a report now named custom.csv > *) Notice that the outputted file contains a CSV-formatted report >h) Run `./misc/cronjons/runreport.pl --format html --filename custom.somehtml --sftp-dest-id 1 1` > *) Notice the script outputs nothing, indicating success > *) On your S/FTP server, notice a report now named custom.somehtml > *) Notice that the outputted file contains an HTML-formatted report >== SIGN OFF == > >Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com> >--- > misc/cronjobs/runreport.pl | 119 ++++++++++++++++++++++++------------- > 1 file changed, 78 insertions(+), 41 deletions(-) > >diff --git a/misc/cronjobs/runreport.pl b/misc/cronjobs/runreport.pl >index e687b8f5ac5..39b372dcce7 100755 >--- a/misc/cronjobs/runreport.pl >+++ b/misc/cronjobs/runreport.pl >@@ -27,6 +27,7 @@ use C4::Context; > use C4::Log qw( cronlogaction ); > use Koha::Email; > use Koha::DateUtils qw( dt_from_string ); >+use Koha::File::Transports; > use Koha::SMTP::Servers; > > use Getopt::Long qw( GetOptions ); >@@ -47,31 +48,33 @@ runreport.pl - Run pre-existing saved reports > runreport.pl [ -h | -m ] [ -v ] reportID [ reportID ... ] > > Options: >- -h --help brief help message >- -m --man full documentation, same as --help --verbose >- -v --verbose verbose output >- >- --format=s selects format. Choice of text, html, csv or tsv >- >- -e --email whether to use e-mail (implied by --to or --from) >- --send_empty whether to send an email when there are no results from the >- specified report >- -a --attachment additionally attach the report as a file. cannot be used with html format >- --username username to pass to the SMTP server for authentication >- --password password to pass to the SMTP server for authentication >- --method method is the type of authentication. Ie. LOGIN, DIGEST-MD5, etc. >- --to=s e-mail address to send report to >- --from=s e-mail address to send report from >- --subject=s subject for the e-mail >- --param=s parameters for the report >- --store-results store the result of the report >- --separator separator character for csv >- --quote quote character for csv >- --csv-header add column names as first line of csv output >+ -h --help brief help message >+ -m --man full documentation, same as --help --verbose >+ -v --verbose verbose output >+ >+ --format=s selects format. Choice of text, html, csv or tsv >+ >+ -e --email whether to use e-mail (implied by --to or --from) >+ --send_empty whether to send an email when there are no results from the >+ specified report >+ -a --attachment additionally attach the report as a file. cannot be used with html format >+ -n --filename (ftp/sftp only) optionally specify the name to use when uploading the file >+ --username username to pass to the SMTP server for authentication >+ --password password to pass to the SMTP server for authentication >+ --method method is the type of authentication. Ie. LOGIN, DIGEST-MD5, etc. >+ --to=s e-mail address to send report to >+ --from=s e-mail address to send report from >+ --subject=s subject for the e-mail >+ --param=s parameters for the report >+ --store-results store the result of the report >+ --sftp-dest-id=i the ID of the target FTP/SFTP server, if you wish to upload the report >+ --separator separator character for csv >+ --quote quote character for csv >+ --csv-header add column names as first line of csv output > > > Arguments: >- reportID report ID Number from saved_sql.id, multiple ID's may be specified >+ reportID report ID Number from saved_sql.id, multiple ID's may be specified > > =head1 OPTIONS > >@@ -187,6 +190,7 @@ my $man = 0; > my $verbose = 0; > my $send_email = 0; > my $send_empty = 0; >+my $sftp_dest_id = 0; > my $attachment = 0; > my $format = "text"; > my $to = ""; >@@ -200,6 +204,7 @@ my $csv_header = 0; > my $csv_separator = ""; > my $csv_quote = ""; > >+my $filename = undef; > my $username = undef; > my $password = undef; > my $method = 'LOGIN'; >@@ -208,24 +213,26 @@ my $command_line_options = join( " ", @ARGV ); > cronlogaction( { info => $command_line_options } ); > > GetOptions( >- 'help|?' => \$help, >- 'man' => \$man, >- 'verbose' => \$verbose, >- 'format=s' => \$format, >- 'separator=s' => \$csv_separator, >- 'quote=s' => \$csv_quote, >- 'to=s' => \$to, >- 'from=s' => \$from, >- 'subject=s' => \$subject, >- 'param=s' => \@params, >- 'email' => \$send_email, >- 'send_empty' => \$send_empty, >- 'a|attachment' => \$attachment, >- 'username:s' => \$username, >- 'password:s' => \$password, >- 'method:s' => \$method, >- 'store-results' => \$store_results, >- 'csv-header' => \$csv_header, >+ 'help|?' => \$help, >+ 'man' => \$man, >+ 'verbose' => \$verbose, >+ 'format=s' => \$format, >+ 'separator=s' => \$csv_separator, >+ 'quote=s' => \$csv_quote, >+ 'to=s' => \$to, >+ 'from=s' => \$from, >+ 'subject=s' => \$subject, >+ 'param=s' => \@params, >+ 'email' => \$send_email, >+ 'send_empty' => \$send_empty, >+ 'sftp-dest-id=i' => \$sftp_dest_id, >+ 'a|attachment' => \$attachment, >+ 'n|filename:s' => \$filename, >+ 'username:s' => \$username, >+ 'password:s' => \$password, >+ 'method:s' => \$method, >+ 'store-results' => \$store_results, >+ 'csv-header' => \$csv_header, > > ) or pod2usage(2); > pod2usage( -verbose => 2 ) if ($man); >@@ -392,7 +399,37 @@ foreach my $report_id (@ARGV) { > } catch { > carp "Mail not sent: $_"; > }; >- } else { >+ } >+ >+ if ($sftp_dest_id) { >+ my $sftp_server = Koha::File::Transports->find($sftp_dest_id); >+ >+ die("ERROR:\tSupplied FTP/SFTP Server doesn\'t exist") >+ unless ($sftp_server); >+ >+ die("ERROR:\tUnable to connect to FTP/SFTP Server") >+ unless ( $sftp_server->connect ); >+ >+ my $upload_directory = $sftp_server->upload_directory; >+ my $content_type = "text/$format"; >+ my $filename = $filename || "report$report_id-$date.$format"; >+ >+ open my $fh, "<", \$message; >+ >+ die("ERROR\tMessage supplied is empty, or, not suitable for upload") >+ unless ($fh); >+ >+ die("ERROR\tNo upload directory specified in config") >+ unless ($upload_directory); >+ >+ die("ERROR\tUnable to change directory") >+ unless ( $sftp_server->change_directory($upload_directory) ); >+ >+ die("ERROR\tUnable to upload report to server") >+ unless ( $sftp_server->upload_file( $fh, $filename ) ); >+ } >+ >+ if ( !$send_email && !$sftp_dest_id ) { > print $message; > } > } >-- >2.39.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 33308
:
189005
| 189230