}
# Construct the list of allowable statuses.
-my $initial_statuses = Bugzilla::Status->can_change_to();
+my @statuses = @{ Bugzilla::Status->can_change_to() };
# Exclude closed states from the UI, even if the workflow allows them.
# The back-end code will still accept them, though.
-@$initial_statuses = grep { $_->is_open } @$initial_statuses;
+@statuses = grep { $_->is_open } @statuses;
-my @status = map { $_->name } @$initial_statuses;
# UNCONFIRMED is illegal if allows_unconfirmed is false.
if (!$product->allows_unconfirmed) {
- @status = grep {$_ ne 'UNCONFIRMED'} @status;
+ @statuses = grep { $_->name ne 'UNCONFIRMED' } @statuses;
}
-scalar(@status) || ThrowUserError('no_initial_bug_status');
+scalar(@statuses) || ThrowUserError('no_initial_bug_status');
# If the user has no privs...
unless ($has_editbugs || $has_canconfirm) {
# ... use UNCONFIRMED if available, else use the first status of the list.
- my $bug_status = (grep {$_ eq 'UNCONFIRMED'} @status) ? 'UNCONFIRMED' : $status[0];
- @status = ($bug_status);
+ my $bug_status = (grep { $_->name eq 'UNCONFIRMED' } @statuses)
+ ? 'UNCONFIRMED' : $statuses[0]->name;
+ @statuses = ($bug_status);
}
-$vars->{'bug_status'} = \@status;
+$vars->{'bug_status'} = \@statuses;
# Get the default from a template value if it is legitimate.
# Otherwise, and only if the user has privs, set the default
# to the first confirmed bug status on the list, if available.
-if (formvalue('bug_status') && grep { $_ eq formvalue('bug_status') } @status) {
+my $picked_status = formvalue('bug_status');
+if ($picked_status and grep($_->name eq $picked_status, @statuses)) {
$default{'bug_status'} = formvalue('bug_status');
-} elsif (scalar @status == 1) {
- $default{'bug_status'} = $status[0];
+} elsif (scalar @statuses == 1) {
+ $default{'bug_status'} = $statuses[0]->name;
}
else {
- $default{'bug_status'} = ($status[0] ne 'UNCONFIRMED') ? $status[0] : $status[1];
+ $default{'bug_status'} = ($statuses[0]->name ne 'UNCONFIRMED')
+ ? $statuses[0]->name : $statuses[1]->name;
}
my @groups = $cgi->param('groups');
[%# We can't use the select block in these two cases for various reasons. %]
<tr>
- <th class="required">
- <a href="describecomponents.cgi?product=[% product.name FILTER url_quote %]">
- Component</a>:
- </th>
+ [% component_desc_url = BLOCK -%]
+ describecomponents.cgi?product=[% product.name FILTER url_quote %]
+ [% END %]
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.component editable = 1 required = 1
+ desc_url = component_desc_url
+ %]
<td id="field_container_component">
<select name="component" id="component" onchange="set_assign_to();"
size="7" aria-required="true" class="required">
</tr>
<tr>
- <th rowspan="3"><a href="page.cgi?id=fields.html#version">
- [%- field_descs.version FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.version editable = 1 rowspan = 3
+ %]
<td rowspan="3">
<select name="version" size="5">
[%- FOREACH v = version %]
<tbody class="expert_fields">
<tr>
[% IF Param('usetargetmilestone') && Param('letsubmitterchoosemilestone') %]
- [% sel = { description => 'Target Milestone', name => 'target_milestone' } %]
- [% INCLUDE select %]
+ [% INCLUDE select field = bug_fields.target_milestone %]
[% ELSE %]
<td colspan="2"> </td>
[% END %]
</tr>
<tr>
-[% IF bug_status.size <= 1 %]
- <input type="hidden" name="bug_status"
- value="[% default.bug_status FILTER html %]">
- <th>Initial State:</th>
- <td>[% display_value("bug_status", default.bug_status) FILTER html %]</td>
-[% ELSE %]
- [% sel = { description => 'Initial State', name => 'bug_status' } %]
- [% INCLUDE select %]
-[% END %]
+ [% INCLUDE bug/field.html.tmpl
+ bug = default, field = bug_fields.bug_status,
+ editable = (bug_status.size > 1), value = default.bug_status
+ override_legal_values = bug_status %]
<td> </td>
[%# Calculate the number of rows we can use for flags %]
</tr>
<tr>
- <th><a href="page.cgi?id=fields.html#assigned_to">Assign To</a>:</th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.assigned_to editable = 1
+ %]
<td colspan="2">
[% INCLUDE global/userselect.html.tmpl
id => "assigned_to"
[% IF Param("useqacontact") %]
<tr>
- <th><a href="page.cgi?id=fields.html#qa_contact">
- [%- field_descs.qa_contact FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.qa_contact editable = 1
+ %]
<td colspan="2">
[% INCLUDE global/userselect.html.tmpl
id => "qa_contact"
[% END %]
<tr>
- <th><a href="page.cgi?id=fields.html#cc">
- [%- field_descs.cc FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.cc editable = 1
+ %]
<td colspan="2">
[% INCLUDE global/userselect.html.tmpl
id => "cc"
[% IF user.is_timetracker %]
<tr>
- <th><a href="page.cgi?id=fields.html#estimated_time">Estimated
- Hours:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.estimated_time editable = 1
+ %]
<td colspan="2">
<input name="estimated_time" size="6" maxlength="6" value="[% estimated_time FILTER html %]">
</td>
[% IF Param("usebugaliases") %]
<tr>
- <th><a href="page.cgi?id=fields.html#alias">
- [%- field_descs.alias FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.alias editable = 1
+ %]
<td colspan="2">
<input name="alias" size="20" value="[% alias FILTER html %]">
</td>
[% END %]
<tr>
- <th><a href="page.cgi?id=fields.html#bug_file_loc">
- [%- field_descs.bug_file_loc FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.bug_file_loc editable = 1
+ %]
<td colspan="2">
<input name="bug_file_loc" size="40"
value="[% bug_file_loc FILTER html %]">
<tbody>
<tr>
- <th class="required"><a href="page.cgi?id=fields.html#short_desc">
- [%- field_descs.short_desc FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.short_desc editable = 1 required = 1
+ %]
<td colspan="3">
<input name="short_desc" size="70" value="[% short_desc FILTER html %]"
maxlength="255" spellcheck="true" aria-required="true"
[% IF user.in_group('editbugs', product.id) %]
[% IF use_keywords %]
<tr>
- <th><a href="describekeywords.cgi">Keywords</a>:</th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.keywords editable = 1
+ desc_url = "describekeywords.cgi"
+ %]
<td colspan="3">
<input id="keywords" name="keywords" size="40"
value="[% keywords FILTER html %]"> (optional)
[% END %]
<tr>
- <th><a href="page.cgi?id=fields.html#dependson">
- [%- field_descs.dependson FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.dependson editable = 1
+ %]
<td colspan="3">
<input name="dependson" accesskey="d" value="[% dependson FILTER html %]">
</td>
</tr>
<tr>
- <th><a href="page.cgi?id=fields.html#blocked">
- [%- field_descs.blocked FILTER html %]:</a></th>
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = bug_fields.blocked editable = 1
+ %]
<td colspan="3">
<input name="blocked" accesskey="b" value="[% blocked FILTER html %]">
</td>
[%############################################################################%]
[% BLOCK select %]
- [% IF sel.description %]
- <th>
- <a href="page.cgi?id=fields.html#[% sel.name %]">[% sel.description %]</a>:
- </th>
- [% END %]
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = field editable = 1
+ %]
<td>
- <select name="[% sel.name %]" id="[% sel.name %]">
- [%- FOREACH x = ${sel.name} %]
+ <select name="[% field.name FILTER html %]"
+ id="[% field.name FILTER html %]">
+ [%- FOREACH x = ${field.name} %]
<option value="[% x FILTER html %]"
- [% " selected=\"selected\"" IF x == default.${sel.name} %]>
- [% display_value(sel.name, x) FILTER html %]
+ [% " selected=\"selected\"" IF x == default.${field.name} %]>
+ [% display_value(field.name, x) FILTER html %]
</option>
[% END %]
</select>
-
- [% IF sel.name == "bug_status" %]
- <script type="text/javascript">
- <!--
- [%+ INCLUDE "bug/field-events.js.tmpl"
- field = bug_fields.bug_status %]
- //-->
- </script>
- [% END %]
</td>
[% END %]
--- /dev/null
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Everything Solved, Inc.
+ # Portions created by the Initial Developer are Copyright (C) 2010 the
+ # Initial Developer. All Rights Reserved.
+ #
+ # Contributor(s):
+ # Max Kanat-Alexander <mkanat@bugzilla.org>
+ #%]
+
+[%# INTERFACE:
+ # field: a Bugzilla::Field object
+ # desc_url: An alternate link to help for the field.
+ # hidden: True if the field label should start hidden.
+ # required: True if this field must have a value.
+ # rowspan: a "rowspan" value for the label's <th>.
+ #%]
+
+[% PROCESS "bug/field-help.none.tmpl" %]
+
+<th class="field_label [% ' bz_hidden_field' IF hidden %]
+ [%- ' required' IF required %]"
+ id="field_label_[% field.name FILTER html %]"
+ [% IF rowspan %] rowspan="[% rowspan FILTER html %]"[% END %]>
+
+ [% IF editable %]
+ <label for="[% field.name FILTER html %]">
+ [% END %]
+
+ <a
+ [% IF help_html.${field.name}.defined %]
+ title="[% help_html.${field.name} FILTER txt FILTER collapse FILTER html %]"
+ class="field_help_link"
+ [% END %]
+ [% IF desc_url %]
+ href="[% desc_url FILTER html %]"
+ [% ELSE %]
+ href="page.cgi?id=fields.html#[% field.name FILTER url_quote %]"
+ [% END %]
+ >[%- field_descs.${field.name} FILTER html %]:</a>
+
+ [% '</label>' IF editable %]
+</th>