View | Details | Raw Unified | Return to bug 12532
Collapse All | Expand All

(-)a/C4/Letters.pm (-5 / +6 lines)
Lines 1131-1148 sub _send_message_by_email { Link Here
1131
    my ($username, $password, $method) = @_;
1131
    my ($username, $password, $method) = @_;
1132
1132
1133
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1133
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1134
    my $useGurantor = $member->{'guarantorid'} && C4::Context->preference("EnableRedirectGuaranteeEmail");
1134
    my $to_address = $message->{'to_address'};
1135
    my $to_address = $message->{'to_address'};
1135
    unless ($to_address) {
1136
    if ($useGurantor || !$to_address) {
1136
        unless ($member) {
1137
        unless ($member) {
1137
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1138
            warn "FAIL: INVALID borrowernumber ($message->{borrowernumber})";
1138
            _set_message_status( { message_id => $message->{'message_id'},
1139
            _set_message_status( { message_id => $message->{'message_id'},
1139
                                   status     => 'failed' } );
1140
                                   status     => 'failed' } );
1140
            return;
1141
            return;
1141
        }
1142
        }
1142
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1143
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1143
        unless ($to_address) {  
1144
        unless ($to_address) {  
1144
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1145
            warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1145
            # warning too verbose for this more common case?
1146
            _set_message_status( { message_id => $message->{'message_id'},
1146
            _set_message_status( { message_id => $message->{'message_id'},
1147
                                   status     => 'failed' } );
1147
                                   status     => 'failed' } );
1148
            return;
1148
            return;
Lines 1182-1188 sub _send_message_by_email { Link Here
1182
       $sendmail_params{ Bcc } = $bcc;
1182
       $sendmail_params{ Bcc } = $bcc;
1183
    }
1183
    }
1184
1184
1185
    _update_message_to_address($message->{'message_id'},$to_address) unless $message->{to_address}; #if initial message address was empty, coming here means that a to address was found and queue should be updated
1185
    #if initial message address was empty or modified, coming here means that a to address was found and queue should be updated
1186
    _update_message_to_address($message->{'message_id'},$to_address) if !$message->{to_address} || $message->{to_address} ne $to_address;
1186
    if ( sendmail( %sendmail_params ) ) {
1187
    if ( sendmail( %sendmail_params ) ) {
1187
        _set_message_status( { message_id => $message->{'message_id'},
1188
        _set_message_status( { message_id => $message->{'message_id'},
1188
                status     => 'sent' } );
1189
                status     => 'sent' } );
(-)a/C4/Members.pm (-14 / +13 lines)
Lines 1441-1462 Returns the empty string if no email address. Link Here
1441
1441
1442
sub GetNoticeEmailAddress {
1442
sub GetNoticeEmailAddress {
1443
    my $borrowernumber = shift;
1443
    my $borrowernumber = shift;
1444
    my $dbh = C4::Context->dbh();
1445
1446
    my $member = C4::Members::GetMember( 'borrowernumber' => $borrowernumber );
1447
1448
    #  Determine who we send the email to.
1449
    my $guarantorid = $member->{'guarantorid'};
1450
    my $useGuarantor = $guarantorid && C4::Context->preference("EnableRedirectGuaranteeEmail");
1451
1452
    my $recipient = $useGuarantor ? C4::Members::GetMember( 'borrowernumber' => $guarantorid ) : $member;
1444
1453
1445
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1446
    # if syspref is set to 'first valid' (value == OFF), look up email address
1454
    # if syspref is set to 'first valid' (value == OFF), look up email address
1447
    if ( $which_address eq 'OFF' ) {
1455
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1448
        return GetFirstValidEmailAddress($borrowernumber);
1456
    my $to_address = $which_address eq 'OFF' ? GetFirstValidEmailAddress($recipient->{'borrowernumber'}) : $recipient->{ $which_address };
1449
    }
1457
1450
    # specified email address field
1458
   return $to_address || '';
1451
    my $dbh = C4::Context->dbh;
1452
    my $sth = $dbh->prepare( qq{
1453
        SELECT $which_address AS primaryemail
1454
        FROM borrowers
1455
        WHERE borrowernumber=?
1456
    } );
1457
    $sth->execute($borrowernumber);
1458
    my $data = $sth->fetchrow_hashref;
1459
    return $data->{'primaryemail'} || '';
1460
}
1459
}
1461
1460
1462
=head2 GetExpiryDate 
1461
=head2 GetExpiryDate 
(-)a/installer/data/mysql/atomicupdate/bug_12532-EnableRedirectGuaranteeEmail_syspref.sql (+2 lines)
Line 0 Link Here
1
INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
2
VALUES ('EnableRedirectGuaranteeEmail','0',NULL,'Enable the ability to redirect guarantee email messages to guarantor.','YesNo');
(-)a/installer/data/mysql/sysprefs.sql (+1 lines)
Lines 119-124 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
119
('emailLibrarianWhenHoldIsPlaced','0',NULL,'If ON, emails the librarian whenever a hold is placed','YesNo'),
119
('emailLibrarianWhenHoldIsPlaced','0',NULL,'If ON, emails the librarian whenever a hold is placed','YesNo'),
120
('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'),
120
('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'),
121
('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''),
121
('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''),
122
('EnableRedirectGuaranteeEmail', '0', NULL, 'Enable the ability to redirect guarantee email messages to guarantor.', 'YesNo'),
122
('EnableSearchHistory','0','','Enable or disable search history','YesNo'),
123
('EnableSearchHistory','0','','Enable or disable search history','YesNo'),
123
('EnhancedMessagingPreferences','0','','If ON, allows patrons to select to receive additional messages about items due or nearly due.','YesNo'),
124
('EnhancedMessagingPreferences','0','','If ON, allows patrons to select to receive additional messages about items due or nearly due.','YesNo'),
124
('expandedSearchOption','0',NULL,'If ON, set advanced search to be expanded by default','YesNo'),
125
('expandedSearchOption','0',NULL,'If ON, set advanced search to be expanded by default','YesNo'),
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref (+6 lines)
Lines 138-143 Patrons: Link Here
138
               yes: Allow
138
               yes: Allow
139
               no: "Don't allow"
139
               no: "Don't allow"
140
         - librarians to discharge borrowers and borrowers to request a discharge.
140
         - librarians to discharge borrowers and borrowers to request a discharge.
141
     -
142
         - pref: EnableRedirectGuaranteeEmail
143
           choices:
144
               yes: Do
145
               no: "Don't"
146
         - enable the ability to redirect guarantee email messages to guarantor. All email message placed in message_queue table will be affected.
141
    "Norwegian patron database":
147
    "Norwegian patron database":
142
     -
148
     -
143
         - pref: NorwegianPatronDBEnable
149
         - pref: NorwegianPatronDBEnable
(-)a/t/db_dependent/Letters.t (-1 / +56 lines)
Lines 18-24 Link Here
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
use Test::More tests => 58;
21
use Test::More tests => 64;
22
use Test::MockModule;
22
use Test::MockModule;
23
use Test::Warn;
23
use Test::Warn;
24
24
Lines 132-137 is( Link Here
132
    'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
132
    'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
133
);
133
);
134
134
135
#Test guarantee-guarantor email redirection
136
my ($GUARANTEE_EMAIL, $GUARANTOR_EMAIL) = qw| guarantee@example.com guarantor@example.com |;
137
my $guarantor = {
138
    email        => $GUARANTOR_EMAIL,
139
    categorycode => 'PT',
140
    branchcode   => 'CPL',
141
    surname      => "Guarantor"
142
};
143
$guarantor->{'borrowernumber'} = AddMember(%$guarantor);
144
my $guarantee = {
145
    guarantorid  => $guarantor->{'borrowernumber'},
146
    email        => $GUARANTEE_EMAIL,
147
    categorycode => 'PT',
148
    branchcode   => 'CPL',
149
    surname      => "Guarantee"
150
};
151
$guarantee->{'borrowernumber'} = AddMember(%$guarantee);
152
153
my $GUARANTEE_TO_ADDRESS = 'toto@exemple.com';
154
my $guarantee_message = {
155
    borrowernumber         => $guarantee->{'borrowernumber'},
156
    message_transport_type => 'email',
157
    to_address             => $GUARANTEE_TO_ADDRESS,
158
    from_address           => 'from@example.com',
159
    letter                 => $my_message->{'letter'}
160
};
161
162
sub SendToGuarantor {
163
    my ($useGuarantor, $message) = @_;
164
    C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
165
    C4::Context->set_preference( 'EnableRedirectGuaranteeEmail', $useGuarantor );
166
    C4::Context->clear_syspref_cache();
167
    my $id = C4::Letters::EnqueueLetter($message);
168
    C4::Letters::SendQueuedMessages();
169
    my $result = $dbh->selectrow_hashref( 'SELECT to_address, status FROM message_queue WHERE message_id = ?', undef, ($id) );
170
    return $result;
171
}
172
my $result = SendToGuarantor(0,$guarantee_message);
173
is($result->{'status'}, "sent", "With EnableRedirectGuaranteeEmail off, message is sent.");
174
is($result->{'to_address'}, $GUARANTEE_TO_ADDRESS, "With EnableRedirectGuaranteeEmail off, Message is sent to the specified to_address.");
175
176
$result = SendToGuarantor(1,$guarantee_message);
177
is($result->{'status'}, "sent", "With EnableRedirectGuaranteeEmail on, message is sent.");
178
is($result->{'to_address'}, $GUARANTOR_EMAIL, "With EnableRedirectGuaranteeEmail on, Message is sent to the guarantor's email address.");
179
180
$guarantor->{'email'} = undef;
181
ModMember(%$guarantor);
182
$result = SendToGuarantor(1,$guarantee_message);
183
is($result->{'status'}, "failed", "With EnableRedirectGuaranteeEmail on, message fails if guarantor has no address.");
184
185
$guarantee->{'guarantorid'} = undef;
186
ModMember(%$guarantee);
187
$result = SendToGuarantor(1,$guarantee_message);
188
is($result->{'to_address'}, $GUARANTEE_TO_ADDRESS, "With EnableRedirectGuaranteeEmail on, Message is sent to specicied to_address if he has no guarantor.");
189
135
# GetLetters
190
# GetLetters
136
my $letters = C4::Letters::GetLetters();
191
my $letters = C4::Letters::GetLetters();
137
is( @$letters, 0, 'GetLetters returns the correct number of letters' );
192
is( @$letters, 0, 'GetLetters returns the correct number of letters' );
(-)a/t/db_dependent/Members.t (-2 / +23 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 61;
20
use Test::More tests => 63;
21
use Test::MockModule;
21
use Test::MockModule;
22
use Data::Dumper;
22
use Data::Dumper;
23
use C4::Context;
23
use C4::Context;
Lines 143-148 is ($checkcardnum, "2", "Card number is too long"); Link Here
143
143
144
144
145
145
146
C4::Context->set_preference( 'EnableRedirectGuaranteeEmail', 0 );
146
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
147
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
147
C4::Context->clear_syspref_cache();
148
C4::Context->clear_syspref_cache();
148
149
Lines 155-160 C4::Context->clear_syspref_cache(); Link Here
155
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
156
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
156
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
157
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
157
158
159
#Test guarantee-guarantor email redirection
160
my $GUARANTEE_EMAIL = 'guanrantee@email.test';
161
my $guarantee = {
162
    guarantorid  => $member->{'borrowernumber'},
163
    emailpro     => $GUARANTEE_EMAIL,
164
    categorycode => $CATEGORYCODE,
165
    branchcode   => $BRANCHCODE,
166
    surname      => "surname"
167
};
168
$guarantee->{'borrowernumber'} = AddMember(%$guarantee);
169
170
$notice_email = GetNoticeEmailAddress($guarantee->{'borrowernumber'});
171
is ($notice_email, $GUARANTEE_EMAIL, "GetNoticeEmailAddress returns correct value when EnableRedirectGuaranteeEmail is disabled");
172
173
C4::Context->set_preference( 'EnableRedirectGuaranteeEmail', 1 );
174
C4::Context->clear_syspref_cache();
175
176
$notice_email = GetNoticeEmailAddress($guarantee->{'borrowernumber'});
177
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when EnableRedirectGuaranteeEmail is activated");
178
179
158
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
180
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
159
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
181
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
160
$member = GetMemberDetails($member->{'borrowernumber'});
182
$member = GetMemberDetails($member->{'borrowernumber'});
161
- 

Return to bug 12532