Custom Condition for "Is A Member Of A Group"

I’m trying to create a custom condition that will execute a scrip when a
new ticket is created, but only if the submitter is not a part of a
group. Specifically, we want to be notified if someone who is not a
member of our group creates a new ticket. We typically create tickets
via the web interface, so we’re signed in when the ticket it created.
It’d be nice if this would work using rt-mailgate, too.

I created the following custom condition (based on one of the
contributed wiki scrips), but the scrip fails to fire whether the ticket
is created by a group member or not. Any suggestions would be greatly
appreciated.

My custom condition is:

if ($self->TransactionObj->Type eq ‘Create’) {
my $GroupObj = RT::Group->new( $session{ ‘CurrentUser’ } );
my $PrincipalObj = RT::Principal->new( $session{ ‘CurrentUser’ } );
$PrincipalObj->Load( $session{ ‘CurrentUser’ }->id );
$GroupObj->LoadUserDefinedGroup( ‘IT_dept’ );
my $HasMember = $GroupObj->HasMemberRecursively( $PrincipalObj );
return 0 if $HasMember;
return 1;
} else {
return 0;
}

I’m trying to create a custom condition that will execute a scrip when a
new ticket is created, but only if the submitter is not a part of a
group. Specifically, we want to be notified if someone who is not a
member of our group creates a new ticket. We typically create tickets
via the web interface, so we’re signed in when the ticket it created.
It’d be nice if this would work using rt-mailgate, too.

I created the following custom condition (based on one of the
contributed wiki scrips), but the scrip fails to fire whether the ticket
is created by a group member or not. Any suggestions would be greatly
appreciated.

My custom condition is:

if ($self->TransactionObj->Type eq ‘Create’) {
my $GroupObj = RT::Group->new( $session{ ‘CurrentUser’ } );
my $PrincipalObj = RT::Principal->new( $session{ ‘CurrentUser’ } );
$PrincipalObj->Load( $session{ ‘CurrentUser’ }->id );
$GroupObj->LoadUserDefinedGroup( ‘IT_dept’ );
my $HasMember = $GroupObj->HasMemberRecursively( $PrincipalObj );
return 0 if $HasMember;
return 1;
} else {
return 0;
}

Does the CurrentUser have SeeGroup rights on IT_dept?
Also, I don’t think $session{CurrentUser} is defined for
transactions created by an incoming e-mail. I could be wrong though.

Try this:

if ($self->TransactionObj->Type eq ‘Create’) {
my $GroupObj = RT::Group->new( $RT::SystemUser );
$GroupObj->LoadUserDefinedGroup( ‘IT_dept’ );
return $GroupObj->HasMemberRecursively( $self->CurrentUser->PrincipalObj );
}