Bug 36051: Add option to specify SMS::Send driver parameters in a system preference

If an SMS::Send driver ( such as Twilio ) requires additional parameters, those
parameters have to be placed in a yaml file named after the SMS::Send driver,
and the path to that file specified in the Koha conf file.

It would be good if we had the option to specify those parameters in a YAML
system preference instead. This would be less complicated and avoid requiring
an administrator to update that data from the backend.

Test Plan:
1) Set up an SMS::Send driver that requires additional options;
   a Twilio account meets these requirements and can be created for
   free. Set this up using the traditional file based system.
2) Verify you can send SMS messages
3) Move the contents of that file into the new system preference
   SMSSendAdditionalOptions
4) Verify you can still send SMS messages
5) Delete the file
6) Verify yet again you can still send SMS messages!

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Kyle Hall 2024-02-08 12:44:28 -05:00 committed by Katrin Fischer
parent a1d5ad87d7
commit 309e0af9bb
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834
4 changed files with 40 additions and 1 deletions

View file

@ -98,19 +98,33 @@ sub send_sms {
my $subpath = $driver;
$subpath =~ s|::|/|g;
# Extract additional SMS::Send arguments from file
my $sms_send_config = C4::Context->config('sms_send_config');
my $conf_file = defined $sms_send_config
? File::Spec->catfile( $sms_send_config, $subpath )
: $subpath;
$conf_file .= q{.yaml};
my %args;
my %args = ();
if ( -f $conf_file ) {
require YAML::XS;
my $conf = YAML::XS::LoadFile( $conf_file );
%args = map { q{_} . $_ => $conf->{$_} } keys %$conf;
}
# Extract additional SMS::Send arguments from the syspref
# Merge with any arguments from file with syspref taking precedence
my $sms_send_config_syspref = C4::Context->preference('SMSSendAdditionalOptions');
if ( $sms_send_config_syspref ) {
require YAML::XS;
$sms_send_config_syspref = "$sms_send_config_syspref\n\n";
my $yaml;
eval { $yaml = YAML::XS::Load(Encode::encode_utf8($yaml)); };
my %syspref_args = map { q{_} . $_ => $conf->{$_} } keys %$conf;
%args = ( %args, %syspref_args );
}
eval {
# Create a sender
$sender = SMS::Send->new(

View file

@ -0,0 +1,20 @@
use Modern::Perl;
return {
bug_number => "36051",
description => "Add option to specify SMS::Send driver parameters in a system preference instead of a file",
up => sub {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
# Do you stuffs here
$dbh->do(
q{
INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
('SMSSendAdditionalOptions', '', '', 'Additional SMS::Send parameters used to send SMS messages', 'free');
}
);
say $out "Added new system preference 'SMSSendAdditionalOptions'";
},
};

View file

@ -714,6 +714,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('SIP2SortBinMapping','',NULL,'Use the following mappings to determine the sort_bin of a returned item. The mapping should be on the form \"branchcode:item field:item field value:sort bin number\", with one mapping per line.','free'),
('SkipHoldTrapOnNotForLoanValue','',NULL,'If set, Koha will never trap items for hold with this notforloan value','Integer'),
('SlipCSS','',NULL,'Slips CSS url.','free'),
('SMSSendAdditionalOptions', '', '', 'Additional SMS::Send parameters used to send SMS messages', 'free'),
('SMSSendDriver','','','Sets which SMS::Send driver is used to send SMS messages.','free'),
('SMSSendPassword', '', '', 'Password used to send SMS messages', 'free'),
('SMSSendUsername', '', '', 'Username/Login used to send SMS messages', 'free'),

View file

@ -238,6 +238,10 @@ Patrons:
- pref: EmailSMSSendDriverFromAddress
class: email
- "for emails sent using \"Email\" send driver."
- "If the SMS::Send driver requires more options that just username/login and password, entire them here as YAML key/value pairs:"
- pref: SMSSendAdditionalOptions
type: textarea
syntax: text/x-yaml
-
- pref: FallbackToSMSIfNoEmail
choices: