Scrip for changing ownership on a case

Hi!

I want our customers to be able to own cases, in which we need a response from them. I have tried to do this by keeping them “Unprivileged” and giving them the “Own Ticket” ACL.

Now, I don’t want customers to be able to Modify the ticket, as they shouldn’t be able to assign it to anyone or change it’s queue.

So in order for a customer to be able to return a ticket to us once he has replied, I was thinking of running a scrip to do it.

The scrip doesn’t seem to work for various reasons though. The user doesn’t have the right to make the change to Nobody, and I think I messed a few other things up too.

Can somebody help me with this? Or maybe somebody been in the same situation and solved it differently?

Cheers, Bjorn

So the scrip I came up with looks like this:
Condition: On Correspond
Action: User Defined
Template: Blank
Stage: TransactionCreate

Custom action prepareation code:
return 1;

Custom action cleanup code:

get actor ID

my $Actor = $self->TransactionObj->Creator;

if actor is RT_SystemUser then get out of here

return 1 if $Actor == $RT::SystemUser->id;

Get out unless actor is owner

return 1 unless $Actor == $self->TicketObj->Owner;

Get out unless user is unprivileged

my $groupobj = new RT::Group($self->TicketObj->Owner);
$groupobj->LoadSystemInternalGroup(‘Unprivileged’);
return 1 unless $groupobj->HasMemberRecursively($Actor);

We should now be ok to make changes:

my ($status, $msg) = $self->TicketObj->SetOwner($RT::Nobody->id);
unless( $status ) {
$RT::Logger->warning( “Error setting ownership to nobody: $msg” );
return undef;
}
return 1;

-----Original Message-----

I want our customers to be able to own cases, in which we
need a response from them. I have tried to do this by keeping
them “Unprivileged” and giving them the “Own Ticket” ACL.

Now, I don’t want customers to be able to Modify the ticket,
as they shouldn’t be able to assign it to anyone or change it’s queue.

So in order for a customer to be able to return a ticket to
us once he has replied, I was thinking of running a scrip to do it.

The scrip doesn’t seem to work for various reasons though.
The user doesn’t have the right to make the change to Nobody,
and I think I messed a few other things up too.

Can somebody help me with this? Or maybe somebody been in the
same situation and solved it differently?

After alot of fiddling and found some old maillist-posts, I ended up with this piece of code, if anyone else can use it:
my $Actor = $self->TransactionObj->Creator;
my $Owner = $self->TicketObj->OwnerObj->Id;
return 1 unless $Actor == $Owner;
return 1 if $self->TransactionObj->CreatorObj->Privileged;
$self->TicketObj->_Set(Field => ‘Owner’, Value => $RT::Nobody->id);
return 1;

I put it in the wiki too…

Cheers, Bjorn