/[notice-sender]/trunk/Nos.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/Nos.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 75 by dpavlin, Wed Aug 24 21:27:40 2005 UTC revision 80 by dpavlin, Fri Aug 26 05:38:00 2005 UTC
# Line 27  use Email::Simple; Line 27  use Email::Simple;
27  use Email::Address;  use Email::Address;
28  use Mail::DeliveryStatus::BounceParser;  use Mail::DeliveryStatus::BounceParser;
29  use Class::DBI::AbstractSearch;  use Class::DBI::AbstractSearch;
30    use SQL::Abstract;
31  use Mail::Alias;  use Mail::Alias;
32  use Cwd qw(abs_path);  use Cwd qw(abs_path);
33    
# Line 116  sub new { Line 117  sub new {
117    
118          $self->{'hash_len'} ||= 8;          $self->{'hash_len'} ||= 8;
119    
         $self->{'loader'}->find_class('received')->set_sql(  
                 'received' => qq{  
                         select  
                                 received.id as id,  
                                 lists.name as list,  
                                 users.ext_id as ext_id,  
                                 users.email as email,  
                                 bounced,received.date as date  
                         from received  
                         join lists on lists.id = list_id  
                         join users on users.id = user_id  
                 },  
         );  
   
120          $self ? return $self : return undef;          $self ? return $self : return undef;
121  }  }
122    
# Line 722  sub inbox_message { Line 709  sub inbox_message {
709    
710  Returns all received messages for given list or user.  Returns all received messages for given list or user.
711    
712   my @received = $nos->received_message(   my @received = $nos->received_messages(
713          list => 'My list',          list => 'My list',
714          email => "john.doe@example.com",          email => "john.doe@example.com",
715            from_date => '2005-01-01 10:15:00',
716            to_date => '2005-01-01 12:00:00',
717            message => 0,
718   );   );
719    
720  This method is used by C<sender.pl> when receiving e-mail messages.  If don't specify C<list> or C<email> it will return all received messages.
721    Results will be sorted by received date, oldest first.
722    
723    Other optional parametars include:
724    
725    =over 10
726    
727    =item from_date
728    
729    Date (in ISO format) for lower limit of dates received
730    
731    =item to_date
732    
733    Return just messages older than this date
734    
735    =item message
736    
737    Include whole received message in result. This will probably make result
738    array very large. Use with care.
739    
740    =back
741    
742    Each element in returned array will have following structure:
743    
744     my $row = {
745            id => 42,                       # unique ID of received message
746            list => 'My list',              # useful if filtering by email
747            ext_id => 9999,                 # ext_id from message sender
748            email => 'jdoe@example.com',    # e-mail of message sender
749            bounced => 0,                   # true if message is bounce
750            date => '2005-08-24 18:57:24',  # date of receival in ISO format
751     }
752    
753    If you specified C<message> option, this hash will also have C<message> key
754    which will contain whole received message.
755    
756  =cut  =cut
757    
758  sub received_messages {  sub received_messages {
759          my $self = shift;          my $self = shift;
760    
761          my $arg = {@_};          my $arg = {@_} if (@_);
762    
763          croak "need list name or email" unless ($arg->{'list'} || $arg->{'email'});  #       croak "need list name or email" unless ($arg->{'list'} || $arg->{'email'});
764    
765          $arg->{'list'} = lc($arg->{'list'});          my $sql = qq{
766          $arg->{'email'} = lc($arg->{'email'});                          select
767                                    received.id as id,
768                                    lists.name as list,
769                                    users.ext_id as ext_id,
770                                    users.email as email,
771            };
772            $sql .= qq{             message,} if ($arg->{'message'});
773            $sql .= qq{
774                                    bounced,received.date as date
775                            from received
776                            join lists on lists.id = list_id
777                            join users on users.id = user_id
778            };
779    
780            my $order = qq{ order by date desc };
781    
782            my $where;
783    
784            $where->{'lists.name'} = lc($arg->{'list'}) if ($arg->{'list'});
785            $where->{'users.email'} = lc($arg->{'email'}) if ($arg->{'email'});
786            $where->{'received.date'} = { '>=', $arg->{'date_from'} } if ($arg->{'date_from'});
787            $where->{'received.date'} = { '<=', $arg->{'date_to'} } if ($arg->{'date_to'});
788    
789            # hum, yammy one-liner
790            my($stmt, @bind)  = SQL::Abstract->new->where($where);
791    
792          my $rcvd = $self->{'loader'}->find_class('received')->search_received();          my $dbh = $self->{'loader'}->find_class('received')->db_Main;
793    
794          return $rcvd;          my $sth = $dbh->prepare($sql . $stmt . $order);
795            $sth->execute(@bind);
796            return $sth->fetchall_hash;
797  }  }
798    
799    
# Line 1139  sub AddMessageToList { Line 1189  sub AddMessageToList {
1189          }          }
1190  }  }
1191    
 =head1 UNIMPLEMENTED FUNCTIONS  
   
 This is a stub for documentation of unimplemented functions.  
   
1192  =head2 MessagesReceived  =head2 MessagesReceived
1193    
1194    Return statistics about received messages.
1195    
1196   my @result = MessagesReceived(   my @result = MessagesReceived(
1197          list => 'My list',          list => 'My list',
1198          email => 'jdoe@example.com',          email => 'jdoe@example.com',
1199            from_date => '2005-01-01 10:15:00',
1200            to_date => '2005-01-01 12:00:00',
1201            message => 0,
1202   );   );
1203    
1204  You can specify just C<list> or C<email> or any combination of those.  You must specify C<list> or C<email> or any combination of those two. Other
1205    parametars are optional.
1206    
1207  It will return array of hashes with following structure:  For format of returned array element see C<received_messages>.
1208    
1209   {  =cut
1210          id => 42,                       # unique ID of received message  
1211          list => 'My list',              # useful only of filtering by email  sub MessagesReceived {
1212          ext_id => 9999,                 # ext_id from message user          my $self = shift;
1213          email => 'jdoe@example.com',    # e-mail of user  
1214          bounced => 0,                   # true value if message is bounce          if ($_[0] !~ m/^HASH/) {
1215          date => '2005-08-24 18:57:24',  # date of recival in ISO format                  die "need at least list or email" unless (scalar @_ < 2);
1216   }                  return $nos->received_messages(
1217                            list => $_[0], email => $_[1],
1218                            from_date => $_[2], to_date => $_[3],
1219                            message => $_[4]
1220                    );
1221            } else {
1222                    my $arg = shift;
1223                    die "need list or email argument" unless ($arg->{'list'} || $arg->{'email'});
1224                    return $nos->received_messages( $arg );
1225            }
1226    }
1227    
1228    ###
1229    
1230    =head1 UNIMPLEMENTED SOAP FUNCTIONS
1231    
1232    This is a stub for documentation of unimplemented functions.
1233    
1234  =head2 MessagesReceivedByDate  =head2 MessagesReceivedByDate
1235    
1236  =head2 MessagesReceivedByDateWithContent  =head2 MessagesReceivedByDateWithContent
1237    
1238  =head2 ReceivedMessasgeContent  =head2 ReceivedMessageContent
1239    
1240  Return content of received message.  Return content of received message.
1241    
1242   my $mail_body = ReceivedMessageContent( id => 42 );   my $mail_body = ReceivedMessageContent( id => 42 );
1243    
 =cut  
   
1244    
1245    
1246    
 ###  
   
1247  =head1 NOTE ON ARRAYS IN SOAP  =head1 NOTE ON ARRAYS IN SOAP
1248    
1249  Returning arrays from SOAP calls is somewhat fuzzy (at least to me). It  Returning arrays from SOAP calls is somewhat fuzzy (at least to me). It

Legend:
Removed from v.75  
changed lines
  Added in v.80

  ViewVC Help
Powered by ViewVC 1.1.26