--- trunk/Nos.pm 2005/05/15 21:35:15 21 +++ trunk/Nos.pm 2005/05/15 21:52:56 22 @@ -57,6 +57,8 @@ my $self = {@_}; bless($self, $class); + croak "need at least dsn" unless ($self->{'dsn'}); + $self->{'loader'} = Class::DBI::Loader->new( debug => $self->{'debug'}, dsn => $self->{'dsn'}, @@ -66,39 +68,70 @@ # additional_classes => qw/Class::DBI::AbstractSearch/, # additional_base_classes => qw/My::Stuff/, relationships => 1, - ); + ) || croak "can't init Class::DBI::Loader"; $self ? return $self : return undef; } -=head2 update_list_email +=head2 send_queued_messages -Update list e-mail address +Send queued messages or just ones for selected list - $noc->update_list_email($list, 'foobar@example.com'); + $noc->send_queued_messages("my list"); =cut -sub update_list_email { +sub send_queued_messages { my $self = shift; + my $list_name = shift; -} - -=head2 send - -Send a message using configured mailer. - - $nos->send("message with headers"); - -=cut - -sub send_email { - my $self = shift; - - my $message = shift || return; + my $lists = $self->{'loader'}->find_class('lists'); + my $queue = $self->{'loader'}->find_class('queue'); + my $user_list = $self->{'loader'}->find_class('user_list'); + my $sent = $self->{'loader'}->find_class('sent'); + + my $my_q; + if ($list_name ne '') { + my $l_id = $lists->search_like( name => $list_name )->first || + croak "can't find list $list_name"; + $my_q = $queue->search_like( list_id => $l_id ) || + croak "can't find list $list_name"; + } else { + $my_q = $queue->retrieve_all; + } + + while (my $m = $my_q->next) { + next if ($m->all_sent); + + print "sending message ",$m->message_id," enqueued on ",$m->date," to list ",$m->list_id->name,"\n"; + my $msg = $m->message_id->message; + + foreach my $u ($user_list->search(list_id => $m->list_id)) { + + if ($sent->search( message_id => $m->message_id, user_id => $u->user_id )) { + print "SKIP ",$u->user_id->email," message allready sent\n"; + } else { + print "\t",$u->user_id->email,"\n"; + + my $hdr = "From: " . $u->list_id->name . " <" . $u->list_id->email . ">\n" . + "To: " . $u->user_id->full_name . " <". $u->user_id->email. ">\n"; + + # FIXME do real sending :-) + send IO => "$hdr\n$msg"; + + $sent->create({ + message_id => $m->message_id, + user_id => $u->user_id, + }); + $sent->dbi_commit; + } + } + $m->all_sent(1); + $m->update; + $m->dbi_commit; + } - send IO => $message; } =head2 EXPORT