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

(-)a/C4/Form/MessagingPreferences.pm (-1 / +12 lines)
Lines 98-104 sub handle_form_action { Link Here
98
            }
98
            }
99
        }
99
        }
100
100
101
        C4::Members::Messaging::SetMessagingPreference( $updater );
101
        $updater->{'days_in_advance'} = undef unless exists $updater->{'days_in_advance'};
102
        $updater->{'wants_digest'} = 0 unless exists $updater->{'wants_digest'};
103
        my $preference = Koha::Patron::Message::Preferences->find({
104
            borrowernumber => $updater->{'borrowernumber'},
105
            message_attribute_id => $option->{'message_attribute_id'},
106
            categorycode => $categorycode || $updater->{'categorycode'},
107
        });
108
        unless ($preference) {
109
            Koha::Patron::Message::Preference->new($updater)->store;
110
        } else {
111
            $preference->set($updater)->store;
112
        }
102
113
103
	if ($query->param( $option->{'message_attribute_id'})){
114
	if ($query->param( $option->{'message_attribute_id'})){
104
	    $prefs_set = 1;
115
	    $prefs_set = 1;
(-)a/C4/Members/Messaging.pm (-87 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
125
- 

Return to bug 18595