initialowner
initialqacontact
description
+ isactive
);
use constant UPDATE_COLUMNS => qw(
initialowner
initialqacontact
description
+ isactive
);
use constant REQUIRED_FIELD_MAP => {
description => \&_check_description,
initial_cc => \&_check_cc_list,
name => \&_check_name,
+ isactive => \&Bugzilla::Object::check_boolean,
};
use constant VALIDATOR_DEPENDENCIES => {
sub set_name { $_[0]->set('name', $_[1]); }
sub set_description { $_[0]->set('description', $_[1]); }
+sub set_is_active { $_[0]->set('isactive', $_[1]); }
sub set_default_assignee {
my ($self, $owner) = @_;
sub description { return $_[0]->{'description'}; }
sub product_id { return $_[0]->{'product_id'}; }
+sub is_active { return $_[0]->{'isactive'}; }
##############################################
# Implement Bugzilla::Field::ChoiceInterface #
use constant FIELD_NAME => 'component';
use constant is_default => 0;
-use constant is_active => 1;
sub is_set_on_bug {
my ($self, $bug) = @_;
REFERENCES => {TABLE => 'products',
COLUMN => 'id',
DELETE => 'CASCADE'}},
+ isactive => {TYPE => 'BOOLEAN', NOTNULL => 1,
+ DEFAULT => 'TRUE'},
],
INDEXES => [
versions_product_id_idx => {FIELDS => [qw(product_id value)],
value => {TYPE => 'varchar(20)', NOTNULL => 1},
sortkey => {TYPE => 'INT2', NOTNULL => 1,
DEFAULT => 0},
+ isactive => {TYPE => 'BOOLEAN', NOTNULL => 1,
+ DEFAULT => 'TRUE'},
],
INDEXES => [
milestones_product_id_idx => {FIELDS => [qw(product_id value)],
COLUMN => 'userid',
DELETE => 'SET NULL'}},
description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
+ isactive => {TYPE => 'BOOLEAN', NOTNULL => 1,
+ DEFAULT => 'TRUE'},
],
INDEXES => [
components_product_id_idx => {FIELDS => [qw(product_id name)],
# 2010-07-18 LpSolit@gmail.com - Bug 119703
_remove_attachment_isurl();
+ # 2009-05-07 ghendricks@novell.com - Bug 77193
+ _add_isactive_to_product_fields();
+
################################################################
# New --TABLE-- changes should go *** A B O V E *** this point #
################################################################
}
}
+sub _add_isactive_to_product_fields {
+ my $dbh = Bugzilla->dbh;
+
+ # If we add the isactive column all values should start off as active
+ if (!$dbh->bz_column_info('components', 'isactive')) {
+ $dbh->bz_add_column('components', 'isactive',
+ {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'});
+ }
+
+ if (!$dbh->bz_column_info('versions', 'isactive')) {
+ $dbh->bz_add_column('versions', 'isactive',
+ {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'});
+ }
+
+ if (!$dbh->bz_column_info('milestones', 'isactive')) {
+ $dbh->bz_add_column('milestones', 'isactive',
+ {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'});
+ }
+}
+
sub _migrate_field_visibility_value {
my $dbh = Bugzilla->dbh;
value
product_id
sortkey
+ isactive
);
use constant REQUIRED_FIELD_MAP => {
use constant UPDATE_COLUMNS => qw(
value
sortkey
+ isactive
);
use constant VALIDATORS => {
- product => \&_check_product,
- sortkey => \&_check_sortkey,
- value => \&_check_value,
+ product => \&_check_product,
+ sortkey => \&_check_sortkey,
+ value => \&_check_value,
+ isactive => \&Bugzilla::Object::check_boolean,
};
use constant VALIDATOR_DEPENDENCIES => {
# Methods
################################
-sub set_name { $_[0]->set('value', $_[1]); }
-sub set_sortkey { $_[0]->set('sortkey', $_[1]); }
+sub set_name { $_[0]->set('value', $_[1]); }
+sub set_sortkey { $_[0]->set('sortkey', $_[1]); }
+sub set_is_active { $_[0]->set('isactive', $_[1]); }
sub bug_count {
my $self = shift;
sub name { return $_[0]->{'value'}; }
sub product_id { return $_[0]->{'product_id'}; }
sub sortkey { return $_[0]->{'sortkey'}; }
+sub is_active { return $_[0]->{'isactive'}; }
sub product {
my $self = shift;
id
value
product_id
+ isactive
);
use constant REQUIRED_FIELD_MAP => {
use constant UPDATE_COLUMNS => qw(
value
+ isactive
);
use constant VALIDATORS => {
- product => \&_check_product,
- value => \&_check_value,
+ product => \&_check_product,
+ value => \&_check_value,
+ isactive => \&Bugzilla::Object::check_boolean,
};
use constant VALIDATOR_DEPENDENCIES => {
###############################
sub product_id { return $_[0]->{'product_id'}; }
+sub is_active { return $_[0]->{'isactive'}; }
sub product {
my $self = shift;
# Validators
################################
-sub set_name { $_[0]->set('value', $_[1]); }
+sub set_name { $_[0]->set('value', $_[1]); }
+sub set_is_active { $_[0]->set('isactive', $_[1]); }
sub _check_value {
my ($invocant, $name, undef, $params) = @_;
# versions for the product (if there is only one product on the list of
# products), and a list of components for the product.
if ($one_product) {
- $vars->{'versions'} = [map($_->name ,@{ $one_product->versions })];
- $vars->{'components'} = [map($_->name, @{ $one_product->components })];
+ $vars->{'versions'} = [map($_->name, grep($_->is_active, @{ $one_product->versions }))];
+ $vars->{'components'} = [map($_->name, grep($_->is_active, @{ $one_product->components }))];
if (Bugzilla->params->{'usetargetmilestone'}) {
- $vars->{'targetmilestones'} = [map($_->name,
- @{ $one_product->milestones })];
+ $vars->{'targetmilestones'} = [map($_->name, grep($_->is_active,
+ @{ $one_product->milestones }))];
}
}
}
my $default_qa_contact = trim($cgi->param('initialqacontact') || '');
my $description = trim($cgi->param('description') || '');
my @initial_cc = $cgi->param('initialcc');
+ my $isactive = $cgi->param('isactive');
my $component = Bugzilla::Component->create({
name => $comp_name,
my $default_qa_contact = trim($cgi->param('initialqacontact') || '');
my $description = trim($cgi->param('description') || '');
my @initial_cc = $cgi->param('initialcc');
-
+ my $isactive = $cgi->param('isactive');
+
my $component =
Bugzilla::Component->check({ product => $product, name => $comp_old_name });
$component->set_default_assignee($default_assignee);
$component->set_default_qa_contact($default_qa_contact);
$component->set_cc_list(\@initial_cc);
+ $component->set_is_active($isactive);
my $changes = $component->update();
$vars->{'message'} = 'component_updated';
my $action = trim($cgi->param('action') || '');
my $showbugcounts = (defined $cgi->param('showbugcounts'));
my $token = $cgi->param('token');
+my $isactive = $cgi->param('isactive');
#
# product = '' -> Show nice list of products
if ($action eq 'new') {
check_token_data($token, 'add_milestone');
- my $milestone = Bugzilla::Milestone->create({ value => $milestone_name,
- product => $product,
- sortkey => $sortkey });
+
+ my $milestone = Bugzilla::Milestone->create({ value => $milestone_name,
+ product => $product,
+ sortkey => $sortkey });
+
delete_token($token);
$vars->{'message'} = 'milestone_created';
$milestone->set_name($milestone_name);
$milestone->set_sortkey($sortkey);
+ $milestone->set_is_active($isactive);
my $changes = $milestone->update();
# Reloading the product since the default milestone name
# could have been changed.
my $action = trim($cgi->param('action') || '');
my $showbugcounts = (defined $cgi->param('showbugcounts'));
my $token = $cgi->param('token');
+my $isactive = $cgi->param('isactive');
#
# product = '' -> Show nice list of products
$dbh->bz_start_transaction();
$version->set_name($version_name);
+ $version->set_is_active($isactive);
my $changes = $version->update();
$dbh->bz_commit_transaction();
#
# Eventually maybe each product should have a "current version"
# parameter.
-$vars->{'version'} = [map($_->name, @{$product->versions})];
+$vars->{'version'} = $product->versions;
my $version_cookie = $cgi->cookie("VERSION-" . $product->name);
# Get list of milestones.
if ( Bugzilla->params->{'usetargetmilestone'} ) {
- $vars->{'target_milestone'} = [map($_->name, @{$product->milestones})];
+ $vars->{'target_milestone'} = $product->milestones;
if (formvalue('target_milestone')) {
$default{'target_milestone'} = formvalue('target_milestone');
} else {
</tr>
<tr>
<TD VALIGN="top">Open for [% terms.bugs %]:</TD>
- <TD VALIGN="top">[% IF product.is_active %]Yes[% ELSE %]No[% END %]</td>
+ <TD VALIGN="top">[% IF product.is_active && comp.isactive %]Yes[% ELSE %]No[% END %]</td>
</tr>
<tr>
<td valign="top">[% terms.Bugs %]:</td>
[% PROCESS "admin/components/edit-common.html.tmpl" %]
+ <tr>
+ <td><label for="isactive">Enabled For [% terms.Bugs %]:</label></td>
+ <td><input id="isactive" name="isactive" type="checkbox" value="1"
+ [% 'checked="checked"' IF comp.isactive %]></td>
+ </tr>
<tr>
<td>[% terms.Bugs %]:</td>
<td>
name => "initialowner"
heading => "Default Assignee"
},
+ {
+ name => "isactive"
+ heading => "Active"
+ yesno_field => 1
+ },
]
%]
<td><input id="sortkey" size="20" maxlength="20" name="sortkey" value="
[%- milestone.sortkey FILTER html %]"></td>
</tr>
-
+ <tr>
+ <th><label for="isactive">Enabled For [% terms.Bugs %]:</label></th>
+ <td><input id="isactive" name="isactive" type="checkbox" value="1"
+ [% 'checked="checked"' IF milestone.isactive %]></td>
+ </tr>
</table>
<input type="hidden" name="milestoneold" value="[% milestone.name FILTER html %]">
{
name => "sortkey"
heading => "Sortkey"
+ },
+ {
+ name => "isactive"
+ heading => "Active"
+ yesno_field => 1
}
]
%]
<td><input id="version" size="64" maxlength="64" name="version" value="
[%- version.name FILTER html %]"></td>
</tr>
-
+ <tr>
+ <th><label for="isactive">Enabled For [% terms.Bugs %]:</label></th>
+ <td><input id="isactive" name="isactive" type="checkbox" value="1"
+ [% 'checked="checked"' IF version.isactive %]></td>
+ </tr>
</table>
<input type="hidden" name="versionold" value="[% version.name FILTER html %]">
name => "name"
heading => "Edit version..."
contentlink => edit_contentlink
+ },
+ {
+ name => "isactive"
+ heading => "Active"
+ yesno_field => 1
}
]
%]
[% END %]
[%- FOREACH c = product.components %]
+ [% NEXT IF NOT c.is_active %]
<option value="[% c.name FILTER html %]"
id="v[% c.id FILTER html %]_component"
[% IF c.name == default.component_ %]
<td rowspan="3">
<select name="version" id="version" size="5">
[%- FOREACH v = version %]
- <option value="[% v FILTER html %]"
- [% ' selected="selected"' IF v == default.version %]>[% v FILTER html -%]
+ [% NEXT IF NOT v.is_active %]
+ <option value="[% v.name FILTER html %]"
+ [% ' selected="selected"' IF v.name == default.version %]>[% v.name FILTER html -%]
</option>
[%- END %]
</select>
<select name="[% field.name FILTER html %]"
id="[% field.name FILTER html %]">
[%- FOREACH x = ${field.name} %]
- <option value="[% x FILTER html %]"
- [% " selected=\"selected\"" IF x == default.${field.name} %]>
- [% display_value(field.name, x) FILTER html %]
+ [% NEXT IF NOT x.is_active %]
+ <option value="[% x.name FILTER html %]"
+ [% " selected=\"selected\"" IF x.name == default.${field.name} %]>
+ [% display_value(field.name, x.name) FILTER html %]
</option>
[% END %]
</select>
AND bug.choices.${selname}.size > 1 %]
<select id="[% selname %]" name="[% selname %]">
[% FOREACH x = bug.choices.${selname} %]
+ [% NEXT IF NOT x.is_active AND x.name != bug.${selname} %]
<option value="[% x.name FILTER html %]"
[% " selected" IF x.name == bug.${selname} %]>
[%- x.name FILTER html %]
[% legal_values = field.legal_values %]
[% END %]
[% FOREACH legal_value = legal_values %]
+ [% NEXT IF NOT legal_value.is_active AND NOT value.contains(legal_value.name).size %]
<option value="[% legal_value.name FILTER html %]"
id="v[% legal_value.id FILTER html %]_
[%- field.name FILTER html %]"
<li>Default CC list deleted</li>
[% END %]
[% END %]
+ [% IF changes.isactive.defined %]
+ <li>[% comp.is_active ? "Enabled" : "Disabled" %] for [% terms.bugs %]</li>
+ [% END %]
[% Hook.process('component_updated_fields') %]
</ul>
[% ELSE %]
[% IF changes.sortkey.defined %]
<li>Sortkey updated to <em>[% milestone.sortkey FILTER html %]</em>
[% END %]
+ [% IF changes.isactive.defined %]
+ <li>[% milestone.is_active ? "Enabled" : "Disabled" %] for [% terms.bugs %]</li>
+ [% END %]
</ul>
[% ELSE %]
No changes made to milestone <em>[% milestone.name FILTER html %]</em>.
[% ELSIF message_tag == "version_updated" %]
[% title = "Version Updated" %]
[% IF changes.size %]
- [% IF changes.value.defined %]
- Version renamed to <em>[% version.name FILTER html %]</em>.
- [% END %]
+ Changes to the version <em>[% version.name FILTER html %]</em>
+ have been saved:
+ <ul>
+ [% IF changes.value.defined %]
+ <li>Version renamed to <em>[% version.name FILTER html %]</em></li>
+ [% END %]
+ [% IF changes.isactive.defined %]
+ <li>[% version.is_active ? "Enabled" : "Disabled" %] for [% terms.bugs %]</li>
+ [% END %]
+ </ul>
[% ELSE %]
No changes made to version <em>[% version.name FILTER html %]</em>.
[% END %]