[%# 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; Bugzilla::Product object representing the product to
  #               which the milestones belongs.
  # showbugcounts: if defined, then bug counts should be included in the table
  #%]

[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]

[% title = BLOCK %]Select milestone of product
                   '[% product.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
  title = title
  style_urls = ['skins/standard/admin.css']
%]

[% edit_contentlink = BLOCK %]editmilestones.cgi?action=edit&amp;product=
  [%- product.name FILTER uri %]&amp;milestone=%%name%%[% END %]
[% delete_contentlink = BLOCK %]editmilestones.cgi?action=del&amp;product=
  [%- product.name FILTER uri %]&amp;milestone=%%name%%[% END %]
[% bug_count_contentlink = BLOCK %]buglist.cgi?target_milestone=%%name%%&amp;product=
  [%- product.name FILTER uri %][% END %]


[% columns = [
     { 
       name => "name"
       heading => "Edit milestone..."
       contentlink => edit_contentlink
     },
     { 
       name => "sortkey"
       heading => "Sortkey"
     },
     {
       name => "isactive"
       heading => "Active"
       yesno_field => 1
     }
   ]
%]

[% IF showbugcounts %]

  [% columns.push({
       name => "bug_count"
       heading => "$terms.Bugs"
       class => "right"
       contentlink => bug_count_contentlink
     })
  %]

[% END %]

[% columns.push({
       name => "action"
       heading => "Action"
       content => "Delete"
       contentlink => delete_contentlink
     })
%]

[%# We want to override the usual 'Delete' link for the default milestone %]
[% overrides.action.name.${product.default_milestone} = {
     override_content => 1
     content => "(Default milestone)"
     override_contentlink => 1
     contentlink => undef
   } 
%] 

[% Hook.process('before_table') %]

[% PROCESS admin/table.html.tmpl
     columns = columns
     data = product.milestones
     overrides = overrides
%]

[% IF ! showbugcounts %]

  <p><a href="editmilestones.cgi?product=[% product.name FILTER uri %]&amp;showbugcounts=1">
      Redisplay table with [% terms.bug %] counts (slower)</a></p>

[% END %]

[% PROCESS admin/milestones/footer.html.tmpl
  no_edit_other_milestones_link = 1
%]

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