#$Header: rt/lib/RT/Action/AutoAssign.pm,v 1.1.2.2 2001/05/17 12:22:34 feargal Exp $

package RT::Action::AutoAssign;
require RT::Action::SendEmail;
@ISA = qw(RT::Action::SendEmail);


# {{{ sub SetRecipients

=head2 SetRecipients

Sets the recipients of this message to a random watcher

=cut


sub SetRecipients {
    my $self=shift;

    $arg=$self->Argument;

    my (@Candidates, @Users);

    # Get a list of candidate watchers for the queue
    if ($arg =~ /\bCc\b/) {
        push(@Candidates, @{$self->TicketObj->QueueObj->Cc->Emails});
    }
    if ($arg =~ /\bAdminCc\b/) {
        push(@Candidates, @{$self->TicketObj->QueueObj->AdminCc->Emails});
    }

    # Now root out the candidates who can own tickets
    foreach $CandidateEmail (@Candidates) {
	my $User = new RT::User($RT::SystemUser);
	$User->LoadByEmail($CandidateEmail);
	if ($User->id) {
            if ($User->HasQueueRight( QueueObj => $self->TicketObj->QueueObj,
                                      Right => 'OwnTicket')) {
                push(@Users, $User->id);
            }
	}
    }

    # Make sure we've found somebody
    if (scalar(@Users) > 0) {
    	$self->TicketObj->SetOwner($Users[int(rand scalar(@Users))],'Give');
        push(@To, $self->TicketObj->OwnerObj->EmailAddress);
        my $To = join(',',@To);
        $self->SetTo($To);
        return(1);
    } else {
        $RT::Logger->debug("Could not assign ticket: ".
                           "No $arg watchers have OwnTicket Right\n");
        return(0);
    }
}

# }}}


# {{{ sub SetReturnAddress 

=head2 SetReturnAddress

Set this message's return address to the apropriate queue address

=cut

sub SetReturnAddress {

  my $self = shift;
  
  # From and Reply-To
  # $self->{comment} should be set if the comment address is to be used.
  my $email_address=$self->{comment} ? 
    $self->TicketObj->QueueObj->CommentAddress :
      $self->TicketObj->QueueObj->CorrespondAddress
        or $RT::Logger->warning( "$self Can't find email address for queue" . $TicketObj->QueueObj->Name."\n");
  
  
  unless ($self->TemplateObj->MIMEObj->head->get('From')) {
      my $friendly_name=$self->TransactionObj->CreatorObj->RealName;
      # TODO: this "via RT" should really be site-configurable.
      $self->SetHeader('From', "RT <$email_address>");
  }
  
  unless ($self->TemplateObj->MIMEObj->head->get('Reply-To')) {
      $self->SetHeader('Reply-To', "$email_address");
  }
  
}

# }}}

1;
