From 08b387dbb7b6b5b043217bbb3d4e6f9b8db43835 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 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 --- C4/Form/MessagingPreferences.pm | 13 ++++++- C4/Members/Messaging.pm | 84 ----------------------------------------- 2 files changed, 12 insertions(+), 85 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..923ed76 100644 --- a/C4/Members/Messaging.pm +++ b/C4/Members/Messaging.pm @@ -35,90 +35,6 @@ 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.7.4