adding SMS stuff so we don't forget about it
[koha.git] / sms / sms_listen.pl
diff --git a/sms/sms_listen.pl b/sms/sms_listen.pl
new file mode 100755 (executable)
index 0000000..08c28c8
--- /dev/null
@@ -0,0 +1,131 @@
+#!/usr/bin/perl
+
+use strict;
+use C4::SMS;
+use C4::Auth;
+use C4::Context;
+use C4::Members;
+use C4::Circulation;
+my ($res,$ua);
+my %commands;
+my $message;
+my $phone;
+my $result;
+my $errorcode;
+my $smsid;
+my $wait=600;## 10 mn. wait between sms checking
+my $dbh=C4::Context->dbh;
+
+STARTAGAIN:
+($res,$ua)=get_sms_auth();
+AGAIN:
+$errorcode=0;
+       if ($res->{pRetCode}==200){
+        $result=read_sms($ua,$res->{pSessionId});
+       $errorcode=$result->{pErrCode};
+print "connected\n";
+       }else{
+       kill_sms($ua,$res->{pSessionId});
+       warn (error_codes($res->{pErrCode}),$res->{pErrcode}) ;
+#      sleep $wait;
+       goto FINISH;
+
+       }
+if ($errorcode && $errorcode !=-9005){
+kill_sms($ua,$res->{pSessionId});
+warn error_codes($errorcode) ;
+# sleep $wait;
+goto FINISH;
+
+}elsif ($errorcode ==-9005){
+print "no more messages to read\n";
+goto WAITING;
+}
+#Parse the message to a useful hash
+my @action=parse_message( $result->{pContent});
+## Log the request in our database;
+ $smsid=write_sms($action[1], $result->{pContent},$result->{pMsisdn});
+print "message logged\n";
+##Now do the service required
+if (uc($action[0]) eq "RN"){
+print "dealing request\n";
+my ($ok,$cardnumber)=C4::Auth::checkpw($dbh,$action[1],$action[2]);
+    if($ok){
+       my $item=getiteminformation(undef,0,$action[3]);
+          if ($item){
+               my $borrower=getmember($cardnumber);
+               my $status=renewstatus(undef,$borrower->{borrowernumber},$item->{itemnumber});
+               if ($status==1){
+               my $date=renewbook(undef,$borrower->{borrowernumber},$item->{itemnumber});
+               $message="Uzatildi :Renewed ".$item->{barcode}." : ".$date;
+               my $send=send_message($result,$message,$smsid);
+               }elsif($status==2){
+                $message="Cok erken- yenilenmedi! :Too early-not renewed:".$item->{barcode};
+               my $send=send_message($result,$message,$smsid);
+               }elsif($status==3){
+                $message="Uzatamazsiniz GERI getiriniz! :No more renewals RETURN the item:".$item->{barcode};
+               my $send=send_message($result,$message,$smsid);
+               }elsif($status==4){
+                $message="Ayirtildi GERI getiriniz! :Reserved RETURN the item:".$item->{barcode};
+               my $send=send_message($result,$message,$smsid);
+               }elsif($status==0){
+                $message="Uzatilamaz! :Can not renew:".$item->{barcode};
+               my $send=send_message($result,$message,$smsid);
+               }
+           }else{
+          $message="Yanlis barkot! :Wrong barcode!";
+          my $send=send_message($result,$message,$smsid);
+         }#wrong barcode
+    }else{
+       $message="Yanlis kullanici/sifre! :Wrong username/password!";
+       my $send=send_message($result,$message,$smsid);
+    }##wrong user/pass
+}else{
+## reply about error
+$message="Yanlis mesaj formati! :Wrong message! :
+                RN usercardno password barcode";
+my $send=send_message($result,$message,$smsid);
+}### wrong service
+
+goto AGAIN;
+
+
+
+
+WAITING:
+##Now send the messages waiting in queue
+my $smssth=$dbh->prepare("SELECT smsid,user_phone,message from sms_messages where date_replied like '0000-00-00%' ");
+$smssth->execute();
+my @phones;
+while (my $data=$smssth->fetchrow_hashref){
+push @phones,$data;
+}
+$smssth->finish;
+
+foreach my $user(@phones){
+print "replying $user->{user_phone}";
+my $send=send_sms($ua,$user->{user_phone},$user->{message},$res->{pSessionId});
+my $reply="--failed\n";
+       if ($send->{pRetCode}==200){
+$reply= "--replied\n";
+       mod_sms($user->{smsid},"Sent");
+       }
+print $reply;
+}
+$dbh->disconnect;
+
+
+sub send_message{
+my ($mes,$message,$smsid)=@_;
+my $send=send_sms($ua,$mes->{pMsisdn},$message,$res->{pSessionId});
+       if ($send->{pRetCode}==200){
+       mod_sms($smsid,$message);
+       }else{
+       my $error=error_codes($send->{pErrCode});
+       mod_sms($smsid,"Not replied error:".$error);
+       }
+return $send;
+}
+FINISH:
+1;
+__END__