зеркало из https://github.com/mozilla/gecko-dev.git
Bug 299753: Replace old code in editproducts.cgi by routines from Product.pm - Patch by Andr� Batosti <batosti@async.com.br> r=LpSolit a=justdave
This commit is contained in:
Родитель
b9f159aee3
Коммит
d08f38656a
|
@ -187,6 +187,20 @@ sub bug_count {
|
|||
return $self->{'bug_count'};
|
||||
}
|
||||
|
||||
sub bug_ids {
|
||||
my $self = shift;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
if (!defined $self->{'bug_ids'}) {
|
||||
$self->{'bug_ids'} =
|
||||
$dbh->selectcol_arrayref(q{SELECT bug_id FROM bugs
|
||||
WHERE product_id = ?},
|
||||
undef, $self->id);
|
||||
}
|
||||
return $self->{'bug_ids'};
|
||||
}
|
||||
|
||||
|
||||
###############################
|
||||
#### Accessors ######
|
||||
###############################
|
||||
|
@ -253,6 +267,7 @@ Bugzilla::Product - Bugzilla product class.
|
|||
my @milestones = $product->milestones();
|
||||
my @versions = $product->versions();
|
||||
my $bugcount = $product->bug_count();
|
||||
my $bug_ids = $product->bug_ids();
|
||||
|
||||
my $id = $product->id;
|
||||
my $name = $product->name;
|
||||
|
@ -330,6 +345,14 @@ Product.pm represents a product object.
|
|||
|
||||
Returns: Integer with the number of bugs.
|
||||
|
||||
=item C<bug_ids()>
|
||||
|
||||
Description: Returns the IDs of bugs that belong to the product.
|
||||
|
||||
Params: none.
|
||||
|
||||
Returns: An array of integer.
|
||||
|
||||
=back
|
||||
|
||||
=head1 SUBROUTINES
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -15,32 +15,16 @@
|
|||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# product_name: string; The name of the product
|
||||
#
|
||||
# prod_description: string; Product description, may be empty
|
||||
# product: Bugzilla::Product object; The product
|
||||
#
|
||||
# (classification fields available if Param('useclassification') is enabled:)
|
||||
#
|
||||
# classification: string; The name of the classification the product is in
|
||||
#
|
||||
# class_description: string; Classification description, may be empty
|
||||
#
|
||||
# bug_count: number; The number of bugs belonging to the product
|
||||
#
|
||||
# milestoneurl: string; milestone url, if milestones are in use,
|
||||
# may be empty
|
||||
#
|
||||
# disallownew: boolean; Are new bugs allowed for the product flag
|
||||
#
|
||||
# components: list of hashes, members are: name, description
|
||||
#
|
||||
# versions: list of version values.
|
||||
#
|
||||
# milestones: list of milestone values.
|
||||
# classification: Bugzilla::Classification object; The classification
|
||||
# the product is in
|
||||
#
|
||||
#%]
|
||||
|
||||
[% title = BLOCK %]Delete Product '[% product_name FILTER html %]'
|
||||
[% title = BLOCK %]Delete Product '[% product.name FILTER html %]'
|
||||
[% END %]
|
||||
|
||||
[% PROCESS global/header.html.tmpl
|
||||
|
@ -50,25 +34,12 @@
|
|||
|
||||
[% IF classification %]
|
||||
[% classification_url_part = BLOCK %]&classification=
|
||||
[%- classification FILTER url_quote %]
|
||||
[%- classification.name FILTER url_quote %]
|
||||
[%- END %]
|
||||
[% ELSE %]
|
||||
[% classification_url_part = "" %]
|
||||
[% END %]
|
||||
|
||||
[% UNLESS class_description %]
|
||||
[% class_description = '<span style="color: red">missing</span>' %]
|
||||
[% END %]
|
||||
[% UNLESS prod_description %]
|
||||
[% prod_description = '<span style="color: red">missing</span>' %]
|
||||
[% END %]
|
||||
|
||||
[% IF disallownew %]
|
||||
[% disallownew = "closed" %]
|
||||
[% ELSE %]
|
||||
[% disallownew = "open" %]
|
||||
[% END %]
|
||||
|
||||
<table border="1" cellpadding="4" cellspacing="0">
|
||||
<tr bgcolor="#6666FF">
|
||||
<th valign="top" align="left">Field</th>
|
||||
|
@ -78,37 +49,49 @@
|
|||
[% IF Param('useclassification') %]
|
||||
<tr>
|
||||
<td>Classification:</td>
|
||||
<td>[% classification FILTER html %]</td>
|
||||
<td>[% classification.name FILTER html %]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Classification Description:</td>
|
||||
[%# descriptions are intentionally not filtered to allow html content %]
|
||||
<td>[% class_description FILTER none %]</td>
|
||||
<td>
|
||||
[% IF classification.description %]
|
||||
[% classification.description FILTER none %]
|
||||
[% 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 %]
|
||||
<a href="editproducts.cgi?product=[% product.name FILTER url_quote %]
|
||||
[%- classification_url_part %]">
|
||||
[% product_name FILTER html %]
|
||||
[% 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">[% prod_description FILTER none %]</td>
|
||||
<td valign="top">
|
||||
[% IF product.description %]
|
||||
[% product.description FILTER none %]
|
||||
[% ELSE %]
|
||||
<span style="color: red">missing</span>
|
||||
[% END %]
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
[% IF Param('usetargetmilestone') %]
|
||||
<tr>
|
||||
<td>Milestone URL:</td>
|
||||
<td>
|
||||
[% IF milestoneurl %]
|
||||
<a href="[% milestoneurl FILTER uri %]">
|
||||
[%- milestoneurl FILTER html %]
|
||||
[% IF product.milestone_url %]
|
||||
<a href="[% product.milestone_url FILTER uri %]">
|
||||
[%- product.milestone_url FILTER html %]
|
||||
</a>
|
||||
[% ELSE %]
|
||||
none
|
||||
|
@ -119,15 +102,21 @@
|
|||
|
||||
<tr>
|
||||
<td>Closed for [% terms.bugs %]:</td>
|
||||
<td>[% disallownew FILTER html %]</td>
|
||||
<td>
|
||||
[% IF product.disallownew %]
|
||||
closed
|
||||
[% ELSE %]
|
||||
open
|
||||
[% END %]
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
[% IF components.size > 0 %]
|
||||
<a href="editcomponents.cgi?product=[% product_name FILTER url_quote %]
|
||||
[% IF product.components.size > 0 %]
|
||||
<a href="editcomponents.cgi?product=[% product.name FILTER url_quote %]
|
||||
[%- classification_url_part %]"
|
||||
title="Edit components for product '[% product_name FILTER html %]'">
|
||||
title="Edit components for product '[% product.name FILTER html %]'">
|
||||
Components:
|
||||
</a>
|
||||
[% ELSE %]
|
||||
|
@ -135,9 +124,9 @@
|
|||
[% END %]
|
||||
</td>
|
||||
<td>
|
||||
[% IF components.size > 0 %]
|
||||
[% IF product.components.size > 0 %]
|
||||
<table>
|
||||
[% FOREACH c = components %]
|
||||
[% FOREACH c = product.components %]
|
||||
<tr>
|
||||
<th align="right">[% c.name FILTER html %]:</th>
|
||||
[%# descriptions are intentionally not filtered to allow html content %]
|
||||
|
@ -159,8 +148,8 @@
|
|||
|
||||
<tr>
|
||||
<td>
|
||||
[% IF versions.size > 0 %]
|
||||
<a href="editversions.cgi?product=[%- product_name FILTER url_quote %]
|
||||
[% IF product.versions.size > 0 %]
|
||||
<a href="editversions.cgi?product=[%- product.name FILTER url_quote %]
|
||||
[%- classification_url_part %]">
|
||||
Versions:
|
||||
</a>
|
||||
|
@ -168,9 +157,9 @@
|
|||
Versions:
|
||||
[% END %]
|
||||
<td>
|
||||
[% IF versions.size > 0 %]
|
||||
[% FOREACH v = versions %]
|
||||
[% v FILTER html %]<br>
|
||||
[% IF product.versions.size > 0 %]
|
||||
[% FOREACH v = product.versions %]
|
||||
[% v.name FILTER html %]<br>
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
none
|
||||
|
@ -180,8 +169,8 @@
|
|||
|
||||
<tr>
|
||||
<td valign="top">
|
||||
[% IF milestones.size > 0 %]
|
||||
<a href="editmilestones.cgi?product=[%- product_name FILTER url_quote %]
|
||||
[% IF product.milestones.size > 0 %]
|
||||
<a href="editmilestones.cgi?product=[%- product.name FILTER url_quote %]
|
||||
[%- classification_url_part -%]">
|
||||
Milestones:
|
||||
</a>
|
||||
|
@ -190,9 +179,9 @@
|
|||
[% END %]
|
||||
</td>
|
||||
<td>
|
||||
[% IF milestones.size > 0 %]
|
||||
[% FOREACH m = milestones %]
|
||||
[% m FILTER html %]<br>
|
||||
[% IF product.milestones.size > 0 %]
|
||||
[% FOREACH m = product.milestones %]
|
||||
[% m.name FILTER html %]<br>
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
none
|
||||
|
@ -203,12 +192,12 @@
|
|||
<tr>
|
||||
<td>[% terms.Bugs %]:</td>
|
||||
<td>
|
||||
[% IF bug_count %]
|
||||
<a href="buglist.cgi?product=[%- product_name FILTER url_quote %]
|
||||
[% IF product.bug_count %]
|
||||
<a href="buglist.cgi?product=[%- product.name FILTER url_quote %]
|
||||
[%- classification_url_part %]"
|
||||
title="List of [% terms.bugs %] for product '
|
||||
[%- product_name FILTER html %]'">
|
||||
[% bug_count %]
|
||||
[%- product.name FILTER html %]'">
|
||||
[% product.bug_count FILTER html %]
|
||||
</a>
|
||||
[% ELSE %]
|
||||
none
|
||||
|
@ -219,21 +208,21 @@
|
|||
|
||||
<h2>Confirmation</h2>
|
||||
|
||||
[% IF bug_count %]
|
||||
[% IF product.bug_count %]
|
||||
|
||||
[% IF !Param("allowbugdeletion") %]
|
||||
|
||||
Sorry, there
|
||||
|
||||
[% IF bug_count > 1 %]
|
||||
are [% bug_count %] [%+ terms.bugs %]
|
||||
[% 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 bug_count > 1 %]
|
||||
[% IF product.bug_count > 1 %]
|
||||
those [% terms.bugs %]
|
||||
[% ELSE %]
|
||||
that [% terms.bug %]
|
||||
|
@ -247,8 +236,8 @@
|
|||
<tr>
|
||||
<td>
|
||||
There
|
||||
[% IF bug_count > 1 %]
|
||||
are [% bug_count %] [%+ terms.bugs %]
|
||||
[% IF product.bug_count > 1 %]
|
||||
are [% product.bug_count FILTER html %] [%+ terms.bugs %]
|
||||
[% ELSE %]
|
||||
is 1 [% terms.bug %]
|
||||
[% END %]
|
||||
|
@ -263,16 +252,16 @@
|
|||
|
||||
[% END %]
|
||||
|
||||
[% IF bug_count == 0 || Param('allowbugdeletion') %]
|
||||
[% 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="submit" value="Yes, delete">
|
||||
<input type="hidden" name="action" value="delete">
|
||||
<input type="hidden" name="product" value="[% product_name FILTER html %]">
|
||||
<input type="hidden" name="product" value="[% product.name FILTER html %]">
|
||||
<input type="hidden" name="classification"
|
||||
value="[% classification FILTER html %]">
|
||||
value="[% classification.name FILTER html %]">
|
||||
</form>
|
||||
|
||||
[% END %]
|
||||
|
|
|
@ -15,8 +15,9 @@
|
|||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# classification: string; name of the classification in which the new
|
||||
# product is created.
|
||||
# classification: Bugzilla::Classification object; If classifications
|
||||
# are enabled, then this is
|
||||
# the currently selected classification
|
||||
#
|
||||
#%]
|
||||
|
||||
|
@ -56,9 +57,11 @@
|
|||
<input type="hidden" name="open_name" value="All Open">
|
||||
<input type="hidden" name="action" value="new">
|
||||
<input type="hidden" name="classification"
|
||||
value="[% classification FILTER html %]">
|
||||
value="[% classification.name FILTER html %]">
|
||||
</form>
|
||||
|
||||
[% PROCESS "admin/products/footer.html.tmpl" no_add_product_link = 1 %]
|
||||
[% PROCESS "admin/products/footer.html.tmpl"
|
||||
no_add_product_link = 1
|
||||
no_edit_product_link = 1 %]
|
||||
|
||||
[% PROCESS global/footer.html.tmpl %]
|
||||
|
|
|
@ -14,18 +14,23 @@
|
|||
# Contributor(s): Gabriel S. Oliveira <gabriel@async.com.br>
|
||||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# product: Bugzilla::Product object; the Product created.
|
||||
#
|
||||
#%]
|
||||
|
||||
[% PROCESS global/header.html.tmpl
|
||||
title = 'New Product Created'
|
||||
%]
|
||||
<br>
|
||||
<div style='border: 1px red solid; padding: 1ex;'>
|
||||
<b>You will need to
|
||||
<a href="editcomponents.cgi?action=add&product=[% product FILTER url_quote %]">
|
||||
<a href="editcomponents.cgi?action=add&product=[% product.name FILTER url_quote %]">
|
||||
add at least one component
|
||||
</a> before you can enter [% terms.bugs %] against this product
|
||||
</b>
|
||||
</div>
|
||||
|
||||
[% PROCESS "admin/products/footer.html.tmpl" name = product %]
|
||||
[% PROCESS "admin/products/footer.html.tmpl" %]
|
||||
|
||||
[% PROCESS global/footer.html.tmpl %]
|
||||
|
|
|
@ -15,11 +15,16 @@
|
|||
#
|
||||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# product: Bugzilla::Product object; The product
|
||||
#
|
||||
#%]
|
||||
|
||||
[% PROCESS global/header.html.tmpl
|
||||
title = 'Deleting product'
|
||||
%]
|
||||
|
||||
[% IF nb_bugs %]
|
||||
[% IF product.bug_count %]
|
||||
All references to deleted [% terms.bugs %] removed.
|
||||
[% END %]
|
||||
|
||||
|
@ -35,7 +40,7 @@
|
|||
</p>
|
||||
|
||||
<p>
|
||||
Product [% product FILTER html %] deleted.
|
||||
Product [% product.name FILTER html %] deleted.
|
||||
</p>
|
||||
|
||||
[% PROCESS admin/products/footer.html.tmpl
|
||||
|
|
|
@ -17,14 +17,15 @@
|
|||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# classification: string; name of classification product is in.
|
||||
# product: array; an array of product objects.
|
||||
# product: Bugzilla::Product object; The product
|
||||
#
|
||||
# classification: Bugzilla::Classifiation object; classification product is in.
|
||||
#%]
|
||||
|
||||
[% IF Param('useclassification') %]
|
||||
<tr>
|
||||
<th align="right"><b>Classification:</b></th>
|
||||
<td><b>[% classification FILTER html %]</b></td>
|
||||
<td><b>[% classification.name FILTER html %]</b></td>
|
||||
</tr>
|
||||
[% END %]
|
||||
|
||||
|
|
|
@ -17,13 +17,14 @@
|
|||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# classification: string; name of classification product is in.
|
||||
# product: an array of product objects.
|
||||
# components: an array of component object(s) related to the product.
|
||||
# groups: an array of group objects related to the product.
|
||||
# versions: an array of version objects related to product.
|
||||
# milestones: an array of milestones objects related to product.
|
||||
# bug_count: integer; number of bugs in this product.
|
||||
# product: Bugzilla::Product object; The product
|
||||
#
|
||||
# (classification fields available if Param('useclassification') is enabled:)
|
||||
#
|
||||
# classification: Bugzilla::Classification object; The classification
|
||||
# the product is in
|
||||
#
|
||||
# groups_controls: a hash of group controls related to the product.
|
||||
#%]
|
||||
|
||||
[% title = BLOCK %]Edit Product[% END %]
|
||||
|
@ -44,8 +45,8 @@
|
|||
</a>
|
||||
</th>
|
||||
<td>
|
||||
[% IF components.size -%]
|
||||
[% FOREACH component = components %]
|
||||
[% IF product.components.size -%]
|
||||
[% FOREACH component = product.components %]
|
||||
<b>[% component.name FILTER html %]:</b>
|
||||
[% IF component.description %]
|
||||
[% component.description FILTER none %]
|
||||
|
@ -65,9 +66,9 @@
|
|||
versions:</a>
|
||||
</th>
|
||||
<td>
|
||||
[%- IF versions.size -%]
|
||||
[% FOREACH v = versions %]
|
||||
[% v FILTER html %]
|
||||
[%- IF product.versions.size -%]
|
||||
[% FOREACH v = product.versions %]
|
||||
[% v.name FILTER html %]
|
||||
<br>
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
|
@ -82,9 +83,9 @@ versions:</a>
|
|||
Edit milestones:</a>
|
||||
</th>
|
||||
<td>
|
||||
[%- IF milestones.size -%]
|
||||
[%- FOREACH m = milestones -%]
|
||||
[% m FILTER html %]
|
||||
[%- IF product.milestones.size -%]
|
||||
[%- FOREACH m = product.milestones -%]
|
||||
[% m.name FILTER html %]
|
||||
<br>
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
|
@ -97,15 +98,15 @@ versions:</a>
|
|||
<th align="right" valign="top">
|
||||
<a href="editproducts.cgi?action=editgroupcontrols&product=
|
||||
[%- product.name FILTER url_quote %]&classification=
|
||||
[%- classification FILTER url_quote %]">
|
||||
[%- classification.name FILTER url_quote %]">
|
||||
Edit Group Access Controls:
|
||||
</a>
|
||||
</th>
|
||||
<td>
|
||||
[% IF groups.size %]
|
||||
[% FOREACH g = groups %]
|
||||
<b>[% g.name FILTER html %]:</b>
|
||||
[% IF g.isactive %]
|
||||
[% IF group_controls.size %]
|
||||
[% FOREACH g = group_controls.values %]
|
||||
<b>[% g.group.name FILTER html %]:</b>
|
||||
[% IF g.group.isactive %]
|
||||
[% g.membercontrol FILTER html %]/
|
||||
[% g.othercontrol FILTER html %]
|
||||
[% IF g.entry %], ENTRY[% END %]
|
||||
|
@ -122,32 +123,21 @@ versions:</a>
|
|||
</tr>
|
||||
<tr>
|
||||
<th align="right">[% terms.Bugs %]:</th>
|
||||
<td>[% bug_count FILTER html %]</td>
|
||||
<td><a href="buglist.cgi?product=[% product.name FILTER url_quote %]">
|
||||
[% product.bug_count FILTER html %]</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<input type="hidden" name="productold"
|
||||
<input type="hidden" name="product_old_name"
|
||||
value="[% product.name FILTER html %]">
|
||||
<input type="hidden" name="descriptionold"
|
||||
value="[% product.description FILTER html %]">
|
||||
<input type="hidden" name="milestoneurlold"
|
||||
value="[% product.milestoneurl FILTER html %]">
|
||||
<input type="hidden" name="disallownewold"
|
||||
value="[% product.disallownew FILTER html %]">
|
||||
<input type="hidden" name="votesperuserold"
|
||||
value="[% product.votesperuser FILTER html %]">
|
||||
<input type="hidden" name="maxvotesperbugold"
|
||||
value="[% product.maxvotesperbug FILTER html %]">
|
||||
<input type="hidden" name="votestoconfirmold"
|
||||
value="[% product.votestoconfirm FILTER html %]">
|
||||
<input type="hidden" name="defaultmilestoneold"
|
||||
value="[% product.defaultmilestone FILTER html %]">
|
||||
<input type="hidden" name="action" value="update">
|
||||
<input type="hidden" name="classification"
|
||||
value="[% classification FILTER html %]">
|
||||
value="[% classification.name FILTER html %]">
|
||||
<input type="submit" name="submit" value="Update">
|
||||
</form>
|
||||
|
||||
[% PROCESS "admin/products/footer.html.tmpl" no_add_product_link = 1 %]
|
||||
[% PROCESS "admin/products/footer.html.tmpl"
|
||||
no_add_product_link = 1
|
||||
no_edit_product_link = 1 %]
|
||||
|
||||
[% PROCESS global/footer.html.tmpl %]
|
||||
|
|
|
@ -15,10 +15,11 @@
|
|||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# name: string; the name of the product
|
||||
# product: Bugzilla::Product Object; the product
|
||||
#
|
||||
# classification: string; If classifications are enabled, then this is
|
||||
# the currently selected classification
|
||||
# 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:
|
||||
|
@ -30,13 +31,13 @@
|
|||
|
||||
[% IF Param('useclassification') && classification %]
|
||||
[% classification_url_part = BLOCK %]&classification=
|
||||
[%- classification FILTER url_quote %]
|
||||
[%- classification.name FILTER url_quote %]
|
||||
[% END %]
|
||||
[% classification_url_part_start = BLOCK %]classification=
|
||||
[%- classification FILTER url_quote %]
|
||||
[%- classification.name FILTER url_quote %]
|
||||
[% END %]
|
||||
[% classification_text = BLOCK %]
|
||||
of classification '[% classification FILTER html %]'
|
||||
of classification '[% classification.name FILTER html %]'
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
|
@ -51,20 +52,22 @@
|
|||
classification if they are enabled, but I'm just being paranoid %]
|
||||
[% IF Param('useclassification') && classification %]
|
||||
(<a title="Add a product to classification '
|
||||
[%- classification FILTER html %]'"
|
||||
[%- classification.name FILTER html %]'"
|
||||
href="editproducts.cgi?action=add
|
||||
[%- classification_url_part %]">to
|
||||
classification '[% classification FILTER html %]'</a>)
|
||||
classification '[% classification.name FILTER html %]'
|
||||
</a>)
|
||||
[% END %].
|
||||
[% END %]
|
||||
|
||||
[% IF name && !no_edit_product_link %]
|
||||
[% IF product && !no_edit_product_link %]
|
||||
Edit product <a
|
||||
title="Edit Product '[% name FILTER html %]'
|
||||
[% classification_text %]"
|
||||
title="Edit Product '[% product.name FILTER html %]'
|
||||
[%- classification_text %]"
|
||||
href="editproducts.cgi?action=edit&product=
|
||||
[%- name FILTER url_quote %][% classification_url_part %]">
|
||||
'[% name FILTER html %]'</a>.
|
||||
[%- product.name FILTER url_quote %]
|
||||
[%- classification_url_part %]">
|
||||
'[% product.name FILTER html %]'</a>.
|
||||
[% END %]
|
||||
|
||||
|
||||
|
@ -80,7 +83,7 @@
|
|||
[% IF Param('useclassification') && classification %]
|
||||
Edit classification <a href="editclassifications.cgi?action=edit
|
||||
[%- classification_url_part %]">'
|
||||
[%- classification FILTER html %]'</a>.
|
||||
[%- classification.name FILTER html %]'</a>.
|
||||
|
||||
[% END %]
|
||||
|
||||
|
|
|
@ -21,9 +21,11 @@
|
|||
#%]
|
||||
|
||||
[% PROCESS global/variables.none.tmpl %]
|
||||
[% title = BLOCK %]
|
||||
Confirm Group Control Change for product '[%- product.name FILTER html %]'
|
||||
[% END %]
|
||||
|
||||
[% PROCESS global/header.html.tmpl title="Confirm Group Control Change for product \'$product\'" %]
|
||||
|
||||
[% PROCESS global/header.html.tmpl title = title %]
|
||||
[% FOREACH group = mandatory_groups %]
|
||||
<P>
|
||||
group '[% group.name FILTER html %]' impacts [% group.count %]
|
||||
|
|
|
@ -21,16 +21,18 @@
|
|||
|
||||
[% PROCESS global/variables.none.tmpl %]
|
||||
|
||||
[% filt_product = product FILTER html %]
|
||||
[% filt_classification = classification FILTER html %]
|
||||
[% PROCESS global/header.html.tmpl
|
||||
title = "Edit Group Controls for '$filt_product'"
|
||||
[% 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="[% filt_product %]">
|
||||
<input type="hidden" name="classification" value="[% filt_classification %]">
|
||||
<input type="hidden" name="product" value="[% product.name FILTER html %]">
|
||||
<input type="hidden" name="classification"
|
||||
value="[% classification.name FILTER html %]">
|
||||
|
||||
<table id="form" cellspacing="0" cellpadding="4" border="1">
|
||||
<tr bgcolor="#6666ff">
|
||||
|
|
|
@ -18,12 +18,12 @@
|
|||
[%# INTERFACE:
|
||||
# removed_na: array of hashes; groups not applicable for the product.
|
||||
# added_mandatory: array of hashes; groups mandatory for the product.
|
||||
# classification: string; product classification name.
|
||||
# product: string; name of the product.
|
||||
# classification: Bugzilla::Classification object; product classification.
|
||||
# product: Bugzilla::Product object; the product.
|
||||
#%]
|
||||
|
||||
[% title = BLOCK %]
|
||||
Update group access controls for [% product FILTER html %]
|
||||
Update group access controls for [% product.name FILTER html %]
|
||||
[% END %]
|
||||
|
||||
[% PROCESS global/header.html.tmpl
|
||||
|
@ -48,6 +48,6 @@
|
|||
|
||||
Group control updates done<p>
|
||||
|
||||
[% PROCESS admin/products/footer.html.tmpl name = product %]
|
||||
[% PROCESS admin/products/footer.html.tmpl %]
|
||||
|
||||
[% PROCESS global/footer.html.tmpl %]
|
||||
|
|
|
@ -15,19 +15,10 @@
|
|||
#%]
|
||||
|
||||
[%# INTERFACE:
|
||||
# products: array of hashes having the following properties:
|
||||
# - name: string; The name of the product
|
||||
# - description: string; The product description (html allowed)
|
||||
# - status: boolean; Can new bugs be created for the product?
|
||||
# - votesperuser: number; The number of votes a user is allowed
|
||||
# in the product
|
||||
# - maxvotersperbug: number; Maximum votes allowed per bug in this
|
||||
# product
|
||||
# - votestoconfirm: number; The number of votes that are needed to
|
||||
# auto-confirm a bug in this product
|
||||
# - bug_count: number; The number of bugs in this product
|
||||
# products: array of Bugzilla::Product objects
|
||||
#
|
||||
# classification: string; If classifications are enabled, then this is
|
||||
# classification: Bugzilla::Classification object; If classifications
|
||||
# are enabled, then this is
|
||||
# the currently selected classification
|
||||
#%]
|
||||
|
||||
|
@ -35,10 +26,10 @@
|
|||
|
||||
[% IF classification %]
|
||||
[% classification_url_part = BLOCK %]&classification=
|
||||
[%- classification FILTER url_quote %]
|
||||
[%- classification.name FILTER url_quote %]
|
||||
[%- END %]
|
||||
[% classification_title = BLOCK %]
|
||||
in classification '[% classification FILTER html %]'
|
||||
in classification '[% classification.name FILTER html %]'
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
|
@ -54,7 +45,7 @@
|
|||
editproducts.cgi?action=del&product=%%name%%
|
||||
[%- classification_url_part %]
|
||||
[% END %]
|
||||
[% bug_count_contentlink = BLOCK %]buglist.cgi?product=%%name%%&
|
||||
[% bug_count_contentlink = BLOCK %]buglist.cgi?product=%%name%%
|
||||
[%- classification_url_part %][% END %]
|
||||
|
||||
|
||||
|
@ -70,9 +61,8 @@
|
|||
allow_html_content => 1
|
||||
},
|
||||
{
|
||||
name => "status"
|
||||
name => "disallow_new"
|
||||
heading => "Open For New $terms.Bugs"
|
||||
yesno_field => 1
|
||||
},
|
||||
{
|
||||
name => "votesperuser"
|
||||
|
@ -95,15 +85,27 @@
|
|||
align => 'right'
|
||||
contentlink => bug_count_contentlink
|
||||
},
|
||||
{
|
||||
heading => "Action"
|
||||
content => "Delete"
|
||||
contentlink => delete_contentlink
|
||||
},
|
||||
]
|
||||
%]
|
||||
|
||||
[% columns.push({
|
||||
heading => "Action"
|
||||
content => "Delete"
|
||||
contentlink => delete_contentlink
|
||||
})
|
||||
%]
|
||||
[% overrides.disallow_new = [ {
|
||||
match_value => "1"
|
||||
match_field => 'disallow_new'
|
||||
override_content => 1
|
||||
content => "No"
|
||||
},
|
||||
{
|
||||
match_value => 0
|
||||
match_field => 'disallow_new'
|
||||
override_content => 1
|
||||
content => "Yes"
|
||||
}]
|
||||
%]
|
||||
|
||||
[% PROCESS admin/table.html.tmpl
|
||||
columns = columns
|
||||
|
|
|
@ -21,33 +21,10 @@
|
|||
|
||||
[%# INTERFACE:
|
||||
#
|
||||
# updated_XXX : boolean; is true when the 'XXX' field has been updated.
|
||||
# old_XXX : ... string; old value of the field 'XXX'.
|
||||
# new_XXX : ... string; new value of the field 'XXX'.
|
||||
# old_product : Bugzilla::Product Object; old product.
|
||||
# product : Bugzilla::Product Object; new product.
|
||||
#
|
||||
# updated_product: boolean; the name of the product was updated
|
||||
#
|
||||
# updated_description: boolean; the product description was updated
|
||||
#
|
||||
# updated_milestoneurl: boolean; the product milestone URL was updated
|
||||
#
|
||||
# updated_votesperuser: boolean; the votes per user was updated
|
||||
#
|
||||
# updated_maxvotesperbug: boolean; the max votes per bug was updated
|
||||
#
|
||||
# updated_votestoconfirm: boolean; the votes to confirm a bug was updated
|
||||
#
|
||||
# updated_defaultmilestone: boolean; the default milestone was updated
|
||||
#
|
||||
# updated_bugsubmitstatus: boolean; the open/closed for new bugs status
|
||||
# was updated (no 'old_XXX' value)
|
||||
#
|
||||
# classification: string; The product classification (may be empty or missing)
|
||||
#
|
||||
# changer: string; user id of the user making the changes, used for mailing
|
||||
# bug changes if necessary
|
||||
#
|
||||
# name: string; the product name
|
||||
# classification: Bugzilla::Classification Object; The product classification (may be empty or missing)
|
||||
#
|
||||
# checkvotes: boolean; is true if vote related fields have changed. If so,
|
||||
# then the following parameters will be specified:
|
||||
|
@ -62,105 +39,110 @@
|
|||
#
|
||||
# confirmedbugs: list of bug ids, which were confirmed by votes
|
||||
#
|
||||
# changer: string; user id of the user making the changes, used for mailing
|
||||
# bug changes if necessary
|
||||
#
|
||||
#%]
|
||||
|
||||
[% IF classification %]
|
||||
[% classification_url_part = BLOCK %]&classification=
|
||||
[%- classification FILTER url_quote %]
|
||||
[%- classification.name FILTER url_quote %]
|
||||
[% END %]
|
||||
[% classification_text = BLOCK %]
|
||||
of classification '[% classification FILTER html %]'
|
||||
of classification '[% classification.name FILTER html %]'
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
[% title = BLOCK %]Updating Product '[% name FILTER html %]'
|
||||
[% 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']
|
||||
%]
|
||||
[% updated = 0 %]
|
||||
|
||||
[% IF updated_product %]
|
||||
[% IF product.name != old_product.name %]
|
||||
<p>
|
||||
Updated product name from '[% old_product FILTER html %]' to
|
||||
Updated product name from '[% old_product.name FILTER html %]' to
|
||||
<a href="editproducts.cgi?action=edit&product=
|
||||
[%- new_product FILTER url_quote %]
|
||||
[%- classification_url_part FILTER none %]">[% new_product FILTER html %]</a>.
|
||||
[%- product.name FILTER url_quote %]
|
||||
[%- classification_url_part FILTER none %]">[% product.name FILTER html %]</a>.
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
|
||||
[% IF updated_description %]
|
||||
[% IF product.description != old_product.description %]
|
||||
<p>
|
||||
Updated description to:</p>
|
||||
</p>
|
||||
<p style="margin: 1em 3em 1em 3em">[% new_description FILTER html %]</p>
|
||||
<p style="margin: 1em 3em 1em 3em">[% product.description FILTER html %]</p>
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% IF updated_bugsubmitstatus %]
|
||||
[% IF product.disallow_new != old_product.disallow_new %]
|
||||
<p>
|
||||
Product is now
|
||||
[% IF new_bugsubmitstatus %]
|
||||
[% IF product.disallow_new %]
|
||||
closed to
|
||||
[% ELSE %]
|
||||
open for
|
||||
[% END %]
|
||||
new [% terms.bugs %].
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% IF updated_milestoneurl %]
|
||||
[% IF product.milestone_url != old_product.milestone_url %]
|
||||
<p>
|
||||
Updated milestone URL
|
||||
[% IF old_milestoneurl != '' %]
|
||||
from<br> <a href="[%- old_milestoneurl FILTER html %]">'
|
||||
[%- old_milestoneurl FILTER html %]'</a>
|
||||
[% IF old_product.milestone_url != '' %]
|
||||
from<br> <a href="[%- old_product.milestone_url FILTER html %]">'
|
||||
[%- old_product.milestone_url FILTER html %]'</a>
|
||||
[% END %]
|
||||
to
|
||||
[% IF new_milestoneurl != '' %]
|
||||
<br><a href="[%- new_milestoneurl FILTER html %]">'
|
||||
[%- new_milestoneurl FILTER html %]'</a>.
|
||||
[% IF product.milestone_url != '' %]
|
||||
<br><a href="[%- product.milestone_url FILTER html %]">'
|
||||
[%- product.milestone_url FILTER html %]'</a>.
|
||||
[% ELSE %]
|
||||
be empty.
|
||||
[% END %]
|
||||
</p>
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% IF updated_defaultmilestone %]
|
||||
[% IF product.default_milestone != old_product.default_milestone %]
|
||||
<p>
|
||||
Updated default milestone from '[% old_defaultmilestone FILTER html %]' to
|
||||
'[% new_defaultmilestone FILTER html %]'.
|
||||
Updated default milestone from '[% old_product.default_milestone FILTER html %]' to
|
||||
'[% product.default_milestone FILTER html %]'.
|
||||
</p>
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% IF updated_votesperuser %]
|
||||
[% IF product.votes_per_user != old_product.votes_per_user %]
|
||||
<p>
|
||||
Updated votes per user from
|
||||
[%+ old_votesperuser FILTER html %] to
|
||||
[%+ new_votesperuser FILTER html %].
|
||||
[%+ old_product.votes_per_user FILTER html %] to
|
||||
[%+ product.votes_per_user FILTER html %].
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% IF updated_maxvotesperbug %]
|
||||
[% IF product.max_votes_per_bug != old_product.max_votes_per_bug %]
|
||||
<p>
|
||||
Updated maximum votes per [% terms.bug %] from
|
||||
[%+ old_maxvotesperbug FILTER html %] to
|
||||
[%+ new_maxvotesperbug FILTER html %].
|
||||
[%+ old_product.max_votes_per_bug FILTER html %] to
|
||||
[%+ product.max_votes_per_bug FILTER html %].
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% IF updated_votestoconfirm %]
|
||||
[% IF product.votes_to_confirm != old_product.votes_to_confirm %]
|
||||
<p>
|
||||
Updated number of votes needed to confirm a [% terms.bug %] from
|
||||
[%+ old_votestoconfirm FILTER html %] to
|
||||
[%+ new_votestoconfirm FILTER html %].
|
||||
[%+ old_product.votes_to_confirm FILTER html %] to
|
||||
[%+ product.votes_to_confirm FILTER html %].
|
||||
[% updated = 1 %]
|
||||
[% END %]
|
||||
|
||||
[% UNLESS updated_bugsubmitstatus ||
|
||||
updated_description ||
|
||||
updated_milestoneurl ||
|
||||
updated_votesperuser ||
|
||||
updated_maxvotesperbug ||
|
||||
updated_votestoconfirm ||
|
||||
updated_defaultmilestone ||
|
||||
updated_product %]
|
||||
<p>Nothing changed for product '[% name FILTER html %]'.
|
||||
[% UNLESS updated %]
|
||||
<p>Nothing changed for product '[% product.name FILTER html %]'.
|
||||
[% END %]
|
||||
|
||||
[%# Note that this display of changed votes and/or confirmed bugs is
|
||||
|
|
|
@ -506,8 +506,6 @@
|
|||
],
|
||||
|
||||
'admin/products/groupcontrol/edit.html.tmpl' => [
|
||||
'filt_classification',
|
||||
'filt_product',
|
||||
'group.bugcount',
|
||||
'group.id',
|
||||
'const.CONTROLMAPNA',
|
||||
|
@ -522,7 +520,6 @@
|
|||
|
||||
'admin/products/confirm-delete.html.tmpl' => [
|
||||
'classification_url_part',
|
||||
'bug_count',
|
||||
],
|
||||
|
||||
'admin/products/footer.html.tmpl' => [
|
||||
|
|
Загрузка…
Ссылка в новой задаче