|
Lines 33-124
C4::Members::Messaging - manage patron messaging preferences
Link Here
|
| 33 |
|
33 |
|
| 34 |
This module lets you modify a patron's messaging preferences. |
34 |
This module lets you modify a patron's messaging preferences. |
| 35 |
|
35 |
|
| 36 |
=head1 FUNCTIONS |
|
|
| 37 |
|
| 38 |
=head2 SetMessagingPreference |
| 39 |
|
| 40 |
This method defines how a user (or a default for a patron category) wants to get a certain |
| 41 |
message delivered. The list of valid message types can be delivered can be found in the |
| 42 |
C<message_attributes> table, and the list of valid message transports can be |
| 43 |
found in the C<message_transport_types> table. |
| 44 |
|
| 45 |
C4::Members::Messaging::SetMessagingPreference( { borrowernumber => $borrower->{'borrowernumber'} |
| 46 |
message_attribute_id => $message_attribute_id, |
| 47 |
message_transport_types => [ qw( email sms ) ], |
| 48 |
days_in_advance => 5 |
| 49 |
wants_digest => 1 } ) |
| 50 |
|
| 51 |
returns nothing useful. |
| 52 |
|
| 53 |
=cut |
| 54 |
|
| 55 |
sub SetMessagingPreference { |
| 56 |
my $params = shift; |
| 57 |
|
| 58 |
unless (exists $params->{borrowernumber} xor exists $params->{categorycode}) { # yes, xor |
| 59 |
warn "SetMessagingPreference called without exactly one of borrowernumber or categorycode"; |
| 60 |
return; |
| 61 |
} |
| 62 |
foreach my $required ( qw( message_attribute_id message_transport_types ) ) { |
| 63 |
if ( ! exists $params->{ $required } ) { |
| 64 |
warn "SetMessagingPreference called without required parameter: $required"; |
| 65 |
return; |
| 66 |
} |
| 67 |
} |
| 68 |
$params->{'days_in_advance'} = undef unless exists ( $params->{'days_in_advance'} ); |
| 69 |
$params->{'wants_digest'} = 0 unless exists ( $params->{'wants_digest'} ); |
| 70 |
|
| 71 |
my $dbh = C4::Context->dbh(); |
| 72 |
|
| 73 |
my $delete_sql = <<'END_SQL'; |
| 74 |
DELETE FROM borrower_message_preferences |
| 75 |
WHERE message_attribute_id = ? |
| 76 |
END_SQL |
| 77 |
my @bind_params = ( $params->{'message_attribute_id'} ); |
| 78 |
if ( exists $params->{'borrowernumber'} ) { |
| 79 |
$delete_sql .= " AND borrowernumber = ? "; |
| 80 |
push @bind_params, $params->{borrowernumber}; |
| 81 |
} else { |
| 82 |
$delete_sql .= " AND categorycode = ? "; |
| 83 |
push @bind_params, $params->{categorycode}; |
| 84 |
} |
| 85 |
my $sth = $dbh->prepare( $delete_sql ); |
| 86 |
my $deleted = $sth->execute( @bind_params ); |
| 87 |
|
| 88 |
if ( $params->{'message_transport_types'} ) { |
| 89 |
my $insert_bmp = <<'END_SQL'; |
| 90 |
INSERT INTO borrower_message_preferences |
| 91 |
(borrower_message_preference_id, borrowernumber, categorycode, message_attribute_id, days_in_advance, wants_digest) |
| 92 |
VALUES |
| 93 |
(NULL, ?, ?, ?, ?, ?) |
| 94 |
END_SQL |
| 95 |
|
| 96 |
$sth = C4::Context->dbh()->prepare($insert_bmp); |
| 97 |
# set up so that we can easily construct the insert SQL |
| 98 |
$params->{'borrowernumber'} = undef unless exists ( $params->{'borrowernumber'} ); |
| 99 |
$params->{'categorycode'} = undef unless exists ( $params->{'categorycode'} ); |
| 100 |
my $success = $sth->execute( $params->{'borrowernumber'}, |
| 101 |
$params->{'categorycode'}, |
| 102 |
$params->{'message_attribute_id'}, |
| 103 |
$params->{'days_in_advance'}, |
| 104 |
$params->{'wants_digest'} ); |
| 105 |
# my $borrower_message_preference_id = $dbh->last_insert_id(); |
| 106 |
my $borrower_message_preference_id = $dbh->{'mysql_insertid'}; |
| 107 |
|
| 108 |
my $insert_bmtp = <<'END_SQL'; |
| 109 |
INSERT INTO borrower_message_transport_preferences |
| 110 |
(borrower_message_preference_id, message_transport_type) |
| 111 |
VALUES |
| 112 |
(?, ?) |
| 113 |
END_SQL |
| 114 |
$sth = C4::Context->dbh()->prepare($insert_bmtp); |
| 115 |
foreach my $transport ( @{$params->{'message_transport_types'}}) { |
| 116 |
my $success = $sth->execute( $borrower_message_preference_id, $transport ); |
| 117 |
} |
| 118 |
} |
| 119 |
return; |
| 120 |
} |
| 121 |
|
| 122 |
=head1 TABLES |
36 |
=head1 TABLES |
| 123 |
|
37 |
|
| 124 |
=head2 message_queue |
38 |
=head2 message_queue |
| 125 |
- |
|
|