[%# This Source Code Form is subject to the terms of the Mozilla Public
  # License, v. 2.0. If a copy of the MPL was not distributed with this
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
  #
  # This Source Code Form is "Incompatible With Secondary Licenses", as
  # defined by the Mozilla Public License, v. 2.0.
  #%]

[% IF user.id && (!bug || bug.check_can_change_field('flagtypes.name', 0, 1)) %]

[%# 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 src="[% 'js/flag.js' FILTER mtime %]" type="text/javascript"></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 %]
      [% IF edit_multiple_bugs %]
        <th>&nbsp;</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 %]
      [% PROCESS flag_row flag = flag type = type %]
    [% END -%]

    [% SET flag = "" %]
    [% NEXT IF read_only_flags %]

    [%-# Step 1b: Display UI for setting flag. %]
    [% IF (!type.flags || type.flags.size == 0) && type.is_active %]
      [% PROCESS flag_row type = type %]
    [% END %]
  [% END %]

  [% IF !read_only_flags %]
    [%# 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 %]
        <tbody class="bz_flag_type">
          [% sep_length = 3 + (any_flags_requesteeble ? 1 : 0) + (edit_multiple_bugs ? 1 : 0) %]
          <tr>
            <td colspan="[% sep_length FILTER html %]"><hr></td>
          </tr>
        </tbody>
        [% separator_displayed = 1 %]
      [% END %]
      [% PROCESS flag_row type = type addl_text = "addl." %]
    [% END %]
  [% 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 %]
      [% IF flag.setter.name %]
        <span title="[% flag.setter.name FILTER html %]">[% flag.setter.nick FILTER html %]</span>:
      [% ELSE %]
        [% flag.setter.nick FILTER html %]:
      [% END %]
      <span class="nowrap">[%+ type.name FILTER html %][% flag.status %]</span>
      [% IF flag.requestee %]
        [% IF flag.requestee.name %]
          (<span title="[% flag.requestee.name FILTER html %]">[% flag.requestee.nick FILTER html %]</span>)
        [% ELSE %]
          ([% flag.requestee.nick FILTER html %])
        [% END %]
      [% END %]<br>
    [% END %]
  [% END %]
[% END %]

[%# Display a table row for flags %]

[% BLOCK flag_row %]
  [% RETURN IF !flag && !((type.is_requestable && user.can_request_flag(type)) || user.can_set_flag(type)) %]
  [% SET fid = flag ? "flag-$flag.id" : "flag_type-$type.id" %]
  [% can_edit_flag = (!read_only_flags || (flag && (flag.setter_id == user.id || (flag.requestee_id && flag.requestee_id == user.id)))) ? 1 : 0 %]
  <tbody[% ' class="bz_flag_type"' IF !flag %]>
    <tr>
      <td>
        [% IF flag %]
          <span title="[% flag.setter.identity FILTER html %]">[% flag.setter.nick FILTER html %]</span>:
        [% ELSE %]
          [% addl_text FILTER html %]
        [% END %]
      </td>
      <td class="nowrap">
        <label title="[% type.description FILTER html %]" for="[% fid FILTER html %]">
          [%- type.name FILTER html %]</label>
      </td>
      <td>
        <input type="hidden" id="[% fid FILTER html %]_dirty">
        <select id="[% fid FILTER html %]" name="[% fid FILTER html %]"
                title="[% type.description FILTER html %]"
                onchange="toggleRequesteeField(this);"
                class="flag_select flag_type-[% type.id %]"
                [% IF !can_edit_flag %] disabled="disabled"[% END %]>
        [%# Only display statuses the user is allowed to set. %]
        [% IF edit_multiple_bugs && dontchange %]
          <option value="[% dontchange FILTER html %]">[% dontchange FILTER html %]</option>
        [% END %]
        [% IF !flag || (can_edit_flag && user.can_request_flag(type)) || flag.setter_id == user.id %]
          <option value="X" label="X"></option>
        [% END %]
        [% IF type.is_active && can_edit_flag %]
          [% IF (type.is_requestable && user.can_request_flag(type)) || (flag && flag.status == "?") %]
            <option value="?" [% "selected" IF flag && flag.status == "?" %]>?</option>
          [% END %]
          [% IF user.can_set_flag(type) || (flag && flag.status == "+") %]
            <option value="+" [% "selected" IF flag && flag.status == "+" %]>+</option>
          [% END %]
          [% IF user.can_set_flag(type) || (flag && flag.status == "-") %]
            <option value="-" [% "selected" IF flag && flag.status == "-" %]>-</option>
          [% END %]
        [% ELSE %]
          <option value="[% flag.status %]" selected="selected">[% flag.status %]</option>
        [% END %]
        </select>
      </td>
      [% IF any_flags_requesteeble %]
        <td class="bz_flags">
          [% IF (type.is_active && type.is_requestable && type.is_requesteeble) || (flag && flag.requestee) %]
              [% SET grant_list = [] %]
              [% IF Param('usemenuforusers') %]
                [% IF !can_edit_flag || (flag && !(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. %]
                  [% grant_list = [flag.requestee] %]
                [% ELSE %]
                  [% grant_list = type.grant_list %]
                [% END %]
              [% END %]
              [% SET flag_name = flag ? "requestee-$flag.id" : "requestee_type-$type.id" %]
              [% SET flag_requestee = (flag && flag.requestee) ? flag.requestee.login : '' %]
              [% SET flag_multiple = flag ? 0 : type.is_multiplicable * 3 %]
              [% SET flag_empty_ok = flag ? 1 : !type.is_multiplicable %]
              [% INCLUDE global/userselect.html.tmpl
                         name     => flag_name
                         id       => flag_name
                         value    => flag_requestee
                         multiple => flag_multiple
                         emptyok  => flag_empty_ok
                         classes  => ["requestee"]
                         custom_userlist => grant_list
                         disabled => !can_edit_flag
              %]
          [% END %]
        </td>
      [% END %]
      [% IF edit_multiple_bugs %]
        <td>
        [% IF type.is_multiplicable %]
          <input type="checkbox" name="flags_add-[% type.id %]"
                 id="flags_add-[% type.id %]" value="1">
          <label for="flags_add-[% type.id %]"
                 title="If ticked, always create a new flag. Leaving it unchecked will
                        update existing flag(s) and add a new flag if it does not exist">
            Always add
          </label>
        [% END %]
        </td>
      [% END %]
    </tr>
  </tbody>
[% END %]
