diff --git a/C4/Log.pm b/C4/Log.pm
index 160dbe9ac2..b6f5163a6a 100644
--- a/C4/Log.pm
+++ b/C4/Log.pm
@@ -30,11 +30,11 @@ use C4::Dates qw(format_date);
use vars qw($VERSION @ISA @EXPORT);
BEGIN {
- # set the version for version checking
+ # set the version for version checking
$VERSION = 3.07.00.049;
- require Exporter;
- @ISA = qw(Exporter);
- @EXPORT = qw(&logaction &GetLogStatus &displaylog &GetLogs);
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT = qw(&logaction &cronlogaction &GetLogStatus &displaylog &GetLogs);
}
=head1 NAME
@@ -81,6 +81,20 @@ sub logaction {
$sth->finish;
}
+=item cronlogaction
+
+ &cronlogaction();
+
+Convenience routine to add a record into action_logs table from a cron job.
+
+=cut
+
+#'
+sub cronlogaction {
+ logaction( 'CRONJOBS', 'Run', 0, (caller(0))[1] ) if C4::Context->preference('CronjobLog');
+}
+
+
=item GetLogStatus
$status = GetLogStatus;
diff --git a/installer/data/mysql/atomicupdate/bug_13889_add_cronjoblog_syspref.sql b/installer/data/mysql/atomicupdate/bug_13889_add_cronjoblog_syspref.sql
new file mode 100644
index 0000000000..524fbac3f9
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_13889_add_cronjoblog_syspref.sql
@@ -0,0 +1 @@
+INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo');
diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql
index d4c64094c8..f371193923 100644
--- a/installer/data/mysql/sysprefs.sql
+++ b/installer/data/mysql/sysprefs.sql
@@ -92,6 +92,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('CoceProviders', NULL, 'aws,gb,ol', 'Coce providers', 'multiple'),
('COinSinOPACResults','1','','If ON, use COinS in OPAC search results page. NOTE: this can slow down search response time significantly','YesNo'),
('ConfirmFutureHolds','0','','Number of days for confirming future holds','Integer'),
+('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo'),
('CurrencyFormat','US','US|FR','Determines the display format of currencies. eg: \'36000\' is displayed as \'360 000,00\' in \'FR\' or \'360,000.00\' in \'US\'.','Choice'),
('dateformat','us','metric|us|iso','Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd)','Choice'),
('DebugLevel','2','0|1|2','Define the level of debugging information sent to the browser when errors are encountered (set to 0 in production). 0=none, 1=some, 2=most','Choice'),
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref
index b6f22d0f9d..73f76c22e2 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref
@@ -47,3 +47,9 @@ Logging:
on: Log
off: "Don't log"
- when serials are added, deleted or changed.
+ -
+ - pref: CronjobLog
+ choices:
+ on: Log
+ off: "Don't log"
+ - information from cron jobs.
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt
index 6215ccd745..41414a2c6f 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt
@@ -26,6 +26,7 @@
[% CASE 'LETTER' %]Letter
[% CASE 'FINES' %]Fines
[% CASE 'SYSTEMPREFERENCE' %]System prefs
+[% CASE 'CRONJOBS' %]Cron jobs
[% CASE %][% module %]
[% END %]
[% END %]
@@ -76,7 +77,7 @@
[% ELSE %]
[% END %]
- [% FOREACH modx IN [ 'CATALOGUING' 'AUTHORITIES' 'MEMBERS' 'ACQUISITIONS' 'SERIAL' 'CIRCULATION' 'LETTER' 'FINES' 'SYSTEMPREFERENCE' ] %]
+ [% FOREACH modx IN [ 'CATALOGUING' 'AUTHORITIES' 'MEMBERS' 'ACQUISITIONS' 'SERIAL' 'CIRCULATION' 'LETTER' 'FINES' 'SYSTEMPREFERENCE' 'CRONJOBS' ] %]
[% IF modules.grep(modx).size %]
[% ELSE %]
diff --git a/misc/cronjobs/advance_notices.pl b/misc/cronjobs/advance_notices.pl
index 028af5c520..16800f073d 100755
--- a/misc/cronjobs/advance_notices.pl
+++ b/misc/cronjobs/advance_notices.pl
@@ -56,6 +56,7 @@ use C4::Members;
use C4::Members::Messaging;
use C4::Overdues;
use Koha::DateUtils;
+use C4::Log;
=head1 NAME
@@ -199,6 +200,9 @@ END_WARN
unless ($confirm) {
pod2usage(1);
}
+
+cronlogaction();
+
# The fields that will be substituted into <>
my @item_content_fields = split(/,/,$itemscontent);
diff --git a/misc/cronjobs/automatic_renewals.pl b/misc/cronjobs/automatic_renewals.pl
index f96e00cd9b..73aad5fb6c 100755
--- a/misc/cronjobs/automatic_renewals.pl
+++ b/misc/cronjobs/automatic_renewals.pl
@@ -44,6 +44,9 @@ use Modern::Perl;
use C4::Circulation;
use C4::Context;
+use C4::Log;
+
+cronlogaction();
my $dbh = C4::Context->dbh;
my ( $borrowernumber, $itemnumber, $branch, $ok, $error );
diff --git a/misc/cronjobs/batch_anonymise.pl b/misc/cronjobs/batch_anonymise.pl
index b2678cae10..3ce77d4bdf 100755
--- a/misc/cronjobs/batch_anonymise.pl
+++ b/misc/cronjobs/batch_anonymise.pl
@@ -37,6 +37,7 @@ use Date::Calc qw(
Add_Delta_Days
);
use Getopt::Long;
+use C4::Log;
sub usage {
print STDERR <dbh;
my $i=0;
diff --git a/misc/cronjobs/cart_to_shelf.pl b/misc/cronjobs/cart_to_shelf.pl
index b7ea13a2ce..965f7dd0d4 100755
--- a/misc/cronjobs/cart_to_shelf.pl
+++ b/misc/cronjobs/cart_to_shelf.pl
@@ -29,6 +29,7 @@ use strict;
use warnings;
use C4::Items qw/ CartToShelf /;
+use C4::Log;
BEGIN {
@@ -63,6 +64,8 @@ unless ($hours) {
die "ERROR: No --hours (-h) option defined";
}
+cronlogaction();
+
my $query = "SELECT itemnumber FROM items WHERE location = 'CART' AND TIMESTAMPDIFF(HOUR, items.timestamp, NOW() ) > ?";
my $sth = C4::Context->dbh->prepare($query);
$sth->execute($hours);
diff --git a/misc/cronjobs/cleanup_database.pl b/misc/cronjobs/cleanup_database.pl
index 5cfc366b0f..cd92dc4957 100755
--- a/misc/cronjobs/cleanup_database.pl
+++ b/misc/cronjobs/cleanup_database.pl
@@ -36,10 +36,9 @@ BEGIN {
use C4::Context;
use C4::Dates;
-
use C4::Search;
-
use Getopt::Long;
+use C4::Log;
sub usage {
print STDERR <dbh();
my $sth;
my $sth2;
diff --git a/misc/cronjobs/cloud-kw.pl b/misc/cronjobs/cloud-kw.pl
index 9e12e587d9..82ce25f0ce 100755
--- a/misc/cronjobs/cloud-kw.pl
+++ b/misc/cronjobs/cloud-kw.pl
@@ -26,7 +26,7 @@ use YAML::Syck;
use Pod::Usage;
use Getopt::Long;
use C4::Context;
-
+use C4::Log;
my $verbose = 0;
my $help = 0;
@@ -44,6 +44,7 @@ sub usage {
usage() if $help || !$conf;
+cronlogaction();
my @clouds;
print "Reading configuration file: $conf\n" if $verbose;
diff --git a/misc/cronjobs/delete_expired_opac_registrations.pl b/misc/cronjobs/delete_expired_opac_registrations.pl
index 4d96d8a656..44cc9dabed 100755
--- a/misc/cronjobs/delete_expired_opac_registrations.pl
+++ b/misc/cronjobs/delete_expired_opac_registrations.pl
@@ -30,6 +30,7 @@ BEGIN {
use C4::Context;
use C4::Members qw/ DelMember /;
+use C4::Log;
my $help;
my $confirm;
@@ -63,6 +64,8 @@ if ( $help || !$confirm ) {
exit;
}
+cronlogaction();
+
# Delete accounts that haven't been upgraded from the 'temporary' category code
my $delay =
C4::Context->preference('PatronSelfRegistrationExpireTemporaryAccountsDelay');
diff --git a/misc/cronjobs/delete_patrons.pl b/misc/cronjobs/delete_patrons.pl
index a1463b174c..6c1a4891d1 100755
--- a/misc/cronjobs/delete_patrons.pl
+++ b/misc/cronjobs/delete_patrons.pl
@@ -8,6 +8,7 @@ use Getopt::Long;
use C4::Members;
use C4::VirtualShelves;
use Koha::DateUtils;
+use C4::Log;
my ( $help, $verbose, $not_borrowed_since, $expired_before, $category_code,
$branchcode, $confirm );
@@ -36,6 +37,8 @@ unless ( $not_borrowed_since or $expired_before or $category_code or $branchcode
exit;
}
+cronlogaction();
+
my $members = GetBorrowersToExpunge(
{
not_borrowered_since => $not_borrowed_since,
diff --git a/misc/cronjobs/delete_unverified_opac_registrations.pl b/misc/cronjobs/delete_unverified_opac_registrations.pl
index c270731fe3..1a7e70007c 100755
--- a/misc/cronjobs/delete_unverified_opac_registrations.pl
+++ b/misc/cronjobs/delete_unverified_opac_registrations.pl
@@ -30,6 +30,7 @@ BEGIN {
use C4::Context;
use C4::Members qw/ DelMember /;
+use C4::Log;
my $help;
my $confirm;
@@ -59,6 +60,8 @@ if ( $help || !$confirm ) {
exit;
}
+cronlogaction();
+
my $dbh = C4::Context->dbh;
$dbh->do( "
diff --git a/misc/cronjobs/fines.pl b/misc/cronjobs/fines.pl
index 72cb5cc866..75d3fbb969 100755
--- a/misc/cronjobs/fines.pl
+++ b/misc/cronjobs/fines.pl
@@ -38,6 +38,7 @@ use File::Spec;
use Koha::Calendar;
use Koha::DateUtils;
+use C4::Log;
my $help;
my $verbose;
@@ -70,6 +71,8 @@ if ($help) {
exit;
}
+cronlogaction();
+
my @borrower_fields =
qw(cardnumber categorycode surname firstname email phone address citystate);
my @item_fields = qw(itemnumber barcode date_due);
diff --git a/misc/cronjobs/gather_print_notices.pl b/misc/cronjobs/gather_print_notices.pl
index 46610d0ff4..ad4c4098f3 100755
--- a/misc/cronjobs/gather_print_notices.pl
+++ b/misc/cronjobs/gather_print_notices.pl
@@ -36,6 +36,7 @@ use C4::Letters;
use C4::Templates;
use File::Spec;
use Getopt::Long;
+use C4::Log;
sub usage {
print STDERR <new();
my @all_messages = @{ GetPrintMessages() };
exit unless (@all_messages);
diff --git a/misc/cronjobs/holds/auto_unsuspend_holds.pl b/misc/cronjobs/holds/auto_unsuspend_holds.pl
index 7116b4cb35..d17dfb55b0 100755
--- a/misc/cronjobs/holds/auto_unsuspend_holds.pl
+++ b/misc/cronjobs/holds/auto_unsuspend_holds.pl
@@ -30,5 +30,8 @@ BEGIN {
# cancel all expired hold requests
use C4::Reserves;
+use C4::Log;
+
+cronlogaction();
AutoUnsuspendReserves();
diff --git a/misc/cronjobs/holds/build_holds_queue.pl b/misc/cronjobs/holds/build_holds_queue.pl
index 9ec9825ea9..be50de705e 100755
--- a/misc/cronjobs/holds/build_holds_queue.pl
+++ b/misc/cronjobs/holds/build_holds_queue.pl
@@ -16,6 +16,9 @@ BEGIN {
}
use C4::HoldsQueue qw(CreateQueue);
+use C4::Log;
+
+cronlogaction();
CreateQueue();
diff --git a/misc/cronjobs/holds/cancel_expired_holds.pl b/misc/cronjobs/holds/cancel_expired_holds.pl
index da85d4b87c..f721553bb5 100755
--- a/misc/cronjobs/holds/cancel_expired_holds.pl
+++ b/misc/cronjobs/holds/cancel_expired_holds.pl
@@ -30,5 +30,8 @@ BEGIN {
# cancel all expired hold requests
use C4::Reserves;
+use C4::Log;
+
+cronlogaction();
CancelExpiredReserves();
diff --git a/misc/cronjobs/j2a.pl b/misc/cronjobs/j2a.pl
index 32f18ac73b..4000b6a49c 100755
--- a/misc/cronjobs/j2a.pl
+++ b/misc/cronjobs/j2a.pl
@@ -32,6 +32,7 @@ use C4::Context;
use C4::Members;
use Getopt::Long;
use Pod::Usage;
+use C4::Log;
=head1 NAME
@@ -126,6 +127,8 @@ if(not $fromcat && $tocat) { #make sure we've specified the info we need.
exit;
}
+cronlogaction();
+
my $dbh=C4::Context->dbh;
my @branches = C4::Branch::GetBranches();
#get today's date, format it and subtract upperagelimit
diff --git a/misc/cronjobs/longoverdue.pl b/misc/cronjobs/longoverdue.pl
index b60ed236e2..8edbcf8e5c 100755
--- a/misc/cronjobs/longoverdue.pl
+++ b/misc/cronjobs/longoverdue.pl
@@ -37,6 +37,7 @@ use C4::Context;
use C4::Items;
use C4::Circulation qw/LostItem/;
use Getopt::Long;
+use C4::Log;
my $lost; # key=lost value, value=num days.
my ($charge, $verbose, $confirm, $quiet);
@@ -129,6 +130,8 @@ unless ($confirm) {
print "### TEST MODE -- NO ACTIONS TAKEN ###\n";
}
+cronlogaction();
+
# In my opinion, this line is safe SQL to have outside the API. --atz
our $bounds_sth = C4::Context->dbh->prepare("SELECT DATE_SUB(CURDATE(), INTERVAL ? DAY)");
diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl
index 6e30fa22b1..7068d3dfc4 100755
--- a/misc/cronjobs/overdue_notices.pl
+++ b/misc/cronjobs/overdue_notices.pl
@@ -43,11 +43,10 @@ use C4::Debug;
use C4::Letters;
use C4::Overdues qw(GetFine GetOverdueMessageTransportTypes);
use C4::Budgets qw(GetCurrency);
-use Koha::DateUtils;
-
use Koha::Borrower::Debarments qw(AddUniqueDebarment);
use Koha::DateUtils;
use Koha::Calendar;
+use C4::Log;
=head1 NAME
@@ -316,6 +315,8 @@ GetOptions(
pod2usage(1) if $help;
pod2usage( -verbose => 2 ) if $man;
+cronlogaction();
+
if ( defined $csvfilename && $csvfilename =~ /^-/ ) {
warn qq(using "$csvfilename" as filename, that seems odd);
}
diff --git a/misc/cronjobs/process_message_queue.pl b/misc/cronjobs/process_message_queue.pl
index 2523122857..3325c8a2f3 100755
--- a/misc/cronjobs/process_message_queue.pl
+++ b/misc/cronjobs/process_message_queue.pl
@@ -26,6 +26,7 @@ BEGIN {
eval { require "$FindBin::Bin/../kohalib.pl" };
}
use C4::Letters;
+use C4::Log;
use Getopt::Long;
my $username = undef;
@@ -60,5 +61,7 @@ ENDUSAGE
die $usage if $help;
+cronlogaction();
+
C4::Letters::SendQueuedMessages( { verbose => $verbose, username => $username, password => $password, method => $method } );
diff --git a/misc/cronjobs/purge_suggestions.pl b/misc/cronjobs/purge_suggestions.pl
index 55ea0e7956..ee3da2ee63 100755
--- a/misc/cronjobs/purge_suggestions.pl
+++ b/misc/cronjobs/purge_suggestions.pl
@@ -32,6 +32,7 @@ BEGIN {
use Getopt::Long;
use Pod::Usage;
use C4::Suggestions;
+use C4::Log;
my ($help, $days);
@@ -55,6 +56,7 @@ EOF
}
if($days){
+ cronlogaction();
DelSuggestionsOlderThan($days);
}
diff --git a/misc/cronjobs/runreport.pl b/misc/cronjobs/runreport.pl
index 1842f2b839..5cc000d10d 100755
--- a/misc/cronjobs/runreport.pl
+++ b/misc/cronjobs/runreport.pl
@@ -24,6 +24,7 @@ use warnings;
use C4::Reports::Guided; # 0.12
use C4::Context;
use Koha::Email;
+use C4::Log;
use Getopt::Long qw(:config auto_help auto_version);
use Pod::Usage;
@@ -189,6 +190,8 @@ pod2usage( -verbose => 2 ) if ($man);
pod2usage( -verbose => 2 ) if ($help and $verbose);
pod2usage(1) if $help;
+cronlogaction();
+
unless ($format) {
$verbose and print STDERR "No format specified, assuming 'text'\n";
$format = 'text';
diff --git a/misc/cronjobs/serialsUpdate.pl b/misc/cronjobs/serialsUpdate.pl
index ff26ce9c71..fedf064e41 100755
--- a/misc/cronjobs/serialsUpdate.pl
+++ b/misc/cronjobs/serialsUpdate.pl
@@ -32,6 +32,7 @@ use C4::Context;
use C4::Dates qw/format_date format_date_in_iso/;
use C4::Debug;
use C4::Serials;
+use C4::Log;
use Date::Calc qw/Date_to_Days check_date/;
use Getopt::Long;
@@ -77,6 +78,8 @@ GetOptions(
pod2usage(1) if $help;
pod2usage( -verbose => 2 ) if $man;
+cronlogaction();
+
$verbose and !$confirm and print "### Database will not be modified ###\n";
if ( $note && $nonote ) {
diff --git a/misc/cronjobs/share_usage_with_koha_community.pl b/misc/cronjobs/share_usage_with_koha_community.pl
index b26300b214..c4353d86a8 100755
--- a/misc/cronjobs/share_usage_with_koha_community.pl
+++ b/misc/cronjobs/share_usage_with_koha_community.pl
@@ -7,6 +7,7 @@ use Getopt::Long;
use C4::Context;
use C4::UsageStats;
+use C4::Log;
use POSIX qw(strftime);
my ( $help, $verbose, $force );
@@ -30,6 +31,8 @@ If your library wants to share their usage statistics with the Koha community, y
exit 1;
}
+cronlogaction();
+
my $need_update = ($force ? 1 : C4::UsageStats::NeedUpdate() );
if ($need_update) {
diff --git a/misc/cronjobs/staticfines.pl b/misc/cronjobs/staticfines.pl
index 1d4580618c..1309c8b925 100755
--- a/misc/cronjobs/staticfines.pl
+++ b/misc/cronjobs/staticfines.pl
@@ -43,6 +43,7 @@ use C4::Overdues;
use C4::Calendar qw(); # don't need any exports from Calendar
use C4::Biblio;
use C4::Debug; # supplying $debug and $cgi_debug
+use C4::Log;
use Getopt::Long;
use List::MoreUtils qw/none/;
use Koha::DateUtils;
@@ -90,6 +91,8 @@ This script has the following parameters :
ENDUSAGE
die $usage if $help;
+cronlogaction();
+
my $dbh = C4::Context->dbh;
# Processing categories
diff --git a/misc/cronjobs/update_totalissues.pl b/misc/cronjobs/update_totalissues.pl
index 764faf4eaf..affa2a7e34 100755
--- a/misc/cronjobs/update_totalissues.pl
+++ b/misc/cronjobs/update_totalissues.pl
@@ -32,6 +32,7 @@ use Getopt::Long;
use Pod::Usage;
use C4::Context;
use C4::Biblio;
+use C4::Log;
use DateTime;
use DateTime::Format::MySQL;
use Time::HiRes qw/time/;
@@ -94,6 +95,8 @@ if ( not $result or $want_help ) {
usage();
}
+cronlogaction();
+
my $dbh = C4::Context->dbh;
$dbh->{AutoCommit} = 0;