[%# 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 Netscape Communications
  # Corporation. Portions created by Netscape are
  # Copyright (C) 1998 Netscape Communications Corporation. All
  # Rights Reserved.
  #
  # Contributor(s): Terry Weissman <terry@mozilla.org>
  #                 Gervase Markham <gerv@gerv.net>
  #%]

[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS global/header.html.tmpl 
  title = "$terms.Bug Fields" 
  style_urls = ['skins/standard/page.css']
%]

<p>This page describes the various fields that you see 
  on [% terms.abug %].</p>

<table class="field_value_explanation">
  <thead>
  <tr>
    <td id="bug_status">
      <h2>[% field_descs.bug_status FILTER upper FILTER html %]</h2>
    </td>

    <td id="resolution">
      <h2>[% field_descs.resolution FILTER upper FILTER html %]</h2>
    </td>
  </tr>

  <tr>
    <td>The [% field_descs.bug_status FILTER html %] field indicates the 
      current state of a [% terms.bug %]. Only certain status transitions
      are allowed.</td>

    <td>The [% field_descs.resolution FILTER html %] field indicates what
      happened to this [%+ terms.bug %].</td>
  </tr>
  </thead>

  <tbody>
  <tr class="header_row">
    <td colspan="2">Open [% terms.Bugs %]</td>
  </tr>
  <tr>
    <td>
      <dl>
        <dt class="unconfirmed">
          [% display_value("bug_status", "UNCONFIRMED") FILTER html %]
        </dt>
        <dd class="unconfirmed">
          This [% terms.bug %] has recently been added to the database. 
          Nobody has confirmed that this [% terms.bug %] is valid. Users
          who have the "canconfirm" permission set may confirm
          this [% terms.bug %], changing its state to 
          <b>[% display_value("bug_status", "CONFIRMED") FILTER html %]</b>. 
          Or, it may be directly resolved and marked
          <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
        </dd>

        <dt class="confirmed">
          [% display_value("bug_status", "CONFIRMED") FILTER html %]
        </dt>
        <dd class="confirmed">
          This [% terms.bug %] is valid and has recently been filed.
          [%+ terms.Bugs %] in this state become 
          <b>[% display_value("bug_status", "IN_PROGRESS") FILTER html %]</b>
          when somebody is working on them, or become resolved and marked
          <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
        </dd>

        <dt class="in_progress">
          [% display_value("bug_status", "IN_PROGRESS") FILTER html %]
        </dt>
        <dd class="in_progress">
          This [% terms.bug %] is not yet resolved, but is assigned to the
          proper person who is working on the [% terms.bug %]. From here,
          [%+ terms.bugs %] can be given to another person and become
          <b>[% display_value("bug_status", "CONFIRMED") FILTER html %]</b>, or
          resolved and become 
          <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
        </dd>
        
        [% Hook.process('open-status') %]
      </dl>
    </td>

    <td>
      No resolution yet. All [% terms.bugs %] which are in one of
      these "open" states have no resolution set.
    </td>
  </tr>

  <tr class="header_row">
    <td colspan="2">Closed [% terms.Bugs %]</td>
  </tr>

  <tr>
    <td>
      <dl>
        <dt class="resolved">
          [% display_value("bug_status", "RESOLVED") FILTER html %]
        </dt>
        <dd class="resolved">
          A resolution has been performed, and it is awaiting verification by
          QA. From here [% terms.bugs %] are either reopened and given some
          open status, or are verified by QA and marked
          <b>[% display_value("bug_status", "VERIFIED") FILTER html %]</b>.
        </dd>

        <dt class="verified">
          [% display_value("bug_status", "VERIFIED") FILTER html %]
        </dt>
        <dd class="verified">
          QA has looked at the [% terms.bug %] and the resolution and
          agrees that the appropriate resolution has been taken. This is
          the final status for [% terms.bugs %].
        </dd>
        
        [% Hook.process('closed-status') %]
      </dl>
    </td>

    <td>
      <dl>
        <dt class="fixed">
          [% display_value("resolution", "FIXED") FILTER html %]
        </dt>
        <dd class="fixed">
          A fix for this [% terms.bug %] is checked into the tree and 
          tested.
        </dd>

        <dt class="invalid">
          [% display_value("resolution", "INVALID") FILTER html %]
        </dt>
        <dd class="invalid">
          The problem described is not [% terms.abug %].
        </dd>

        <dt class="wontfix">
          [% display_value("resolution", "WONTFIX") FILTER html %]
        </dt>
        <dd class="wontfix">
          The problem described is [% terms.abug %] which will never be 
          fixed.
        </dd>

        <dt class="duplicate">
         [% display_value("resolution", "DUPLICATE") FILTER html %]
        </dt>
        <dd class="duplicate">
          The problem is a duplicate of an existing [% terms.bug %].
          When [% terms.abug %] is marked as a
          <b>[% display_value("resolution", "DUPLICATE") FILTER html %]</b>,
          you will see which [% terms.bug %] it is a duplicate of,
          next to the resolution.
        </dd>

        <dt class="worksforme">
          [% display_value("resolution", "WORKSFORME") FILTER html %]
        </dt>
        <dd class="worksforme">
          All attempts at reproducing this [% terms.bug %] were futile, 
          and reading the code produces no clues as to why the described
          behavior would occur. If more information appears later,
          the [% terms.bug %] can be reopened.
        </dd>
        
        [% Hook.process('resolution') %]
      </dl>
    </td>
  </tr>
  </tbody>
</table>

<h2>Other Fields</h2>

[% PROCESS "bug/field-help.none.tmpl" %]

[% SET field_help_map = {} %]
[% FOREACH field = bug_fields.keys %]
  [% SET field_desc = field_descs.$field %]
  [% field_help_map.$field_desc = { help  => help_html.$field, 
                                    field => field } %]
[% END %]

[%# These are fields that don't need to be documented, either because
  # they have docs somewhere else in the UI, or they don't show up on bugs. 
  # %]
[% SET skip_fields = [ 
  'days_elapsed', 
  'everconfirmed',
  'reporter_accessible',
  'cclist_accessible',
  'bug_group',
  'commenter',
  'owner_idle_time',
  'bug_status',
  'resolution',
] %]

<dl class="field_descriptions">
[% FOREACH field_desc = field_help_map.keys.sort %]
  [% SET field = field_help_map.${field_desc}.field %]
  [% SET field_object = bug_fields.$field %]

  [% NEXT IF field_object.obsolete %]
  [% NEXT IF !user.is_timetracker AND field_object.is_timetracking %]

  [% NEXT IF field == 'status_whiteboard' AND !Param('usestatuswhiteboard') %]
  [% NEXT IF field == 'target_milestone' AND !Param('usetargetmilestone') %]
  [% NEXT IF field == 'alias' AND !Param('usebugaliases') %]

  [%# For now we don't have help for attachment fields and so on. %]
  [% NEXT IF field.match('\.') %]

  [% NEXT IF skip_fields.contains(field) %]

  <dt id="[% field FILTER html %]">[% field_desc FILTER html %]</dt>
    <dd>
      [% SET help_text = field_help_map.${field_desc}.help %]
      [% help_text FILTER none %]
    </dd>
[% END %]
</dl>

[% PROCESS global/footer.html.tmpl %]
