/[notice-sender]/jifty-dbi/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 /jifty-dbi/Nos.pm

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

revision 30 by dpavlin, Mon May 16 21:54:41 2005 UTC revision 33 by dpavlin, Tue May 17 11:09:08 2005 UTC
# Line 77  sub new { Line 77  sub new {
77  }  }
78    
79    
80    =head2 new_list
81    
82    Create new list
83    
84     $nos->new_list(
85            list => 'My list",
86            email => 'my-list@example.com',
87     );
88    
89    Returns ID of newly created list.
90    
91    =cut
92    
93    sub new_list {
94            my $self = shift;
95    
96            my $arg = {@_};
97    
98            confess "need list name" unless ($arg->{'list'});
99            confess "need list email" unless ($arg->{'list'});
100    
101            my $l = $self->_get_list($arg->{'list'}) ||
102                    $self->_add_list( @_ ) ||
103                    return undef;
104    
105            return $l->id;
106    }
107    
108    
109  =head2 add_member_to_list  =head2 add_member_to_list
110    
111  Add new member to list  Add new member to list
# Line 105  sub add_member_to_list { Line 134  sub add_member_to_list {
134          my $list = $self->_get_list($list_name) || croak "list $list_name doesn't exist";          my $list = $self->_get_list($list_name) || croak "list $list_name doesn't exist";
135    
136          if (! Email::Valid->address($email)) {          if (! Email::Valid->address($email)) {
137                  carp "SKIPPING $name <$email>\n" if ($self->{'verbose'});                  carp "SKIPPING $name <$email>\n";
138                  return 0;                  return 0;
139          }          }
140    
# Line 116  sub add_member_to_list { Line 145  sub add_member_to_list {
145    
146          my $this_user = $users->find_or_create({          my $this_user = $users->find_or_create({
147                  email => $email,                  email => $email,
                 full_name => $name,  
148          }) || croak "can't find or create member\n";          }) || croak "can't find or create member\n";
149    
150            if ($name && $this_user->full_name ne $name) {
151                    $this_user->full_name($name || '');
152                    $this_user->update;
153            }
154    
155          my $user_on_list = $user_list->find_or_create({          my $user_on_list = $user_list->find_or_create({
156                  user_id => $this_user->id,                  user_id => $this_user->id,
157                  list_id => $list->id,                  list_id => $list->id,
# Line 156  sub add_message_to_list { Line 189  sub add_message_to_list {
189          my $list_name = $args->{'list'} || confess "need list name";          my $list_name = $args->{'list'} || confess "need list name";
190          my $message_text = $args->{'message'} || croak "need message";          my $message_text = $args->{'message'} || croak "need message";
191    
         warn Dumper($message_text);  
   
192          my $m = Email::Simple->new($message_text) || croak "can't parse message";          my $m = Email::Simple->new($message_text) || croak "can't parse message";
193    
194          croak "message doesn't have Subject header\n" unless( $m->header('Subject') );          unless( $m->header('Subject') ) {
195                    warn "message doesn't have Subject header\n";
196                    return;
197            }
198    
199          my $lists = $self->{'loader'}->find_class('lists');          my $lists = $self->{'loader'}->find_class('lists');
200    
# Line 223  sub send_queued_messages { Line 257  sub send_queued_messages {
257                  print "sending message ",$m->message_id," enqueued on ",$m->date," to list ",$m->list_id->name,"\n";                  print "sending message ",$m->message_id," enqueued on ",$m->date," to list ",$m->list_id->name,"\n";
258                  my $msg = $m->message_id->message;                  my $msg = $m->message_id->message;
259    
                 my $auth = Email::Auth::AddressHash->new(  
                         $m->list_id->name,      # secret  
                         10,                     # hashlen  
                 );  
   
260                  foreach my $u ($user_list->search(list_id => $m->list_id)) {                  foreach my $u ($user_list->search(list_id => $m->list_id)) {
261    
262                          my $to_email = $u->user_id->email;                          my $to_email = $u->user_id->email;
263    
264                            my ($from,$domain) = split(/@/, $u->list_id->email, 2);
265    
266                          if ($sent->search( message_id => $m->message_id, user_id => $u->user_id )) {                          if ($sent->search( message_id => $m->message_id, user_id => $u->user_id )) {
267                                  print "SKIP $to_email message allready sent\n";                                  print "SKIP $to_email message allready sent\n";
268                          } else {                          } else {
269                                  print "\t$to_email\n";                                  print "=> $to_email\n";
270    
271                                    my $secret = $m->list_id->name . " " . $u->user_id->email . " " . $m->message_id;
272                                    my $auth = Email::Auth::AddressHash->new( $secret, 10 );
273    
274                                  my $hash = $auth->generate_hash( $to_email );                                  my $hash = $auth->generate_hash( $to_email );
275    
276                                  my $from = $u->list_id->name . " <" . $u->list_id->email . "+" . $hash . ">";                                  my $from = $u->list_id->name . " <" . $from . "+" . $hash . ( $domain ? "@" . $domain : '' ). ">";
277                                  my $to = $u->user_id->full_name . " <$to_email>";                                  my $to = $u->user_id->full_name . " <$to_email>";
278    
279                                  my $m = Email::Simple->new($msg) || croak "can't parse message";                                  my $m_obj = Email::Simple->new($msg) || croak "can't parse message";
   
                                 print Dumper($m);  
280    
281                                  $m->header_set('From', $from) || croak "can't set From: header";                                  $m_obj->header_set('From', $from) || croak "can't set From: header";
282                                  $m->header_set('To', $to) || croak "can't set To: header";                                  $m_obj->header_set('To', $to) || croak "can't set To: header";
283    
284                                  # FIXME do real sending :-)                                  # FIXME do real sending :-)
285                                  send IO => $m->as_string;                                  send IO => $m_obj->as_string;
286    
287                                  $sent->create({                                  $sent->create({
288                                          message_id => $m->message_id,                                          message_id => $m->message_id,
# Line 340  sub _get_list { Line 372  sub _get_list {
372    
373          my $name = shift || return;          my $name = shift || return;
374    
375          my $lists = $self->{'loader'}->find_class('lists');          my $lists = $self->{'loader'}->find_class('lists') || confess "can't find lists class";
376    
377          return $lists->search({ name => $name });          return $lists->search({ name => $name })->first;
378  }  }
379    
380    

Legend:
Removed from v.30  
changed lines
  Added in v.33

  ViewVC Help
Powered by ViewVC 1.1.26