@@ -, +, @@
up anything to actually send messages on your test instance
---
C4/Letters.pm | 6 +++
installer/data/mysql/mandatory/sysprefs.sql | 1 +
.../en/modules/admin/preferences/admin.pref | 9 ++++
t/db_dependent/Letters.t | 45 ++++++++++++++++++-
4 files changed, 60 insertions(+), 1 deletion(-)
--- a/C4/Letters.pm
+++ a/C4/Letters.pm
@@ -1021,6 +1021,10 @@ sub SendQueuedMessages {
Koha::Exceptions::BadParameter->throw("Parameter message_id cannot be empty if passed.")
if ( exists( $params->{message_id} ) && !$params->{message_id} );
+ my $MessageQueueMode = C4::Context->preference('MessageQueueMode');
+
+ return 0 unless ( $MessageQueueMode eq 'on' || $MessageQueueMode eq 'plugin' );
+
if ( C4::Context->config("enable_plugins") ) {
my @plugins = Koha::Plugins->new->GetPlugins({
method => 'before_send_messages',
@@ -1038,6 +1042,8 @@ sub SendQueuedMessages {
}
}
+ return 0 unless ( $MessageQueueMode eq 'on' );
+
my $smtp_transports = {};
my $count_messages = 0;
--- a/installer/data/mysql/mandatory/sysprefs.sql
+++ a/installer/data/mysql/mandatory/sysprefs.sql
@@ -411,6 +411,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('MaxTotalSuggestions','',NULL,'Number of total suggestions used for time limit with NumberOfSuggestionDays','Free'),
('MembershipExpiryDaysNotice','',NULL,'Send an account expiration notice that a patron\'s card is about to expire after','Integer'),
('MergeReportFields','',NULL,'Displayed fields for deleted MARC records after merge','Free'),
+('MessageQueueMode','on','on|off|plugins','Search Engine','Choice'),
('minPasswordLength','8',NULL,'Specify the minimum length of a patron/staff password','free'),
('NewItemsDefaultLocation','','','If set, all new items will have a location of the given Location Code ( Authorized Value type LOC )',''),
('NewsAuthorDisplay','none','none|opac|staff|both','Display the author name for news items.','Choice'),
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref
@@ -301,3 +301,12 @@ Administration:
"ARRAY": "Searchable array"
-
ISO2709 format is recommended as it is faster and takes less space, whereas array format makes the full MARC record searchable.
-
NOTE: Making the full record searchable may have a negative effect on relevance ranking of search results.
+ Message processing:
+ -
+ - "When running the message queue processor"
+ - pref: MessageQueueMode
+ default: on
+ choices:
+ on: process all messages and plugin hooks
+ plugins: process plugin hooks only
+ off: process nothing
--- a/t/db_dependent/Letters.t
+++ a/t/db_dependent/Letters.t
@@ -19,7 +19,7 @@
use Modern::Perl;
use File::Basename qw(dirname);
-use Test::More tests => 103;
+use Test::More tests => 104;
use Test::MockModule;
use Test::Warn;
@@ -1582,3 +1582,46 @@ subtest 'Quote user params in GetPreparedLetter' => sub {
$exec_time
);
};
+
+subtest 'Test MessageQueueMode' => sub {
+ plan tests => 3;
+
+ my $dbh = C4::Context->dbh;
+
+ my $borrowernumber = Koha::Patron->new({
+ firstname => 'Jane',
+ surname => 'Smith',
+ categorycode => $patron_category,
+ branchcode => $library->{branchcode},
+ dateofbirth => $date,
+ })->store->borrowernumber;
+
+ $dbh->do(q|DELETE FROM message_queue|);
+ $my_message = {
+ 'letter' => {
+ 'content' => 'a message',
+ 'metadata' => 'metadata',
+ 'code' => 'TEST_MESSAGE',
+ 'content_type' => 'text/plain',
+ 'title' => 'message title'
+ },
+ 'borrowernumber' => $borrowernumber,
+ 'to_address' => undef,
+ 'message_transport_type' => 'sms',
+ 'from_address' => 'from@example.com'
+ };
+
+ my $id = C4::Letters::EnqueueLetter($my_message);
+
+ t::lib::Mocks::mock_preference('MessageQueueMode', 'off');
+ C4::Letters::SendQueuedMessages();
+ is( Koha::Notice::Messages->find( $id )->status, 'pending', 'Message is pending for off' );
+
+ t::lib::Mocks::mock_preference('MessageQueueMode', 'plugin');
+ C4::Letters::SendQueuedMessages();
+ is( Koha::Notice::Messages->find( $id )->status, 'pending', 'Message is pending for plugin' );
+
+ t::lib::Mocks::mock_preference('MessageQueueMode', 'on');
+ C4::Letters::SendQueuedMessages();
+ is( Koha::Notice::Messages->find( $id )->status, 'failed', 'Message is failed for on' );
+};
--