| Lines 35-124
          This module lets you modify a patron's messaging preferences.
      
      
        Link Here | 
        
          | 35 |  | 35 |  | 
        
          | 36 | =head1 FUNCTIONS | 36 | =head1 FUNCTIONS | 
        
          | 37 |  | 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 | 38 | =head1 TABLES | 
        
          | 123 |  | 39 |  | 
        
          | 124 | =head2 message_queue | 40 | =head2 message_queue | 
            
              | 125 | -  |  |  |