From 35d6e23192a0ff61ca2214c11347189d165e682e 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 instead of a file 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! --- C4/SMS.pm | 16 +++++++++++++++- installer/data/mysql/atomicupdate/bug_36051.pl | 18 ++++++++++++++++++ installer/data/mysql/mandatory/sysprefs.sql | 1 + .../en/modules/admin/preferences/patrons.pref | 4 ++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100755 installer/data/mysql/atomicupdate/bug_36051.pl diff --git a/C4/SMS.pm b/C4/SMS.pm index ce3358f66ab..e3ecae3c167 100644 --- a/C4/SMS.pm +++ b/C4/SMS.pm @@ -94,19 +94,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 00000000000..659b686f7cd --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_36051.pl @@ -0,0 +1,18 @@ +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 669074aa506..b69446e5a49 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -712,6 +712,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('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'), +('SMSSendAdditionalOptions', '', '', 'Additional SMS::Send parameters used to send SMS messages', 'free'), ('SocialNetworks','','facebook|linkedin|email','Enable/Disable social networks links in opac detail pages','Choice'), ('SpecifyDueDate','1','','Define whether to display \"Specify Due Date\" form in Circulation','YesNo'), ('SpecifyReturnDate',1,'','Define whether to display \"Specify Return Date\" form in Circulation','YesNo'), 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 09991d64b44..2414a348851 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.30.2