AutoTake for RT3

We’re using this to automagically assign tickets to one of the queue’s
AdminCc’s randomly when tickets get created.

*** Custom action preparation code:

my $retval = undef;

if ( defined( $self->TicketObj->OwnerObj->id ) ){
if( $self->TicketObj->OwnerObj->Id == $RT::Nobody->Id ) {
$retval = 1;
}
}

*** Custom action cleanup code:

my $retval = undef;

my $watchers = $self->TicketObj->QueueObj->AdminCc;
my $accm = $watchers->MembersObj;

my $numWatchers = 0;

Grab emails of AdminCc objects and shove in array

my @lottery;

while (my $admincc = $accm->Next) {

 # We only want AdminCc's that are users, not groups
 my $email = $admincc->MemberObj->Object->EmailAddress;
 my $isuser = $admincc->MemberObj->IsUser;

 if ($isuser) {
      $numWatchers++;
      push(@lottery, $email);
 }

}

Pick a lucky watcher

my $winner = $lottery[ int(rand(@lottery)) ];

my $user = new RT::User(RT::SystemUser);
$user->LoadByEmail($winner);
my $id = $user->Id;

Give the winner a prize

$retval = $self->TicketObj->SetOwner($id);

return($retval);