From 8f3fd94633c6b996b6ddf90ff6ab37b4ca3d72a3 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. ---- INTRANET ---- 1. todo ---- 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 --- 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 53885ed..28c073b 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 d28de2c..a065636 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.1.4