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
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 {
...
@@ -3415,9 +3415,13 @@ sub choices {
if
(
!
grep
(
$_
->
name
eq
$self
->
product_obj
->
name
,
@products
))
{
if
(
!
grep
(
$_
->
name
eq
$self
->
product_obj
->
name
,
@products
))
{
unshift
(
@products
,
$self
->
product_obj
);
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
=
(
my
%
choices
=
(
bug_status
=>
$self
->
statuses_available
,
bug_status
=>
$self
->
statuses_available
,
classification
=>
$classifications
,
product
=>
\
@products
,
product
=>
\
@products
,
component
=>
$self
->
product_obj
->
components
,
component
=>
$self
->
product_obj
->
components
,
version
=>
$self
->
product_obj
->
versions
,
version
=>
$self
->
product_obj
->
versions
,
...
...
Bugzilla/Classification.pm
View file @
bcab6fcb
...
@@ -20,11 +20,12 @@ use strict;
...
@@ -20,11 +20,12 @@ use strict;
package
Bugzilla::
Classification
;
package
Bugzilla::
Classification
;
use
Bugzilla::
Constants
;
use
Bugzilla::
Constants
;
use
Bugzilla::
Field
;
use
Bugzilla::
Util
;
use
Bugzilla::
Util
;
use
Bugzilla::
Error
;
use
Bugzilla::
Error
;
use
Bugzilla::
Product
;
use
Bugzilla::
Product
;
use
base
qw(Bugzilla::Object)
;
use
base
qw(Bugzilla::
Field::ChoiceInterface Bugzilla::
Object)
;
###############################
###############################
#### Initialization ####
#### Initialization ####
...
@@ -111,6 +112,14 @@ sub _check_sortkey {
...
@@ -111,6 +112,14 @@ sub _check_sortkey {
return
$sortkey
;
return
$sortkey
;
}
}
#####################################
# Implement Bugzilla::Field::Choice #
#####################################
use
constant
FIELD_NAME
=>
'classification'
;
use
constant
is_default
=>
0
;
use
constant
is_active
=>
1
;
###############################
###############################
#### Methods ####
#### Methods ####
###############################
###############################
...
...
Bugzilla/Constants.pm
View file @
bcab6fcb
...
@@ -403,6 +403,7 @@ use constant EMPTY_DATETIME_REGEX => qr/^[0\-:\sA-Za-z]+$/;
...
@@ -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
# See the POD for Bugzilla::Field/is_abnormal to see why these are listed
# here.
# here.
use
constant
ABNORMAL_SELECTS
=>
qw(
use
constant
ABNORMAL_SELECTS
=>
qw(
classification
product
product
component
component
)
;
)
;
...
...
Bugzilla/Field.pm
View file @
bcab6fcb
...
@@ -166,7 +166,7 @@ use constant DEFAULT_FIELDS => (
...
@@ -166,7 +166,7 @@ use constant DEFAULT_FIELDS => (
{
name
=>
'short_desc'
,
desc
=>
'Summary'
,
in_new_bugmail
=>
1
,
{
name
=>
'short_desc'
,
desc
=>
'Summary'
,
in_new_bugmail
=>
1
,
is_mandatory
=>
1
,
buglist
=>
1
},
is_mandatory
=>
1
,
buglist
=>
1
},
{
name
=>
'classification'
,
desc
=>
'Classification'
,
in_new_bugmail
=>
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
,
{
name
=>
'product'
,
desc
=>
'Product'
,
in_new_bugmail
=>
1
,
type
=>
FIELD_TYPE_SINGLE_SELECT
,
buglist
=>
1
},
type
=>
FIELD_TYPE_SINGLE_SELECT
,
buglist
=>
1
},
{
name
=>
'version'
,
desc
=>
'Version'
,
in_new_bugmail
=>
1
,
{
name
=>
'version'
,
desc
=>
'Version'
,
in_new_bugmail
=>
1
,
...
...
Bugzilla/Field/Choice.pm
View file @
bcab6fcb
...
@@ -64,6 +64,7 @@ use constant VALIDATORS => {
...
@@ -64,6 +64,7 @@ use constant VALIDATORS => {
use
constant
CLASS_MAP
=>
{
use
constant
CLASS_MAP
=>
{
bug_status
=>
'Bugzilla::Status'
,
bug_status
=>
'Bugzilla::Status'
,
classification
=>
'Bugzilla::Classification'
,
component
=>
'Bugzilla::Component'
,
component
=>
'Bugzilla::Component'
,
product
=>
'Bugzilla::Product'
,
product
=>
'Bugzilla::Product'
,
};
};
...
...
Bugzilla/Product.pm
View file @
bcab6fcb
...
@@ -791,6 +791,13 @@ sub flag_types {
...
@@ -791,6 +791,13 @@ sub flag_types {
return
$self
->
{
'flag_types'
};
return
$self
->
{
'flag_types'
};
}
}
sub
classification
{
my
$self
=
shift
;
$self
->
{
'classification'
}
||=
new
Bugzilla::
Classification
(
$self
->
classification_id
);
return
$self
->
{
'classification'
};
}
###############################
###############################
#### Accessors ######
#### Accessors ######
###############################
###############################
...
@@ -853,6 +860,7 @@ Bugzilla::Product - Bugzilla product class.
...
@@ -853,6 +860,7 @@ Bugzilla::Product - Bugzilla product class.
my $bug_ids = $product->bug_ids();
my $bug_ids = $product->bug_ids();
my $has_access = $product->user_has_access($user);
my $has_access = $product->user_has_access($user);
my $flag_types = $product->flag_types();
my $flag_types = $product->flag_types();
my $classification = $product->classification();
my $id = $product->id;
my $id = $product->id;
my $name = $product->name;
my $name = $product->name;
...
@@ -1021,6 +1029,14 @@ a group is valid in a particular product.)
...
@@ -1021,6 +1029,14 @@ a group is valid in a particular product.)
Returns: Two references to an array of flagtype objects.
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
=back
=head1 SUBROUTINES
=head1 SUBROUTINES
...
...
enter_bug.cgi
View file @
bcab6fcb
...
@@ -416,7 +416,8 @@ foreach my $field (@enter_bug_fields) {
...
@@ -416,7 +416,8 @@ foreach my $field (@enter_bug_fields) {
}
}
# This allows the Field visibility and value controls to work with the
# 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
;
$default
{
'product'
}
=
$product
->
name
;
if
(
$cloned_bug_id
)
{
if
(
$cloned_bug_id
)
{
...
...
js/field.js
View file @
bcab6fcb
...
@@ -375,6 +375,20 @@ function updateCommentTagControl(checkbox, form) {
...
@@ -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
* Says that a field should only be displayed when another field has
* a certain value. May only be called after the controller has already
* a certain value. May only be called after the controller has already
* been added to the DOM.
* been added to the DOM.
...
...
template/en/default/bug/edit.html.tmpl
View file @
bcab6fcb
...
@@ -128,6 +128,15 @@
...
@@ -128,6 +128,15 @@
[% END %]
[% 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>
</script>
...
@@ -319,7 +328,6 @@
...
@@ -319,7 +328,6 @@
[%#############%]
[%#############%]
[%# PRODUCT #%]
[%# PRODUCT #%]
[%#############%]
[%#############%]
<tr>
<tr>
[% INCLUDE bug/field.html.tmpl
[% INCLUDE bug/field.html.tmpl
bug = bug, field = bug_fields.product,
bug = bug, field = bug_fields.product,
...
@@ -327,6 +335,19 @@
...
@@ -327,6 +335,19 @@
desc_url = 'describecomponents.cgi', value = bug.product
desc_url = 'describecomponents.cgi', value = bug.product
editable = bug.check_can_change_field('product', 0, 1) %]
editable = bug.check_can_change_field('product', 0, 1) %]
</tr>
</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 #%]
[%# Component #%]
[%###############%]
[%###############%]
...
...
template/en/default/bug/field-events.js.tmpl
View file @
bcab6fcb
...
@@ -39,3 +39,6 @@
...
@@ -39,3 +39,6 @@
[% legal_value.id FILTER js %]);
[% legal_value.id FILTER js %]);
[% END %]
[% END %]
[% 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