b222e7d921
Adding POD, changing the config files to live in a path pointed to by koha-conf.xml This means multiple instances can have their own config Please test the 2 patches together Signed-off-by: Magnus Enger <magnus@libriotech.no> Works as advertised. Arbitrary arguments can be passed to SMS:Send drivers. If an argument is provided that has already been set by SMS::Send or the driver, it will be overwritten by the value from the YAML file. My only suggestion for an improvement would be an example of what the YAML should look like, but that is a minor thing. Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
149 lines
3.5 KiB
Perl
149 lines
3.5 KiB
Perl
package C4::SMS;
|
|
|
|
# Copyright 2007 Liblime
|
|
# Copyright 2015 Biblibre
|
|
# Copyright 2016 Catalyst
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
=head1 NAME
|
|
|
|
C4::SMS - send SMS messages
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
my $success = C4::SMS->send_sms({ message => 'This is my text message',
|
|
destination => '212-555-1212' });
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
A wrapper for SMS::Send.
|
|
|
|
Can use a yaml file for config, the path to which is in the koha-conf.xml
|
|
<sms_send_config>__KOHA_CONF_DIR__/sms_send/</sms_send_config>
|
|
|
|
Each file needs to be in the format of
|
|
__KOHA_CONF_DIR__/sms_send/<driver>.yaml
|
|
|
|
For example for SMS::Send::UK::Kapow the config would be
|
|
|
|
/etc/koha/sites/instancename/sms_send/UK/Kapow.yaml for package install
|
|
or
|
|
/etc/koha/sms_send/UK/Kapow.yaml for tarball
|
|
|
|
A underscore character is prepended to all parameter names so they are
|
|
treated as driver-specific options (leading underscore must not appear
|
|
in config file).
|
|
|
|
=cut
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use C4::Context;
|
|
use File::Spec;
|
|
|
|
|
|
|
|
=head1 METHODS
|
|
|
|
=cut
|
|
|
|
# The previous implmentation used username and password.
|
|
# our $user = C4::Context->config('smsuser');
|
|
# our $pwd = C4::Context->config('smspass');
|
|
|
|
=head2 send_sms
|
|
|
|
=cut
|
|
|
|
sub send_sms {
|
|
my $self = shift;
|
|
my $params= shift;
|
|
|
|
foreach my $required_parameter ( qw( message destination ) ) {
|
|
# Should I warn in some way?
|
|
return unless defined $params->{ $required_parameter };
|
|
}
|
|
|
|
eval { require SMS::Send; };
|
|
if ( $@ ) {
|
|
# we apparently don't have SMS::Send. Return a failure.
|
|
return;
|
|
}
|
|
|
|
# This allows the user to override the driver. See SMS::Send::Test
|
|
my $driver = exists $params->{'driver'} ? $params->{'driver'} : $self->driver();
|
|
return unless $driver;
|
|
|
|
|
|
my ($sent, $sender);
|
|
|
|
my $subpath = $driver;
|
|
$subpath =~ s|::|/|;
|
|
|
|
my $conf_file =
|
|
File::Spec->catfile( C4::Context->config('sms_send_config'), $subpath )
|
|
. q{.yaml};
|
|
my %args;
|
|
if ( -f $conf_file ) {
|
|
require YAML;
|
|
my $conf = YAML::LoadFile( $conf_file );
|
|
%args = map { q{_} . $_ => $conf->{$_} } keys %$conf;
|
|
}
|
|
|
|
eval {
|
|
# Create a sender
|
|
$sender = SMS::Send->new(
|
|
$driver,
|
|
_login => C4::Context->preference('SMSSendUsername'),
|
|
_password => C4::Context->preference('SMSSendPassword'),
|
|
%args,
|
|
);
|
|
|
|
# Send a message
|
|
$sent = $sender->send_sms(
|
|
to => $params->{destination},
|
|
text => $params->{message},
|
|
);
|
|
};
|
|
|
|
#We might die because SMS::Send $driver is not defined or the sms-number has a bad format
|
|
#Catch those errors and fail the sms-sending gracefully.
|
|
if ($@) {
|
|
warn $@;
|
|
return;
|
|
}
|
|
# warn 'failure' unless $sent;
|
|
return $sent;
|
|
}
|
|
|
|
=head2 driver
|
|
|
|
=cut
|
|
|
|
sub driver {
|
|
my $self = shift;
|
|
|
|
# return 'US::SprintPCS';
|
|
return C4::Context->preference('SMSSendDriver');
|
|
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|