@@ -, +, @@ C4::Members::Messaging::SetMessagingPreference - EnhancedMessagingPreferences ---- GENERAL ---- (grep -r 'SetMessagingPreference'). ---- UNIT TESTS ---- --- C4/Form/MessagingPreferences.pm | 13 ++++- C4/Members/Messaging.pm | 86 --------------------------------- 2 files changed, 12 insertions(+), 87 deletions(-) --- a/C4/Form/MessagingPreferences.pm +++ a/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; --- a/C4/Members/Messaging.pm +++ a/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 --