[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> </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