[%# 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.
  #%]

[%# INTERFACE:
  # product: object; the new product.
  # versions: array; versions for the new product.
  # components: array; components for the new product.
  # milestones: array; milestones for the new product.
  # defaults: hash; keys are names of fields, values are defaults for
  #   those fields
  #
  # verify_bug_groups: If groups need to be confirmed in addition to fields.
  #%]

[% PROCESS global/header.html.tmpl
  title = 'Verify New Product Details...'
  style_urls = ['skins/standard/buglist.css']
%]

<form action="process_bug.cgi" method="post">

[% SET exclude_items = ['version', 'component', 'target_milestone'] %]
[% IF verify_bug_groups %]
  [% exclude_items.push('groups', 'defined_groups') %]
[% END %]
[% Hook.process('exclude') %]

[% PROCESS "global/hidden-fields.html.tmpl"
     exclude = '^' _ exclude_items.join('|') _ '$' %]

<input type="hidden" name="confirm_product_change" value="1">
    
[%# Verify the version, component, and target milestone fields. %]
<h3>Verify Version, Component
  [%- ", Target Milestone" 
      IF Param("usetargetmilestone")
         && bug.check_can_change_field('target_milestone', 0, 1) %]</h3>

<p>
[% IF Param("usetargetmilestone") 
   && bug.check_can_change_field('target_milestone', 0, 1) 
%]
  You are moving the [% terms.bug %](s) to the product 
  <b>[% product.name FILTER html %]</b>,
  and the version, component, and/or target milestone fields are no longer
  correct.  Please set the correct version, component, and target milestone now:
[% ELSE %]
  You are moving the [% terms.bug %](s) to the product 
  <b>[% product.name FILTER html %]</b>,
  and the version and component fields are no longer correct.
  Please set the correct version and component now:
[% END %]
</p>

<table>
  <tr>
    <td>
      <b>Version:</b><br>
      [% IF versions.size == 1 %]
        [% SET default_version = versions.0 %]
      [% ELSE %]
        [% SET default_version = defaults.version %]
      [% END %]
      [% PROCESS "global/select-menu.html.tmpl" 
                 name="version"
                 options=versions
                 default=default_version
                 size=10 %]
    </td>
    <td>
      <b>Component:</b><br>
      [% IF components.size == 1 %]
        [% SET default_component = components.0 %]
      [% ELSE %]
        [% SET default_component = defaults.component %]
      [% END %]
      [% PROCESS "global/select-menu.html.tmpl"
                 name="component"
                 options=components
                 default=default_component
                 size=10 %]
    </td>
    [% IF Param("usetargetmilestone") 
          && bug.check_can_change_field('target_milestone', 0, 1) 
    %]
      <td>
        <b>Target Milestone:</b><br>
      [% PROCESS "global/select-menu.html.tmpl"
                 name="target_milestone"
                 options=milestones
                 default=defaults.milestone
                 size=10 %]
      </td>
    [% END %]
    [% Hook.process('field') %]
  </tr>
</table>

[% IF verify_bug_groups %]
  [% mandatory_groups = [] %]
  [% optional_groups = [] %]

  [% FOREACH gid = product.group_controls.keys %]
    [% group = product.group_controls.$gid %]
    [% NEXT UNLESS group.group.is_active %]

    [% IF group.membercontrol == constants.CONTROLMAPMANDATORY
          || (group.othercontrol ==  constants.CONTROLMAPMANDATORY && !user.in_group(group.group.name)) %]
      [% mandatory_groups.push(group) %]
    [% ELSIF (group.membercontrol != constants.CONTROLMAPNA && user.in_group(group.group.name))
              || group.othercontrol != constants.CONTROLMAPNA %]
      [% optional_groups.push(group) %]
    [% END %]
  [% END %]
  
  [% IF old_groups.size || optional_groups.size || mandatory_groups.size %]
    <h3>Verify [% terms.Bug %] Group</h3>
  [% END %]
  
  [% IF old_groups.size %]
    <p>These groups are not legal for the '[% product.name FILTER html %]'
    product or you are not allowed to restrict [% terms.bugs %] to these groups.
    [%+ terms.Bugs %] will no longer be restricted to these groups and may become
    public if no other group applies:<br>
    [% FOREACH group = old_groups %]
      <input type="checkbox" id="group_[% group.id FILTER html %]"
             name="groups" disabled="disabled" value="[% group.name FILTER html %]">
      <label for="group_[% group.id FILTER html %]">
        [% group.name FILTER html %]: [% group.description FILTER html %]
      </label>
      <br>
    [% END %]
    </p>
  [% END %]


  [% IF optional_groups.size %]
    <p>These groups are optional. You can decide to restrict [% terms.bugs %] to
    one or more of the following groups:<br>
    [% IF multiple_bugs %]
      <script type="text/javascript">
        function turn_off(myself, id) {
            var other_checkbox = document.getElementById(id);
            if (myself.checked && other_checkbox) {
                other_checkbox.checked = false;
            }
        }
      </script>

      <table id="groups_edit_multiple">
        <tr>
          <th class="narrow_column">Remove [% terms.bugs %] from this group</th>
          <th class="narrow_column">Add [% terms.bugs %] to this group</th>
          <th>Group Name</th>
        </tr>

        [% FOREACH group = optional_groups %]
        <tr>
          <td class="center">
            <input type="checkbox" name="defined_groups"
                   id="defined_group_[% group.group.id FILTER html %]"
                   value="[% group.group.name FILTER html %]"
                   [% IF cgi.param("defined_groups").contains(group.group.name) %] checked="checked"[% END %]
                   onchange="turn_off(this, 'group_[% group.group.id FILTER html %]')">
          </td>
          <td class="center">
            <input type="checkbox" name="groups"
                   id="group_[% group.group.id FILTER html %]"
                   value="[% group.group.name FILTER html %]"
                   [% IF cgi.param("groups").contains(group.group.name) %] checked="checked"[% END %]
                   onchange="turn_off(this, 'defined_group_[% group.group.id FILTER html %]')">
          </td>
          <td>
            [% group.group.description FILTER html %]
          </td>
        </tr>
        [% END %]
      </table>
    [% ELSE %]
      [% FOREACH group = optional_groups %]
        <input type="hidden" name="defined_groups"
               value="[% group.group.name FILTER html %]">
        <input type="checkbox" id="group_[% group.group.id FILTER html %]"
               name="groups"
               [% ' checked="checked"' IF ((group.membercontrol == constants.CONTROLMAPDEFAULT && user.in_group(group.group.name))
                   || (group.othercontrol == constants.CONTROLMAPDEFAULT && !user.in_group(group.group.name))
                   || cgi.param("groups").contains(group.group.name)) %]
               value="[% group.group.name FILTER html %]">
        <label for="group_[% group.group.id FILTER html %]">
          [% group.group.name FILTER html %]: [% group.group.description FILTER html %]
        </label>
        <br>
      [% END %]
    [% END %]
    </p>
  [% END %]

  [% IF mandatory_groups.size %]
    <p>These groups are mandatory and [% terms.bugs %] will be automatically
    restricted to these groups:<br>
    [% FOREACH group = mandatory_groups %]
      <input type="checkbox" id="group_[% group.group.id FILTER html %]"
              checked="checked" disabled="disabled"
             name="groups" value="[% group.group.name FILTER html %]">
      <label for="group_[% group.group.id FILTER html %]">
        [% group.group.name FILTER html %]: [% group.group.description FILTER html %]
      </label>
      <br>
    [% END %]
    </p>
  [% END %]
[% END %]

<input type="submit" id="change_product" value="Commit">

</form>
<hr>

[%# If 'id' is defined, then we are editing a single bug.
  # Else we are editing several bugs at once. %]

[% IF cgi.param('id') AND cgi.param('id').match('^\d+$') %]
  [% id = cgi.param('id') %]
  Cancel and Return to [% "$terms.bug $id" FILTER bug_link(id) FILTER none %]
[% ELSE %]
  Cancel and Return to <a href="buglist.cgi?regetlastlist=1">the last search results</a>
[% END %]

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