X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FSMS.pm;h=24580d6c9f9a47357c728d4530c640ee80f63918;hb=568f32606c2c9c247b2b477193a2d6814f738fa6;hp=d7d115f2a76c01b2e0b7d2eb43a1cac73fad0591;hpb=9c8a1e29f8f25890c341859eb943aff64f7f37ac;p=koha.git diff --git a/C4/SMS.pm b/C4/SMS.pm index d7d115f2a7..24580d6c9f 100644 --- a/C4/SMS.pm +++ b/C4/SMS.pm @@ -1,140 +1,108 @@ package C4::SMS; -#Written by tgarip@neu.edu.tr for SMS message sending and other SMS related services + +# Copyright 2007 Liblime +# +# 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 2 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +=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 + + + +=cut use strict; use warnings; -use LWP::UserAgent; use C4::Context; -use vars qw($VERSION @ISA @EXPORT); +use vars qw( $VERSION ); BEGIN { - require Exporter; - @ISA = qw(Exporter); - $VERSION = 0.03; - @EXPORT = qw( - &get_sms_auth - &send_sms - &read_sms - &error_codes - &parse_phone - &parse_message - &write_sms - &mod_sms - &kill_sms - ); + $VERSION = 3.07.00.049; } -our $user = C4::Context->config('smsuser'); -our $pwd = C4::Context->config('smspass'); -our $uri = "https://spgw.kktcell.com/smshttpproxy/SmsHttpProxyServlet"; +=head1 METHODS +=cut -sub get_sms_auth { - my $ua = LWP::UserAgent->new; - my $commands; - my $res=$ua->post($uri,[cmd=>'REGISTER',pUser=>$user,pPwd=>$pwd]); - if ($res->is_success){ - $commands=parse_content($res->content); - } - return($commands,$ua); -} +# The previous implmentation used username and password. +# our $user = C4::Context->config('smsuser'); +# our $pwd = C4::Context->config('smspass'); -sub send_sms { - my $ua = shift or return undef; - my $phone=shift; - my $message=shift; - my $session=shift; - my $res=$ua->post($uri,[cmd=>'SENDSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130,pMsisdn=>$phone, - pContent=>$message]); - return parse_content($res->content); -} +=head2 send_sms -sub read_sms { - my $ua = shift or return undef; - my $session=shift; - my $res=$ua->post($uri,[cmd=>'GETSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130]); - return parse_content($res->content); -} +=cut -sub parse_content { - my $content = shift; - my %commands; - my @attributes = split /&/,$content; - foreach my $params(@attributes){ - my (@param) = split /=/,$params; - $commands{$param[0]}=$param[1]; - } - return(\%commands); +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; + + # warn "using driver: $driver to send message to $params->{'destination'}"; + + # Create a sender + my $sender = SMS::Send->new( $driver, + _login => C4::Context->preference('SMSSendUsername'), + _password => C4::Context->preference('SMSSendPassword'), + ); + + # Send a message + my $sent = $sender->send_sms( to => $params->{'destination'}, + text => $params->{'message'}, + ); + # warn 'failure' unless $sent; + return $sent; } -sub error_codes { - my $error = shift; - ($error== -1) and return "Closed session - Retry"; - ($error== -2) and return "Invalid session - Retry"; - ($error== -3) and return "Invalid password"; - ($error== -103) and return "Invalid user"; - ($error== -422) and return "Invalid Parameter"; - ($error== -426) and return "User does not have permission to send message"; - ($error== -700) and return "No permission"; - ($error== -801) and return "Msdisn count differs - warn administartor"; - ($error== -803) and return "Content count differs from XSER count"; - ($error== -1101) and return "Insufficient Credit - Do not retry"; - ($error== -1104) and return "Invalid Phone number"; - ($error==-10001) and return "Internal system error - Notify provider"; - ($error== -9005) and return "No messages to read"; - if ($error){ - warn "Unknown SMS error '$error' occured"; - return "Unknown SMS error '$error' occured"; - } -} +=head2 driver -sub parse_phone { - ## checks acceptable phone numbers - ## FIXME: accept Telsim when available (542 numbers) - my $phone=shift; - $phone=~s/^0//g; - $phone=~s/ //g; - my $length=length($phone); - if ($length==10 || $length==12){ - my $code=substr($phone,0,3) if $length==10; - $code=substr($phone,0,5) if $length==12; - if ($code=~/533/){ - return $phone; - } - } - return 0; -} +=cut -sub parse_message { - my $message = shift; - $message =~ s/ / /g; - my @parsed = split / /, $message; - return (@parsed); -} +sub driver { + my $self = shift; -sub write_sms { - my ($userid,$message,$phone)=@_; - my $dbh=C4::Context->dbh; - my $sth=$dbh->prepare("INSERT into sms_messages(userid,message,user_phone,date_received) values(?,?,?,now())"); - $sth->execute($userid,$message,$phone); - $sth->finish; - return $dbh->{'mysql_insertid'}; # FIXME: mysql specific -} + # return 'US::SprintPCS'; + return C4::Context->preference('SMSSendDriver'); -sub mod_sms { - my ($smsid,$message)=@_; - my $dbh=C4::Context->dbh; - my $sth=$dbh->prepare("UPDATE sms_messages set reply=?, date_replied=now() where smsid=?"); - $sth->execute($message,$smsid); } -sub kill_sms { - #end a session - my $ua = shift or return undef; - my $session = shift; - my $res = $ua->post($uri,[cmd=>'KILLSESSION',pSessionId=>$session]); -} 1; + __END__ +