1 package C4::Members::Messaging;
3 # Copyright (C) 2008 LibLime
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA 02111-1307 USA
24 use vars qw($VERSION);
27 # set the version for version checking
33 C4::Members::Messaging - manage patron messaging preferences
44 =head2 GetMessagingPreferences
48 my $preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrower->{'borrowernumber'},
49 message_name => 'DUE' } );
51 returns: a hashref of messaging preferences for this borrower for a particlar message_name
57 sub GetMessagingPreferences {
60 foreach my $required ( qw( borrowernumber message_name ) ) {
61 if ( ! exists $params->{ $required } ) {
66 my $sql = <<'END_SQL';
67 SELECT borrower_message_preferences.*,
68 borrower_message_transport_preferences.message_transport_type,
71 FROM borrower_message_preferences
72 LEFT JOIN borrower_message_transport_preferences
73 ON borrower_message_transport_preferences.borrower_message_preference_id = borrower_message_preferences.borrower_message_preference_id
74 LEFT JOIN message_attributes
75 ON message_attributes.message_attribute_id = borrower_message_preferences.message_attribute_id
76 LEFT JOIN message_transports
77 ON message_transports.message_attribute_id = message_attributes.message_attribute_id
78 AND message_transports.message_transport_type = borrower_message_transport_preferences.message_transport_type
79 WHERE borrower_message_preferences.borrowernumber = ?
80 AND message_attributes.message_name = ?
83 my @bind_params = ( $params->{'borrowernumber'}, $params->{'message_name'} );
85 my $sth = C4::Context->dbh->prepare($sql);
86 $sth->execute(@bind_params);
88 my %transports; # helps build a list of unique message_transport_types
89 ROW: while ( my $row = $sth->fetchrow_hashref() ) {
90 next ROW unless $row->{'message_attribute_id'};
91 # warn( Data::Dumper->Dump( [ $row ], [ 'row' ] ) );
92 $return->{'days_in_advance'} = $row->{'days_in_advance'} if defined $row->{'days_in_advance'};
93 $return->{'wants_digest'} = $row->{'wants_digest'} if defined $row->{'wants_digest'};
94 $transports{$row->{'message_transport_type'}} = 1;
96 @{$return->{'transports'}} = keys %transports;
100 =head2 SetMessagingPreferences
105 C4::Members::Messaging::SetMessagingPreference( { borrowernumber => $borrower->{'borrowernumber'}
106 message_attribute_id => $message_attribute_id,
107 message_transport_types => [ qw( email sms ) ],
109 wants_digest => 1 } )
111 returns nothing useful.
117 sub SetMessagingPreference {
120 foreach my $required ( qw( borrowernumber message_attribute_id message_transport_types ) ) {
121 if ( ! exists $params->{ $required } ) {
122 warn "SetMessagingPreference called without required parameter: $required";
126 $params->{'days_in_advance'} = undef unless exists ( $params->{'days_in_advance'} );
127 $params->{'wants_digest'} = 0 unless exists ( $params->{'wants_digest'} );
129 my $dbh = C4::Context->dbh();
131 my $delete_sql = <<'END_SQL';
132 DELETE FROM borrower_message_preferences
133 WHERE borrowernumber = ?
134 AND message_attribute_id = ?
136 my $sth = $dbh->prepare( $delete_sql );
137 my $deleted = $sth->execute( $params->{'borrowernumber'}, $params->{'message_attribute_id'} );
139 if ( $params->{'message_transport_types'} ) {
140 my $insert_bmp = <<'END_SQL';
141 INSERT INTO borrower_message_preferences
142 (borrower_message_preference_id, borrowernumber, message_attribute_id, days_in_advance, wants_digest)
147 $sth = C4::Context->dbh()->prepare($insert_bmp);
148 my $success = $sth->execute( $params->{'borrowernumber'},
149 $params->{'message_attribute_id'},
150 $params->{'days_in_advance'},
151 $params->{'wants_digest'} );
153 # my $borrower_message_preference_id = $dbh->last_insert_id();
154 my $borrower_message_preference_id = $dbh->{'mysql_insertid'};
156 my $insert_bmtp = <<'END_SQL';
157 INSERT INTO borrower_message_transport_preferences
158 (borrower_message_preference_id, message_transport_type)
162 $sth = C4::Context->dbh()->prepare($insert_bmtp);
163 foreach my $transport ( @{$params->{'message_transport_types'}}) {
164 my $success = $sth->execute( $borrower_message_preference_id, $transport );
170 =head2 GetMessagingOptions
174 my $messaging_options = C4::Members::Messaging::SetMessagingPreference()
176 returns a hashref of messaing options available.
182 sub GetMessagingOptions {
184 my $sql = <<'END_SQL';
185 select message_attributes.message_attribute_id, takes_days, message_name, message_transport_type, is_digest
186 FROM message_attributes
187 LEFT JOIN message_transports
188 ON message_attributes.message_attribute_id = message_transports.message_attribute_id
191 my $sth = C4::Context->dbh->prepare($sql);
194 while ( my $row = $sth->fetchrow_hashref() ) {
195 $choices->{ $row->{'message_name'} }->{'message_attribute_id'} = $row->{'message_attribute_id'};
196 $choices->{ $row->{'message_name'} }->{'message_name'} = $row->{'message_name'};
197 $choices->{ $row->{'message_name'} }->{'takes_days'} = $row->{'takes_days'};
198 $choices->{ $row->{'message_name'} }->{'has_digest'} = 1 if $row->{'is_digest'};
199 $choices->{ $row->{'message_name'} }->{'transport-' . $row->{'message_transport_type'}} = ' ';
202 my @return = values %$choices;
203 # warn( Data::Dumper->Dump( [ \@return ], [ 'return' ] ) );
209 Koha Development Team <info@koha.org>
211 Andrew Moore <andrew.moore@liblime.com>