2c4ea7eebea8e45fc007a0e7ede7ca485b6da300
[usit-rt.git] / share / html / Elements / SelectStatus
1 %# BEGIN BPS TAGGED BLOCK {{{
2 %#
3 %# COPYRIGHT:
4 %#
5 %# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
6 %#                                          <sales@bestpractical.com>
7 %#
8 %# (Except where explicitly superseded by other copyright notices)
9 %#
10 %#
11 %# LICENSE:
12 %#
13 %# This work is made available to you under the terms of Version 2 of
14 %# the GNU General Public License. A copy of that license should have
15 %# been provided with this software, but in any event can be snarfed
16 %# from www.gnu.org.
17 %#
18 %# This work is distributed in the hope that it will be useful, but
19 %# WITHOUT ANY WARRANTY; without even the implied warranty of
20 %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 %# General Public License for more details.
22 %#
23 %# You should have received a copy of the GNU General Public License
24 %# along with this program; if not, write to the Free Software
25 %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26 %# 02110-1301 or visit their web page on the internet at
27 %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28 %#
29 %#
30 %# CONTRIBUTION SUBMISSION POLICY:
31 %#
32 %# (The following paragraph is not intended to limit the rights granted
33 %# to you to modify and distribute this software under the terms of
34 %# the GNU General Public License and is only of importance to you if
35 %# you choose to contribute your changes and enhancements to the
36 %# community by submitting them to Best Practical Solutions, LLC.)
37 %#
38 %# By intentionally submitting any modifications, corrections or
39 %# derivatives to this work, or any other work intended for use with
40 %# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41 %# you are the copyright holder for those contributions and you grant
42 %# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
43 %# royalty-free, perpetual, license to use, copy, create derivative
44 %# works based on those contributions, and sublicense and distribute
45 %# those contributions and any derivatives thereof.
46 %#
47 %# END BPS TAGGED BLOCK }}}
48 <select name="<%$Name%>" <% $Multiple ? qq{multiple="multiple" size="$Size"} : '' |n %>>
49 % if ( $DefaultValue ) {
50 <option value=""<% !$Default && qq[ selected="selected"] |n %>><% $DefaultLabel %></option>
51 % }
52 % for my $lifecycle (sort keys %statuses_by_lifecycle) {
53 %     if ($group_by_lifecycle) {
54 <optgroup label="<% $lifecycle %>">
55 %     }
56 %     foreach my $status (@{$statuses_by_lifecycle{$lifecycle}}) {
57 %         next if ($SkipDeleted && $status eq 'deleted');
58 %         my $selected = defined $Default && $status eq $Default ? 'selected="selected"' : '';
59 <option value="<% $status %>" <% $selected |n %>><% loc($status) %></option>
60 %     }
61 %     if ($group_by_lifecycle) {
62 </optgroup>
63 %     }
64 % }
65 </select>
66 <%INIT>
67 ### XXX: no cover for Tools/MyDay.html
68
69 my %statuses_by_lifecycle;
70 if ( @Statuses ) {
71     $statuses_by_lifecycle{''} = \@Statuses;
72 }
73 elsif ( $TicketObj ) {
74     my @status;
75     my $current = $TicketObj->Status;
76     push @status, $current;
77
78     my $lifecycle = $TicketObj->QueueObj->Lifecycle;
79
80     my %has = ();
81     foreach my $next ( $lifecycle->Transitions( $current ) ) {
82         my $check = $lifecycle->CheckRight( $current => $next );
83         $has{ $check } = $TicketObj->CurrentUserHasRight( $check )
84             unless exists $has{ $check };
85         push @status, $next if $has{ $check };
86     }
87     $statuses_by_lifecycle{$lifecycle->Name} = \@status;
88 }
89 elsif ( $QueueObj ) {
90     my $lifecycle = $QueueObj->Lifecycle;
91     $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Transitions('') ];
92 } elsif ( %Queues ) {
93     for my $id (keys %Queues) {
94         my $queue = RT::Queue->new($session{'CurrentUser'});
95         $queue->Load($id);
96         if ($queue->id) {
97             my $lifecycle = $queue->Lifecycle;
98             $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ];
99         }
100     }
101 } else {
102     for my $lifecycle (map { RT::Lifecycle->Load($_) } RT::Lifecycle->List) {
103         $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ];
104     }
105 }
106
107 if (keys %statuses_by_lifecycle) {
108     my %simplified;
109     my $key = sub {
110         join "\0", sort @{$_[0]};
111     };
112     for my $name (sort keys %statuses_by_lifecycle) {
113         my $matched;
114         my $statuses = $statuses_by_lifecycle{$name};
115         for my $simple (sort keys %simplified) {
116             if ($key->($statuses) eq $key->($simplified{$simple})) {
117                 # Statuses are the same, join 'em!
118                 $simplified{"$simple, $name"} = delete $simplified{$simple};
119                 $matched++;
120                 last;
121             }
122         }
123         unless ($matched) {
124             $simplified{$name} = $statuses;
125         }
126     }
127     %statuses_by_lifecycle = %simplified;
128 }
129
130 my $group_by_lifecycle = keys %statuses_by_lifecycle > 1;
131 </%INIT>
132 <%ARGS>
133 $Name => undef
134
135 @Statuses => ()
136 $TicketObj => undef
137 $QueueObj => undef
138 %Queues => ()
139
140 $Default => ''
141 $SkipDeleted => 0
142 $DefaultValue => 1
143 $DefaultLabel => "-"
144
145 $Multiple => 0
146 $Size => 6
147 </%ARGS>