[rt-devel] [contrib] SetStatus ScripAction
    Bruce Campbell 
    bruce_campbell at ripe.net
       
    Sun Dec 22 11:54:41 EST 2002
    
    
  
On Fri, 26 Apr 2002, Phil Homewood wrote:
> Subject: [rt-devel] [contrib] OpenTicket ScripAction
>
> This very simple ScripAction will change a "new" ticket's status
> to "open".
I've extended this, to be able to set the status to any possible status
that RT::Ticket->SetStatus will accept.  The status can be defined in the
Argument, or in the Template.
Suggested usage:
	with Argument (being just 'resolved'):
		OnSomeCondition SetResolved with Template Blank
	or
		OnCorrespondWhenNew SetOpen with Template Blank
	with Template (containing just the word 'resolved'):
		OnSomeCondition SetStatus with Template Resolved
Installation instructions:
	Copy SetStatus.pm to lib/RT/Action/ as SetStatus.pm
	Edit insert_action_SetStatus.pl for your local RT directories, and
	referring to the example, choose the name of the Action(s) you
	wish to create.  By default, the following would be created:
		SetStatus, SetResolved, SetNew, SetOpen, SetStalled
	Run insert_action_SetStatus.pl to create these.
-- 
                             Bruce Campbell                            RIPE
                   Systems/Network Engineer                             NCC
                 www.ripe.net - PGP562C8B1B             Operations/Security
-------------- next part --------------
# SetStatus - change the status of a ticket.
# Bruce Campbell <bruce.campbell at ripe.net> 20021220
package RT::Action::SetStatus;
require RT::Action::Generic;
@ISA = qw(RT::Action::Generic);
# {{{ sub Prepare
sub Prepare  {
	my $self = shift;
	my $retval = undef;
	# We're Prepared if the ticket is not what we want to change it to.
	# The template or argument contains one word.
	my $newstatus = "";
	if( defined( $self->Argument ) ){
		if( $self->Argument !~ /^\s*$/ ){
			$newstatus = $self->Argument;
		}
	}
	if( $newstatus =~ /^\s*$/ ){
		$newstatus = join( ' ', split( /\n/, $self->TemplateObj->Content ) );
	}
	$RT::Logger->debug( "$self: Thinking of $newstatus for status" );
	if( $newstatus =~ /^\s*(\S+)\s*$/sm ){
		$newstatus = lc( $1 );
		$self->{'_ToSet'} = $newstatus;
		$retval = 1 if( $self->TicketObj->Status ne $newstatus );
	}else{
		$self->{'_ToSet'} = undef;
	}
	return( $retval );
}
# }}}
sub Commit {
	my $self = shift;
	# Gotta check that the status is still new, other scrips may have
	# committed after the Prepare().
	if( defined( $self->{'_ToSet'} ) ){
		$RT::Logger->debug( "$self: About to attempt to set Status to " . $self->{'_ToSet'} );
		return ($self->TicketObj->SetStatus( $self->{'_ToSet'} ) );
	}else{
		return( undef );
	}
}
1;
-------------- next part --------------
#!/usr/bin/perl -w
# Generic insertScripAction Script, original version probably by Jesse 
# Vincent.  Reordered by Bruce Campbell.
#
############# USER SERVICEABLE PARTS #####################################
#### Set to your local RT directory.
use lib "!! THIS SHOULD BE YOUR RT LIB DIRECTORY !!";
use lib "!! THIS SHOULD BE YOUR RT ETC DIRECTORY !!";
#### Change as appropriate for the ScripAction that you are installing
#### This creates the following ScripActions.
my @ScripActions = (
		       {
			Name => 'SetStatus',
			Description =>  'Changes the ticket status according to the Template',
			ExecModule => 'SetStatus',
			Argument =>  '',
		       },
		       {
			Name => 'SetResolved',
			Description =>  'Changes the ticket status to resolved',
			ExecModule => 'SetStatus',
			Argument =>  'resolved',
		       },
		       {
			Name => 'SetNew',
			Description =>  'Changes the ticket status to new',
			ExecModule => 'SetStatus',
			Argument =>  'new',
		       },
		       {
			Name => 'SetOpen',
			Description =>  'Changes the ticket status to open',
			ExecModule => 'SetStatus',
			Argument =>  'open',
		       },
		       {
			Name => 'SetStalled',
			Description =>  'Changes the ticket status to stalled',
			ExecModule => 'SetStatus',
			Argument =>  'stalled',
		       },
		      );
#### Remember to comment these two lines out.
print "You need to edit this file before running it.\n";
exit 1;
############# NO USER SERVICEABLE PARTS BELOW ############################
package RT;
use strict;
use vars qw($VERSION $Handle $Nobody $SystemUser $item);
#This drags in RT's config.pm
use config;
use Carp;
use RT::Handle;
use RT::User;
use RT::CurrentUser;
#connect to the db
$RT::Handle = new RT::Handle($RT::DatabaseType);
$RT::Handle->Connect();
#Put together a current user object so we can create a User object
my $CurrentUser = new RT::CurrentUser();
#now that we bootstrapped that little bit, we can use the standard RT cli
# helpers  to do what we need
use RT::Interface::CLI  qw(CleanEnv LoadConfig DBConnect 
			   GetCurrentUser GetMessageContent);
#Clean out all the nasties from the environment
CleanEnv();
#Load etc/config.pm and drop privs
LoadConfig();
#Connect to the database and get RT::SystemUser and RT::Nobody loaded
DBConnect();
$CurrentUser->LoadByName('RT_System');
print "Creating ScripActions...";
use RT::ScripAction;
for $item (@ScripActions) {
    my $new_entry = new RT::ScripAction($CurrentUser);
    my $return = $new_entry->Create(%$item);
    print $return.".";
}
print "done.\n";
$RT::Handle->Disconnect();
1;
    
    
More information about the Rt-devel
mailing list