From 2f82ce61609a5996249511991f1ada1a96d26620 Mon Sep 17 00:00:00 2001
From: lmstrand <lmstrand@gmail.com>
Date: Fri, 8 Mar 2024 12:40:01 +0200
Subject: [PATCH] Bug 14806 - Log changes to borrower message preferences to
action logs
---
C4/Members/Messaging.pm | 44 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 41 insertions(+), 3 deletions(-)
diff --git a/C4/Members/Messaging.pm b/C4/Members/Messaging.pm
index 25e6a04a0f..cb54779971 100644
--- a/C4/Members/Messaging.pm
+++ b/C4/Members/Messaging.pm
@@ -20,8 +20,8 @@ package C4::Members::Messaging;
use strict;
use warnings;
use C4::Context;
-
-
+use JSON qw( to_json );
+use C4::Log qw( logaction );
=head1 NAME
@@ -120,7 +120,7 @@ returns nothing useful.
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;
@@ -131,6 +131,8 @@ sub SetMessagingPreference {
return;
}
}
+ my $preferences_json = to_json(GetPatronMessagingPreferences($params->{borrowernumber}, $params->{message_attribute_id}),{ utf8 => 1, canonical => 1 });
+
$params->{'days_in_advance'} = undef unless exists ( $params->{'days_in_advance'} );
$params->{'wants_digest'} = 0 unless exists ( $params->{'wants_digest'} );
@@ -181,6 +183,22 @@ END_SQL
foreach my $transport ( @{$params->{'message_transport_types'}}) {
my $success = $sth->execute( $borrower_message_preference_id, $transport );
}
+
+ my $new_preferences_json = to_json(GetPatronMessagingPreferences($params->{borrowernumber}, $params->{message_attribute_id}),{ utf8 => 1, canonical => 1 });
+
+ if ( $preferences_json ne $new_preferences_json ) {
+ my $info;
+ $preferences_json =~ s/,/, /g;
+ $new_preferences_json =~ s/,/, /g;
+ $preferences_json =~ s/\[\]/null/g;
+ $new_preferences_json =~ s/\[\]/null/g;
+
+ $info = {
+ before => $preferences_json,
+ after => $new_preferences_json
+ };
+ logaction("MEMBERS","MODIFY",$params->{borrowernumber}, "Messaging preference: after: ". $new_preferences_json . " before: " . $preferences_json);
+ }
}
return;
}
@@ -259,6 +277,26 @@ sub SetMessagingPreferencesFromDefaults {
}
}
+sub GetPatronMessagingPreferences {
+ my ($borrowernumber, $message_attribute_id) = @_;
+ my $sql = <<'END_SQL';
+SELECT message_name, days_in_advance, wants_digest,
+borrower_message_transport_preferences.message_transport_type
+FROM borrower_message_preferences
+INNER JOIN borrower_message_transport_preferences
+ON borrower_message_transport_preferences.borrower_message_preference_id = borrower_message_preferences.borrower_message_preference_id
+INNER JOIN message_attributes
+ON borrower_message_preferences.message_attribute_id = message_attributes.message_attribute_id
+ AND borrowernumber = ?
+ AND borrower_message_preferences.message_attribute_id = ?
+END_SQL
+
+ my $sth = C4::Context->dbh->prepare($sql);
+ $sth->execute($borrowernumber, $message_attribute_id);
+ my $rows = $sth->fetchall_arrayref({});
+ return $rows;
+}
+
=head1 TABLES
=head2 message_queue
--
2.34.1