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

(-)a/C4/Form/MessagingPreferences.pm (-1 / +12 lines)
Lines 97-103 sub handle_form_action { Link Here
97
            }
97
            }
98
        }
98
        }
99
99
100
        C4::Members::Messaging::SetMessagingPreference( $updater );
100
        $updater->{'days_in_advance'} = undef unless exists $updater->{'days_in_advance'};
101
        $updater->{'wants_digest'} = 0 unless exists $updater->{'wants_digest'};
102
        my $preference = Koha::Patron::MessagePreferences->find({
103
            borrowernumber => $updater->{'borrowernumber'},
104
            message_attribute_id => $option->{'message_attribute_id'},
105
            categorycode => $categorycode || $updater->{'categorycode'},
106
        });
107
        unless ($preference) {
108
            Koha::Patron::MessagePreference->new($updater)->store;
109
        } else {
110
            $preference->set($updater)->store;
111
        }
101
112
102
	if ($query->param( $option->{'message_attribute_id'})){
113
	if ($query->param( $option->{'message_attribute_id'})){
103
	    $prefs_set = 1;
114
	    $prefs_set = 1;
(-)a/C4/Members/Messaging.pm (-86 lines)
Lines 33-124 C4::Members::Messaging - manage patron messaging preferences Link Here
33
33
34
This module lets you modify a patron's messaging preferences.
34
This module lets you modify a patron's messaging preferences.
35
35
36
=head1 FUNCTIONS
37
38
=head2 SetMessagingPreference
39
40
This method defines how a user (or a default for a patron category) wants to get a certain 
41
message delivered.  The list of valid message types can be delivered can be found in the
42
C<message_attributes> table, and the list of valid message transports can be
43
found in the C<message_transport_types> table.
44
45
  C4::Members::Messaging::SetMessagingPreference( { borrowernumber          => $borrower->{'borrowernumber'}
46
                                                    message_attribute_id    => $message_attribute_id,
47
                                                    message_transport_types => [ qw( email sms ) ],
48
                                                    days_in_advance         => 5
49
                                                    wants_digest            => 1 } )
50
51
returns nothing useful.
52
53
=cut
54
55
sub SetMessagingPreference {
56
    my $params = shift;
57
58
    unless (exists $params->{borrowernumber} xor exists $params->{categorycode}) { # yes, xor
59
        warn "SetMessagingPreference called without exactly one of borrowernumber or categorycode";
60
        return;
61
    }
62
    foreach my $required ( qw( message_attribute_id message_transport_types ) ) {
63
        if ( ! exists $params->{ $required } ) {
64
            warn "SetMessagingPreference called without required parameter: $required";
65
            return;
66
        }
67
    }
68
    $params->{'days_in_advance'} = undef unless exists ( $params->{'days_in_advance'} );
69
    $params->{'wants_digest'}    = 0     unless exists ( $params->{'wants_digest'} );
70
71
    my $dbh = C4::Context->dbh();
72
    
73
    my $delete_sql = <<'END_SQL';
74
DELETE FROM borrower_message_preferences
75
  WHERE message_attribute_id = ?
76
END_SQL
77
    my @bind_params = ( $params->{'message_attribute_id'} );
78
    if ( exists $params->{'borrowernumber'} ) {
79
        $delete_sql .= " AND borrowernumber = ? ";
80
        push @bind_params, $params->{borrowernumber};
81
    } else {
82
        $delete_sql .= " AND categorycode = ? ";
83
        push @bind_params, $params->{categorycode};
84
    }
85
    my $sth = $dbh->prepare( $delete_sql );
86
    my $deleted = $sth->execute( @bind_params );
87
88
    if ( $params->{'message_transport_types'} ) {
89
        my $insert_bmp = <<'END_SQL';
90
INSERT INTO borrower_message_preferences
91
(borrower_message_preference_id, borrowernumber, categorycode, message_attribute_id, days_in_advance, wants_digest)
92
VALUES
93
(NULL, ?, ?, ?, ?, ?)
94
END_SQL
95
        
96
        $sth = C4::Context->dbh()->prepare($insert_bmp);
97
        # set up so that we can easily construct the insert SQL
98
        $params->{'borrowernumber'}  = undef unless exists ( $params->{'borrowernumber'} );
99
        $params->{'categorycode'}    = undef unless exists ( $params->{'categorycode'} );
100
        my $success = $sth->execute( $params->{'borrowernumber'},
101
                                     $params->{'categorycode'},
102
                                     $params->{'message_attribute_id'},
103
                                     $params->{'days_in_advance'},
104
                                     $params->{'wants_digest'} );
105
        # my $borrower_message_preference_id = $dbh->last_insert_id();
106
        my $borrower_message_preference_id = $dbh->{'mysql_insertid'};
107
        
108
        my $insert_bmtp = <<'END_SQL';
109
INSERT INTO borrower_message_transport_preferences
110
(borrower_message_preference_id, message_transport_type)
111
VALUES
112
(?, ?)
113
END_SQL
114
        $sth = C4::Context->dbh()->prepare($insert_bmtp);
115
        foreach my $transport ( @{$params->{'message_transport_types'}}) {
116
            my $success = $sth->execute( $borrower_message_preference_id, $transport );
117
        }
118
    }
119
    return;    
120
}
121
122
=head1 TABLES
36
=head1 TABLES
123
37
124
=head2 message_queue
38
=head2 message_queue
(-)a/t/db_dependent/Circulation.t (-3 / +2 lines)
Lines 39-45 use C4::Items qw( ModItemTransfer ); Link Here
39
use C4::Log;
39
use C4::Log;
40
use C4::Reserves qw( AddReserve ModReserve ModReserveCancelAll ModReserveAffect CheckReserves GetOtherReserves );
40
use C4::Reserves qw( AddReserve ModReserve ModReserveCancelAll ModReserveAffect CheckReserves GetOtherReserves );
41
use C4::Overdues qw( CalcFine UpdateFine get_chargeable_units );
41
use C4::Overdues qw( CalcFine UpdateFine get_chargeable_units );
42
use C4::Members::Messaging qw( SetMessagingPreference );
43
use Koha::DateUtils qw( dt_from_string output_pref );
42
use Koha::DateUtils qw( dt_from_string output_pref );
44
use C4::Message;
43
use C4::Message;
45
use Koha::Database;
44
use Koha::Database;
Lines 5674-5684 subtest "SendCirculationAlert" => sub { Link Here
5674
    my $library = $builder->build_object({ class => 'Koha::Libraries' });
5673
    my $library = $builder->build_object({ class => 'Koha::Libraries' });
5675
    set_userenv( $library->unblessed);
5674
    set_userenv( $library->unblessed);
5676
    my $patron = $builder->build_object({ class => 'Koha::Patrons' });
5675
    my $patron = $builder->build_object({ class => 'Koha::Patrons' });
5677
    C4::Members::Messaging::SetMessagingPreference({
5676
    Koha::Patron::MessagePreference->new({
5678
        borrowernumber => $patron->id,
5677
        borrowernumber => $patron->id,
5679
        message_transport_types => ['sms'],
5678
        message_transport_types => ['sms'],
5680
        message_attribute_id => 5
5679
        message_attribute_id => 5
5681
    });
5680
    })->store;
5682
    my $item = $builder->build_sample_item();
5681
    my $item = $builder->build_sample_item();
5683
    my $checkin_notice = $builder->build_object({
5682
    my $checkin_notice = $builder->build_object({
5684
        class => 'Koha::Notice::Templates',
5683
        class => 'Koha::Notice::Templates',
(-)a/t/db_dependent/Illrequests.t (-4 / +5 lines)
Lines 26-31 use Koha::Illrequestattributes; Link Here
26
use Koha::Illrequest::Config;
26
use Koha::Illrequest::Config;
27
use Koha::Biblios;
27
use Koha::Biblios;
28
use Koha::Patrons;
28
use Koha::Patrons;
29
use Koha::Patron::MessagePreferences;
29
use Koha::ItemTypes;
30
use Koha::ItemTypes;
30
use Koha::Items;
31
use Koha::Items;
31
use Koha::Libraries;
32
use Koha::Libraries;
Lines 1015-1025 subtest 'Helpers' => sub { Link Here
1015
1016
1016
    #send_patron_notice
1017
    #send_patron_notice
1017
    my $attr = Koha::Patron::MessagePreference::Attributes->find({ message_name => 'Ill_ready' });
1018
    my $attr = Koha::Patron::MessagePreference::Attributes->find({ message_name => 'Ill_ready' });
1018
    C4::Members::Messaging::SetMessagingPreference({
1019
    Koha::Patron::MessagePreference->new({
1019
        borrowernumber => $patron->{borrowernumber},
1020
        borrowernumber => $patron->{borrowernumber},
1020
        message_attribute_id => $attr->message_attribute_id,
1021
        message_attribute_id => $attr->message_attribute_id,
1021
        message_transport_types => ['email']
1022
        message_transport_types => ['email']
1022
    });
1023
    })->store;
1023
    my $return_patron = $illrq_obj->send_patron_notice('ILL_PICKUP_READY');
1024
    my $return_patron = $illrq_obj->send_patron_notice('ILL_PICKUP_READY');
1024
    my $notice = $schema->resultset('MessageQueue')->search({
1025
    my $notice = $schema->resultset('MessageQueue')->search({
1025
            letter_code => 'ILL_PICKUP_READY',
1026
            letter_code => 'ILL_PICKUP_READY',
Lines 1035-1045 subtest 'Helpers' => sub { Link Here
1035
1036
1036
    # ill update notice, passes additional text parameter
1037
    # ill update notice, passes additional text parameter
1037
    my $attr_update = Koha::Patron::MessagePreference::Attributes->find({ message_name => 'Ill_update' });
1038
    my $attr_update = Koha::Patron::MessagePreference::Attributes->find({ message_name => 'Ill_update' });
1038
    C4::Members::Messaging::SetMessagingPreference({
1039
    Koha::Patron::MessagePreference->new({
1039
        borrowernumber => $patron->{borrowernumber},
1040
        borrowernumber => $patron->{borrowernumber},
1040
        message_attribute_id => $attr_update->message_attribute_id,
1041
        message_attribute_id => $attr_update->message_attribute_id,
1041
        message_transport_types => ['email']
1042
        message_transport_types => ['email']
1042
    });
1043
    })->store;
1043
    my $return_patron_update = $illrq_obj->send_patron_notice('ILL_REQUEST_UPDATE', 'Some additional text');
1044
    my $return_patron_update = $illrq_obj->send_patron_notice('ILL_REQUEST_UPDATE', 'Some additional text');
1044
    my $notice_update = $schema->resultset('MessageQueue')->search({
1045
    my $notice_update = $schema->resultset('MessageQueue')->search({
1045
            letter_code => 'ILL_REQUEST_UPDATE',
1046
            letter_code => 'ILL_REQUEST_UPDATE',
(-)a/t/db_dependent/Koha/Patron/Categories.t (-1 / +4 lines)
Lines 115-121 subtest 'default_messaging tests' => sub { Link Here
115
        enrolmentperiod => undef,
115
        enrolmentperiod => undef,
116
        enrolmentperioddate => $next_month,
116
        enrolmentperioddate => $next_month,
117
    })->store;
117
    })->store;
118
    my $attr = $builder->build({ source => 'MessageAttribute', });
118
    my $attr = $builder->build({
119
        source => 'MessageAttribute',
120
        value => { takes_days => 1 },
121
    });
119
    my $transport = $builder->build({
122
    my $transport = $builder->build({
120
        source => 'MessageTransport',
123
        source => 'MessageTransport',
121
        value => {
124
        value => {
(-)a/t/db_dependent/api/v1/patrons.t (-6 / +11 lines)
Lines 27-33 use t::lib::Mocks; Link Here
27
use t::lib::Dates;
27
use t::lib::Dates;
28
28
29
use C4::Auth;
29
use C4::Auth;
30
use C4::Members::Messaging;
31
use Koha::Database;
30
use Koha::Database;
32
use Koha::DateUtils qw(dt_from_string output_pref);
31
use Koha::DateUtils qw(dt_from_string output_pref);
33
use Koha::Exceptions::Patron;
32
use Koha::Exceptions::Patron;
Lines 35-40 use Koha::Exceptions::Patron::Attribute; Link Here
35
use Koha::Old::Patrons;
34
use Koha::Old::Patrons;
36
use Koha::Patron::Attributes;
35
use Koha::Patron::Attributes;
37
use Koha::Patron::Debarments qw( AddDebarment );
36
use Koha::Patron::Debarments qw( AddDebarment );
37
use Koha::Patron::MessagePreferences;
38
38
39
use JSON qw(encode_json);
39
use JSON qw(encode_json);
40
40
Lines 549-560 subtest 'add() tests' => sub { Link Here
549
549
550
            t::lib::Mocks::mock_preference( 'EnhancedMessagingPreferences', 1 );
550
            t::lib::Mocks::mock_preference( 'EnhancedMessagingPreferences', 1 );
551
551
552
            C4::Members::Messaging::SetMessagingPreference({
552
            Koha::Patron::MessagePreference->new({
553
                categorycode => 'ST',
553
                categorycode => 'ST',
554
                message_attribute_id => 1,
554
                message_attribute_id => 1,
555
                message_transport_types => ['email'],
555
                message_transport_types => ['email'],
556
                wants_digest => 1
556
                wants_digest => 1
557
            });
557
            })->store;
558
558
559
            my $patron_id = $t->post_ok(
559
            my $patron_id = $t->post_ok(
560
                "//$userid:$password@/api/v1/patrons" => json => {
560
                "//$userid:$password@/api/v1/patrons" => json => {
Lines 568-578 subtest 'add() tests' => sub { Link Here
568
            )->status_is(201, 'Patron added')->tx->res->json->{patron_id};
568
            )->status_is(201, 'Patron added')->tx->res->json->{patron_id};
569
569
570
            my $messaging_preferences = Koha::Patron::MessagePreferences->find_with_message_name({ borrowernumber => $patron_id, message_name => 'Item_Due' });
570
            my $messaging_preferences = Koha::Patron::MessagePreferences->find_with_message_name({ borrowernumber => $patron_id, message_name => 'Item_Due' });
571
571
            my $mtts = $messaging_preferences->message_transport_types;
572
            $messaging_preferences = $messaging_preferences->unblessed;
573
            $messaging_preferences->{'transports'} = $mtts;
572
            is_deeply(
574
            is_deeply(
573
                $messaging_preferences,
575
                $messaging_preferences,
574
                {
576
                {
575
                    letter_code => 'DUEDGST',
577
                    borrower_message_preference_id => $messaging_preferences->{borrower_message_preference_id},
578
                    borrowernumber => $patron_id,
579
                    categorycode => undef,
580
                    days_in_advance => undef,
581
                    message_attribute_id => 1,
576
                    wants_digest => 1,
582
                    wants_digest => 1,
577
                    transports => { email => 'DUEDGST' }
583
                    transports => { email => 'DUEDGST' }
578
                } ,
584
                } ,
579
- 

Return to bug 18595