From 309e0af9bb32f4e515066e8fbc3cacde4a0e8cf2 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 8 Feb 2024 12:44:28 -0500 Subject: [PATCH] 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 Signed-off-by: Katrin Fischer --- C4/SMS.pm | 16 ++++++++++++++- .../data/mysql/atomicupdate/bug_36051.pl | 20 +++++++++++++++++++ installer/data/mysql/mandatory/sysprefs.sql | 1 + .../en/modules/admin/preferences/patrons.pref | 4 ++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100755 installer/data/mysql/atomicupdate/bug_36051.pl diff --git a/C4/SMS.pm b/C4/SMS.pm index cb65263f98..bcf2e5bbcc 100644 --- a/C4/SMS.pm +++ b/C4/SMS.pm @@ -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( diff --git a/installer/data/mysql/atomicupdate/bug_36051.pl b/installer/data/mysql/atomicupdate/bug_36051.pl new file mode 100755 index 0000000000..0461900e29 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_36051.pl @@ -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'"; + }, +}; diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql index ea52eac6e4..8c19ccd127 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -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'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref index f48ba4c13c..75088bba46 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref @@ -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: -- 2.39.5