Bug 8271 teach SIPServer.pm to set its own lib path
[koha.git] / C4 / Message.pm
index dcd3bad..5386968 100644 (file)
@@ -1,4 +1,24 @@
 package C4::Message;
+
+# Copyright Liblime 2009
+# Copyright Catalyst IT 2012
+#
+# 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.
+
+
 use strict;
 use warnings;
 use C4::Context;
@@ -18,9 +38,15 @@ How to add a new message to the queue:
   use C4::Items;
   my $borrower = { borrowernumber => 1 };
   my $item     = C4::Items::GetItem(1);
-  my $letter   = C4::Letters::getletter('circulation', 'CHECKOUT');
-  C4::Letters::parseletter($letter, 'biblio',      $item->{biblionumber});
-  C4::Letters::parseletter($letter, 'biblioitems', $item->{biblionumber});
+  my $letter =  C4::Letters::GetPreparedLetter (
+      module => 'circulation',
+      letter_code => 'CHECKOUT',
+      branchcode => $branch,
+      tables => {
+          'biblio', $item->{biblionumber},
+          'biblioitems', $item->{biblionumber},
+      },
+  );
   C4::Message->enqueue($letter, $borrower->{borrowernumber}, 'email');
 
 How to update a borrower's last checkout message:
@@ -33,10 +59,11 @@ How to update a borrower's last checkout message:
 
 =head1 DESCRIPTION
 
-This module presents an OO interface to the message_queue.  Previously, you could
-only add messages to the message_queue via C<C4::Letters::EnqueueMessage()>.  With
-this module, you can also get previously inserted messages, manipulate them, and
-save them back to the database.
+This module presents an OO interface to the message_queue.  Previously, 
+you could only add messages to the message_queue via 
+C<C4::Letters::EnqueueMessage()>.  With this module, you can also get 
+previously inserted messages, manipulate them, and save them back to the 
+database.
 
 =cut
 
@@ -120,28 +147,54 @@ sub find_last_message {
 }
 
 
-=head3 C4::Message->enqueue($letter, $borrowernumber, $transport)
+=head3 C4::Message->enqueue($letter, $borrower, $transport)
 
 This is a front-end for C<C4::Letters::EnqueueLetter()> that adds metadata to
 the message.
 
 =cut
 
-# C4::Message->enqueue($letter, $borrowernumber, $transport)
+# C4::Message->enqueue($letter, $borrower, $transport)
 sub enqueue {
-    my ($class, $letter, $borrowernumber, $transport) = @_;
-    my $metadata = _make_metadata($letter);
+    my ($class, $letter, $borrower, $transport) = @_;
+    my $metadata   = _metadata($letter);
+    my $to_address = _to_address($borrower, $transport);
     $letter->{metadata} = Dump($metadata);
-    carp 'enqueuing...';
+    #carp "enqueuing... to $to_address";
     C4::Letters::EnqueueLetter({
-      letter                 => $letter,
-      borrowernumber         => $borrowernumber,
-      message_transport_type => $transport,
+        letter                 => $letter,
+        borrowernumber         => $borrower->{borrowernumber},
+        message_transport_type => $transport,
+        to_address             => $to_address,
     });
 }
 
-# _make_metadata($letter) -- return the letter split into head/body/footer
-sub _make_metadata {
+# based on message $transport, pick an appropriate address to send to
+sub _to_address {
+    my ($borrower, $transport) = @_;
+    my $address;
+    if ($transport eq 'email') {
+        $address = $borrower->{email}
+            || $borrower->{emailpro}
+            || $borrower->{B_email};
+    } elsif ($transport eq 'sms') {
+        $address = $borrower->{smsalertnumber}
+            || $borrower->{phone}
+            || $borrower->{phonepro}
+            || $borrower->{B_phone};
+    } else {
+        warn "'$transport' is an unknown message transport.";
+    }
+    if (not defined $address) {
+        warn "An appropriate $transport address "
+            . "for borrower $borrower->{userid} "
+            . "could not be found.";
+    }
+    return $address;
+}
+
+# _metadata($letter) -- return the letter split into head/body/footer
+sub _metadata {
     my ($letter) = @_;
     if ($letter->{content} =~ /----/) {
         my ($header, $body, $footer) = split(/----\r?\n?/, $letter->{content});
@@ -256,7 +309,7 @@ sub append {
     my $item;
     if (ref($letter_or_item)) {
         my $letter   = $letter_or_item;
-        my $metadata = _make_metadata($letter);
+        my $metadata = _metadata($letter);
         $item = $metadata->{body}->[0];
     } else {
         $item = $letter_or_item;
@@ -276,26 +329,48 @@ sub append {
 
 =head3 $message->message_id
 
+=cut
+
 =head3 $message->borrowernumber
 
+=cut
+
 =head3 $message->subject
 
+=cut
+
 =head3 $message->content
 
+=cut
+
 =head3 $message->metadata
 
+=cut
+
 =head3 $message->letter_code
 
+=cut
+
 =head3 $message->message_transport_type
 
+=cut
+
 =head3 $message->status
 
+=cut
+
 =head3 $message->time_queued
 
+=cut
+
 =head3 $message->to_address
 
+=cut
+
 =head3 $message->from_address
 
+=cut
+
 =head3 $message->content_type
 
 =cut
@@ -329,14 +404,3 @@ L<C4::Circulation>, L<C4::Letters>, L<C4::Members::Messaging>
 John Beppu <john.beppu@liblime.com>
 
 =cut
-
-# Local Variables: ***
-# mode: cperl ***
-# indent-tabs-mode: nil ***
-# cperl-close-paren-offset: -4 ***
-# cperl-continued-statement-offset: 4 ***
-# cperl-indent-level: 4 ***
-# cperl-indent-parens-as-block: t ***
-# cperl-tab-always-indent: nil ***
-# End: ***
-# vim:tabstop=8 softtabstop=4 shiftwidth=4 shiftround expandtab