From 0728b5b804037f75ad1c86419d90b30aa33a1b6c Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Thu, 27 Oct 2016 16:17:47 +0300 Subject: [PATCH] Bug 18595: Move C4::Members::Messaging::SetMessagingPreference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch moves C4::Members::Messaging::SetMessagingPreference to Koha::Patron::Message::Preference The patch makes a heavy touch on core messaging preference features, but should not introduce any visible changes for end user. Keep this in mind if testing. If you notice any changes in Koha, something is probably wrong! To test: Make sure you have enabled the following system preferences: - EnhancedMessagingPreferences ---- GENERAL ---- 1. Apply patch 2. Search Koha source code for references of "SetMessagingPreference" (grep -r 'SetMessagingPreference'). 3. Observe no results in source code. ---- UNIT TESTS ---- 1. prove t/db_dependent/Circulation.t 2. prove t/db_dependent/Reserves.t 3. prove t/db_dependent/Koha/Patron/Categories.t Works as expected. QA tools fails with: FAIL C4/Members/Messaging.pm pod empty section in previous paragraph Can be fixed in a followup. Signed-off-by: Marc Véron QA tools pass now OK Signed-off-by: Marc Véron Signed-off-by: David Bourgault --- C4/Form/MessagingPreferences.pm | 13 ++++- C4/Members/Messaging.pm | 86 --------------------------------- 2 files changed, 12 insertions(+), 87 deletions(-) diff --git a/C4/Form/MessagingPreferences.pm b/C4/Form/MessagingPreferences.pm index 77d9ef5c9c..1559d1b79d 100644 --- a/C4/Form/MessagingPreferences.pm +++ b/C4/Form/MessagingPreferences.pm @@ -98,7 +98,18 @@ sub handle_form_action { } } - C4::Members::Messaging::SetMessagingPreference( $updater ); + $updater->{'days_in_advance'} = undef unless exists $updater->{'days_in_advance'}; + $updater->{'wants_digest'} = 0 unless exists $updater->{'wants_digest'}; + my $preference = Koha::Patron::Message::Preferences->find({ + borrowernumber => $updater->{'borrowernumber'}, + message_attribute_id => $option->{'message_attribute_id'}, + categorycode => $categorycode || $updater->{'categorycode'}, + }); + unless ($preference) { + Koha::Patron::Message::Preference->new($updater)->store; + } else { + $preference->set($updater)->store; + } if ($query->param( $option->{'message_attribute_id'})){ $prefs_set = 1; diff --git a/C4/Members/Messaging.pm b/C4/Members/Messaging.pm index d28de2ccd7..a065636da2 100644 --- a/C4/Members/Messaging.pm +++ b/C4/Members/Messaging.pm @@ -33,92 +33,6 @@ C4::Members::Messaging - manage patron messaging preferences This module lets you modify a patron's messaging preferences. -=head1 FUNCTIONS - -=head2 SetMessagingPreference - -This method defines how a user (or a default for a patron category) wants to get a certain -message delivered. The list of valid message types can be delivered can be found in the -C table, and the list of valid message transports can be -found in the C table. - - C4::Members::Messaging::SetMessagingPreference( { borrowernumber => $borrower->{'borrowernumber'} - message_attribute_id => $message_attribute_id, - message_transport_types => [ qw( email sms ) ], - days_in_advance => 5 - wants_digest => 1 } ) - -returns nothing useful. - -=cut - -sub SetMessagingPreference { - my $params = shift; - - unless (exists $params->{borrowernumber} xor exists $params->{categorycode}) { # yes, xor - warn "SetMessagingPreference called without exactly one of borrowernumber or categorycode"; - return; - } - foreach my $required ( qw( message_attribute_id message_transport_types ) ) { - if ( ! exists $params->{ $required } ) { - warn "SetMessagingPreference called without required parameter: $required"; - return; - } - } - $params->{'days_in_advance'} = undef unless exists ( $params->{'days_in_advance'} ); - $params->{'wants_digest'} = 0 unless exists ( $params->{'wants_digest'} ); - - my $dbh = C4::Context->dbh(); - - my $delete_sql = <<'END_SQL'; -DELETE FROM borrower_message_preferences - WHERE message_attribute_id = ? -END_SQL - my @bind_params = ( $params->{'message_attribute_id'} ); - if ( exists $params->{'borrowernumber'} ) { - $delete_sql .= " AND borrowernumber = ? "; - push @bind_params, $params->{borrowernumber}; - } else { - $delete_sql .= " AND categorycode = ? "; - push @bind_params, $params->{categorycode}; - } - my $sth = $dbh->prepare( $delete_sql ); - my $deleted = $sth->execute( @bind_params ); - - if ( $params->{'message_transport_types'} ) { - my $insert_bmp = <<'END_SQL'; -INSERT INTO borrower_message_preferences -(borrower_message_preference_id, borrowernumber, categorycode, message_attribute_id, days_in_advance, wants_digest) -VALUES -(NULL, ?, ?, ?, ?, ?) -END_SQL - - $sth = C4::Context->dbh()->prepare($insert_bmp); - # set up so that we can easily construct the insert SQL - $params->{'borrowernumber'} = undef unless exists ( $params->{'borrowernumber'} ); - $params->{'categorycode'} = undef unless exists ( $params->{'categorycode'} ); - my $success = $sth->execute( $params->{'borrowernumber'}, - $params->{'categorycode'}, - $params->{'message_attribute_id'}, - $params->{'days_in_advance'}, - $params->{'wants_digest'} ); - # my $borrower_message_preference_id = $dbh->last_insert_id(); - my $borrower_message_preference_id = $dbh->{'mysql_insertid'}; - - my $insert_bmtp = <<'END_SQL'; -INSERT INTO borrower_message_transport_preferences -(borrower_message_preference_id, message_transport_type) -VALUES -(?, ?) -END_SQL - $sth = C4::Context->dbh()->prepare($insert_bmtp); - foreach my $transport ( @{$params->{'message_transport_types'}}) { - my $success = $sth->execute( $borrower_message_preference_id, $transport ); - } - } - return; -} - =head1 TABLES =head2 message_queue -- 2.20.1