[%# 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: Bugzilla::Product object; The product
  #
  # classification: Bugzilla::Classifiation object; classification product is in.
  #%]

[% IF Param('useclassification') %]
  <tr>
    <th>Classification:</th>
    <td><b>[% classification.name FILTER html %]</b></td>
  </tr>
[% END %]
    
<tr>
  <th>Product:</th>
  <td><input size="64" maxlength="64" name="product" 
             value="[% product.name FILTER html %]" required>
  </td>
</tr>
<tr>
  <th>Description:</th>
  <td><textarea rows="4" cols="64" wrap="virtual" name="description" required>
        [% product.description FILTER html %]</textarea>
  </td>
</tr>

<tr>
  <th>Open for [% terms.bug %] entry:</th>
  <td><input type="checkbox" name="is_active" value="1"
       [% ' checked="checked"' IF product.is_active %]>
  </td>
</tr>
<tr>
  <th>
    <label for="allows_unconfirmed">Enable the
      [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status
      in this product:</label>
  </th>
  <td><input type="checkbox" id="allows_unconfirmed" name="allows_unconfirmed"
             [% ' checked="checked"' IF product.allows_unconfirmed %]>
  </td>
</tr>

[% IF Param('usetargetmilestone') -%]
  <tr>
    <th>Default milestone:</th>
    <td>
      [% IF product.milestones.size %]
        <select name="defaultmilestone">
          [% FOREACH m = product.milestones %]
            <option value="[% m.name FILTER html %]"
                    [% " selected=\"selected\"" IF m.name == product.defaultmilestone %]>
              [%- m.name FILTER html -%]</option>
          [% END %]
        </select>
      [% ELSE %]
        <input type="text" size="64" maxlength="64" name="defaultmilestone"
               value="[% product.defaultmilestone FILTER html %]">
      [% END %]
    </td>
  </tr>
[% END %]
    
[% Hook.process('rows') %]
