diff options
Diffstat (limited to 'rt/lib/RT/Scrip.pm')
-rwxr-xr-x | rt/lib/RT/Scrip.pm | 654 |
1 files changed, 263 insertions, 391 deletions
diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm index a69dde04e..aef011ca3 100755 --- a/rt/lib/RT/Scrip.pm +++ b/rt/lib/RT/Scrip.pm @@ -1,500 +1,372 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - +#$Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Scrip.pm,v 1.1 2002-08-12 06:17:07 ivan Exp $ =head1 NAME -RT::Scrip - + RT::Scrip - an RT Scrip object =head1 SYNOPSIS -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Scrip; -use RT::Record; -use RT::Queue; -use RT::Template; -use RT::ScripCondition; -use RT::ScripAction; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Scrips'); - $self->SUPER::_Init(@_); -} - + use RT::Scrip; +=head1 DESCRIPTION +=head1 METHODS -=item Create PARAMHASH +=begin testing -Create takes a hash of values and creates a row in the database: +ok (require RT::TestHarness); +ok (require RT::Scrip); - varchar(255) 'Description'. - int(11) 'ScripCondition'. - int(11) 'ScripAction'. - text 'ConditionRules'. - text 'ActionRules'. - text 'CustomIsApplicableCode'. - text 'CustomPrepareCode'. - text 'CustomCommitCode'. - varchar(32) 'Stage'. - int(11) 'Queue'. - int(11) 'Template'. +=end testing =cut +package RT::Scrip; +use RT::Record; +@ISA= qw(RT::Record); - - -sub Create { +# {{{ sub _Init +sub _Init { my $self = shift; - my %args = ( - Description => '', - ScripCondition => '0', - ScripAction => '0', - ConditionRules => '', - ActionRules => '', - CustomIsApplicableCode => '', - CustomPrepareCode => '', - CustomCommitCode => '', - Stage => '', - Queue => '0', - Template => '0', - - @_); - $self->SUPER::Create( - Description => $args{'Description'}, - ScripCondition => $args{'ScripCondition'}, - ScripAction => $args{'ScripAction'}, - ConditionRules => $args{'ConditionRules'}, - ActionRules => $args{'ActionRules'}, - CustomIsApplicableCode => $args{'CustomIsApplicableCode'}, - CustomPrepareCode => $args{'CustomPrepareCode'}, - CustomCommitCode => $args{'CustomCommitCode'}, - Stage => $args{'Stage'}, - Queue => $args{'Queue'}, - Template => $args{'Template'}, -); - + $self->{'table'} = "Scrips"; + return ($self->SUPER::_Init(@_)); } +# }}} - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=item SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=item ScripCondition - -Returns the current value of ScripCondition. -(In the database, ScripCondition is stored as int(11).) - - - -=item SetScripCondition VALUE - - -Set ScripCondition to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ScripCondition will be stored as a int(11).) - - -=cut - - -=item ScripConditionObj - -Returns the ScripCondition Object which has the id returned by ScripCondition - - -=cut - -sub ScripConditionObj { - my $self = shift; - my $ScripCondition = RT::ScripCondition->new($self->CurrentUser); - $ScripCondition->Load($self->__Value('ScripCondition')); - return($ScripCondition); +# {{{ sub _Accessible +sub _Accessible { + my $self = shift; + my %Cols = ( ScripAction => 'read/write', + ScripCondition => 'read/write', + Stage => 'read/write', + Queue => 'read/write', + Template => 'read/write', + ); + return($self->SUPER::_Accessible(@_, %Cols)); } +# }}} -=item ScripAction +# {{{ sub Create -Returns the current value of ScripAction. -(In the database, ScripAction is stored as int(11).) +=head2 Create +Creates a new entry in the Scrips table. Takes a paramhash with the attributes: + Queue A queue id or 0 for a global scrip + Template A template ID or name. + Behavior is undefined if you have multiple items with + the same name + ScripAction A ScripAction id or name + Behavior is undefined if you have multiple items with + the same name + ScripCondition A ScripCondition id or name + Behavior is undefined if you have multiple items with + the same name -=item SetScripAction VALUE - - -Set ScripAction to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ScripAction will be stored as a int(11).) - +Returns (retval, msg); +retval is 0 for failure or scrip id. msg is a textual description of what happened. =cut - -=item ScripActionObj - -Returns the ScripAction Object which has the id returned by ScripAction - - -=cut - -sub ScripActionObj { - my $self = shift; - my $ScripAction = RT::ScripAction->new($self->CurrentUser); - $ScripAction->Load($self->__Value('ScripAction')); - return($ScripAction); +sub Create { + my $self = shift; + my %args = ( Queue => undef, + Template => undef, + ScripAction => undef, + ScripCondition => undef, + Stage => 'TransactionCreate', + @_ + ); + + + if ($args{'Queue'} == 0 ) { + unless ($self->CurrentUser->HasSystemRight('ModifyScrips')) { + return (0, 'Permission Denied'); + } + } + else { + my $QueueObj = new RT::Queue($self->CurrentUser); + $QueueObj->Load($args{'Queue'}); + unless ($QueueObj->id()) { + return (0,'Invalid queue'); + } + unless ($QueueObj->CurrentUserHasRight('ModifyScrips')) { + return (0, 'Permssion Denied'); + } + } + + #TODO +++ validate input + + require RT::ScripAction; + my $action = new RT::ScripAction($self->CurrentUser); + $action->Load($args{'ScripAction'}); + return (0, "Action ".$args{'ScripAction'}." not found") unless $action->Id; + + require RT::Template; + my $template = new RT::Template($self->CurrentUser); + $template->Load($args{'Template'}); + return (0, 'Template not found') unless $template->Id; + + require RT::ScripCondition; + my $condition = new RT::ScripCondition($self->CurrentUser); + $condition->Load($args{'ScripCondition'}); + + unless ($condition->Id) { + return (0, 'Condition not found'); + } + + my $id = $self->SUPER::Create(Queue => $args{'Queue'}, + Template => $template->Id, + ScripCondition => $condition->id, + Stage => $args{'Stage'}, + ScripAction => $action->Id + ); + return ($id, 'Scrip Created'); } -=item ConditionRules +# }}} -Returns the current value of ConditionRules. -(In the database, ConditionRules is stored as text.) +# {{{ sub Delete +=head2 Delete - -=item SetConditionRules VALUE - - -Set ConditionRules to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ConditionRules will be stored as a text.) - +Delete this object =cut +sub Delete { + my $self = shift; + + unless ($self->CurrentUserHasRight('ModifyScrips')) { + return (0, 'Permission Denied'); + } + + return ($self->SUPER::Delete(@_)); +} +# }}} -=item ActionRules - -Returns the current value of ActionRules. -(In the database, ActionRules is stored as text.) - - - -=item SetActionRules VALUE - +# {{{ sub QueueObj -Set ActionRules to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ActionRules will be stored as a text.) +=head2 QueueObj +Retuns an RT::Queue object with this Scrip\'s queue =cut +sub QueueObj { + my $self = shift; + + if (!$self->{'QueueObj'}) { + require RT::Queue; + $self->{'QueueObj'} = RT::Queue->new($self->CurrentUser); + $self->{'QueueObj'}->Load($self->Queue); + } + return ($self->{'QueueObj'}); +} -=item CustomIsApplicableCode - -Returns the current value of CustomIsApplicableCode. -(In the database, CustomIsApplicableCode is stored as text.) - - +# }}} -=item SetCustomIsApplicableCode VALUE +# {{{ sub ActionObj -Set CustomIsApplicableCode to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomIsApplicableCode will be stored as a text.) +=head2 ActionObj +Retuns an RT::Action object with this Scrip\'s Action =cut +sub ActionObj { + my $self = shift; + + unless (defined $self->{'ScripActionObj'}) { + require RT::ScripAction; + + $self->{'ScripActionObj'} = RT::ScripAction->new($self->CurrentUser); + #TODO: why are we loading Actions with templates like this. + # two seperate methods might make more sense + $self->{'ScripActionObj'}->Load($self->ScripAction, $self->Template); + } + return ($self->{'ScripActionObj'}); +} -=item CustomPrepareCode - -Returns the current value of CustomPrepareCode. -(In the database, CustomPrepareCode is stored as text.) - - - -=item SetCustomPrepareCode VALUE +# }}} -Set CustomPrepareCode to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomPrepareCode will be stored as a text.) +# {{{ sub TemplateObj +=head2 TemplateObj +Retuns an RT::Template object with this Scrip\'s Template =cut +sub TemplateObj { + my $self = shift; + + unless (defined $self->{'TemplateObj'}) { + require RT::Template; + $self->{'TemplateObj'} = RT::Template->new($self->CurrentUser); + $self->{'TemplateObj'}->Load($self->Template); + } + return ($self->{'TemplateObj'}); +} -=item CustomCommitCode - -Returns the current value of CustomCommitCode. -(In the database, CustomCommitCode is stored as text.) - - - -=item SetCustomCommitCode VALUE - +# }}} -Set CustomCommitCode to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomCommitCode will be stored as a text.) +# {{{ sub Prepare +=head2 Prepare +Calls the action object's prepare method =cut +sub Prepare { + my $self = shift; + $self->ActionObj->Prepare(@_); +} -=item Stage - -Returns the current value of Stage. -(In the database, Stage is stored as varchar(32).) - - - -=item SetStage VALUE - +# }}} -Set Stage to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Stage will be stored as a varchar(32).) +# {{{ sub Commit +=head2 Commit +Calls the action object's commit method =cut +sub Commit { + my $self = shift; + $self->ActionObj->Commit(@_); +} -=item Queue - -Returns the current value of Queue. -(In the database, Queue is stored as int(11).) - - - -=item SetQueue VALUE - - -Set Queue to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Queue will be stored as a int(11).) - - -=cut - +# }}} -=item QueueObj +# {{{ sub ConditionObj -Returns the Queue Object which has the id returned by Queue +=head2 ConditionObj +Retuns an RT::ScripCondition object with this Scrip's IsApplicable =cut -sub QueueObj { - my $self = shift; - my $Queue = RT::Queue->new($self->CurrentUser); - $Queue->Load($self->__Value('Queue')); - return($Queue); +sub ConditionObj { + my $self = shift; + + unless (defined $self->{'ScripConditionObj'}) { + require RT::ScripCondition; + $self->{'ScripConditionObj'} = RT::ScripCondition->new($self->CurrentUser); + $self->{'ScripConditionObj'}->Load($self->ScripCondition); + } + return ($self->{'ScripConditionObj'}); } -=item Template - -Returns the current value of Template. -(In the database, Template is stored as int(11).) - - - -=item SetTemplate VALUE +# }}} +# {{{ sub IsApplicable -Set Template to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Template will be stored as a int(11).) +=head2 IsApplicable +Calls the Condition object\'s IsApplicable method =cut +sub IsApplicable { + my $self = shift; + return ($self->ConditionObj->IsApplicable(@_)); +} -=item TemplateObj - -Returns the Template Object which has the id returned by Template - - -=cut +# }}} -sub TemplateObj { - my $self = shift; - my $Template = RT::Template->new($self->CurrentUser); - $Template->Load($self->__Value('Template')); - return($Template); +# {{{ sub DESTROY +sub DESTROY { + my $self = shift; + $self->{'ActionObj'} = undef; } +# }}} -=item Creator +# {{{ ACL related methods -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) +# {{{ sub _Set +# does an acl check and then passes off the call +sub _Set { + my $self = shift; + + unless ($self->CurrentUserHasRight('ModifyScrips')) { + $RT::Logger->debug("CurrentUser can't modify Scrips for ".$self->Queue."\n"); + return (0, 'Permission Denied'); + } + return $self->__Set(@_); +} -=cut +# }}} +# {{{ sub _Value +# does an acl check and then passes off the call +sub _Value { + my $self = shift; + + unless ($self->CurrentUserHasRight('ShowScrips')) { + $RT::Logger->debug("CurrentUser can't modify Scrips for ".$self->__Value('Queue')."\n"); + return (undef); + } + + return $self->__Value(@_); +} +# }}} -=item Created +# {{{ sub CurrentUserHasRight -Returns the current value of Created. -(In the database, Created is stored as datetime.) +=head2 CurrentUserHasRight +Helper menthod for HasRight. Presets Principal to CurrentUser then +calls HasRight. =cut +sub CurrentUserHasRight { + my $self = shift; + my $right = shift; + return ($self->HasRight( Principal => $self->CurrentUser->UserObj, + Right => $right )); + +} -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - +# }}} -=item LastUpdated +# {{{ sub HasRight -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) +=head2 HasRight +Takes a param-hash consisting of "Right" and "Principal" Principal is +an RT::User object or an RT::CurrentUser object. "Right" is a textual +Right string that applies to Scrips. =cut +sub HasRight { + my $self = shift; + my %args = ( Right => undef, + Principal => undef, + @_ ); + + if ((defined $self->SUPER::_Value('Queue')) and ($self->SUPER::_Value('Queue') != 0)) { + return ( $args{'Principal'}->HasQueueRight( + Right => $args{'Right'}, + Queue => $self->SUPER::_Value('Queue'), + Principal => $args{'Principal'} + ) + ); + + } + else { + return( $args{'Principal'}->HasSystemRight( $args{'Right'}) ); + } +} +# }}} +# }}} -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - ScripCondition => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - ScripAction => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - ConditionRules => - {read => 1, write => 1, type => 'text', default => ''}, - ActionRules => - {read => 1, write => 1, type => 'text', default => ''}, - CustomIsApplicableCode => - {read => 1, write => 1, type => 'text', default => ''}, - CustomPrepareCode => - {read => 1, write => 1, type => 'text', default => ''}, - CustomCommitCode => - {read => 1, write => 1, type => 'text', default => ''}, - Stage => - {read => 1, write => 1, type => 'varchar(32)', default => ''}, - Queue => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Template => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::Scrip_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Overlay.pm}) { - die $@; - }; - - eval "require RT::Scrip_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Vendor.pm}) { - die $@; - }; - - eval "require RT::Scrip_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Scrip_Overlay, RT::Scrip_Vendor, RT::Scrip_Local - -=cut +1; -1; |