[Koha-patches] [PATCH] Messaging Preferences for Intranet

Daniel Sweeney daniel.sweeney at liblime.com
Tue Feb 3 23:02:00 CET 2009


From: John Beppu <john.beppu at liblime.com>

- Added ability to modify per-user messaging preferences.

Signed-off-by: Daniel Sweeney <daniel.sweeney at liblime.com>
---
 .../prog/en/modules/members/memberentrygen.tmpl    |   47 ++++++++++
 members/memberentry.pl                             |   90 +++++++++++++++++++-
 2 files changed, 135 insertions(+), 2 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl
index 698f37b..19732eb 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl
@@ -865,6 +865,53 @@
 			</ol>
 			</fieldset>
 		<!-- /TMPL_UNLESS -->	
+
+                <fieldset class="rows">
+                        <legend>Items Borrowed Notifications</legend>
+                        <ol class="radio">
+                                <!-- TMPL_LOOP NAME="items_borrowed_loop" -->
+                                <li>
+                                        <label class="radio" for="yes_<!-- TMPL_VAR name="name" -->"> <!-- TMPL_VAR name="label" -->: </label>
+                                        <label for="yes_<!-- TMPL_VAR NAME="name" -->">Yes </label>
+                                        <!-- TMPL_IF NAME="yes" -->
+                                        <input type="radio" id="yes_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="1" checked="checked" />
+                                        <!-- TMPL_ELSE -->
+                                        <input type="radio" id="yes_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="1" />
+                                        <!-- /TMPL_IF -->
+                                        <label for="no_<!-- TMPL_VAR NAME="name" -->">No </label>
+                                        <!-- TMPL_IF NAME="no" -->
+                                        <input type="radio" id="no_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="0" checked="checked"/>
+                                        <!-- TMPL_ELSE -->
+                                        <input type="radio" id="no_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="0" />
+                                        <!-- /TMPL_IF -->
+                                </li>
+                                <!-- /TMPL_LOOP -->
+                        </ol>
+                </fieldset>
+
+                <fieldset class="rows">
+                        <legend>Items Returned Notifications</legend>
+                        <ol class="radio">
+                                <!-- TMPL_LOOP NAME="items_returned_loop" -->
+                                <li>
+                                        <label class="radio" for="yes_<!-- TMPL_VAR name="name" -->"> <!-- TMPL_VAR name="label" -->: </label>
+                                        <label for="yes_<!-- TMPL_VAR NAME="name" -->">Yes </label>
+                                        <!-- TMPL_IF NAME="yes" -->
+                                        <input type="radio" id="yes_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="1" checked="checked" />
+                                        <!-- TMPL_ELSE -->
+                                        <input type="radio" id="yes_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="1" />
+                                        <!-- /TMPL_IF -->
+                                        <label for="no_<!-- TMPL_VAR NAME="name" -->">No </label>
+                                        <!-- TMPL_IF NAME="no" -->
+                                        <input type="radio" id="no_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="0" checked="checked"/>
+                                        <!-- TMPL_ELSE -->
+                                        <input type="radio" id="no_<!-- TMPL_VAR NAME="name" -->" name="<!-- TMPL_VAR NAME="name" -->" value="0" />
+                                        <!-- /TMPL_IF -->
+                                </li>
+                                <!-- /TMPL_LOOP -->
+                        </ol>
+                </fieldset>
+
 <!-- /TMPL_IF -->
 
 <!-- TMPL_IF NAME="step_4" --><!-- TMPL_IF NAME="ExtendedPatronAttributes" --><!-- TMPL_UNLESS NAME="no_patron_attribute_types" -->
diff --git a/members/memberentry.pl b/members/memberentry.pl
index 26c05bb..8af1383 100755
--- a/members/memberentry.pl
+++ b/members/memberentry.pl
@@ -115,6 +115,7 @@ $category_type="A" unless $category_type; # FIXME we should display a error mess
 # if a add or modify is requested => check validity of data.
 %data = %$borrower_data if ($borrower_data);
 
+# initialize %newdata
 my %newdata;	# comes from $input->param()
 if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') {
     my @names= ($borrower_data && $op ne 'save') ? keys %$borrower_data : $input->param();
@@ -145,6 +146,26 @@ if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') {
     }
 }
 
+# remove keys from %newdata that ModMember() doesn't like
+{
+    my @keys_to_delete =
+        map { ("items_borrowed_$_", "items_returned_$_") } qw(email sms feed);
+    push @keys_to_delete, qw(
+        BorrowerMandatoryField
+        category_type
+        check_member
+        destination
+        nodouble
+        op
+        save
+        select_roadtype
+        updtype
+    );
+    for (@keys_to_delete) {
+        delete($newdata{$_});
+    }
+}
+
 #############test for member being unique #############
 if (($op eq 'insert') and !$nodouble){
         my $category_type_send=$category_type if ($category_type eq 'I'); 
@@ -290,7 +311,8 @@ if ((!$nok) and $nodouble and ($op eq 'insert' or $op eq 'save')){
 			delete $newdata{'password'};
 			delete $newdata{'userid'};
 		}
-		&ModMember(%newdata);    
+		&ModMember(%newdata);
+		save_messaging_preferences($input);
         if (C4::Context->preference('ExtendedPatronAttributes') and $input->param('setting_extended_patron_attributes')) {
             C4::Members::Attributes::SetBorrowerAttributes($borrowernumber, $extended_patron_attributes);
         }
@@ -454,6 +476,35 @@ foreach (keys(%flags)) {
 	push @flagdata,\%row;
 }
 
+## Mesaging Preferences
+##____________________________________________________________________________
+sub yes_or_no {
+    my ($transport, $config) = @_;
+    if (grep { $_ eq $transport } @{$config->{transports}}) {
+        return (yes => 1);
+    } else {
+        return (no => 1);
+    }
+}
+my $checkin_prefs  = C4::Members::Messaging::GetMessagingPreferences({
+    borrowernumber => $borrowernumber,
+    message_name   => 'Item Checkout'
+});
+my @items_borrowed_loop = (
+    { name => 'items_borrowed_email', label => 'Email',                yes_or_no('email', $checkin_prefs) },
+    { name => 'items_borrowed_sms',   label => 'Text Message',         yes_or_no('sms',   $checkin_prefs) },
+    { name => 'items_borrowed_feed',  label => 'XML Syndication Feed', yes_or_no('feed',  $checkin_prefs) },
+);
+my $checkout_prefs = C4::Members::Messaging::GetMessagingPreferences({
+    borrowernumber => $borrowernumber,
+    message_name   => 'Item Check-in'
+});
+my @items_returned_loop = (
+    { name => 'items_returned_email', label => 'Email',                yes_or_no('email', $checkout_prefs) },
+    { name => 'items_returned_sms',   label => 'Text Message',         yes_or_no('sms',   $checkout_prefs) },
+    { name => 'items_returned_feed',  label => 'XML Syndication Feed', yes_or_no('feed',  $checkout_prefs) },
+);
+
 #get Branches
 my @branches;
 my @select_branch;
@@ -496,7 +547,7 @@ if (C4::Context->preference("memberofinstitution")){
         $org_labels{$organisation}=$organisations->{$organisation}->{'surname'};
     }
     $member_of_institution=1;
-    
+
     $CGIorganisations = CGI::scrolling_list( -id => 'organisations',
         -name     => 'organisations',
         -labels   => \%org_labels,
@@ -576,6 +627,8 @@ $template->param(
   borrotitlepopup => $borrotitlepopup,
   guarantorinfo   => $guarantorinfo,
   flagloop  => \@flagdata,
+  items_borrowed_loop => \@items_borrowed_loop,
+  items_returned_loop => \@items_returned_loop,
   dateformat      => C4::Dates->new()->visual(),
   C4::Context->preference('dateformat') => 1,
   check_categorytype =>$check_categorytype,#to recover the category type with checkcategorytype function
@@ -674,6 +727,39 @@ sub patron_attributes_form {
 
 }
 
+sub save_messaging_preferences {
+    my $input = shift;
+    my %options = map { $_->{message_name} => $_ }
+        @{C4::Members::Messaging::GetMessagingOptions()};
+    my @checkin_transports;
+    my @checkout_transports;
+    for (qw(email sms feed)) {
+        push @checkin_transports,  $_ if ($input->param("items_returned_$_"));
+        push @checkout_transports, $_ if ($input->param("items_borrowed_$_"));
+    }
+    #use Data::Dump 'pp';
+    #warn pp({ checkin => \@checkin_transports, checkout => \@checkout_transports });
+
+    # Check-in Notifications
+    C4::Members::Messaging::SetMessagingPreference({
+        borrowernumber          => $borrowernumber,
+        wants_digest            => 1,
+        message_attribute_id    => $options{'Item Check-in'}{message_attribute_id},
+        message_transport_types => \@checkin_transports,
+    });
+    # Checkout Notifications
+    C4::Members::Messaging::SetMessagingPreference({
+        borrowernumber          => $borrowernumber,
+        wants_digest            => 1,
+        message_attribute_id    => $options{'Item Checkout'}{message_attribute_id},
+        message_transport_types => \@checkout_transports,
+    });
+    return {
+        checkin  => \@checkin_transports,
+        checkout => \@checkout_transports,
+    };
+}
+
 # Local Variables:
 # tab-width: 8
 # End:
-- 
1.5.5.GIT



More information about the Koha-patches mailing list