[Rt-commit] rtir branch, 2.9-trunk, updated. ef78713f937a08ba48ab6f30bfafd0933ee56035

Ruslan Zakirov ruz at bestpractical.com
Sun Apr 10 22:07:44 EDT 2011


The branch, 2.9-trunk has been updated
       via  ef78713f937a08ba48ab6f30bfafd0933ee56035 (commit)
       via  430f31cab397e12a220ea97241e5016342faf876 (commit)
       via  ef7ea51d3f8b3e48bc3373c0a6fd00c2470060e3 (commit)
       via  07cf5dc5bec62440a4f0b2a4fb491fa1eed4d380 (commit)
       via  cfd7efe8c6465957154e07cd5d28a533d7dd3907 (commit)
      from  b572ec262359e5c1a5026081fdec560140feb346 (commit)

Summary of changes:
 TODO.porting_over_RT4                        |   51 +++++++++++++++++++++++---
 html/Callbacks/RTIR/Elements/Tabs/Privileged |    4 +-
 html/RTIR/Create.html                        |   48 ++++++++++--------------
 html/RTIR/Incident/Create.html               |   37 ++++++++++---------
 html/RTIR/Incident/Split.html                |   12 +++----
 html/RTIR/Split.html                         |   19 ++++------
 lib/RT/IR.pm                                 |   24 +++++++++++--
 t/incident/abandon.t                         |    2 +-
 t/incident/split.t                           |    3 +-
 9 files changed, 124 insertions(+), 76 deletions(-)

- Log -----------------------------------------------------------------
commit cfd7efe8c6465957154e07cd5d28a533d7dd3907
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Apr 6 05:02:19 2011 +0400

    BaseQuery refactoring
    
    * no Queue as array, but queue as object
    * Active argument

diff --git a/lib/RT/IR.pm b/lib/RT/IR.pm
index 2be2b75..7c1e86e 100644
--- a/lib/RT/IR.pm
+++ b/lib/RT/IR.pm
@@ -252,6 +252,7 @@ sub BaseQuery {
     my $self = shift;
     my %args = (
         Queue        => undef,
+        Active       => undef,
         Exclude      => undef,
         HasNoMember  => undef,
         NotMemberOf  => undef,
@@ -261,9 +262,26 @@ sub BaseQuery {
     );
     my $res = '';
     if ( $args{'Queue'} ) {
-        $res = join ' OR ', map "Queue = '$_'", grep defined && length,
-            ref $args{'Queue'} ? ( @{ $args{'Queue'} } ) : ( $args{'Queue'} );
-        $res = '( $res )' if $res && $res =~ / OR /;
+        my $qname = ref $args{'Queue'} ? $args{'Queue'}->Name : $args{'Queue'};
+        $res = "Queue = '$qname'";
+        if ( defined $args{'Active'} ) {
+            my $queue = $args{'Queue'};
+            unless ( ref $args{'Queue'} ) {
+                my $queue = RT::Queue->new( RT->SystemUser );
+                $queue->Load( $args{'Queue'} );
+                unless ( $queue->id ) {
+                    $RT::Logger->error("Couldn't load queue '$args{Queue}'");
+                    $queue = undef;
+                }
+            }
+
+            if ( $queue ) {
+                my @statuses = $args{'Active'}
+                    ? $queue->ActiveStatusArray
+                    : $queue->InactiveStatusArray;
+                $res .= ' AND ('. join( ' OR ', map "Status = '$_'", @statuses ) .')';
+            }
+        }
     }
     if ( my $t = $args{'Exclude'} ) {
         $res .= ' AND ' if $res;

commit 07cf5dc5bec62440a4f0b2a4fb491fa1eed4d380
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Apr 6 05:03:41 2011 +0400

    refactor how we do split, less arguments, saner var names

diff --git a/html/Callbacks/RTIR/Elements/Tabs/Privileged b/html/Callbacks/RTIR/Elements/Tabs/Privileged
index d3eaa67..cec4a1c 100644
--- a/html/Callbacks/RTIR/Elements/Tabs/Privileged
+++ b/html/Callbacks/RTIR/Elements/Tabs/Privileged
@@ -153,7 +153,7 @@ if ( $request_path =~ m{^/RTIR/(?:$re_rtir_types/)?(Display|Edit|Update)\.html$}
 
     if ( $can->('ModifyTicket') ) {
         PageMenu()->child( edit => title => loc('Edit'), path => "/RTIR/Edit.html?id=$id" );
-        PageMenu()->child( split => title => loc('Split'), path => "/RTIR/Split.html?id=$id" );
+        PageMenu()->child( split => title => loc('Split'), path => "/RTIR/Split.html?Split=$id" );
         # XXX: we're missing query string here
         PageMenu()->child( merge => title => loc('Merge'), path => "/RTIR/Merge/?id=$id" );
         PageMenu()->child( advanced => title => loc('Advanced'), path => "/RTIR/Advanced.html?id=$id" );
@@ -390,7 +390,7 @@ if ( $request_path =~ m{^/RTIR/(?:$re_rtir_types/)?(Display|Edit|Update)\.html$}
         );
     }
 } elsif ( $request_path =~ m{^/RTIR/(?:$re_rtir_types/)?Split\.html$} ) {
-    my $id = $args->{'id'};
+    my $id = $args->{'Split'};
 
     PageMenu()->child(
         back => title => loc('Back to ticket #[_1]', $id),
diff --git a/html/RTIR/Create.html b/html/RTIR/Create.html
index 077eed9..5b0ef07 100644
--- a/html/RTIR/Create.html
+++ b/html/RTIR/Create.html
@@ -23,24 +23,12 @@
 %# 
 %# END LICENSE BLOCK
 <& /RTIR/Elements/Header, Title => $Title &>
-% my $EscapedQueue = $m->comp('/Elements/QueryString', Queue => $Queue );
-% if ( $Split ) {
-<& /Elements/Tabs &>
-% } elsif ( $Incident ) {
-<& "/RTIR/Search/Elements/RefineTabs",
-    Title          => $Title,
-    Ticket         => $IncidentObj,
-    Queue          => $Queue,
-    current_tab    => "RTIR/Create.html?Incident=$Incident&$EscapedQueue",
-&>
-% } else {
-<& "/Elements/Tabs" &>
-% }
+<& '/Elements/Tabs' &>
 
-% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj);
+% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $SplitObj);
 <& /Elements/ListActions, actions => \@results &>
 
-% if ( $Split && !$TicketObj->CurrentUserHasRight('ModifyTicket') ) {
+% if ( $Split && !$SplitObj->CurrentUserHasRight('ModifyTicket') ) {
 <% loc("You are not allowed to split this [_1].", $name) %>
 %    $m->abort();
 % }
@@ -53,7 +41,7 @@
 <input type="hidden" name="id" value="new" />
 <input type="hidden" name="Queue" value="<% $Queue %>" />
 % if ( $Split ) {
-<input type="hidden" name="Ticket" value="<% $TicketObj->Id %>" />
+<input type="hidden" name="Split" value="<% $SplitObj->id %>" />
 % }
 
 <a name="top"></a>
@@ -67,10 +55,10 @@
     <td align="right"><&|/l&>Incident</&>:</td>
     <td colspan="2"><% $Incident %><input type="hidden" name="Incident" value="<% $Incident || '' %>" /></td>
   </tr>
-% } elsif ( $TicketObj ) {
+% } elsif ( $SplitObj ) {
   <tr>
     <td align="right"><&|/l&>Split from</&>:</td>
-    <td colspan="2"><% $TicketObj->id %></td>
+    <td colspan="2"><% $SplitObj->id %></td>
   </tr>
 % if ( $parentvalue ) {
   <tr>
@@ -173,7 +161,7 @@
   <tr>
     <td colspan="3">
       <& /RTIR/Elements/EditCustomFields, 
-        TicketObj => $TicketObj, 
+        TicketObj => $SplitObj, 
         QueueObj => $QueueObj,
         $Split ? ( OnCreate => 1 ) : (),
         $IncidentObj ? ( IncidentObj => $IncidentObj ) : (),
@@ -199,8 +187,8 @@
 % my $include_signature = 1;
 % unless (exists $ARGS{Content}) {
 %   my $Transactions;
-%   if ($TicketObj) {
-%     $Transactions = $TicketObj->Transactions;
+%   if ($SplitObj) {
+%     $Transactions = $SplitObj->Transactions;
 %   } elsif ($IncidentObj) {
 %     $Transactions = $IncidentObj->Transactions;
 %   }
@@ -314,12 +302,18 @@ if ( $Incident ) {
 }
 $Incident = $ARGS{'Incident'} = $IncidentObj->id if $IncidentObj;
 
+my $SplitObj;
+if ( $Split ) {
+    $SplitObj = LoadTicket( $SplitObj );
+    $ARGS{'Split'} = $Split = $SplitObj->id;
+}
+
 my $parentvalue = '';
 if ( $IncidentObj ) {
     $parentvalue = $IncidentObj->Id;
-} elsif ( $TicketObj ) {
+} elsif ( $SplitObj ) {
     my $incidents = RT::Tickets->new( $session{'CurrentUser'} );
-    $incidents->FromSQL( "Queue = 'Incidents' AND HasMember = " . $TicketObj->Id );
+    $incidents->FromSQL( "Queue = 'Incidents' AND HasMember = " . $SplitObj->Id );
     while ( my $incident = $incidents->Next ) {
         $parentvalue .= ' ' if $parentvalue;
         $parentvalue .= $incident->Id;
@@ -375,7 +369,7 @@ $m->callback(
 
 unless ( $skip_create || $checks_failure ) {
     $ARGS{'new-MemberOf'} = $parentvalue if $parentvalue;
-    $m->callback(CallbackName => 'BeforeDisplay', Ticket => $TicketObj, ARGSRef => \%ARGS);
+    $m->callback(CallbackName => 'BeforeDisplay', Ticket => $SplitObj, ARGSRef => \%ARGS);
     push @{ $session{'Actions'}{''} ||= [] }, @results;
     return $m->comp( 'Display.html', %ARGS, SkipNotification => \@SkipNotification );
 }
@@ -385,7 +379,7 @@ unshift @results, loc("Creation failed:")
 
 my ($Title, $SubmitCaption);
 if ( $Split ) {
-    $Title = loc("Split [_1] #[_2]: [_3]", $name, $TicketObj->id, $TicketObj->Subject);
+    $Title = loc("Split [_1] #[_2]: [_3]", $name, $SplitObj->id, $SplitObj->Subject);
     $SubmitCaption = loc("Split");
 } else {
     if ( $Type eq 'Investigation' ) {
@@ -409,9 +403,7 @@ $QuoteTransaction => undef
 # Parent Incident
 $Incident         => undef
 
-$Split            => 0
-# Split source
-$TicketObj        => undef
+$Split            => undef
 </%ARGS>
 
 <%METHOD ProcessAttachments>
diff --git a/html/RTIR/Incident/Create.html b/html/RTIR/Incident/Create.html
index 44296f6..2dccbb2 100644
--- a/html/RTIR/Incident/Create.html
+++ b/html/RTIR/Incident/Create.html
@@ -25,12 +25,12 @@
 <& /RTIR/Elements/Header, Title => $Title &>
 <& /Elements/Tabs &>
 
-% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj);
+% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $SplitObj);
 <& /Elements/ListActions, actions => \@results &>
 
 <%PERL>
-if ( $TicketObj && !$TicketObj->CurrentUserHasRight('ModifyTicket') ) {
-    $m->out( loc('You are not allowed to split from #[_2].', $TicketObj->id ) );
+if ( $SplitObj && !$SplitObj->CurrentUserHasRight('ModifyTicket') ) {
+    $m->out( loc('You are not allowed to split from #[_2].', $SplitObj->id ) );
     return;
 }
 if ( $ChildObj && !$ChildObj->CurrentUserHasRight('ModifyTicket') ) {
@@ -39,7 +39,7 @@ if ( $ChildObj && !$ChildObj->CurrentUserHasRight('ModifyTicket') ) {
 }
 </%PERL>
 
-% if ( $TicketObj ) {
+% if ( $Split ) {
 <form action="Split.html" method="post" enctype="multipart/form-data">
 % } else {
 <form action="Create.html" method="post" enctype="multipart/form-data">
@@ -50,9 +50,8 @@ if ( $ChildObj && !$ChildObj->CurrentUserHasRight('ModifyTicket') ) {
 % if ( $ChildObj ) {
 <input type="hidden" name="Child"        value="<% $Child %>" />
 % }
-% if ( $TicketObj ) {
-<input type="hidden" name="Split"        value="<% $Split %>" />
-<input type="hidden" name="Ticket"       value="<% $TicketObj->Id %>" />
+% if ( $Split ) {
+<input type="hidden" name="Split"        value="<% $SplitObj->id %>" />
 % }
 <a name="top"></a>
 
@@ -61,10 +60,10 @@ if ( $ChildObj && !$ChildObj->CurrentUserHasRight('ModifyTicket') ) {
 <&| /Widgets/TitleBox, title => $Title, class => 'ticket-info-basics' &>
 <table border="0" cellpadding="0" cellspacing="2">
 
-% if ( $TicketObj ) {
-% my $Type = RT::IR::TicketType( Ticket => $TicketObj );
+% if ( $Split ) {
+% my $Type = RT::IR::TicketType( Ticket => $Split );
 <tr><td class="label"><% loc('Split from') %>:</td>
-<td class="value"><% loc("[_1] #[_2]: [_3]", $Type, $TicketObj->Id, $TicketObj->Subject) %></td></tr>
+<td class="value"><% loc("[_1] #[_2]: [_3]", $Type, $SplitObj->Id, $SplitObj->Subject) %></td></tr>
 % }
 
 % if ( $ChildObj ) {
@@ -100,7 +99,7 @@ if ( $ChildObj && !$ChildObj->CurrentUserHasRight('ModifyTicket') ) {
 % }
 </tr>
 
-<& Elements/Create, Title => $Title, TicketObj => $TicketObj, QueueObj => $QueueObj, ChildObj => $ChildObj, %ARGS &>
+<& Elements/Create, Title => $Title, SplitObj => $SplitObj, QueueObj => $QueueObj, ChildObj => $ChildObj, %ARGS &>
 
 % if ( $gnupg_widget ) {
 <tr><td>&nbsp;</td><td>
@@ -114,8 +113,8 @@ if ( $ChildObj && !$ChildObj->CurrentUserHasRight('ModifyTicket') ) {
 my $include_signature = 1;
 unless ( exists $ARGS{'Content'} ) {
     my $Transactions;
-    if ( $TicketObj ) {
-        $Transactions = $TicketObj->Transactions;
+    if ( $SplitObj ) {
+        $Transactions = $SplitObj->Transactions;
     } elsif ( $ChildObj ) {
         $Transactions = $ChildObj->Transactions;
     }
@@ -232,10 +231,16 @@ if ( $Child ) {
     $ARGS{'Subject'} ||= $ChildObj->Subject;
 }
 
+my $SplitObj;
+if ( $Split ) {
+    $SplitObj = LoadTicket( $Split );
+    $Split = $ARGS{'Split'} = $SplitObj->id;
+}
+
 $m->callback(
     CallbackName => 'ProcessArguments',
     ARGSRef => \%ARGS,
-    Ticket => $TicketObj,
+    Ticket => $SplitObj,
     Child => $ChildObj
 );
 
@@ -354,9 +359,7 @@ $QuoteTransaction        => undef
 $CreateWithInvestigation => 0
 $CreateIncident          => $CreateWithInvestigation
 
-$Split                   => 0
-# Split source
-$TicketObj               => undef
+$Split                   => undef
 
 $Child                   => undef
 </%ARGS>
diff --git a/html/RTIR/Incident/Split.html b/html/RTIR/Incident/Split.html
index b5673c0..5c372d9 100644
--- a/html/RTIR/Incident/Split.html
+++ b/html/RTIR/Incident/Split.html
@@ -38,19 +38,17 @@
     %ARGS,
 
     Title            => loc("Split Incident #[_1]: [_2]", $TicketObj->id, $TicketObj->Subject),
-    Split            => 1,
-    TicketObj        => $TicketObj,
-
-    current_tab      => "RTIR/Display.html?id=".$Ticket,
-    current_subtab   => "RTIR/Split.html?Ticket=".$Ticket,
+    Split            => $Split,
 &>
 
 <%INIT>
-my $TicketObj = LoadTicket($Ticket);
+my $TicketObj = LoadTicket($Split);
+$ARGS{'Split'} = $Split = $TicketObj->id;
+
 $m->callback(CallbackName => 'Initial', %ARGS, Ticket => $TicketObj);
 </%INIT>
 
 <%ARGS>
 $QuoteTransaction => undef
-$Ticket => undef
+$Split => undef
 </%ARGS>
diff --git a/html/RTIR/Split.html b/html/RTIR/Split.html
index 6c1bacb..bd25adc 100644
--- a/html/RTIR/Split.html
+++ b/html/RTIR/Split.html
@@ -38,14 +38,13 @@
 
     %ARGS,
 
-    Split            => 1,
-    TicketObj        => $TicketObj,
-    Incident         => $Incident,
+    Split            => $Split,
+    Incident         => $incident,
 &>
 
 <%INIT>
-my $TicketObj = LoadTicket( $id );
-$ARGS{'id'} = $id = $TicketObj->id;
+my $TicketObj = LoadTicket( $Split );
+$ARGS{'Split'} = $Split = $TicketObj->id;
 
 $m->callback(CallbackName => 'Initial', %ARGS, Ticket => $TicketObj);
 
@@ -54,17 +53,15 @@ if ( $m->comp_exists("/RTIR/$Type/Split.html") ) {
     return $m->comp( "/RTIR/$Type/Split.html", %ARGS );
 }
 
-my $query = "Queue = 'Incidents' AND HasMember = " . $TicketObj->Id;
+my $incident;
 my $incidents = RT::Tickets->new( $session{'CurrentUser'} );
-$incidents->FromSQL( $query );
-
-my $Incident;
+$incidents->FromSQL( RT::IR->BaseQuery( Queue => 'Incidents', Active => 1 ) );
 if ( my $obj = $incidents->First ) {
-    $Incident = $obj->Id;
+    $incident = $obj->id;
 }
 
 </%INIT>
 <%ARGS>
 $QuoteTransaction => undef
-$id => undef
+$Split => undef
 </%ARGS>

commit ef7ea51d3f8b3e48bc3373c0a6fd00c2470060e3
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Apr 6 05:04:52 2011 +0400

    +2 tests passing, adjust number of tests

diff --git a/t/incident/abandon.t b/t/incident/abandon.t
index ec63f58..ddda40c 100644
--- a/t/incident/abandon.t
+++ b/t/incident/abandon.t
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use RT::IR::Test tests => 55;
+use RT::IR::Test tests => 48;
 
 RT::Test->started_ok;
 my $agent = default_agent();
diff --git a/t/incident/split.t b/t/incident/split.t
index 6835236..b756f21 100644
--- a/t/incident/split.t
+++ b/t/incident/split.t
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use RT::IR::Test tests => 24;
+use RT::IR::Test tests => 22;
 
 RT::Test->started_ok;
 my $agent = default_agent();
@@ -17,6 +17,7 @@ my $rtir_user = rtir_user();
 {
     my $id = $agent->create_incident( {Subject => "split incident"});
     $agent->display_ticket( $id);
+
     $agent->follow_link_ok({text => "Split"}, "Followed link");
     $agent->form_number(3);
     $agent->click('CreateIncident');

commit 430f31cab397e12a220ea97241e5016342faf876
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Apr 6 05:05:22 2011 +0400

    update TODO

diff --git a/TODO.porting_over_RT4 b/TODO.porting_over_RT4
index 23360f7..020ac4c 100644
--- a/TODO.porting_over_RT4
+++ b/TODO.porting_over_RT4
@@ -27,3 +27,17 @@
 * migrate SetIncidentReportState over lifecycles
 
 * scan code for hardcoded statuses
+
+* look at attachments processing, however new cool attachments processing
+  code is only in 4.2 branch
+
+* protection from mail loops by filtering watchers' email addresses on
+  Create/PeopleModify, like we have in RT
+
+* IR create page: "Don't send any emails to correspondents." and hints
+  are not aligned well. Look at RT's forms and adjust accordingly.
+
+* make Submit buttons names consistent with RT's
+
+* merge all RT::IR->*Query methods into one, they all equivalent,
+  small differences

commit ef78713f937a08ba48ab6f30bfafd0933ee56035
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed Apr 6 05:16:31 2011 +0400

    split TODO into sections

diff --git a/TODO.porting_over_RT4 b/TODO.porting_over_RT4
index 020ac4c..caea060 100644
--- a/TODO.porting_over_RT4
+++ b/TODO.porting_over_RT4
@@ -1,6 +1,18 @@
-* BulkAbandon needs a lot of love. see TODO comments
+=== FEATURES
 
-* BulkAbandon misses Query arguments when updated
+* Split incident: select which IRs, Invs, Blocks go where
+
+* Incident field on Create page is a mess, sometimes it's
+  available for input, sometimes it's not, IRs can have
+  several incidents, for Blocks it's required, for Invs
+  it's only one incident.
+
+  Let's make this field free! So it's always can be changed.
+
+  Also, config option that controls: if incident is mandatory
+  for queue and if it can be more than one incident per ticket.
+
+=== UPGRADING
 
 * upgrade script that setups lifecycle column on the queues
 
@@ -10,21 +22,13 @@
   transactions for RTIR's queues and turns changes of
   the State CFs into Status changes
 
-* /Incident/Reply.html needs refine query page
-
-* on_incident_resolve - document it
-
-* /Incident/Children/ and friends use "State" all over the place,
-  anyway we break backwards compatibility, let's be consistent
-  and ditch the word
+=== BRINGING UP TO DATE
 
 * Some pages with forms need new nice layouts like in RT, reply
   page comes first to mind
 
-* split SetState action and conditions for IRs and Blocks.
-  they just have different workflow now
-
-* migrate SetIncidentReportState over lifecycles
+* IR create page: "Don't send any emails to correspondents." and hints
+  are not aligned well. Look at RT's forms and adjust accordingly.
 
 * scan code for hardcoded statuses
 
@@ -34,10 +38,31 @@
 * protection from mail loops by filtering watchers' email addresses on
   Create/PeopleModify, like we have in RT
 
-* IR create page: "Don't send any emails to correspondents." and hints
-  are not aligned well. Look at RT's forms and adjust accordingly.
+=== FIXES
+
+* BulkAbandon needs a lot of love. see TODO comments
+
+* BulkAbandon misses Query arguments when updated
+
+* /Incident/Reply.html needs refine query page
+
+=== DOCS
+
+* on_incident_resolve - document it
+
+=== CLEANUP && REFACTORING
+
+* /Incident/Children/ and friends use "State" all over the place,
+  anyway we break backwards compatibility, let's be consistent
+  and ditch the word
+
+* split SetState action and conditions for IRs and Blocks.
+  they just have different workflow now
+
+* migrate SetIncidentReportState over lifecycles
 
 * make Submit buttons names consistent with RT's
 
 * merge all RT::IR->*Query methods into one, they all equivalent,
   small differences
+

-----------------------------------------------------------------------


More information about the Rt-commit mailing list