Bug 41818: Add new Koha::Patron::Message method to SIP2

This bug adds Koha::Patron::Message::message_without_newlines, which has been added to C4::SIP::ILS::Patron in lieu of Koha::Patron::Message::message. The aim of this change is to prevent SIP2 units from crashing out when they encounter a patron message with newlines (\n or \r) in it, as units generally use a newline character to denote the end of a SIP2 transaction.

To test:
a)  go to /cgi-bin/koha/sip2/institutions
    *)  create an institution, name CPL, timeout 300, the rest default
b)  go to /cgi-bin/koha/sip2/accounts
    *)  create an account, userid koha, institution CPL, terminator crlf, the rest default
c)  go to /cgi-bin/koha/members/moremember.pl?borrowernumber=51
    *)  click add message in toolbar
    *)  enter some multi-line message e.g. test[RETURN]1[RETURN]2[RETURN]3[RETURN][RETURN][RETURN]
d)  run tail -f /var/log/koha/kohadev/sip-output.log, keep this window open
e)  run ./misc/sip_cli_emulator.pl -a 127.0.0.1 -p 6001 -su koha -sp koha -l CPL --patron 42 -m patron_information
f)  look at the tail log, notice how the MSG 64 line has a newline before the final pipe (|) character
== APPLY PATCH ==
g)  restart_all
h)  repeat steps e-f
i)  notice how in the tail log, the MSG 64 line now has the final pipe character contiguously placed with the successive characters
== SIGN OFF ==

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Laura Escamilla <laura.escamilla@bywatersolutions.com>
(cherry picked from commit a16316a5c3)
Signed-off-by: Baptiste Wojtkowski <baptiste.wojtkowski@biblibre.com>
This commit is contained in:
Jake Deery 2026-02-11 13:54:47 +00:00 committed by Baptiste Wojtkowski
parent 9b8cc84815
commit 204400bed2
No known key found for this signature in database
GPG Key ID: 47A8A13E10BC0D40
2 changed files with 22 additions and 1 deletions

View File

@ -206,7 +206,7 @@ sub new {
while ( my $message = $patron_messages->next ) {
my $messagedt = dt_from_string( $message->message_date, 'iso' );
my $formatted_date = output_pref( { dt => $messagedt, dateonly => 1 } );
push @messages_array, $formatted_date . ": " . $message->message;
push @messages_array, $formatted_date . ": " . $message->message_without_newlines;
}
if (@messages_array) {
$ilspatron{screen_msg} .= " Messages for you: " . join( ' / ', @messages_array );

View File

@ -77,6 +77,27 @@ sub delete {
return $self->SUPER::delete($self);
}
=head3 message_without_newlines
my $message_without_newlines = $message->message_without_newlines
This method returns the user's message, with all instances of \n and \r removed
=cut
sub message_without_newlines {
my ($self) = @_;
my $message = $self->message
or return;
$message =~ s/\n/ /g;
$message =~ s/\r//g;
$message =~ s/^\s+|\s+$//g; # left and right trim
$message =~ s/ +/ /g; # duplicate spaces
return $message;
}
=head3 _type
=cut