diff options
Diffstat (limited to 'rt/lib/RT/Condition')
-rw-r--r-- | rt/lib/RT/Condition/AnyTransaction.pm | 34 | ||||
-rw-r--r-- | rt/lib/RT/Condition/BeforeDue.pm | 64 | ||||
-rwxr-xr-x | rt/lib/RT/Condition/Generic.pm | 55 | ||||
-rw-r--r-- | rt/lib/RT/Condition/Overdue.pm | 68 | ||||
-rw-r--r-- | rt/lib/RT/Condition/OwnerChange.pm | 102 | ||||
-rw-r--r-- | rt/lib/RT/Condition/PriorityExceeds.pm | 57 | ||||
-rw-r--r-- | rt/lib/RT/Condition/QueueChange.pm | 57 | ||||
-rw-r--r-- | rt/lib/RT/Condition/StatusChange.pm | 35 | ||||
-rw-r--r-- | rt/lib/RT/Condition/UserDefined.pm | 57 |
9 files changed, 516 insertions, 13 deletions
diff --git a/rt/lib/RT/Condition/AnyTransaction.pm b/rt/lib/RT/Condition/AnyTransaction.pm index 83e5de6ce..4519fcf5a 100644 --- a/rt/lib/RT/Condition/AnyTransaction.pm +++ b/rt/lib/RT/Condition/AnyTransaction.pm @@ -1,10 +1,33 @@ -# $Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Condition/AnyTransaction.pm,v 1.1 2002-08-12 06:17:07 ivan Exp $ -# Copyright 1996-2001 Jesse Vincent <jesse@fsck.com> -# Released under the terms of the GNU General Public License +# 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 + package RT::Condition::AnyTransaction; require RT::Condition::Generic; +use strict; +use vars qw/@ISA/; @ISA = qw(RT::Condition::Generic); @@ -19,5 +42,10 @@ sub IsApplicable { return(1); } +eval "require RT::Condition::AnyTransaction_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/AnyTransaction_Vendor.pm}); +eval "require RT::Condition::AnyTransaction_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/AnyTransaction_Local.pm}); + 1; diff --git a/rt/lib/RT/Condition/BeforeDue.pm b/rt/lib/RT/Condition/BeforeDue.pm new file mode 100644 index 000000000..7911fd80a --- /dev/null +++ b/rt/lib/RT/Condition/BeforeDue.pm @@ -0,0 +1,64 @@ +# 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 +package RT::Condition::BeforeDue; +require RT::Condition::Generic; + +use RT::Date; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +sub IsApplicable { + my $self = shift; + + # Parse date string. Format is "1d2h3m4s" for 1 day and 2 hours + # and 3 minutes and 4 seconds. + my %e; + foreach (qw(d h m s)) { + my @vals = $self->Argument =~ m/(\d+)$_/; + $e{$_} = pop @vals || 0; + } + my $elapse = $e{'d'} * 24*60*60 + $e{'h'} * 60*60 + $e{'m'} * 60 + $e{'s'}; + + my $cur = new RT::Date( $RT::SystemUser ); + $cur->SetToNow(); + my $due = $self->TicketObj->DueObj; + return (undef) if $due->Unix <= 0; + + my $diff = $due->Diff($cur); + if ( $diff >= 0 and $diff <= $elapse ) { + return(1); + } else { + return(undef); + } +} + +eval "require RT::Condition::BeforeDue_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/BeforeDue_Vendor.pm}); +eval "require RT::Condition::BeforeDue_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/BeforeDue_Local.pm}); + +1; diff --git a/rt/lib/RT/Condition/Generic.pm b/rt/lib/RT/Condition/Generic.pm index 393f4b786..bd269315e 100755 --- a/rt/lib/RT/Condition/Generic.pm +++ b/rt/lib/RT/Condition/Generic.pm @@ -1,7 +1,26 @@ -# $Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Condition/Generic.pm,v 1.1 2002-08-12 06:17:07 ivan Exp $ -# (c) 1996-2000 Jesse Vincent <jesse@fsck.com> -# This software is redistributable under the terms of the GNU GPL - +# 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 =head1 NAME RT::Condition::Generic - ; @@ -29,7 +48,6 @@ =begin testing -ok (require RT::TestHarness); ok (require RT::Condition::Generic); =end testing @@ -39,6 +57,11 @@ ok (require RT::Condition::Generic); package RT::Condition::Generic; +use RT::Base; +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Base); + # {{{ sub new sub new { my $proto = shift; @@ -61,7 +84,6 @@ sub _Init { ApplicableTransTypes => undef, @_ ); - $self->{'Argument'} = $args{'Argument'}; $self->{'ScripObj'} = $args{'ScripObj'}; $self->{'TicketObj'} = $args{'TicketObj'}; @@ -100,6 +122,19 @@ sub TicketObj { } # }}} +# {{{ sub ScripObj + +=head2 ScripObj + +Return the Scrip object we're talking about + +=cut + +sub ScripObj { + my $self = shift; + return($self->{'ScripObj'}); +} +# }}} # {{{ sub TransactionObj =head2 TransactionObj @@ -137,7 +172,7 @@ sub ApplicableTransTypes { # {{{ sub Describe sub Describe { my $self = shift; - return ("No description for " . ref $self); + return ($self->loc("No description for [_1]", ref $self)); } # }}} @@ -167,4 +202,10 @@ sub DESTROY { } # }}} + +eval "require RT::Condition::Generic_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Vendor.pm}); +eval "require RT::Condition::Generic_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Local.pm}); + 1; diff --git a/rt/lib/RT/Condition/Overdue.pm b/rt/lib/RT/Condition/Overdue.pm new file mode 100644 index 000000000..3a4efe77f --- /dev/null +++ b/rt/lib/RT/Condition/Overdue.pm @@ -0,0 +1,68 @@ +# 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 + + + +=head1 NAME + +RT::Condition::Overdue + +=head1 DESCRIPTION + +Returns true if the ticket we're operating on is overdue + +=cut + +package RT::Condition::Overdue; +require RT::Condition::Generic; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +=head2 IsApplicable + +If the due date is before "now" return true + +=cut + +sub IsApplicable { + my $self = shift; + if ($self->TicketObj->DueObj->Unix > 0 and + $self->TicketObj->DueObj->Unix < time()) { + return(1); + } + else { + return(undef); + } +} + +eval "require RT::Condition::Overdue_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Overdue_Vendor.pm}); +eval "require RT::Condition::Overdue_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Overdue_Local.pm}); + +1; + diff --git a/rt/lib/RT/Condition/OwnerChange.pm b/rt/lib/RT/Condition/OwnerChange.pm new file mode 100644 index 000000000..e17f589e4 --- /dev/null +++ b/rt/lib/RT/Condition/OwnerChange.pm @@ -0,0 +1,102 @@ +# 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 + + + +package RT::Condition::OwnerChange; +require RT::Condition::Generic; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +=head2 IsApplicable + +If we're changing the owner return true, otherwise return false + +=begin testing + +my $q = RT::Queue->new($RT::SystemUser); +$q->Create(Name =>'ownerChangeTest'); + +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 => 'On Owner Change', + CustomIsApplicableCode => '', + CustomPrepareCode => 'return 1', + CustomCommitCode => ' + $RT::Logger->crit("Before, prio is ".$self->TicketObj->Priority); + $self->TicketObj->SetPriority($self->TicketObj->Priority+1); + $RT::Logger->crit("After, prio is ".$self->TicketObj->Priority); + return(1); + ', + 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", + InitialPriority => '20' + ); +ok($tv, $tm); +ok($ticket->SetOwner('root')); +is ($ticket->Priority , '21', "Ticket priority is set right"); +ok($ticket->Steal); +is ($ticket->Priority , '22', "Ticket priority is set right"); +ok($ticket->Untake); +is ($ticket->Priority , '23', "Ticket priority is set right"); +ok($ticket->Take); +is ($ticket->Priority , '24', "Ticket priority is set right"); + + + + + +=end testing + + +=cut + +sub IsApplicable { + my $self = shift; + if ($self->TransactionObj->Field eq 'Owner') { + return(1); + } + else { + return(undef); + } +} + +eval "require RT::Condition::OwnerChange_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/OwnerChange_Vendor.pm}); +eval "require RT::Condition::OwnerChange_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/OwnerChange_Local.pm}); + +1; + diff --git a/rt/lib/RT/Condition/PriorityExceeds.pm b/rt/lib/RT/Condition/PriorityExceeds.pm new file mode 100644 index 000000000..7737ca5a9 --- /dev/null +++ b/rt/lib/RT/Condition/PriorityExceeds.pm @@ -0,0 +1,57 @@ +# 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 + + + +package RT::Condition::PriorityExceeds; +require RT::Condition::Generic; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +=head2 IsApplicable + +If the priority exceeds the argument value + +=cut + +sub IsApplicable { + my $self = shift; + if ($self->TicketObj->Priority > $self->Argument) { + return(1); + } + else { + return(undef); + } +} + +eval "require RT::Condition::PriorityExceeds_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityExceeds_Vendor.pm}); +eval "require RT::Condition::PriorityExceeds_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityExceeds_Local.pm}); + +1; + diff --git a/rt/lib/RT/Condition/QueueChange.pm b/rt/lib/RT/Condition/QueueChange.pm new file mode 100644 index 000000000..f3e646a00 --- /dev/null +++ b/rt/lib/RT/Condition/QueueChange.pm @@ -0,0 +1,57 @@ +# 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 + + + +package RT::Condition::QueueChange; +require RT::Condition::Generic; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +=head2 IsApplicable + +If the queue has changed. + +=cut + +sub IsApplicable { + my $self = shift; + if ($self->TransactionObj->Field eq 'Queue') { + return(1); + } + else { + return(undef); + } +} + +eval "require RT::Condition::QueueChange_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/QueueChange_Vendor.pm}); +eval "require RT::Condition::QueueChange_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/QueueChange_Local.pm}); + +1; + diff --git a/rt/lib/RT/Condition/StatusChange.pm b/rt/lib/RT/Condition/StatusChange.pm index 56419b2c7..8afabcda0 100644 --- a/rt/lib/RT/Condition/StatusChange.pm +++ b/rt/lib/RT/Condition/StatusChange.pm @@ -1,10 +1,34 @@ -# $Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Condition/StatusChange.pm,v 1.1 2002-08-12 06:17:08 ivan Exp $ -# Copyright 1996-2001 Jesse Vincent <jesse@fsck.com> -# Released under the terms of the GNU General Public License +# 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 + + package RT::Condition::StatusChange; require RT::Condition::Generic; +use strict; +use vars qw/@ISA/; @ISA = qw(RT::Condition::Generic); @@ -26,5 +50,10 @@ sub IsApplicable { } } +eval "require RT::Condition::StatusChange_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/StatusChange_Vendor.pm}); +eval "require RT::Condition::StatusChange_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/StatusChange_Local.pm}); + 1; diff --git a/rt/lib/RT/Condition/UserDefined.pm b/rt/lib/RT/Condition/UserDefined.pm new file mode 100644 index 000000000..eb829f0d1 --- /dev/null +++ b/rt/lib/RT/Condition/UserDefined.pm @@ -0,0 +1,57 @@ +# 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 + + +package RT::Condition::UserDefined; + +use RT::Condition::Generic; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +=head2 IsApplicable + +This happens on every transaction. it's always applicable + +=cut + +sub IsApplicable { + my $self = shift; + my $retval = eval $self->ScripObj->CustomIsApplicableCode; + if ($@) { + $RT::Logger->error("Scrip ".$self->ScripObj->Id. " IsApplicable failed: ".$@); + return (undef); + } + return ($retval); +} + +eval "require RT::Condition::UserDefined_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/UserDefined_Vendor.pm}); +eval "require RT::Condition::UserDefined_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/UserDefined_Local.pm}); + +1; + |