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

(-)a/C4/Installer/PerlDependencies.pm (+5 lines)
Lines 787-792 our $PERL_DEPS = { Link Here
787
        'required' => '0',
787
        'required' => '0',
788
        'min_ver'  => '0.56',
788
        'min_ver'  => '0.56',
789
    },
789
    },
790
    'Data::Validate::Email' => {
791
        'usage'    => 'Email validation',
792
        'required' => '1',
793
        'min_ver'  => '0.04',
794
    },
790
};
795
};
791
796
792
1;
797
1;
(-)a/C4/Letters.pm (-13 / +42 lines)
Lines 38-43 use Encode; Link Here
38
use Carp;
38
use Carp;
39
use Koha::Email;
39
use Koha::Email;
40
use Koha::DateUtils qw( format_sqldatetime );
40
use Koha::DateUtils qw( format_sqldatetime );
41
use Data::Validate::Email qw(is_email);
42
use Email::Valid;
41
43
42
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
44
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
43
45
Lines 414-420 sub SendAlerts { Link Here
414
        my $alerts = getalert( '', 'issue', $subscriptionid );
416
        my $alerts = getalert( '', 'issue', $subscriptionid );
415
        foreach (@$alerts) {
417
        foreach (@$alerts) {
416
            my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'});
418
            my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'});
417
            my $email = $borinfo->{email} or next;
419
            my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
420
            my $email = $sendAllEmailsTo;
421
            if (!($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo))){
422
                $email = $borinfo->{email} or next;
423
            }
418
424
419
#                    warn "sending issues...";
425
#                    warn "sending issues...";
420
            my $userenv = C4::Context->userenv;
426
            my $userenv = C4::Context->userenv;
Lines 528-537 sub SendAlerts { Link Here
528
        # Remove the order tag
534
        # Remove the order tag
529
        $letter->{content} =~ s/<order>(.*?)<\/order>/$1/gxms;
535
        $letter->{content} =~ s/<order>(.*?)<\/order>/$1/gxms;
530
536
537
        # SendAllEmailsTo system preference to override for testing
538
        my $emailsTo = join( ',', @email);
539
        my $emailsCC = join( ',', @cc);
540
        my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
541
        if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) ) {
542
            $emailsTo = $sendAllEmailsTo;
543
            $emailsCC = '';
544
        }
545
531
        # ... then send mail
546
        # ... then send mail
532
        my %mail = (
547
        my %mail = (
533
            To => join( ',', @email),
548
            To             => $emailsTo,
534
            Cc             => join( ',', @cc),
549
            Cc             => $emailsCC,
535
            From           => $userenv->{emailaddress},
550
            From           => $userenv->{emailaddress},
536
            Subject        => Encode::encode( "UTF-8", "" . $letter->{title} ),
551
            Subject        => Encode::encode( "UTF-8", "" . $letter->{title} ),
537
            Message => $letter->{'is_html'}
552
            Message => $letter->{'is_html'}
Lines 583-591 sub SendAlerts { Link Here
583
        ) or return;
598
        ) or return;
584
        return { error => "no_email" } unless $externalid->{'emailaddr'};
599
        return { error => "no_email" } unless $externalid->{'emailaddr'};
585
        my $email = Koha::Email->new();
600
        my $email = Koha::Email->new();
601
        my $emailaddr = $externalid->{'emailaddr'};
602
        my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
603
        $emailaddr = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
586
        my %mail  = $email->create_message_headers(
604
        my %mail  = $email->create_message_headers(
587
            {
605
            {
588
                to      => $externalid->{'emailaddr'},
606
                to      => $emailaddr,
589
                from    => $library->{branchemail},
607
                from    => $library->{branchemail},
590
                replyto => $library->{branchreplyto},
608
                replyto => $library->{branchreplyto},
591
                sender  => $library->{branchreturnpath},
609
                sender  => $library->{branchreturnpath},
Lines 1049-1055 sub GetQueuedMessages { Link Here
1049
1067
1050
    my $dbh = C4::Context->dbh();
1068
    my $dbh = C4::Context->dbh();
1051
    my $statement = << 'ENDSQL';
1069
    my $statement = << 'ENDSQL';
1052
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
1070
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued, sentto_address
1053
FROM message_queue
1071
FROM message_queue
1054
ENDSQL
1072
ENDSQL
1055
1073
Lines 1228-1242 sub _send_message_by_email { Link Here
1228
1246
1229
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1247
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1230
    my $to_address = $message->{'to_address'};
1248
    my $to_address = $message->{'to_address'};
1249
    if (!$to_address && $member) {
1250
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1251
    }
1252
    my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
1253
    $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
1231
    unless ($to_address) {
1254
    unless ($to_address) {
1232
        unless ($member) {
1255
        if (!$member) {
1233
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1256
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1234
            _set_message_status( { message_id => $message->{'message_id'},
1257
            _set_message_status( { message_id => $message->{'message_id'},
1235
                                   status     => 'failed' } );
1258
                                   status     => 'failed' } );
1236
            return;
1259
            return;
1237
        }
1260
        }
1238
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1261
        else {
1239
        unless ($to_address) {  
1240
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1262
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1241
            # warning too verbose for this more common case?
1263
            # warning too verbose for this more common case?
1242
            _set_message_status( { message_id => $message->{'message_id'},
1264
            _set_message_status( { message_id => $message->{'message_id'},
Lines 1281-1288 sub _send_message_by_email { Link Here
1281
    _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
1303
    _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
1282
1304
1283
    if ( sendmail( %sendmail_params ) ) {
1305
    if ( sendmail( %sendmail_params ) ) {
1284
        _set_message_status( { message_id => $message->{'message_id'},
1306
        _set_message_status( { message_id     => $message->{'message_id'},
1285
                status     => 'sent' } );
1307
                               status         => 'sent',
1308
                               sentto_address => $to_address } );
1286
        return 1;
1309
        return 1;
1287
    } else {
1310
    } else {
1288
        _set_message_status( { message_id => $message->{'message_id'},
1311
        _set_message_status( { message_id => $message->{'message_id'},
Lines 1366-1376 sub _set_message_status { Link Here
1366
        return unless exists $params->{ $required_parameter };
1389
        return unless exists $params->{ $required_parameter };
1367
    }
1390
    }
1368
1391
1369
    my $dbh = C4::Context->dbh();
1370
    my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?';
1392
    my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?';
1393
    my @values;
1394
    push @values,$params->{'status'};
1395
    if (exists($params->{'sentto_address'})) {
1396
        $statement = 'UPDATE message_queue SET status=?, sentto_address=? WHERE message_id = ?';
1397
        push @values,$params->{'sentto_address'};
1398
    }
1399
    push @values,$params->{'message_id'};
1400
    my $dbh = C4::Context->dbh();
1371
    my $sth = $dbh->prepare( $statement );
1401
    my $sth = $dbh->prepare( $statement );
1372
    my $result = $sth->execute( $params->{'status'},
1402
    my $result = $sth->execute( @values );
1373
                                $params->{'message_id'} );
1374
    return $result;
1403
    return $result;
1375
}
1404
}
1376
1405
(-)a/basket/sendbasket.pl (+3 lines)
Lines 31-36 use C4::Auth; Link Here
31
use C4::Output;
31
use C4::Output;
32
use C4::Biblio;
32
use C4::Biblio;
33
use Koha::Email;
33
use Koha::Email;
34
use Email::Valid;
34
35
35
my $query = new CGI;
36
my $query = new CGI;
36
37
Lines 45-51 my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( Link Here
45
);
46
);
46
47
47
my $bib_list     = $query->param('bib_list');
48
my $bib_list     = $query->param('bib_list');
49
my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
48
my $email_add    = $query->param('email_add');
50
my $email_add    = $query->param('email_add');
51
$email_add = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
49
52
50
my $dbh          = C4::Context->dbh;
53
my $dbh          = C4::Context->dbh;
51
54
(-)a/installer/data/mysql/atomicupdate/bz8000_TestModeForNotices.sql (+6 lines)
Line 0 Link Here
1
-- SYSPREF
2
INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
3
VALUES ('SendAllEmailsTo','',NULL,'This email will replace the To address in every message sent by the system.  This is meant to help testing and validation   only.','Textarea');
4
5
-- SCHEMA
6
ALTER TABLE message_queue ADD sentto_address mediumtext AFTER to_address;
(-)a/installer/data/mysql/kohastructure.sql (+1 lines)
Lines 2599-2604 CREATE TABLE `message_queue` ( Link Here
2599
  `status` enum('sent','pending','failed','deleted') NOT NULL default 'pending',
2599
  `status` enum('sent','pending','failed','deleted') NOT NULL default 'pending',
2600
  `time_queued` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2600
  `time_queued` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2601
  `to_address` mediumtext,
2601
  `to_address` mediumtext,
2602
  `sentto_address` mediumtext,
2602
  `from_address` mediumtext,
2603
  `from_address` mediumtext,
2603
  `content_type` text,
2604
  `content_type` text,
2604
  PRIMARY KEY `message_id` (`message_id`),
2605
  PRIMARY KEY `message_id` (`message_id`),
(-)a/installer/data/mysql/sysprefs.sql (+1 lines)
Lines 418-423 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
418
('SelfCheckHelpMessage','','70|10','Enter HTML to include under the basic Web-based Self Checkout instructions on the Help page','Textarea'),
418
('SelfCheckHelpMessage','','70|10','Enter HTML to include under the basic Web-based Self Checkout instructions on the Help page','Textarea'),
419
('SelfCheckReceiptPrompt','1','NULL','If ON, print receipt dialog pops up when self checkout is finished','YesNo'),
419
('SelfCheckReceiptPrompt','1','NULL','If ON, print receipt dialog pops up when self checkout is finished','YesNo'),
420
('SelfCheckTimeout','120','','Define the number of seconds before the Web-based Self Checkout times out a patron','Integer'),
420
('SelfCheckTimeout','120','','Define the number of seconds before the Web-based Self Checkout times out a patron','Integer'),
421
('SendAllEmailsTo','',NULL,'This email will replace the To address in every message sent by the system.  This is meant to help testing only.','Textarea'),
421
('SeparateHoldings','0',NULL,'Separate current branch holdings from other holdings','YesNo'),
422
('SeparateHoldings','0',NULL,'Separate current branch holdings from other holdings','YesNo'),
422
('SeparateHoldingsBranch','homebranch','homebranch|holdingbranch','Branch used to separate holdings','Choice'),
423
('SeparateHoldingsBranch','homebranch','homebranch|holdingbranch','Branch used to separate holdings','Choice'),
423
('SessionRestrictionByIP','1','Check for change in remote IP address for session security. Disable only when remote IP address changes frequently.','','YesNo'),
424
('SessionRestrictionByIP','1','Check for change in remote IP address for session security. Disable only when remote IP address changes frequently.','','YesNo'),
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref (+5 lines)
Lines 71-76 Administration: Link Here
71
                  yes: "logged in library's"
71
                  yes: "logged in library's"
72
                  no: "all libraries"
72
                  no: "all libraries"
73
            - rules by default.
73
            - rules by default.
74
        -
75
            - Redirect all emails from Koha to
76
            - pref: SendAllEmailsTo
77
              class: email
78
            - instead of their intended user.
74
    Login options:
79
    Login options:
75
        -
80
        -
76
            - Automatically log out users after
81
            - Automatically log out users after
(-)a/misc/cronjobs/runreport.pl (+3 lines)
Lines 34-39 use Text::CSV_XS; Link Here
34
use CGI qw ( -utf8 );
34
use CGI qw ( -utf8 );
35
use Carp;
35
use Carp;
36
use Encode;
36
use Encode;
37
use Email::Valid;
37
38
38
BEGIN {
39
BEGIN {
39
    # find Koha's Perl modules
40
    # find Koha's Perl modules
Lines 208-213 if ($to or $from or $email) { Link Here
208
    $from or $from = C4::Context->preference('KohaAdminEmailAddress');
209
    $from or $from = C4::Context->preference('KohaAdminEmailAddress');
209
    $to   or $to   = C4::Context->preference('KohaAdminEmailAddress');
210
    $to   or $to   = C4::Context->preference('KohaAdminEmailAddress');
210
}
211
}
212
my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
213
$to = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
211
214
212
unless (scalar(@ARGV)) {
215
unless (scalar(@ARGV)) {
213
    print STDERR "ERROR: No reportID(s) specified\n";
216
    print STDERR "ERROR: No reportID(s) specified\n";
(-)a/opac/opac-sendbasket.pl (+3 lines)
Lines 34-39 use C4::Output; Link Here
34
use C4::Biblio;
34
use C4::Biblio;
35
use C4::Members;
35
use C4::Members;
36
use Koha::Email;
36
use Koha::Email;
37
use Email::Valid;
37
38
38
my $query = new CGI;
39
my $query = new CGI;
39
40
Lines 47-53 my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( Link Here
47
);
48
);
48
49
49
my $bib_list     = $query->param('bib_list');
50
my $bib_list     = $query->param('bib_list');
51
my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
50
my $email_add    = $query->param('email_add');
52
my $email_add    = $query->param('email_add');
53
$email_add = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
51
54
52
my $dbh          = C4::Context->dbh;
55
my $dbh          = C4::Context->dbh;
53
56
(-)a/opac/opac-sendshelf.pl (+3 lines)
Lines 34-39 use C4::Output; Link Here
34
use C4::Members;
34
use C4::Members;
35
use Koha::Email;
35
use Koha::Email;
36
use Koha::Virtualshelves;
36
use Koha::Virtualshelves;
37
use Email::Valid;
37
38
38
my $query = new CGI;
39
my $query = new CGI;
39
40
Lines 53-59 my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( Link Here
53
);
54
);
54
55
55
my $shelfid = $query->param('shelfid');
56
my $shelfid = $query->param('shelfid');
57
my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
56
my $email   = $query->param('email');
58
my $email   = $query->param('email');
59
$email = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
57
60
58
my $dbh          = C4::Context->dbh;
61
my $dbh          = C4::Context->dbh;
59
62
(-)a/virtualshelves/sendshelf.pl (-1 / +3 lines)
Lines 33-38 use C4::Items; Link Here
33
use C4::Output;
33
use C4::Output;
34
use Koha::Email;
34
use Koha::Email;
35
use Koha::Virtualshelves;
35
use Koha::Virtualshelves;
36
use Email::Valid;
36
37
37
my $query = new CGI;
38
my $query = new CGI;
38
39
Lines 47-53 my ( $template, $borrowernumber, $cookie ) = get_template_and_user( Link Here
47
);
48
);
48
49
49
my $shelfid = $query->param('shelfid');
50
my $shelfid = $query->param('shelfid');
51
my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
50
my $email   = $query->param('email');
52
my $email   = $query->param('email');
53
$email = $sendAllEmailsTo if ($sendAllEmailsTo && Email::Valid->address($sendAllEmailsTo) );
51
54
52
my $dbh = C4::Context->dbh;
55
my $dbh = C4::Context->dbh;
53
56
54
- 

Return to bug 8000