list.html.tmpl 7.94 KB
[%# 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): Myk Melez <myk@mozilla.org>
  #%]

[% IF user.id %]

[%# We list flags by looping twice over the flag types relevant for the bug.
  # In the first loop, we display existing flags and then, for active types,
  # we display UI for adding new flags.  In the second loop, we display UI 
  # for adding additional new flags for those types for which a flag already
  # exists but which are multiplicable (can have multiple flags of the type
  # on a single bug/attachment).
  #%]

[% DEFAULT flag_table_id = "flags" %]

<script type="text/javascript" src="js/flag.js"></script>

<table id="[% flag_table_id FILTER html %]">
  [% UNLESS flag_no_header %]
    <tr>
      <th colspan="3">
        Flags:
      </th>
      [% IF any_flags_requesteeble %]
        <th>
          Requestee:
        </th>
      [% END %]
    </tr>
  [% END %]

  [%# Step 1: Display every flag type (except inactive types with no flags). %]
  [% FOREACH type = flag_types %]
    
    [%# Step 1a: Display existing flag(s). %]
    [% FOREACH flag = type.flags %]
      <tr>
        <td>
          [% flag.setter.nick FILTER html %]:
        </td>
        <td>
          <label title="[% type.description FILTER html %]"
                 for="flag-[% flag.id %]">
            [%- type.name FILTER html FILTER no_break -%]</label>
        </td>
        <td>
          <select id="flag-[% flag.id %]" name="flag-[% flag.id %]" 
                  title="[% type.description FILTER html %]"
                  onchange="toggleRequesteeField(this);"
                  class="flag_select">
            [%# Only display statuses the user is allowed to set. %]
            [% IF user.can_request_flag(type) %]
              <option value="X"></option>
            [% END %]
            [% IF type.is_active %]
              [% IF (type.is_requestable && user.can_request_flag(type)) || flag.status == "?" %]
                <option value="?" [% "selected" IF flag.status == "?" %]>?</option>
              [% END %]
              [% IF user.can_set_flag(type) || flag.status == "+" %]
                <option value="+" [% "selected" IF flag.status == "+" %]>+</option>
              [% END %]
              [% IF user.can_set_flag(type) || flag.status == "-" %]
                <option value="-" [% "selected" IF flag.status == "-" %]>-</option>
              [% END %]
            [% ELSE %]
              <option value="[% flag.status %]" selected="selected">[% flag.status %]</option>
            [% END %]
          </select>
        </td>
        [% IF any_flags_requesteeble %]
          <td>
            [% IF (type.is_active && type.is_requestable && type.is_requesteeble) || flag.requestee %]
              <span style="white-space: nowrap;">
                [% IF Param('usemenuforusers') %]
                  [% flag_custom_list = flag.type.grant_list %]
                  [% IF !(type.is_active && type.is_requestable && type.is_requesteeble) %]
                    [%# We are here only because there was already a requestee. In this case,
                        the only valid action is to remove the requestee or leave it alone;
                        nothing else. %]
                    [% flag_custom_list = [flag.requestee] %]
                  [% END %]
                  [% INCLUDE global/userselect.html.tmpl
                             name     => "requestee-$flag.id"
                             id       => "requestee-$flag.id"
                             value    => flag.requestee.login
                             multiple => 0
                             emptyok  => 1
                             custom_userlist => flag_custom_list
                  %]
                [% ELSE %]
                  (<input type="text" class="requestee" maxlength="255"
                          id="requestee-[% flag.id %]"
                          name="requestee-[% flag.id %]"
                          [% IF flag.status == "?" && flag.requestee %]
                            value="[% flag.requestee.login FILTER html %]"
                          [% END %]>)
                [% END %]
              </span>
            [% END %]
          </td>
        [% END %]
      </tr>
    [% END %]
    
    [%# Step 1b: Display UI for setting flag. %]
    [% IF (!type.flags || type.flags.size == 0) && type.is_active %]

      [% PROCESS flag_row first_cell_empty = 1 addl_text = "" %]
    [% END %]
  [% END %]

  [%# Step 2: Display flag type again (if type is multiplicable). %]
  [% FOREACH type = flag_types %]
    [% NEXT UNLESS type.flags && type.flags.size > 0 && type.is_multiplicable && type.is_active %]
    [% IF !separator_displayed %]
        <tr><td colspan="3"><hr></td></tr>
        [% separator_displayed = 1 %]
    [% END %]

    [% PROCESS flag_row first_cell_empty = 0 addl_text = "addl." %]
  [% END %]
</table>

[% ELSE %]
  [%# The user is logged out. Display flags as read-only. %]
  [% header_displayed = 0 %]
  [% FOREACH type = flag_types %]
    [% FOREACH flag = type.flags %]
      [% IF !flag_no_header AND !header_displayed %]
        <p><b>Flags:</b></p>
        [% header_displayed = 1 %]
      [% END %]
      [% flag.setter.nick FILTER html %]:
      [%+ type.name FILTER html FILTER no_break %][% flag.status %]
      [% IF flag.requestee %]
        ([% flag.requestee.nick FILTER html %])
      [% END %]<br>
    [% END %]
  [% END %]
[% END %]

[%# Display a table row for unset flags %]

[% BLOCK flag_row %]
  <tr>
  [% IF first_cell_empty %]
    <td>&nbsp;</td>
    <td>
  [% ELSE %]
    <td colspan="2">
  [% END %]

      [% addl_text FILTER html %]
      <label title="[% type.description FILTER html %]" for="flag_type-[% type.id %]">
        [%- type.name FILTER html FILTER no_break %]</label>
    </td>
    <td>
      <select id="flag_type-[% type.id %]" name="flag_type-[% type.id %]"
              title="[% type.description FILTER html %]"
              [% " disabled=\"disabled\"" UNLESS (type.is_requestable && user.can_request_flag(type)) || user.can_set_flag(type) %]
              onchange="toggleRequesteeField(this);"
              class="flag_select">
        <option value="X"></option>
        [% IF type.is_requestable && user.can_request_flag(type) %]
          <option value="?">?</option>
        [% END %]
        [% IF user.can_set_flag(type) %]
          <option value="+">+</option>
          <option value="-">-</option>
        [% END %]
      </select>
    </td>
    [% IF any_flags_requesteeble %]
      <td>
        [% IF type.is_requestable && type.is_requesteeble %]
          <span style="white-space: nowrap;">
            [% IF Param('usemenuforusers') %]
              [% INCLUDE global/userselect.html.tmpl
                         name     => "requestee_type-$type.id"
                         id       => "requestee_type-$type.id"
                         multiple => type.is_multiplicable * 3
                         emptyok  => !type.is_multiplicable
                         value    => ""
                         custom_userlist => type.grant_list
              %]
            [% ELSE %]
              (<input type="text" class="requestee" maxlength="255"
                      id="requestee_type-[% type.id %]"
                      name="requestee_type-[% type.id %]">)
            [% END %]
          </span>
        [% END %]
      </td>
    [% END %]
  </tr>
[% END %]