Bug 10572: Add phone to message_transport_types table for new installs
[koha.git] / C4 / SMS.pm
index d7d115f..24580d6 100644 (file)
--- a/C4/SMS.pm
+++ b/C4/SMS.pm
 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__
+