[Rt-commit] rt branch, 4.0/status-selector, created. rt-4.0.8-149-g4b3351b
Thomas Sibley
trs at bestpractical.com
Tue Nov 6 20:45:28 EST 2012
The branch, 4.0/status-selector has been created
at 4b3351b4c2bc573d2d93fc3886bf322d4515461d (commit)
- Log -----------------------------------------------------------------
commit 7b77b82d8116cd3a5a3a12a6c3e3428b4b7224bb
Author: Thomas Sibley <trs at bestpractical.com>
Date: Tue Nov 6 17:05:11 2012 -0800
Bulk update: Only show statuses for queues which appear in the results
Trims down the status selector from "all statuses" to a potentially much
smaller set in many scenarios. It's safe to limit selectable statuses
because Status is set _before_ Queue when processing the update, so all
valid statuses will be listed. If Queue is ever processed before
Status, this change will need to be revisited as it prevents showing
statuses from destination queues which don't appear in the search
results.
diff --git a/share/html/Search/Bulk.html b/share/html/Search/Bulk.html
index fc4be7a..fe17a0c 100644
--- a/share/html/Search/Bulk.html
+++ b/share/html/Search/Bulk.html
@@ -105,7 +105,7 @@
<tr><td class="label"> <&|/l&>Make queue</&>: </td>
<td class="value"> <& /Elements/SelectQueue, Name => "Queue", Default => $ARGS{Queue} &> </td></tr>
<tr><td class="label"> <&|/l&>Make Status</&>: </td>
-<td class="value"> <& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status} &> </td></tr>
+<td class="value"> <& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}, Queues => $seen_queues &> </td></tr>
<tr><td class="label"> <&|/l&>Make date Starts</&>: </td>
<td class="value"> <& /Elements/SelectDate, Name => "Starts_Date", Default => $ARGS{Starts_Date} || '' &> </td></tr>
<tr><td class="label"> <&|/l&>Make date Started</&>: </td>
commit cd4789de9d5c7943cbbd5232fb68ae595c6acf61
Author: Thomas Sibley <trs at bestpractical.com>
Date: Tue Nov 6 17:10:33 2012 -0800
Group by lifecycle in the status selection widget
For UI simplicity, no grouping is done if only one lifecycle is seen.
For code simplicity, multiple <option> elements may be marked selected
even if the displayed <select> doesn't allow multiple selections. This
is an authoring error according to the HTML spec, but browsers generally
just deal and pick one. It doesn't matter to RT which one they pick,
since statuses are identified only by name. We can consider a technical
solution down the road if it proves to trigger confusing behaviour and
frustrates users.
diff --git a/share/html/Elements/SelectStatus b/share/html/Elements/SelectStatus
index 33a2edc..07150a3 100644
--- a/share/html/Elements/SelectStatus
+++ b/share/html/Elements/SelectStatus
@@ -49,21 +49,29 @@
% if ( $DefaultValue ) {
<option value=""<% !$Default && qq[ selected="selected"] |n %>><% $DefaultLabel %></option>
% }
-% foreach my $status (@status) {
-% next if ($SkipDeleted && $status eq 'deleted');
-% my $selected = defined $Default && $status eq $Default ? 'selected="selected"' : '';
+% for my $lifecycle (sort keys %statuses_by_lifecycle) {
+% if ($group_by_lifecycle) {
+<optgroup label="<% $lifecycle %>">
+% }
+% foreach my $status (@{$statuses_by_lifecycle{$lifecycle}}) {
+% next if ($SkipDeleted && $status eq 'deleted');
+% my $selected = defined $Default && $status eq $Default ? 'selected="selected"' : '';
<option value="<% $status %>" <% $selected |n %>><% loc($status) %></option>
+% }
+% if ($group_by_lifecycle) {
+</optgroup>
+% }
% }
</select>
<%INIT>
### XXX: no cover for Tools/MyDay.html
-
-my @status;
+my %statuses_by_lifecycle;
if ( @Statuses ) {
- @status = @Statuses;
+ $statuses_by_lifecycle{''} = \@Statuses;
}
elsif ( $TicketObj ) {
+ my @status;
my $current = $TicketObj->Status;
push @status, $current;
@@ -76,20 +84,27 @@ elsif ( $TicketObj ) {
unless exists $has{ $check };
push @status, $next if $has{ $check };
}
+ $statuses_by_lifecycle{$lifecycle->Name} = \@status;
}
elsif ( $QueueObj ) {
- @status = $QueueObj->Lifecycle->Transitions('');
+ my $lifecycle = $QueueObj->Lifecycle;
+ $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Transitions('') ];
} elsif ( %Queues ) {
for my $id (keys %Queues) {
my $queue = RT::Queue->new($session{'CurrentUser'});
$queue->Load($id);
- push @status, $queue->Lifecycle->Valid if $queue->id;
+ if ($queue->id) {
+ my $lifecycle = $queue->Lifecycle;
+ $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ];
+ }
}
- my %seen;
- @status = grep { not $seen{$_}++ } @status;
} else {
- @status = RT::Queue->Lifecycle->Valid;
+ for my $lifecycle (map { RT::Lifecycle->Load($_) } RT::Lifecycle->List) {
+ $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ];
+ }
}
+
+my $group_by_lifecycle = keys %statuses_by_lifecycle > 1;
</%INIT>
<%ARGS>
$Name => undef
commit 4b3351b4c2bc573d2d93fc3886bf322d4515461d
Author: Thomas Sibley <trs at bestpractical.com>
Date: Tue Nov 6 17:34:49 2012 -0800
Simplify status selector by lumping lifecycles with identical statuses
For example, the "default" lifecycle and a copy named "reply-on-resolve"
which changes only the transitions available in the actions menu are now
grouped into the same <optgroup> with the heading "default,
reply-on-resolve".
While the previous commits made the shipped "approvals" and "default"
lifecycles appear separately if you were looking at tickets in both
queues, this commit now joins them. For maximum simplicity, the
decision to display groupings or not is done _after_ simplification,
regardless of how many lifecycles may be lumped into the same grouping.
diff --git a/share/html/Elements/SelectStatus b/share/html/Elements/SelectStatus
index 07150a3..fa3f25a 100644
--- a/share/html/Elements/SelectStatus
+++ b/share/html/Elements/SelectStatus
@@ -104,6 +104,29 @@ elsif ( $QueueObj ) {
}
}
+if (keys %statuses_by_lifecycle) {
+ my %simplified;
+ my $key = sub {
+ join "\0", sort @{$_[0]};
+ };
+ for my $name (sort keys %statuses_by_lifecycle) {
+ my $matched;
+ my $statuses = $statuses_by_lifecycle{$name};
+ for my $simple (sort keys %simplified) {
+ if ($key->($statuses) eq $key->($simplified{$simple})) {
+ # Statuses are the same, join 'em!
+ $simplified{"$simple, $name"} = delete $simplified{$simple};
+ $matched++;
+ last;
+ }
+ }
+ unless ($matched) {
+ $simplified{$name} = $statuses;
+ }
+ }
+ %statuses_by_lifecycle = %simplified;
+}
+
my $group_by_lifecycle = keys %statuses_by_lifecycle > 1;
</%INIT>
<%ARGS>
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list