X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FSMS.pm;h=24580d6c9f9a47357c728d4530c640ee80f63918;hb=568f32606c2c9c247b2b477193a2d6814f738fa6;hp=a0b21e17700f7e195e76bcf2e7e2432f0a525fd0;hpb=381bc1845e8ee8f62b34af26be7b5abb487eef39;p=koha.git diff --git a/C4/SMS.pm b/C4/SMS.pm index a0b21e1770..24580d6c9f 100644 --- a/C4/SMS.pm +++ b/C4/SMS.pm @@ -1,149 +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 LWP::UserAgent; +use warnings; + use C4::Context; -use vars qw($VERSION @ISA @EXPORT); -my $user=C4::Context->config('smsuser'); -my $pwd=C4::Context->config('smspass'); -my $uri ="https://spgw.kktcell.com/smshttpproxy/SmsHttpProxyServlet"; +use vars qw( $VERSION ); BEGIN { - require Exporter; - @ISA = qw(Exporter); - $VERSION = 0.02; - @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; } -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); -} +=head1 METHODS -sub send_sms{ -my $ua=shift; -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); -} -sub read_sms{ -my $ua=shift; -my $session=shift; - my $res=$ua->post($uri,[cmd=>'GETSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130]); -return parse_content($res->content); -} -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); -} +=cut -sub error_codes{ -my $error=shift; -if ($error==-1){ -return "Closed session - Retry "; -}elsif($error==-2){ -return "Invalid session - Retry "; -}elsif($error==-3){ -return "Invalid password" ; -}elsif($error==-103){ -return "Invalid user"; -}elsif($error==-422){ -return "Invalid Parameter"; -}elsif($error==-426){ -return "User doesn’t have permission to send message"; -}elsif($error==-700){ -return "No permission"; -}elsif($error==-801){ -return " Msdisn count differs-warn administartor"; -}elsif($error==-803){ -return "Content count differs from XSER count"; -}elsif($error==-1101){ -return " Insufficient Credit Do not retry" ; -}elsif($error==-1104){ -return "Invalid Phone number"; -}elsif($error==-10001){ -return " Internal system error- Tell Turkcell/Telsim"; -}elsif($error==-9005){ -return " No messages to read"; -}elsif ($error){ -return "Unknow error no $error occured - tell Turkcell/Telsim"; -} -} +# The previous implmentation used username and password. +# our $user = C4::Context->config('smsuser'); +# our $pwd = C4::Context->config('smspass'); -sub parse_phone{ -## checks acceptable phone numbers -## Fix to 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; - }else{ - return 0; - } -}else{ -return 0; -} -} +=head2 send_sms -sub parse_message{ -my $message=shift; -$message=~s/ / /g; -my @parsed=split / /,$message; -return (@parsed); -} +=cut -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'}; -} +sub send_sms { + my $self = shift; + my $params= shift; -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); -$sth->finish; + 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 kill_sms{ -#end a session -my $ua=shift; -my $session=shift; - my $res=$ua->post($uri,[cmd=>'KILLSESSION',pSessionId=>$session]); + +=head2 driver + +=cut + +sub driver { + my $self = shift; + + # return 'US::SprintPCS'; + return C4::Context->preference('SMSSendDriver'); + } + 1; + __END__ +