48a2952032
C4::Log::cronlogaction() takes a hashref as argument, with "info" and possibly "action" as keys. But there are a couple of places where it is called with just a string as argument, and that does not work. Both places need lock_exec to fail to trigger the error. I have seen this on a production server, but not been able to reproduce in ktd. To test: - Run this on the Koha repo: grep -r "cronlogaction(" * - Verify that fines.pl and process_message_queue.pl are the only scripts that call cronlogaction without a hashref as argument, but do it like this: cronlogaction( $message ); - Apply this patch - Run the grep again and verify that all calls to cronlogaction now take a hashref as argument Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
126 lines
3.7 KiB
Perl
Executable file
126 lines
3.7 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Copyright 2008 LibLime
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Koha::Script -cron;
|
|
use C4::Letters qw( SendQueuedMessages );
|
|
use C4::Log qw( cronlogaction );
|
|
use Getopt::Long qw( GetOptions );
|
|
use Try::Tiny qw( catch try );
|
|
|
|
my $username = undef;
|
|
my $password = undef;
|
|
my $limit = undef;
|
|
my $method = 'LOGIN';
|
|
my $help = 0;
|
|
my $verbose = 0;
|
|
my $where;
|
|
my @type;
|
|
my @letter_code;
|
|
|
|
my $command_line_options = join(" ",@ARGV);
|
|
|
|
GetOptions(
|
|
'u|username:s' => \$username,
|
|
'p|password:s' => \$password,
|
|
'l|limit:s' => \$limit,
|
|
'm|method:s' => \$method,
|
|
'h|help|?' => \$help,
|
|
'v|verbose' => \$verbose,
|
|
't|type:s' => \@type,
|
|
'c|code:s' => \@letter_code,
|
|
'w|where:s' => \$where,
|
|
);
|
|
my $usage = << 'ENDUSAGE';
|
|
|
|
This script processes the message queue in the message_queue database
|
|
table. It sends out the messages in that queue and marks them
|
|
appropriately to indicate success or failure. It is recommended that
|
|
you run this regularly from cron, especially if you are using the
|
|
advance_notices.pl script.
|
|
|
|
This script has the following parameters :
|
|
-u --username: username of mail account
|
|
-p --password: password of mail account
|
|
-t --type: If supplied, only processes this type of message ( email, sms ), repeatable
|
|
-c --code: If supplied, only processes messages with this letter code, repeatable
|
|
-l --limit: The maximum number of messages to process for this run
|
|
-m --method: authentication method required by SMTP server (See perldoc Sendmail.pm for supported authentication types.)
|
|
-h --help: this message
|
|
-v --verbose: provides verbose output to STDOUT
|
|
-w --where: filter messages to send with additional conditions in the where clause
|
|
ENDUSAGE
|
|
|
|
die $usage if $help;
|
|
|
|
my $script_handler = Koha::Script->new({ script => $0 });
|
|
|
|
try {
|
|
$script_handler->lock_exec;
|
|
}
|
|
catch {
|
|
my $message = "Skipping execution of $0 ($_)";
|
|
print STDERR "$message\n"
|
|
if $verbose;
|
|
cronlogaction({ info => $message });
|
|
exit;
|
|
};
|
|
|
|
cronlogaction({ info => $command_line_options });
|
|
|
|
if ( C4::Context->config("enable_plugins") ) {
|
|
my @plugins = Koha::Plugins->new->GetPlugins({
|
|
method => 'before_send_messages',
|
|
});
|
|
|
|
if (@plugins) {
|
|
foreach my $plugin ( @plugins ) {
|
|
try {
|
|
$plugin->before_send_messages(
|
|
{
|
|
verbose => $verbose,
|
|
limit => $limit,
|
|
type => \@type,
|
|
letter_code => \@letter_code,
|
|
}
|
|
);
|
|
}
|
|
catch {
|
|
warn "$_";
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
C4::Letters::SendQueuedMessages(
|
|
{
|
|
verbose => $verbose,
|
|
username => $username,
|
|
password => $password,
|
|
method => $method,
|
|
limit => $limit,
|
|
type => \@type,
|
|
letter_code => \@letter_code,
|
|
where => $where,
|
|
}
|
|
);
|
|
|
|
cronlogaction({ action => 'End', info => "COMPLETED" });
|