Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
bcab6fcb
You need to sign in or sign up before continuing.
Commit
bcab6fcb
authored
Jul 05, 2010
by
Kent Rogers
Committed by
Max Kanat-Alexander
Jul 05, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 514618: Allow restricting the visibility and values of fields by
classification. r=mkanat, r=timello, a=mkanat
parent
65528cc7
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
74 additions
and
4 deletions
+74
-4
Bug.pm
Bugzilla/Bug.pm
+4
-0
Classification.pm
Bugzilla/Classification.pm
+10
-1
Constants.pm
Bugzilla/Constants.pm
+1
-0
Field.pm
Bugzilla/Field.pm
+1
-1
Choice.pm
Bugzilla/Field/Choice.pm
+1
-0
Product.pm
Bugzilla/Product.pm
+16
-0
enter_bug.cgi
enter_bug.cgi
+2
-1
field.js
js/field.js
+14
-0
edit.html.tmpl
template/en/default/bug/edit.html.tmpl
+22
-1
field-events.js.tmpl
template/en/default/bug/field-events.js.tmpl
+3
-0
No files found.
Bugzilla/Bug.pm
View file @
bcab6fcb
...
...
@@ -3415,9 +3415,13 @@ sub choices {
if
(
!
grep
(
$_
->
name
eq
$self
->
product_obj
->
name
,
@products
))
{
unshift
(
@products
,
$self
->
product_obj
);
}
my
%
class_ids
=
map
{
$_
->
classification_id
=>
1
}
@products
;
my
$classifications
=
Bugzilla::
Classification
->
new_from_list
([
keys
%
class_ids
]);
my
%
choices
=
(
bug_status
=>
$self
->
statuses_available
,
classification
=>
$classifications
,
product
=>
\
@products
,
component
=>
$self
->
product_obj
->
components
,
version
=>
$self
->
product_obj
->
versions
,
...
...
Bugzilla/Classification.pm
View file @
bcab6fcb
...
...
@@ -20,11 +20,12 @@ use strict;
package
Bugzilla::
Classification
;
use
Bugzilla::
Constants
;
use
Bugzilla::
Field
;
use
Bugzilla::
Util
;
use
Bugzilla::
Error
;
use
Bugzilla::
Product
;
use
base
qw(Bugzilla::Object)
;
use
base
qw(Bugzilla::
Field::ChoiceInterface Bugzilla::
Object)
;
###############################
#### Initialization ####
...
...
@@ -111,6 +112,14 @@ sub _check_sortkey {
return
$sortkey
;
}
#####################################
# Implement Bugzilla::Field::Choice #
#####################################
use
constant
FIELD_NAME
=>
'classification'
;
use
constant
is_default
=>
0
;
use
constant
is_active
=>
1
;
###############################
#### Methods ####
###############################
...
...
Bugzilla/Constants.pm
View file @
bcab6fcb
...
...
@@ -403,6 +403,7 @@ use constant EMPTY_DATETIME_REGEX => qr/^[0\-:\sA-Za-z]+$/;
# See the POD for Bugzilla::Field/is_abnormal to see why these are listed
# here.
use
constant
ABNORMAL_SELECTS
=>
qw(
classification
product
component
)
;
...
...
Bugzilla/Field.pm
View file @
bcab6fcb
...
...
@@ -166,7 +166,7 @@ use constant DEFAULT_FIELDS => (
{
name
=>
'short_desc'
,
desc
=>
'Summary'
,
in_new_bugmail
=>
1
,
is_mandatory
=>
1
,
buglist
=>
1
},
{
name
=>
'classification'
,
desc
=>
'Classification'
,
in_new_bugmail
=>
1
,
buglist
=>
1
},
type
=>
FIELD_TYPE_SINGLE_SELECT
,
buglist
=>
1
},
{
name
=>
'product'
,
desc
=>
'Product'
,
in_new_bugmail
=>
1
,
type
=>
FIELD_TYPE_SINGLE_SELECT
,
buglist
=>
1
},
{
name
=>
'version'
,
desc
=>
'Version'
,
in_new_bugmail
=>
1
,
...
...
Bugzilla/Field/Choice.pm
View file @
bcab6fcb
...
...
@@ -64,6 +64,7 @@ use constant VALIDATORS => {
use
constant
CLASS_MAP
=>
{
bug_status
=>
'Bugzilla::Status'
,
classification
=>
'Bugzilla::Classification'
,
component
=>
'Bugzilla::Component'
,
product
=>
'Bugzilla::Product'
,
};
...
...
Bugzilla/Product.pm
View file @
bcab6fcb
...
...
@@ -791,6 +791,13 @@ sub flag_types {
return
$self
->
{
'flag_types'
};
}
sub
classification
{
my
$self
=
shift
;
$self
->
{
'classification'
}
||=
new
Bugzilla::
Classification
(
$self
->
classification_id
);
return
$self
->
{
'classification'
};
}
###############################
#### Accessors ######
###############################
...
...
@@ -853,6 +860,7 @@ Bugzilla::Product - Bugzilla product class.
my $bug_ids = $product->bug_ids();
my $has_access = $product->user_has_access($user);
my $flag_types = $product->flag_types();
my $classification = $product->classification();
my $id = $product->id;
my $name = $product->name;
...
...
@@ -1021,6 +1029,14 @@ a group is valid in a particular product.)
Returns: Two references to an array of flagtype objects.
=item C<classification()>
Description: Returns the classification the product belongs to.
Params: none.
Returns: A Bugzilla::Classification object.
=back
=head1 SUBROUTINES
...
...
enter_bug.cgi
View file @
bcab6fcb
...
...
@@ -416,7 +416,8 @@ foreach my $field (@enter_bug_fields) {
}
# This allows the Field visibility and value controls to work with the
# Product field as a parent.
# Classification and Product fields as a parent.
$default
{
'classification'
}
=
$product
->
classification
->
name
;
$default
{
'product'
}
=
$product
->
name
;
if
(
$cloned_bug_id
)
{
...
...
js/field.js
View file @
bcab6fcb
...
...
@@ -375,6 +375,20 @@ function updateCommentTagControl(checkbox, form) {
}
/**
* Reset the value of the classification field and fire an event change
* on it. Called when the product changes, in case the classification
* field (which is hidden) controls the visibility of any other fields.
*/
function
setClassification
()
{
var
classification
=
document
.
getElementById
(
'classification'
);
var
product
=
document
.
getElementById
(
'product'
);
var
selected_product
=
product
.
value
;
var
select_classification
=
all_classifications
[
selected_product
];
classification
.
value
=
select_classification
;
bz_fireEvent
(
classification
,
'change'
);
}
/**
* Says that a field should only be displayed when another field has
* a certain value. May only be called after the controller has already
* been added to the DOM.
...
...
template/en/default/bug/edit.html.tmpl
View file @
bcab6fcb
...
...
@@ -128,6 +128,15 @@
[% END %]
/* Index all classifications so we can keep track of the classification
* for the selected product, which could control field visibility.
*/
var all_classifications = new Array([% bug.choices.product.size %]);
[%- FOREACH product = bug.choices.product %]
all_classifications['[% product.name FILTER js %]'] = '
[%- product.classification.name FILTER js %]';
[%- END %]
//-->
</script>
...
...
@@ -319,7 +328,6 @@
[%#############%]
[%# PRODUCT #%]
[%#############%]
<tr>
[% INCLUDE bug/field.html.tmpl
bug = bug, field = bug_fields.product,
...
...
@@ -327,6 +335,19 @@
desc_url = 'describecomponents.cgi', value = bug.product
editable = bug.check_can_change_field('product', 0, 1) %]
</tr>
[%# Classification is here so that it can be used in value controllers
# and visibility controllers. It comes after product because
# it uses some javascript that depends on the existence of the
# product field.
#%]
<tr class="bz_default_hidden">
[% INCLUDE bug/field.html.tmpl
bug = bug field = bug_fields.classification
override_legal_values = bug.choices.classification
value = bug.classification
editable = bug.check_can_change_field('product', 0, 1) %]
</tr>
[%###############%]
[%# Component #%]
[%###############%]
...
...
template/en/default/bug/field-events.js.tmpl
View file @
bcab6fcb
...
...
@@ -39,3 +39,6 @@
[% legal_value.id FILTER js %]);
[% END %]
[% END %]
[% IF field.name == 'classification' %]
YAHOO.util.Event.on('product', 'change', setClassification);
[% END %]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment