summaryrefslogtreecommitdiffstats
path: root/template/en/default/admin/products
diff options
context:
space:
mode:
Diffstat (limited to 'template/en/default/admin/products')
-rw-r--r--template/en/default/admin/products/confirm-delete.html.tmpl266
-rw-r--r--template/en/default/admin/products/create.html.tmpl69
-rw-r--r--template/en/default/admin/products/edit-common.html.tmpl112
-rw-r--r--template/en/default/admin/products/edit.html.tmpl149
-rw-r--r--template/en/default/admin/products/footer.html.tmpl86
-rw-r--r--template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl58
-rw-r--r--template/en/default/admin/products/groupcontrol/edit.html.tmpl325
-rw-r--r--template/en/default/admin/products/groupcontrol/updated.html.tmpl50
-rw-r--r--template/en/default/admin/products/list-classifications.html.tmpl72
-rw-r--r--template/en/default/admin/products/list.html.tmpl121
-rw-r--r--template/en/default/admin/products/updated.html.tmpl185
11 files changed, 1493 insertions, 0 deletions
diff --git a/template/en/default/admin/products/confirm-delete.html.tmpl b/template/en/default/admin/products/confirm-delete.html.tmpl
new file mode 100644
index 0000000..f4a04b8
--- /dev/null
+++ b/template/en/default/admin/products/confirm-delete.html.tmpl
@@ -0,0 +1,266 @@
+[%# 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.
+ #
+ # Contributor(s): Gavin Shelley <bugzilla@chimpychompy.org>
+ #%]
+
+[%# INTERFACE:
+ # product: Bugzilla::Product object; The product
+ #
+ # (classification fields available if Param('useclassification') is enabled:)
+ #
+ # classification: Bugzilla::Classification object; The classification
+ # the product is in
+ #
+ #%]
+
+[% title = BLOCK %]Delete Product '[% product.name FILTER html %]'
+[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = title
+ style_urls = ['skins/standard/admin.css']
+%]
+
+<table border="1" cellpadding="4" cellspacing="0">
+ <tr bgcolor="#6666FF">
+ <th valign="top" align="left">Field</th>
+ <th valign="top" align="left">Value</th>
+ </tr>
+
+ [% IF Param('useclassification') %]
+ <tr>
+ <td>Classification:</td>
+ <td>[% classification.name FILTER html %]</td>
+ </tr>
+ <tr>
+ <td>Classification Description:</td>
+ [%# descriptions are intentionally not filtered to allow html content %]
+ <td>
+ [% IF classification.description %]
+ [% classification.description FILTER html_light %]
+ [% ELSE %]
+ <span style="color: red">missing</span>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td valign="top">Product:</td>
+ <td valign="top">
+ <a href="editproducts.cgi?product=[% product.name FILTER url_quote %]">
+ [% product.name FILTER html %]
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">Description:</td>
+ [%# descriptions are intentionally not filtered to allow html content %]
+ <td valign="top">
+ [% IF product.description %]
+ [% product.description FILTER html_light %]
+ [% ELSE %]
+ <span style="color: red">missing</span>
+ [% END %]
+ </td>
+ </tr>
+
+ [% IF Param('usetargetmilestone') %]
+ <tr>
+ <td>Milestone URL:</td>
+ <td>
+ [% IF product.milestone_url %]
+ <a href="[% product.milestone_url FILTER html %]">
+ [%- product.milestone_url FILTER html %]
+ </a>
+ [% ELSE %]
+ none
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td>Closed for [% terms.bugs %]:</td>
+ <td>
+ [% IF product.is_active %]
+ open
+ [% ELSE %]
+ closed
+ [% END %]
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ [% IF product.components.size > 0 %]
+ <a href="editcomponents.cgi?product=[% product.name FILTER url_quote %]"
+ title="Edit components for product '[% product.name FILTER html %]'">
+ Components:
+ </a>
+ [% ELSE %]
+ Components:
+ [% END %]
+ </td>
+ <td>
+ [% IF product.components.size > 0 %]
+ <table>
+ [% FOREACH c = product.components %]
+ <tr>
+ <th align="right">[% c.name FILTER html %]:</th>
+ [%# descriptions are intentionally not filtered to allow html content %]
+ <td>
+ [% IF c.description %]
+ [% c.description FILTER html_light %]
+ [% ELSE %]
+ <span style="color: red">missing</span>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ </table>
+ [% ELSE %]
+ none
+ [% END %]
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ [% IF product.versions.size > 0 %]
+ <a href="editversions.cgi?product=[%- product.name FILTER url_quote %]">
+ Versions:
+ </a>
+ [% ELSE %]
+ Versions:
+ [% END %]
+ </td>
+ <td>
+ [% IF product.versions.size > 0 %]
+ [% FOREACH v = product.versions %]
+ [% v.name FILTER html %]<br>
+ [% END %]
+ [% ELSE %]
+ none
+ [% END %]
+ </td>
+ </tr>
+
+
+ [% IF Param('usetargetmilestone') %]
+ <tr>
+ <td valign="top">
+ [% IF product.milestones.size > 0 %]
+ <a href="editmilestones.cgi?product=[%- product.name FILTER url_quote %]">
+ Milestones:
+ </a>
+ [% ELSE %]
+ Milestones:
+ [% END %]
+ </td>
+ <td>
+ [% IF product.milestones.size > 0 %]
+ [% FOREACH m = product.milestones %]
+ [% m.name FILTER html %]<br>
+ [% END %]
+ [% ELSE %]
+ none
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td>[% terms.Bugs %]:</td>
+ <td>
+ [% IF product.bug_count %]
+ <a href="buglist.cgi?product=[% product.name FILTER url_quote %]"
+ title="List of [% terms.bugs %] for product '[% product.name FILTER html %]'">
+ [% product.bug_count FILTER html %]
+ </a>
+ [% ELSE %]
+ none
+ [% END %]
+ </td>
+ </tr>
+</table>
+
+<h2>Confirmation</h2>
+
+[% IF product.bug_count %]
+
+ [% IF !Param("allowbugdeletion") %]
+
+ <p>Sorry, there
+
+ [% IF product.bug_count > 1 %]
+ are [% product.bug_count FILTER html %] [%+ terms.bugs %]
+ [% ELSE %]
+ is 1 [% terms.bug %]
+ [% END %]
+
+ outstanding for this product. You must reassign
+
+ [% IF product.bug_count > 1 %]
+ those [% terms.bugs %]
+ [% ELSE %]
+ that [% terms.bug %]
+ [% END %]
+
+ to another product before you can delete this one.</p>
+
+ [% ELSE %]
+
+ <table border="0" cellpadding="20" width="70%" bgcolor="red">
+ <tr>
+ <td>
+ There
+ [% IF product.bug_count > 1 %]
+ are [% product.bug_count FILTER html %] [%+ terms.bugs %]
+ [% ELSE %]
+ is 1 [% terms.bug %]
+ [% END %]
+ entered for this product! When you delete this
+ product, <b><blink>ALL</blink></b> stored [% terms.bugs %] and
+ their history will be deleted, too.
+ </td>
+ </tr>
+ </table>
+
+ [% END %]
+
+[% END %]
+
+[% Hook.process("confirmation") %]
+
+[% IF product.bug_count == 0 || Param('allowbugdeletion') %]
+
+ <p>Do you really want to delete this product?</p>
+
+ <form method="post" action="editproducts.cgi">
+ <input type="checkbox" id="delete_series" name="delete_series" value=1>
+ <label for="delete_series">
+ Delete all related series (you can also delete them later, by visiting
+ the <a href="chart.cgi?category=[% product.name FILTER html %]">New Charts page</a>.)
+ </label><p>
+ <input type="submit" id="delete" value="Yes, delete">
+ <input type="hidden" name="action" value="delete">
+ <input type="hidden" name="product" value="[% product.name FILTER html %]">
+ <input type="hidden" name="token" value="[% token FILTER html %]">
+ </form>
+
+[% END %]
+
+[% PROCESS admin/products/footer.html.tmpl %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/products/create.html.tmpl b/template/en/default/admin/products/create.html.tmpl
new file mode 100644
index 0000000..f4a2161
--- /dev/null
+++ b/template/en/default/admin/products/create.html.tmpl
@@ -0,0 +1,69 @@
+[%# 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.
+ #
+ # Contributor(s): Gabriel S. Oliveira <gabriel@async.com.br>
+ #%]
+
+[%# INTERFACE:
+ # classification: Bugzilla::Classification object; If classifications
+ # are enabled, then this is
+ # the currently selected classification
+ #
+ #%]
+
+[% title = BLOCK %]Add Product[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = title
+ style_urls = ['skins/standard/admin.css']
+ javascript_urls = ['js/util.js']
+%]
+
+[% DEFAULT
+ product.votesperuser = "0",
+ product.maxvotesperbug = "10000",
+ product.votes_to_confirm = "0",
+ product.is_active = 1,
+ version = "unspecified",
+ product.defaultmilestone = constants.DEFAULT_MILESTONE
+ product.allows_unconfirmed = 0
+%]
+
+<form method="post" action="editproducts.cgi">
+ <table border="0" cellpadding="4" cellspacing="0">
+
+ [% PROCESS "admin/products/edit-common.html.tmpl" %]
+
+ <tr>
+ <th align="right">Version:</th>
+ <td><input size="64" maxlength="255" name="version"
+ value="[% version FILTER html %]">
+ </td>
+ </tr>
+ <tr>
+ <th align="right">Create chart datasets for this product:</th>
+ <td><input type="checkbox" name="createseries" value="1"></td>
+ </tr>
+ </table>
+
+ <input type="submit" value="Add">
+ <input type="hidden" name="action" value="new">
+ <input type="hidden" name="token" value="[% token FILTER html %]">
+ <input type="hidden" name="classification"
+ value="[% classification.name FILTER html %]">
+</form>
+
+[% PROCESS "admin/products/footer.html.tmpl"
+ no_add_product_link = 1
+ no_edit_product_link = 1 %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/products/edit-common.html.tmpl b/template/en/default/admin/products/edit-common.html.tmpl
new file mode 100644
index 0000000..2c94402
--- /dev/null
+++ b/template/en/default/admin/products/edit-common.html.tmpl
@@ -0,0 +1,112 @@
+[%# 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.
+ #
+ # Contributor(s): Jack Nerad <jnerad@bellsouth.net>
+ # Tiago R. Mello <tiago@async.com.br>
+ # Gabriel S. Oliveira <gabriel@async.com.br>
+ #%]
+
+[%# INTERFACE:
+ # product: Bugzilla::Product object; The product
+ #
+ # classification: Bugzilla::Classifiation object; classification product is in.
+ #%]
+
+[% PROCESS "global/field-descs.none.tmpl" %]
+
+[% IF Param('useclassification') %]
+ <tr>
+ <th align="right"><b>Classification:</b></th>
+ <td><b>[% classification.name FILTER html %]</b></td>
+ </tr>
+[% END %]
+
+<tr>
+ <th align="right">Product:</th>
+ <td><input size="64" maxlength="64" name="product"
+ value="[% product.name FILTER html %]">
+ </td>
+</tr>
+<tr>
+ <th align="right">Description:</th>
+ <td><textarea rows="4" cols="64" wrap="virtual" name="description">
+ [% product.description FILTER html %]</textarea>
+ </td>
+</tr>
+
+[% IF Param('usetargetmilestone') -%]
+ <tr>
+ <th align="right">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="20" maxlength="20" name="defaultmilestone"
+ value="[% product.defaultmilestone FILTER html %]">
+ [% END %]
+ </td>
+ </tr>
+[% END %]
+
+<tr>
+ <th align="right">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 align="right">
+ <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 %]
+ [% IF Param('usevotes') %]
+ onchange="bz_toggleClass('votes_to_confirm_container',
+ 'bz_default_hidden')"
+ [% END %]>
+ [% IF Param('usevotes') %]
+ <span id="votes_to_confirm_container"
+ [% ' class="bz_default_hidden"' IF !product.allows_unconfirmed %]>
+ ...and automatically confirm [% terms.bugs %] if they get
+ <input size="3" maxlength="5" name="votestoconfirm" id="votestoconfirm"
+ value="[% product.votes_to_confirm FILTER html %]">
+ votes. (Setting this to 0 disables auto-confirming [% terms.bugs %]
+ by vote.)
+ </span>
+ [% END %]
+ </td>
+</tr>
+
+[% IF Param('usevotes') %]
+ <tr>
+ <th align="right">Maximum votes per person:</th>
+ <td><input size="5" maxlength="5" name="votesperuser" id="votesperuser"
+ value="[% product.votesperuser FILTER html %]">
+ </td>
+ </tr>
+ <tr>
+ <th align="right">
+ Maximum votes a person can put on a single [% terms.bug %]:
+ </th>
+ <td><input size="5" maxlength="5" name="maxvotesperbug" id="maxvotesperbug"
+ value="[% product.maxvotesperbug FILTER html %]">
+ </td>
+ </tr>
+[% END %]
diff --git a/template/en/default/admin/products/edit.html.tmpl b/template/en/default/admin/products/edit.html.tmpl
new file mode 100644
index 0000000..976739f
--- /dev/null
+++ b/template/en/default/admin/products/edit.html.tmpl
@@ -0,0 +1,149 @@
+[%# 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.
+ #
+ # Contributor(s): Jack Nerad <jnerad@bellsouth.net>
+ # Tiago R. Mello <tiago@async.com.br>
+ # Gabriel S. Oliveira <gabriel@async.com.br>
+ #%]
+
+[%# INTERFACE:
+ # product: Bugzilla::Product object; The product
+ #
+ # (classification fields available if Param('useclassification') is enabled:)
+ #
+ # classification: Bugzilla::Classification object; The classification
+ # the product is in
+ #%]
+
+[% title = BLOCK %]Edit Product '[% product.name FILTER html %]'[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = title
+ style_urls = ['skins/standard/admin.css']
+ javascript_urls = ['js/util.js']
+%]
+
+[% group_control = {${constants.CONTROLMAPNA} => 'NA',
+ ${constants.CONTROLMAPSHOWN} => 'Shown',
+ ${constants.CONTROLMAPDEFAULT} => 'Default',
+ ${constants.CONTROLMAPMANDATORY} => 'Mandatory'}
+ %]
+
+<form method="post" action="editproducts.cgi">
+ <table border="0" cellpadding="4" cellspacing="0">
+
+ [% PROCESS "admin/products/edit-common.html.tmpl" %]
+
+ <tr>
+ <th align="right" valign="top">
+ <a href="editcomponents.cgi?product=[% product.name FILTER url_quote %]">
+ Edit components:
+ </a>
+ </th>
+ <td>
+ [% IF product.components.size -%]
+ [% FOREACH component = product.components %]
+ <b>[% component.name FILTER html %]:</b>&nbsp;
+ [% IF component.description %]
+ [% component.description FILTER html_light %]
+ [% ELSE %]
+ <font color="red">description missing</font>
+ [% END %]
+ <br>
+ [% END %]
+ [% ELSE %]
+ <font color="red">missing</font>
+ [% END %]
+ </td>
+ </tr>
+ <tr>
+ <th align="right" valign="top">
+ <a href="editversions.cgi?product=[% product.name FILTER url_quote %]">Edit
+versions:</a>
+ </th>
+ <td>
+ [%- IF product.versions.size -%]
+ [% FOREACH v = product.versions %]
+ [% v.name FILTER html %]
+ <br>
+ [% END %]
+ [% ELSE %]
+ <font color="red">missing</font>
+ [% END %]
+ </td>
+ </tr>
+ [% IF Param('usetargetmilestone') %]
+ <tr>
+ <th align="right" valign="top">
+ <a href="editmilestones.cgi?product=[% product.name FILTER url_quote %]">
+ Edit milestones:</a>
+ </th>
+ <td>
+ [%- IF product.milestones.size -%]
+ [%- FOREACH m = product.milestones -%]
+ [% m.name FILTER html %]
+ <br>
+ [% END %]
+ [% ELSE %]
+ <font color="red">missing</font>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ <tr>
+ <th align="right" valign="top">
+ <a href="editproducts.cgi?action=editgroupcontrols&product=
+ [%- product.name FILTER url_quote %]">
+ Edit Group Access Controls:
+ </a>
+ </th>
+ <td>
+ [% IF product.group_controls.size %]
+ [% FOREACH g = product.group_controls.values.sort("name") %]
+ <b>[% g.group.name FILTER html %]:</b>&nbsp;
+ [% IF g.group.isactive %]
+ [% group_control.${g.membercontrol} FILTER html %]/
+ [% group_control.${g.othercontrol} FILTER html %]
+ [% IF g.entry %], ENTRY[% END %]
+ [% IF g.canedit %], CANEDIT[% END %]
+ [% IF g.editcomponents %], editcomponents[% END %]
+ [% IF g.canconfirm %], canconfirm[% END %]
+ [% IF g.editbugs %], editbugs[% END %]
+ [% ELSE %]
+ DISABLED
+ [% END %]
+ <br>
+ [% END %]
+ [% ELSE %]
+ no groups
+ [% END %]
+ </td>
+ </tr>
+ <tr>
+ <th align="right">[% terms.Bugs %]:</th>
+ <td><a href="buglist.cgi?product=[% product.name FILTER url_quote %]">
+ [% product.bug_count FILTER html %]</a></td>
+ </tr>
+ </table>
+
+ <input type="hidden" name="product_old_name"
+ value="[% product.name FILTER html %]">
+ <input type="hidden" name="action" value="update">
+ <input type="hidden" name="token" value="[% token FILTER html %]">
+ <input type="submit" name="submit" value="Save Changes">
+</form>
+
+[% PROCESS "admin/products/footer.html.tmpl"
+ no_add_product_link = 1
+ no_edit_product_link = 1 %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/products/footer.html.tmpl b/template/en/default/admin/products/footer.html.tmpl
new file mode 100644
index 0000000..661829b
--- /dev/null
+++ b/template/en/default/admin/products/footer.html.tmpl
@@ -0,0 +1,86 @@
+[%# 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.
+ #
+ # Contributor(s): Gavin Shelley <bugzilla@chimpychompy.org>
+ #%]
+
+[%# INTERFACE:
+ # product: Bugzilla::Product Object; the product
+ #
+ # classification: Bugzilla::Classification object ; If classifications
+ # are enabled, then this is the currently
+ # selected classification
+ #
+ # no_XXX_link: boolean; if defined, then don't show the corresponding
+ # link. Supported parameters are:
+ #
+ # no_edit_product_link
+ # no_edit_other_products_link
+ # no_add_product_link
+ #%]
+
+[% IF Param('useclassification') && classification %]
+ [% classification_url_part = BLOCK %]&amp;classification=
+ [%- classification.name FILTER url_quote %]
+ [% END %]
+ [% classification_url_part_start = BLOCK %]classification=
+ [%- classification.name FILTER url_quote %]
+ [% END %]
+ [% classification_text = BLOCK %]
+ of classification '[% classification.name FILTER html %]'
+ [% END %]
+[% END %]
+
+<hr>
+
+<p>
+[% UNLESS no_add_product_link || !user.in_group("editcomponents") %]
+ <a title="Add a product"
+ href="editproducts.cgi?action=add">Add</a> a product[% -%]
+[%# Strictly speaking, we should not have to check for a
+ classification if they are enabled, but I'm just being paranoid %]
+ [% IF Param('useclassification') && classification %]
+ (<a title="Add a product to classification '
+ [%- classification.name FILTER html %]'"
+ href="editproducts.cgi?action=add
+ [%- classification_url_part %]">to
+ classification '[% classification.name FILTER html %]'</a>)
+ [% END %].
+[% END %]
+
+[% IF product && !no_edit_product_link %]
+ Edit product <a
+ title="Edit Product '[% product.name FILTER html %]'
+ [%- classification_text %]"
+ href="editproducts.cgi?action=edit&amp;product=[% product.name FILTER url_quote %]">
+ '[% product.name FILTER html %]'</a>.
+[% END %]
+
+
+[%# Edit other products (in a classification if specified): %]
+[% UNLESS no_edit_other_products_link %]
+ Edit <a
+ href="editproducts.cgi?
+ [%- classification_url_part_start FILTER none %]">other products
+ [% classification_text %]</a>.
+
+[% END %]
+
+[% IF Param('useclassification') && classification
+ && user.in_group('editclassifications') %]
+ Edit classification <a href="editclassifications.cgi?action=edit
+ [%- classification_url_part %]">'
+ [%- classification.name FILTER html %]'</a>.
+
+[% END %]
+
+</p>
diff --git a/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl b/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl
new file mode 100644
index 0000000..1fc92c9
--- /dev/null
+++ b/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl
@@ -0,0 +1,58 @@
+[%# 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): Joel Peshkin <bugreport@peshkin.net>
+ #
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+[% title = BLOCK %]
+ Confirm Group Control Change for product '[%- product.name FILTER html %]'
+[% END %]
+
+[% PROCESS global/header.html.tmpl title = title %]
+[% FOREACH group = mandatory_groups %]
+<P>
+group '[% group.name FILTER html %]' impacts [% group.count %]
+[%+ terms.bugs %] for
+which the group is newly mandatory and will be added.
+[% END %]
+
+[% FOREACH group = na_groups %]
+<P>
+group '[% group.name FILTER html %]' impacts [% group.count %]&nbsp;
+[% terms.bugs %] for which the group is no longer applicable and will
+be removed.[% END %]
+<form action="editproducts.cgi" method="post" >
+
+ [% PROCESS "global/hidden-fields.html.tmpl" exclude="^Bugzilla_(login|password)$" %]
+
+ <br>
+ Click "Continue" to proceed with the change including the changes
+ indicated above. If you do not want these changes, use "back" to
+ return to the previous page.
+ <p>
+ <input type="hidden" name="confirmed" value="confirmed">
+ <input type="submit" id="update" value="Continue">
+ </p>
+
+</form>
+
+
+[% PROCESS global/footer.html.tmpl %]
+
+
diff --git a/template/en/default/admin/products/groupcontrol/edit.html.tmpl b/template/en/default/admin/products/groupcontrol/edit.html.tmpl
new file mode 100644
index 0000000..8c634eb
--- /dev/null
+++ b/template/en/default/admin/products/groupcontrol/edit.html.tmpl
@@ -0,0 +1,325 @@
+[%# 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): Joel Peshkin <bugreport@peshkin.net>
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[% title = BLOCK %]
+ Edit Group Controls for [% product.name FILTER html %]
+[% END %]
+[% PROCESS global/header.html.tmpl
+ title = title
+%]
+
+<form method="post" action="editproducts.cgi">
+ <input type="hidden" name="action" value="updategroupcontrols">
+ <input type="hidden" name="product" value="[% product.name FILTER html %]">
+ <input type="hidden" name="token" value="[% token FILTER html %]">
+
+ <table id="form" cellspacing="0" cellpadding="4" border="1">
+ <tr bgcolor="#6666ff">
+ <th>Group</th>
+ <th>Entry</th>
+ <th>MemberControl</th>
+ <th>OtherControl</th>
+ <th>Canedit</th>
+ <th>editcomponents</th>
+ <th>canconfirm</th>
+ <th>editbugs</th>
+ <th>[% terms.Bugs %]</th>
+ </tr>
+ [% FOREACH group = product.group_controls(1).values.sort("name") %]
+ [% IF !group.group.isactive AND group.bug_count %]
+ <tr bgcolor="#bbbbbb">
+ <td>
+ [% group.group.name FILTER html %]
+ </td>
+ <td align="center" colspan=7>
+ Disabled
+ </td>
+ <td>
+ [% group.bug_count FILTER html %]
+ </td>
+ <tr>
+ [% ELSIF group.group.is_active %]
+ <tr>
+ <td>
+ [% group.group.name FILTER html %]
+ </td>
+ <td>
+ <input type=checkbox value=1 name=entry_[% group.id %]
+ [% " checked=\"checked\"" IF group.entry %]>
+ </td>
+ <td>
+ <select name="membercontrol_[% group.id %]">
+ <option value=[% constants.CONTROLMAPNA %]
+ [% " selected=\"selected\""
+ IF group.membercontrol == constants.CONTROLMAPNA %]
+ >NA
+ </option>
+ <option value=[% constants.CONTROLMAPSHOWN %]
+ [% " selected=\"selected\""
+ IF group.membercontrol == constants.CONTROLMAPSHOWN %]
+ >Shown
+ </option>
+ <option value=[% constants.CONTROLMAPDEFAULT %]
+ [% " selected=\"selected\""
+ IF group.membercontrol == constants.CONTROLMAPDEFAULT %]
+ >Default
+ </option>
+ <option value=[% constants.CONTROLMAPMANDATORY %]
+ [% " selected=\"selected\""
+ IF group.membercontrol == constants.CONTROLMAPMANDATORY %]
+ >Mandatory
+ </option>
+ </select>
+ </td>
+ <td>
+ <select name="othercontrol_[% group.id %]">
+ <option value=[% constants.CONTROLMAPNA %]
+ [% " selected=\"selected\""
+ IF group.othercontrol == constants.CONTROLMAPNA %]
+ >NA
+ </option>
+ <option value=[% constants.CONTROLMAPSHOWN %]
+ [% " selected=\"selected\""
+ IF group.othercontrol == constants.CONTROLMAPSHOWN %]
+ >Shown
+ </option>
+ <option value=[% constants.CONTROLMAPDEFAULT %]
+ [% " selected=\"selected\""
+ IF group.othercontrol == constants.CONTROLMAPDEFAULT %]
+ >Default
+ </option>
+ <option value=[% constants.CONTROLMAPMANDATORY %]
+ [% " selected=\"selected\""
+ IF group.othercontrol == constants.CONTROLMAPMANDATORY %]
+ >Mandatory
+ </option>
+ </select>
+ </td>
+ <td>
+ <input type=checkbox value=1 name=canedit_[% group.id %]
+ [% " checked=\"checked\"" IF group.canedit %]>
+ </td>
+ <td>
+ <input type=checkbox value=1 name=editcomponents_[% group.id %]
+ [% " checked=\"checked\"" IF group.editcomponents %]>
+ </td>
+ <td>
+ <input type=checkbox value=1 name=canconfirm_[% group.id %]
+ [% " checked=\"checked\"" IF group.canconfirm %]>
+ </td>
+ <td>
+ <input type=checkbox value=1 name=editbugs_[% group.id %]
+ [% " checked=\"checked\"" IF group.editbugs %]>
+ </td>
+ <td>
+ [% group.bug_count || 0 FILTER html %]
+ </td>
+ </tr>
+ [% END %]
+ [% END %]
+
+ </table>
+ <br>
+ <input type=submit name="submit" value="submit">
+ <br>
+</form>
+
+
+<p>
+These settings control the relationship of the groups to this
+product.
+</p>
+<p>
+If any group has <b>Entry</b> selected, then this product will
+restrict [% terms.bug %] entry to only those users who are members of all the
+groups with entry selected.
+</p>
+<p>
+If any group has <b>Canedit</b> selected, then this product
+will be read-only for any users who are not members of all of
+the groups with Canedit selected. ONLY users who are members of
+all the canedit groups will be able to edit. This is an additional
+restriction that further restricts what can be edited by a user.
+</p>
+<p>
+The following settings control let you choose privileges on a <b>per-product basis</b>.
+This is a convenient way to give privileges to some users for some products
+only, without having to give them global privileges which would affect all
+products:
+</p>
+<p>
+Any group having <b>editcomponents</b> selected allows users who are
+in this group to edit all aspects of this product, including components,
+milestones and versions.
+</p>
+<p>
+Any group having <b>canconfirm</b> selected allows users who are
+in this group to confirm [% terms.bugs %] in this product.
+</p>
+<p>
+Any group having <b>editbugs</b> selected allows users who are
+in this group to edit all fields of [% terms.bugs %] in this product.
+</p>
+<p>
+The <b>MemberControl</b> and <b>OtherControl</b> fields
+indicate which [% terms.bugs %] will be placed in
+this group according to the following definitions.
+</p>
+
+<table border=1>
+ <tr>
+ <th>
+ MemberControl
+ </th>
+ <th>
+ OtherControl
+ </th>
+ <th>
+ Interpretation
+ </th>
+ </tr>
+ <tr>
+ <td>
+ NA
+ </td>
+ <td>
+ NA
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are never associated with this group.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Shown
+ </td>
+ <td>
+ NA
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are permitted to be restricted to this
+ group. Users who are members of this group will be able to place [% terms.bugs %] in
+ this group.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Shown
+ </td>
+ <td>
+ Shown
+ </td>
+ <td>
+ [% terms.Bugs %] in this product can be placed in this group by anyone
+ with permission to edit the [% terms.bug %] even if they are not a member
+ of this group.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Shown
+ </td>
+ <td>
+ Default
+ </td>
+ <td>
+ [% terms.Bugs %] in this product can be placed in this group by anyone
+ with permission to edit the [% terms.bug %] even if they are not a member
+ of this group. Non-members place [% terms.bugs %] in this group by default.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Shown
+ </td>
+ <td>
+ Mandatory
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are permitted to be restricted to this
+ group. Users who are members of this group will be able to place [% terms.bugs %]
+ in this group. Non-members will be forced to restrict [% terms.bugs %] to
+ this group when they initially enter [% terms.abug %] in this product.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Default
+ </td>
+ <td>
+ NA
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are permitted to be restricted to this
+ group and are placed in this group by default. Users who are members of this
+ group will be able to place [% terms.bugs %] in this group.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Default
+ </td>
+ <td>
+ Default
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are permitted to be restricted to this
+ group and are placed in this group by default. Users who are members of this group
+ will be able to place [% terms.bugs %] in this group. Non-members will be
+ able to restrict [% terms.bugs %] to this group on entry and will do so by default.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Default
+ </td>
+ <td>
+ Mandatory
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are permitted to be restricted to this
+ group and are placed in this group by default. Users who are members of this group
+ will be able to place [% terms.bugs %] in this group. Non-members will be forced
+ to place [% terms.bugs %] in this group on entry.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Mandatory
+ </td>
+ <td>
+ Mandatory
+ </td>
+ <td>
+ [% terms.Bugs %] in this product are required to be restricted to this
+ group. Users are not given any option.
+ </td>
+ </tr>
+</table>
+<p>
+Please note that the above table delineates the only allowable combinations
+for the <b>MemberControl</b> and <b>OtherControl</b> field settings.
+Attempting to submit a combination not listed there (e.g. Mandatory/NA,
+Default/Shown, etc.) will produce an error message.
+</p>
+[% PROCESS global/footer.html.tmpl %]
+
diff --git a/template/en/default/admin/products/groupcontrol/updated.html.tmpl b/template/en/default/admin/products/groupcontrol/updated.html.tmpl
new file mode 100644
index 0000000..2f59cae
--- /dev/null
+++ b/template/en/default/admin/products/groupcontrol/updated.html.tmpl
@@ -0,0 +1,50 @@
+[%# 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.
+ #
+ # Contributor(s): André Batosti <batosti@async.com.br>
+ #
+ #%]
+
+[%# INTERFACE:
+ # product: Bugzilla::Product object; the product.
+ # changes: Hashref with changes made to the product group controls.
+ #%]
+
+[% title = BLOCK %]
+ Update group access controls for [% product.name FILTER html %]
+[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = title
+%]
+<p>
+[% IF changes.group_controls.now_na.size %]
+ [% FOREACH g = changes.group_controls.now_na %]
+ Removing [% terms.bugs %] from group '[% g.name FILTER html %]' which
+ no longer applies to this product<p>
+ [% g.bug_count FILTER html %] [%+ terms.bugs %] removed<p>
+ [% END %]
+[% END %]
+
+[% IF changes.group_controls.now_mandatory.size %]
+ [% FOREACH g = changes.group_controls.now_mandatory %]
+ Adding [% terms.bugs %] to group '[% g.name FILTER html %]' which is
+ mandatory for this product<p>
+ [% g.bug_count FILTER html %] [%+ terms.bugs %] added<p>
+ [% END %]
+[% END %]
+
+Group control updates done<p>
+
+[% PROCESS admin/products/footer.html.tmpl %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/products/list-classifications.html.tmpl b/template/en/default/admin/products/list-classifications.html.tmpl
new file mode 100644
index 0000000..4eddad3
--- /dev/null
+++ b/template/en/default/admin/products/list-classifications.html.tmpl
@@ -0,0 +1,72 @@
+[%# 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.
+ #
+ # Contributor(s): Gavin Shelley <bugzilla@chimpychompy.org>
+ #%]
+
+[%# INTERFACE:
+ # classifications: array of hashes having the following properties:
+ # - name: string; The name of the classification
+ # - description: string; The classification description (html allowed)
+ # - product_count: number; The number of products in this classification
+ #
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[% PROCESS global/header.html.tmpl
+ title = "Select Classification"
+%]
+
+[% edit_contentlink = BLOCK %]
+ editproducts.cgi?classification=%%name%%
+[% END %]
+[% add_contentlink = BLOCK %]
+ editproducts.cgi?action=add&amp;classification=%%name%%
+[% END %]
+
+[% columns = [
+ {
+ name => "name"
+ heading => "Edit products of..."
+ contentlink => edit_contentlink
+ },
+ {
+ name => "description"
+ heading => "Description"
+ allow_html_content => 1
+ },
+ {
+ name => "product_count"
+ align => "right"
+ heading => "Product Count"
+ }
+ ]
+%]
+
+[% IF user.in_group('editcomponents') %]
+ [% columns.push({
+ heading => "Action..."
+ content => "Add product"
+ contentlink => add_contentlink })
+ %]
+[% END %]
+
+[% PROCESS admin/table.html.tmpl
+ columns = columns
+ data = classifications
+%]
+
+[%# No need for the standard edit products footer, as we have an 'add'
+ link in the table %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/products/list.html.tmpl b/template/en/default/admin/products/list.html.tmpl
new file mode 100644
index 0000000..57d75d8
--- /dev/null
+++ b/template/en/default/admin/products/list.html.tmpl
@@ -0,0 +1,121 @@
+[%# 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.
+ #
+ # Contributor(s): Gavin Shelley <bugzilla@chimpychompy.org>
+ #%]
+
+[%# INTERFACE:
+ # products: array of Bugzilla::Product objects
+ #
+ # classification: Bugzilla::Classification object; If classifications
+ # are enabled, then this is
+ # the currently selected classification
+ # showbugcounts: boolean; true if bug counts should be included in the table
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[% IF classification %]
+ [% classification_url_part = BLOCK %]&amp;classification=
+ [%- classification.name FILTER url_quote %]
+ [%- END %]
+ [% classification_title = BLOCK %]
+ in classification '[% classification.name FILTER html %]'
+ [% END %]
+[% END %]
+
+[% PROCESS global/header.html.tmpl
+ title = "Select product $classification_title"
+%]
+
+[% edit_contentlink = BLOCK %]
+ editproducts.cgi?action=edit&amp;product=%%name%%
+[% END %]
+[% delete_contentlink = BLOCK %]
+ editproducts.cgi?action=del&amp;product=%%name%%
+[% END %]
+[% bug_count_contentlink = BLOCK %]
+ buglist.cgi?product=%%name%%
+[% END %]
+
+
+[% columns = [
+ {
+ name => "name"
+ heading => "Edit product..."
+ contentlink => edit_contentlink
+ },
+ {
+ name => "description"
+ heading => "Description"
+ allow_html_content => 1
+ },
+ {
+ name => "is_active"
+ heading => "Open For New $terms.Bugs"
+ yesno_field => 1
+ },
+ {
+ name => "votesperuser"
+ heading => "Votes Per User"
+ align => 'right'
+ },
+ {
+ name => "maxvotesperbug"
+ heading => "Maximum Votes Per $terms.Bug"
+ align => 'right'
+ },
+ {
+ name => "votestoconfirm"
+ heading => "Votes To Confirm"
+ align => 'right'
+ } ]
+%]
+
+[% IF showbugcounts %]
+
+ [% columns.push({
+ name => "bug_count"
+ heading => "$terms.Bug Count"
+ align => 'right'
+ contentlink => bug_count_contentlink
+ })
+ %]
+
+[% END %]
+
+[% columns.push({
+ heading => "Action"
+ content => "Delete"
+ contentlink => delete_contentlink
+ })
+%]
+
+[% Hook.process('before_table') %]
+
+[% PROCESS admin/table.html.tmpl
+ columns = columns
+ data = products
+%]
+
+[% IF !showbugcounts %]
+
+ <p><a href="editproducts.cgi?showbugcounts=1[% classification_url_part %]">
+ Redisplay table with [% terms.bug %] counts (slower)</a></p>
+
+[% END %]
+
+[% PROCESS admin/products/footer.html.tmpl
+ no_edit_other_products_link = 1
+ %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/admin/products/updated.html.tmpl b/template/en/default/admin/products/updated.html.tmpl
new file mode 100644
index 0000000..c6e8710
--- /dev/null
+++ b/template/en/default/admin/products/updated.html.tmpl
@@ -0,0 +1,185 @@
+[%# 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): Gavin Shelley <bugzilla@chimpychompy.org>
+ # Frédéric Buclin <LpSolit@gmail.com>
+ #%]
+
+[%# INTERFACE:
+ # product : Bugzilla::Product Object; new product.
+ # classification: Bugzilla::Classification Object; The product classification (may be empty or missing)
+ # changes: hashref with all changes made to the product. Each key is an edited field,
+ # and its value is an arrayref of the form [old values, new values].
+ #%]
+
+[% IF classification %]
+ [% classification_text = BLOCK %]
+ of classification '[% classification.name FILTER html %]'
+ [% END %]
+[% END %]
+
+[% title = BLOCK %]Updating Product '[% product.name FILTER html %]'
+ [% classification_text FILTER none %][% END %]
+[% PROCESS global/header.html.tmpl
+ title = title
+ style_urls = ['skins/standard/admin.css']
+%]
+
+[% PROCESS "global/field-descs.none.tmpl" %]
+
+[% IF changes.name.defined %]
+ <p>
+ Updated product name from '[% changes.name.0 FILTER html %]' to
+ '<a href="editproducts.cgi?action=edit&amp;product=
+ [%- product.name FILTER url_quote %]">[% product.name FILTER html %]</a>'.
+ </p>
+[% END %]
+
+
+[% IF changes.description.defined %]
+ <p>
+ Updated description to:
+ </p>
+ <p style="margin: 1em 3em 1em 3em">[% product.description FILTER html_light %]</p>
+[% END %]
+
+[% IF changes.isactive.defined %]
+ <p>
+ Product is now
+ [% IF product.is_active %]
+ open for
+ [% ELSE %]
+ closed to
+ [% END %]
+ new [% terms.bugs %].
+ </p>
+[% END %]
+
+[% IF changes.defaultmilestone.defined %]
+ <p>
+ Updated default milestone from '[% changes.defaultmilestone.0 FILTER html %]' to
+ '[% product.default_milestone FILTER html %]'.
+ </p>
+[% END %]
+
+[% IF changes.votesperuser.defined %]
+ <p>
+ Updated votes per user from
+ [%+ changes.votesperuser.0 FILTER html %] to
+ [%+ product.votes_per_user FILTER html %].
+ </p>
+ [% checkvotes = 1 %]
+[% END %]
+
+[% IF changes.maxvotesperbug.defined %]
+ <p>
+ Updated maximum votes per [% terms.bug %] from
+ [%+ changes.maxvotesperbug.0 FILTER html %] to
+ [%+ product.max_votes_per_bug FILTER html %].
+ </p>
+ [% checkvotes = 1 %]
+[% END %]
+
+[% IF changes.votestoconfirm.defined %]
+ <p>
+ Updated number of votes needed to confirm a [% terms.bug %] from
+ [%+ changes.votestoconfirm.0 FILTER html %] to
+ [%+ product.votes_to_confirm FILTER html %].
+ </p>
+ [% checkvotes = 1 %]
+[% END %]
+
+[% IF changes.allows_unconfirmed.defined %]
+ <p>
+ [% IF product.allows_unconfirmed %]
+ The product now allows the
+ [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status.
+ [% ELSE %]
+ The product no longer allows the
+ [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status.
+ Note that any
+ <a href="buglist.cgi?product=
+ [%- product.name FILTER url_quote %]&amp;bug_status=UNCONFIRMED">
+ [%- terms.bugs %] that currently have the
+ [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status</a>
+ will remain in that status until they are edited.
+ [% END %]
+ </p>
+[% END %]
+
+[% IF !changes.keys.size %]
+ <p>Nothing changed for product '[% product.name FILTER html %]'.</p>
+[% END %]
+
+[%# Note that this display of changed votes and/or confirmed bugs is
+ not very scalable. We could have a _lot_, and we just list them all.
+ One day we should limit this perhaps, or have a more scalable display %]
+
+
+[% IF checkvotes %]
+ <hr>
+
+ <p>Checking existing votes in this product for anybody who now
+ has too many votes for [% terms.abug %]...<br>
+ [% IF changes.too_many_votes.size %]
+ [% FOREACH detail = changes.too_many_votes %]
+ &rarr;removed votes for [% terms.bug %] <a href="show_bug.cgi?id=
+ [%- detail.id FILTER url_quote %]">
+ [%- detail.id FILTER html %]</a> from [% detail.name FILTER html %]<br>
+ [% END %]
+ [% ELSE %]
+ &rarr;there were none.
+ [% END %]
+ </p>
+
+ <p>Checking existing votes in this product for anybody
+ who now has too many total votes...<br>
+ [% IF changes.too_many_total_votes.size %]
+ [% FOREACH detail = changes.too_many_total_votes %]
+ &rarr;removed votes for [% terms.bug %] <a href="show_bug.cgi?id=
+ [%- detail.id FILTER url_quote %]">
+ [%- detail.id FILTER html %]</a> from [% detail.name FILTER html %]<br>
+ [% END %]
+ [% ELSE %]
+ &rarr;there were none.
+ [% END %]
+ </p>
+
+ <p>Checking unconfirmed [% terms.bugs %] in this product for any which now have
+ sufficient votes...<br>
+ [% IF changes.confirmed_bugs.size %]
+ [% FOREACH id = changes.confirmed_bugs %]
+
+ [%# This is INCLUDED instead of PROCESSED to avoid variables getting
+ overwritten, which happens otherwise %]
+ [% INCLUDE bug/process/results.html.tmpl
+ type = 'votes'
+ header_done = 1
+ sent_bugmail = changes.confirmed_bugs_sent_bugmail.$id
+ id = id
+ %]
+ [% END %]
+ [% ELSE %]
+ &rarr;there were none.
+ [% END %]
+ </p>
+
+[% END %]
+
+[% PROCESS admin/products/footer.html.tmpl %]
+
+[% PROCESS global/footer.html.tmpl %]