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

(-)a/C4/Letters.pm (-4 / +4 lines)
Lines 1222-1239 sub _send_message_by_email { Link Here
1222
    my ($username, $password, $method) = @_;
1222
    my ($username, $password, $method) = @_;
1223
1223
1224
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1224
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1225
    my $useGurantor = $member->{'guarantorid'} && C4::Context->preference("EnableRedirectGuaranteeEmail");
1225
    my $to_address = $message->{'to_address'};
1226
    my $to_address = $message->{'to_address'};
1226
    unless ($to_address) {
1227
    if ($useGurantor || !$to_address) {
1227
        unless ($member) {
1228
        unless ($member) {
1228
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1229
            warn "FAIL: INVALID borrowernumber ($message->{borrowernumber})";
1229
            _set_message_status( { message_id => $message->{'message_id'},
1230
            _set_message_status( { message_id => $message->{'message_id'},
1230
                                   status     => 'failed' } );
1231
                                   status     => 'failed' } );
1231
            return;
1232
            return;
1232
        }
1233
        }
1233
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1234
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1234
        unless ($to_address) {  
1235
        unless ($to_address) {  
1235
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1236
            warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1236
            # warning too verbose for this more common case?
1237
            _set_message_status( { message_id => $message->{'message_id'},
1237
            _set_message_status( { message_id => $message->{'message_id'},
1238
                                   status     => 'failed' } );
1238
                                   status     => 'failed' } );
1239
            return;
1239
            return;
(-)a/C4/Members.pm (-14 / +13 lines)
Lines 1198-1219 Returns the empty string if no email address. Link Here
1198
1198
1199
sub GetNoticeEmailAddress {
1199
sub GetNoticeEmailAddress {
1200
    my $borrowernumber = shift;
1200
    my $borrowernumber = shift;
1201
    my $member = C4::Members::GetMember( 'borrowernumber' => $borrowernumber );
1202
1203
    #  Determine who we send the email to.
1204
    my $guarantorid = $member->{'guarantorid'};
1205
    my $useGuarantor = $guarantorid && C4::Context->preference("EnableRedirectGuaranteeEmail");
1206
1207
    my $guarantor =  C4::Members::GetMember( 'borrowernumber' => $guarantorid ) if $useGuarantor;
1201
1208
1202
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1203
    # if syspref is set to 'first valid' (value == OFF), look up email address
1209
    # if syspref is set to 'first valid' (value == OFF), look up email address
1204
    if ( $which_address eq 'OFF' ) {
1210
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1205
        return GetFirstValidEmailAddress($borrowernumber);
1211
    my $to_address = $which_address eq 'OFF' ? GetFirstValidEmailAddress($member->{'borrowernumber'}) : $member->{ $which_address };
1206
    }
1212
    my $guarantor_to_address = $which_address eq 'OFF' ? GetFirstValidEmailAddress($guarantor->{'borrowernumber'}) : $guarantor->{ $which_address } if $guarantor;
1207
    # specified email address field
1213
    $to_address .="," . $guarantor_to_address if $guarantor_to_address;
1208
    my $dbh = C4::Context->dbh;
1214
1209
    my $sth = $dbh->prepare( qq{
1215
   return $to_address || '';
1210
        SELECT $which_address AS primaryemail
1211
        FROM borrowers
1212
        WHERE borrowernumber=?
1213
    } );
1214
    $sth->execute($borrowernumber);
1215
    my $data = $sth->fetchrow_hashref;
1216
    return $data->{'primaryemail'} || '';
1217
}
1216
}
1218
1217
1219
=head2 GetUpcomingMembershipExpires
1218
=head2 GetUpcomingMembershipExpires
(-)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 ('RedirectGuaranteeEmail','0',NULL,'Enable the ability to redirect guarantee email messages to guarantor.','YesNo');
(-)a/installer/data/mysql/sysprefs.sql (+1 lines)
Lines 137-142 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
137
('EnableAdvancedCatalogingEditor','0','','Enable the Rancor advanced cataloging editor','YesNo'),
137
('EnableAdvancedCatalogingEditor','0','','Enable the Rancor advanced cataloging editor','YesNo'),
138
('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'),
138
('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'),
139
('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''),
139
('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''),
140
('RedirectGuaranteeEmail', '0', NULL, 'Enable the ability to redirect guarantee email messages to guarantor.', 'YesNo'),
140
('EnableSearchHistory','0','','Enable or disable search history','YesNo'),
141
('EnableSearchHistory','0','','Enable or disable search history','YesNo'),
141
('EnhancedMessagingPreferences','0','','If ON, allows patrons to select to receive additional messages about items due or nearly due.','YesNo'),
142
('EnhancedMessagingPreferences','0','','If ON, allows patrons to select to receive additional messages about items due or nearly due.','YesNo'),
142
('EnhancedMessagingPreferencesOPAC', '1', NULL, 'If ON, show patrons messaging setting on the OPAC.', 'YesNo'),
143
('EnhancedMessagingPreferencesOPAC', '1', NULL, 'If ON, show patrons messaging setting on the OPAC.', 'YesNo'),
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref (+6 lines)
Lines 186-191 Patrons: Link Here
186
               no: "Don't"
186
               no: "Don't"
187
         - track last patron activity.
187
         - track last patron activity.
188
         - Everytime a patron will connect, the borrowers.lastseen will be updated with the current time.
188
         - Everytime a patron will connect, the borrowers.lastseen will be updated with the current time.
189
     -
190
         - pref: RedirectGuaranteeEmail
191
           choices:
192
               yes: Enable
193
               no: "Don't enable"
194
         - redirection of guarantee email messages to the guarantor. All email messages send via the message_queue table will be affected.
189
    "Norwegian patron database":
195
    "Norwegian patron database":
190
     -
196
     -
191
         - pref: NorwegianPatronDBEnable
197
         - pref: NorwegianPatronDBEnable
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt (-1 lines)
Lines 77-83 $(document).ready(function() { Link Here
77
            $("#entryform").submit();
77
            $("#entryform").submit();
78
        }
78
        }
79
    });
79
    });
80
81
});
80
});
82
81
83
        var MSG_SEPARATOR = _("Separator must be / in field %s");
82
        var MSG_SEPARATOR = _("Separator must be / in field %s");
(-)a/t/db_dependent/Letters.t (+55 lines)
Lines 147-152 is( $resent, 0, 'The message should not have been resent again' ); Link Here
147
$resent = C4::Letters::ResendMessage();
147
$resent = C4::Letters::ResendMessage();
148
is( $resent, undef, 'ResendMessage should return undef if not message_id given' );
148
is( $resent, undef, 'ResendMessage should return undef if not message_id given' );
149
149
150
#Test guarantee-guarantor email redirection
151
my ($GUARANTEE_EMAIL, $GUARANTOR_EMAIL) = qw| guarantee@example.com guarantor@example.com |;
152
my $guarantor = {
153
    email        => $GUARANTOR_EMAIL,
154
    categorycode => 'PT',
155
    branchcode   => 'CPL',
156
    surname      => "Guarantor"
157
};
158
$guarantor->{'borrowernumber'} = AddMember(%$guarantor);
159
my $guarantee = {
160
    guarantorid  => $guarantor->{'borrowernumber'},
161
    email        => $GUARANTEE_EMAIL,
162
    categorycode => 'PT',
163
    branchcode   => 'CPL',
164
    surname      => "Guarantee"
165
};
166
$guarantee->{'borrowernumber'} = AddMember(%$guarantee);
167
168
my $GUARANTEE_TO_ADDRESS = 'toto@exemple.com';
169
my $guarantee_message = {
170
    borrowernumber         => $guarantee->{'borrowernumber'},
171
    message_transport_type => 'email',
172
    to_address             => $GUARANTEE_TO_ADDRESS,
173
    from_address           => 'from@example.com',
174
    letter                 => $my_message->{'letter'}
175
};
176
177
sub SendToGuarantor {
178
    my ($useGuarantor, $message) = @_;
179
    C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
180
    C4::Context->set_preference( 'EnableRedirectGuaranteeEmail', $useGuarantor );
181
    C4::Context->clear_syspref_cache();
182
    my $id = C4::Letters::EnqueueLetter($message);
183
    C4::Letters::SendQueuedMessages();
184
    my $result = $dbh->selectrow_hashref( 'SELECT to_address, status FROM message_queue WHERE message_id = ?', undef, ($id) );
185
    return $result;
186
}
187
my $result = SendToGuarantor(0,$guarantee_message);
188
is($result->{'status'}, "sent", "With EnableRedirectGuaranteeEmail off, message is sent.");
189
is($result->{'to_address'}, $GUARANTEE_TO_ADDRESS, "With EnableRedirectGuaranteeEmail off, Message is sent to the specified to_address.");
190
191
$result = SendToGuarantor(1,$guarantee_message);
192
is($result->{'status'}, "sent", "With EnableRedirectGuaranteeEmail on, message is sent.");
193
is($result->{'to_address'}, $GUARANTOR_EMAIL, "With EnableRedirectGuaranteeEmail on, Message is sent to the guarantor's email address.");
194
195
$guarantor->{'email'} = undef;
196
ModMember(%$guarantor);
197
$result = SendToGuarantor(1,$guarantee_message);
198
is($result->{'status'}, "failed", "With EnableRedirectGuaranteeEmail on, message fails if guarantor has no address.");
199
200
$guarantee->{'guarantorid'} = undef;
201
ModMember(%$guarantee);
202
$result = SendToGuarantor(1,$guarantee_message);
203
is($result->{'to_address'}, $GUARANTEE_TO_ADDRESS, "With EnableRedirectGuaranteeEmail on, Message is sent to specicied to_address if he has no guarantor.");
204
150
# GetLetters
205
# GetLetters
151
my $letters = C4::Letters::GetLetters();
206
my $letters = C4::Letters::GetLetters();
152
is( @$letters, 0, 'GetLetters returns the correct number of letters' );
207
is( @$letters, 0, 'GetLetters returns the correct number of letters' );
(-)a/t/db_dependent/Members.t (-1 / +24 lines)
Lines 152-157 is ($checkcardnum, "2", "Card number is too long"); Link Here
152
152
153
153
154
t::lib::Mocks::mock_preference( 'AutoEmailPrimaryAddress', 'OFF' );
154
t::lib::Mocks::mock_preference( 'AutoEmailPrimaryAddress', 'OFF' );
155
156
C4::Context->set_preference( 'EnableRedirectGuaranteeEmail', 0 );
157
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
155
C4::Context->clear_syspref_cache();
158
C4::Context->clear_syspref_cache();
156
159
157
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
160
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
Lines 163-168 C4::Context->clear_syspref_cache(); Link Here
163
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
166
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
164
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
167
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
165
168
169
#Test guarantee-guarantor email redirection
170
my $GUARANTEE_EMAIL = 'guanrantee@email.test';
171
my $guarantee = {
172
    guarantorid  => $member->{'borrowernumber'},
173
    emailpro     => $GUARANTEE_EMAIL,
174
    categorycode => $CATEGORYCODE,
175
    branchcode   => $BRANCHCODE,
176
    surname      => "surname"
177
};
178
$guarantee->{'borrowernumber'} = AddMember(%$guarantee);
179
180
$notice_email = GetNoticeEmailAddress($guarantee->{'borrowernumber'});
181
is ($notice_email, $GUARANTEE_EMAIL, "GetNoticeEmailAddress returns correct value when EnableRedirectGuaranteeEmail is disabled");
182
183
C4::Context->set_preference( 'EnableRedirectGuaranteeEmail', 1 );
184
C4::Context->clear_syspref_cache();
185
186
$notice_email = GetNoticeEmailAddress($guarantee->{'borrowernumber'});
187
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when EnableRedirectGuaranteeEmail is activated");
188
189
166
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
190
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
167
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
191
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
168
$member = GetMemberDetails($member->{'borrowernumber'});
192
$member = GetMemberDetails($member->{'borrowernumber'});
169
- 

Return to bug 12532