Bugzilla – Attachment 144544 Details for
Bug 29354
Make overdue_notices.pl send HTML attachment as .html
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 29354: Make overdue_notices.pl send .html
Bug-29354-Make-overduenoticespl-send-html.patch (text/plain), 6.09 KB, created by
Lucas Gass (lukeg)
on 2022-12-12 20:49:43 UTC
(
hide
)
Description:
Bug 29354: Make overdue_notices.pl send .html
Filename:
MIME Type:
Creator:
Lucas Gass (lukeg)
Created:
2022-12-12 20:49:43 UTC
Size:
6.09 KB
patch
obsolete
>From 71407c51d5ae98185e14d218cce78d8d01f7567f Mon Sep 17 00:00:00 2001 >From: Magnus Enger <magnus@libriotech.no> >Date: Mon, 12 Dec 2022 13:41:20 +0000 >Subject: [PATCH] Bug 29354: Make overdue_notices.pl send .html > >If you have EmailOverduesNoEmail = Send and specify "--html somedir", >overdue_notices.pl will send a file by email that contains partial >HTML, as a file called attachment.txt. This patch fixes that. > >To reproduce in koha-testing-docker: >- EmailOverduesNoEmail = Send >- Make sure you have a loan that was due yesterday, by backdating the > due date >- Set up an overdue action to send "Overdue Notice" (ODUE) to the > category you made the loan to above, when a loan is one day overdue >- Run this command: > $ sudo koha-shell -c "perl misc/cronjobs/overdue_notices.pl -v -t -html /tmp/" kohadev >- Look at the file /tmp/notices-<DATE>.html and make sure it is a full > HTML document, with <html>, <head>, <body> etc. >- Create a report like this: > SELECT message_id, letter_id, borrowernumber, subject, CONCAT( '<pre>', content, '</pre>' ) AS content, > metadata, letter_code, message_transport_type, time_queued, updated_on, to_address, content_type, failure_code > FROM message_queue > WHERE subject = 'Overdue Notices' > ORDER BY message_id DESC >- Run the report and verify there is a line like this in the "content" > of the newest message: > Content-Type: text/plain; name=attachment.txt >- A part of the "content" will be a block of several lines of gibberish > (base64) that look something like "RGVhciAga29oYSwNCg0KQWN...". Copy > this block of text to somewhere like base64decode.org and decode the > text. You should see a fragment of HTML, without <html>, <head>, > <body> etc. > >To test: >- Apply the patch >- Run overdue_notices.pl again, with the same arguments as above >- Make sure /tmp/notices-<DATE>.html is still a full HTML document >- Re-run the report, and make sure you now have this in the "content": > Content-Type: text/html; name=attachment.html >- Decode the base64 and make sure it is now a full HTML document, with > <html>, <head>, <body> etc. >- Re-run overdue_notices.pl as above, but replace "-html /tmp/" with > "-csv /tmp/test.csv" >- Make sure /tmp/test.csv and the decoded base64 from the report > contains CSV data >- Re-run overdue_notices.pl as above, but replace "-html /tmp/" with > "-text /tmp/" >- Make sure /tmp/notices-<DATE>.txt and the decoded base64 from the > report contains no HTML > >Note: >- The actual text from the different messages will be enclosed in > <pre>-tags >- If you have HTML in your ODUE message template and run with -v, you > will have warnings saying "The following terms were not matched and > replaced" >These are due to Bug 14347, and are not adressed by the current patch. > >Signed-off-by: Lucas Gass <lucas@bywatersolutions.com> >--- > misc/cronjobs/overdue_notices.pl | 69 +++++++++++++++++++++++--------- > 1 file changed, 49 insertions(+), 20 deletions(-) > >diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl >index f8fc79203c7..19e6aef27b9 100755 >--- a/misc/cronjobs/overdue_notices.pl >+++ b/misc/cronjobs/overdue_notices.pl >@@ -435,18 +435,7 @@ if ( defined $htmlfilename ) { > open $fh, ">:encoding(UTF-8)",File::Spec->catdir ($htmlfilename,"notices-".$today->ymd().".html"); > } > >- print $fh "<html>\n"; >- print $fh "<head>\n"; >- print $fh "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"; >- print $fh "<style type='text/css'>\n"; >- print $fh "pre {page-break-after: always;}\n"; >- print $fh "pre {white-space: pre-wrap;}\n"; >- print $fh "pre {white-space: -moz-pre-wrap;}\n"; >- print $fh "pre {white-space: -o-pre-wrap;}\n"; >- print $fh "pre {word-wrap: break-work;}\n"; >- print $fh "</style>\n"; >- print $fh "</head>\n"; >- print $fh "<body>\n"; >+ print $fh _get_html_start(); > } > elsif ( defined $text_filename ) { > if ( $text_filename eq '' ) { >@@ -848,16 +837,19 @@ END_SQL > if ( defined $csvfilename ) { > my $delimiter = C4::Context->csv_delimiter; > $content = join($delimiter, qw(title name surname address1 address2 zipcode city country email itemcount itemsinfo due_date issue_date)) . "\n"; >+ $content .= join( "\n", @output_chunks ); >+ } elsif ( defined $htmlfilename ) { >+ $content = _get_html_start(); >+ $content .= join( "\n", @output_chunks ); >+ $content .= _get_html_end(); >+ } else { >+ $content = join( "\n", @output_chunks ); > } >- else { >- $content = ""; >- } >- $content .= join( "\n", @output_chunks ); > > if ( C4::Context->preference('EmailOverduesNoEmail') ) { > my $attachment = { >- filename => defined $csvfilename ? 'attachment.csv' : 'attachment.txt', >- type => 'text/plain', >+ filename => defined $csvfilename ? 'attachment.csv' : defined $htmlfilename ? 'attachment.html' : 'attachment.txt', >+ type => defined $htmlfilename ? 'text/html' : 'text/plain', > content => $content, > }; > >@@ -885,8 +877,7 @@ if ($csvfilename) { > } > > if ( defined $htmlfilename ) { >- print $fh "</body>\n"; >- print $fh "</html>\n"; >+ print $fh _get_html_end(); > close $fh; > } elsif ( defined $text_filename ) { > close $fh; >@@ -946,4 +937,42 @@ sub prepare_letter_for_printing { > return $return; > } > >+=head2 _get_html_start >+ >+Return the start of a HTML document, including html, head and the start body >+tags. This should be usable both in the HTML file written to disc, and in the >+attachment.html sent as email. >+ >+=cut >+ >+sub _get_html_start { >+ >+ return "<html> >+<head> >+<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> >+<style type='text/css'> >+pre {page-break-after: always;} >+pre {white-space: pre-wrap;} >+pre {white-space: -moz-pre-wrap;} >+pre {white-space: -o-pre-wrap;} >+pre {word-wrap: break-work;} >+</style> >+</head> >+<body>"; >+ >+} >+ >+=head2 _get_html_end >+ >+Return the end of an HTML document, namely the closing body and html tags. >+ >+=cut >+ >+sub _get_html_end { >+ >+ return "</body> >+</html>"; >+ >+} >+ > cronlogaction({ action => 'End', info => "COMPLETED" }); >-- >2.30.2
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 29354
:
144534
|
144544
|
146510