X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FScrip_Overlay.pm;h=3c89f84f2ae70c755d9a712b357cf6e81e2bb2a3;hb=fc6209f398899f0211cfcedeb81a3cd65e04a941;hp=ae2782a2386e5a7bbd08d5368f9e16d20237dd1a;hpb=d4d0590bef31071e8809ec046717444b95b3f30a;p=freeside.git diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm index ae2782a23..3c89f84f2 100644 --- a/rt/lib/RT/Scrip_Overlay.pm +++ b/rt/lib/RT/Scrip_Overlay.pm @@ -1,38 +1,40 @@ # BEGIN BPS TAGGED BLOCK {{{ -# +# # COPYRIGHT: -# -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC -# -# +# +# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# +# # (Except where explicitly superseded by other copyright notices) -# -# +# +# # LICENSE: -# +# # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. -# +# # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +# +# # CONTRIBUTION SUBMISSION POLICY: -# +# # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) -# +# # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that @@ -41,7 +43,7 @@ # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. -# +# # END BPS TAGGED BLOCK }}} =head1 NAME @@ -57,45 +59,6 @@ =head1 METHODS -=begin testing - -ok (require RT::Scrip); - - -my $q = RT::Queue->new($RT::SystemUser); -$q->Create(Name => 'ScripTest'); -ok($q->Id, "Created a scriptest queue"); - -my $s1 = RT::Scrip->new($RT::SystemUser); -my ($val, $msg) =$s1->Create( Queue => $q->Id, - ScripAction => 'User Defined', - ScripCondition => 'User Defined', - CustomIsApplicableCode => 'if ($self->TicketObj->Subject =~ /fire/) { return (1);} else { return(0)}', - CustomPrepareCode => 'return 1', - CustomCommitCode => '$self->TicketObj->SetPriority("87");', - Template => 'Blank' - ); -ok($val,$msg); - -my $ticket = RT::Ticket->new($RT::SystemUser); -my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id, - Subject => "hair on fire", - ); -ok($tv, $tm); - -ok ($ticket->Priority == '87', "Ticket priority is set right"); - - -my $ticket2 = RT::Ticket->new($RT::SystemUser); -my ($t2v,$t2tv,$t2m) = $ticket2->Create(Queue => $q->Id, - Subject => "hair in water", - ); -ok($t2v, $t2m); - -ok ($ticket2->Priority != '87', "Ticket priority is set right"); - - -=end testing =cut @@ -140,54 +103,54 @@ sub Create { CustomPrepareCode => undef, CustomCommitCode => undef, CustomIsApplicableCode => undef, + @_ + ); - @_ ); - - if ( !$args{'Queue'} ) { + unless ( $args{'Queue'} ) { unless ( $self->CurrentUser->HasRight( Object => $RT::System, - Right => 'ModifyScrips' ) - ) { + Right => 'ModifyScrips' ) ) + { return ( 0, $self->loc('Permission Denied') ); } $args{'Queue'} = 0; # avoid undef sneaking in } else { - my $QueueObj = new RT::Queue( $self->CurrentUser ); + my $QueueObj = RT::Queue->new( $self->CurrentUser ); $QueueObj->Load( $args{'Queue'} ); - unless ( $QueueObj->id() ) { + unless ( $QueueObj->id ) { return ( 0, $self->loc('Invalid queue') ); } unless ( $QueueObj->CurrentUserHasRight('ModifyScrips') ) { return ( 0, $self->loc('Permission Denied') ); } - $args{'Queue'} = $QueueObj->id(); + $args{'Queue'} = $QueueObj->id; } #TODO +++ validate input require RT::ScripAction; - my $action = new RT::ScripAction( $self->CurrentUser ); - if ( $args{'ScripAction'} ) { - $action->Load( $args{'ScripAction'} ); - } - return ( 0, $self->loc( "Action [_1] not found", $args{'ScripAction'} ) ) - unless $action->Id; + return ( 0, $self->loc("Action is mandatory argument") ) + unless $args{'ScripAction'}; + my $action = RT::ScripAction->new( $self->CurrentUser ); + $action->Load( $args{'ScripAction'} ); + return ( 0, $self->loc( "Action '[_1]' not found", $args{'ScripAction'} ) ) + unless $action->Id; require RT::Template; - my $template = new RT::Template( $self->CurrentUser ); - if ( $args{'Template'} ) { - $template->Load( $args{'Template'} ); - } - return ( 0, $self->loc('Template not found') ) unless $template->Id; + return ( 0, $self->loc("Template is mandatory argument") ) + unless $args{'Template'}; + my $template = RT::Template->new( $self->CurrentUser ); + $template->Load( $args{'Template'} ); + return ( 0, $self->loc( "Template '[_1]' not found", $args{'Template'} ) ) + unless $template->Id; require RT::ScripCondition; - my $condition = new RT::ScripCondition( $self->CurrentUser ); - if ( $args{'ScripCondition'} ) { - $condition->Load( $args{'ScripCondition'} ); - } - unless ( $condition->Id ) { - return ( 0, $self->loc('Condition not found') ); - } + return ( 0, $self->loc("Condition is mandatory argument") ) + unless $args{'ScripCondition'}; + my $condition = RT::ScripCondition->new( $self->CurrentUser ); + $condition->Load( $args{'ScripCondition'} ); + return ( 0, $self->loc( "Condition '[_1]' not found", $args{'ScripCondition'} ) ) + unless $condition->Id; my ( $id, $msg ) = $self->SUPER::Create( Queue => $args{'Queue'}, @@ -199,9 +162,8 @@ sub Create { CustomPrepareCode => $args{'CustomPrepareCode'}, CustomCommitCode => $args{'CustomCommitCode'}, CustomIsApplicableCode => $args{'CustomIsApplicableCode'}, - ); - if ($id) { + if ( $id ) { return ( $id, $self->loc('Scrip Created') ); } else { @@ -281,26 +243,33 @@ sub ActionObj { =head2 ConditionObj -Retuns an RT::ScripCondition object with this Scrip's IsApplicable +Retuns an L object with this Scrip's IsApplicable =cut sub ConditionObj { my $self = shift; - unless ( defined $self->{'ScripConditionObj'} ) { - require RT::ScripCondition; - $self->{'ScripConditionObj'} = - RT::ScripCondition->new( $self->CurrentUser ); - if ( $self->ScripCondition ) { - $self->{'ScripConditionObj'}->Load( $self->ScripCondition ); - } - } - return ( $self->{'ScripConditionObj'} ); + my $res = RT::ScripCondition->new( $self->CurrentUser ); + $res->Load( $self->ScripCondition ); + return $res; } # }}} +=head2 LoadModules + +Loads scrip's condition and action modules. + +=cut + +sub LoadModules { + my $self = shift; + + $self->ConditionObj->LoadCondition; + $self->ActionObj->LoadAction; +} + # {{{ sub TemplateObj =head2 TemplateObj @@ -443,6 +412,7 @@ sub IsApplicable { } } }; + if ($@) { $RT::Logger->error( "Scrip IsApplicable " . $self->Id . " died. - " . $@ ); return (undef); @@ -596,15 +566,17 @@ sub HasRight { Principal => undef, @_ ); - if ( ( defined $self->SUPER::_Value('Queue') ) - and ( $self->SUPER::_Value('Queue') != 0 ) ) { - return ( $args{'Principal'}->HasRight( Right => $args{'Right'}, - Object => $self->QueueObj ) ); - + if ( $self->SUPER::_Value('Queue') ) { + return $args{'Principal'}->HasRight( + Right => $args{'Right'}, + Object => $self->QueueObj + ); } else { - return ( $args{'Principal'} - ->HasRight( Object => $RT::System, Right => $args{'Right'} ) ); + return $args{'Principal'}->HasRight( + Object => $RT::System, + Right => $args{'Right'}, + ); } } @@ -612,5 +584,65 @@ sub HasRight { # }}} + +=head2 SetScripAction + +=cut + +sub SetScripAction { + my $self = shift; + my $value = shift; + + return ( 0, $self->loc("Action is mandatory argument") ) unless $value; + + require RT::ScripAction; + my $action = RT::ScripAction->new( $self->CurrentUser ); + $action->Load($value); + return ( 0, $self->loc( "Action '[_1]' not found", $value ) ) + unless $action->Id; + + return $self->_Set( Field => 'ScripAction', Value => $action->Id ); +} + +=head2 SetScripCondition + +=cut + +sub SetScripCondition { + my $self = shift; + my $value = shift; + + return ( 0, $self->loc("Condition is mandatory argument") ) + unless $value; + + require RT::ScripCondition; + my $condition = RT::ScripCondition->new( $self->CurrentUser ); + $condition->Load($value); + + return ( 0, $self->loc( "Condition '[_1]' not found", $value ) ) + unless $condition->Id; + + return $self->_Set( Field => 'ScripCondition', Value => $condition->Id ); +} + +=head2 SetTemplate + +=cut + +sub SetTemplate { + my $self = shift; + my $value = shift; + + return ( 0, $self->loc("Template is mandatory argument") ) unless $value; + + require RT::Template; + my $template = RT::Template->new( $self->CurrentUser ); + $template->Load($value); + return ( 0, $self->loc( "Template '[_1]' not found", $value ) ) + unless $template->Id; + + return $self->_Set( Field => 'Template', Value => $template->Id ); +} + 1;