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
77b3adda
Commit
77b3adda
authored
Aug 31, 2010
by
Dave Lawrence
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 77193 - Add the ability to retire (disable) old versions, components and milestones
r/a=mkanat
parent
c75bcea5
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
114 additions
and
16 deletions
+114
-16
Component.pm
Bugzilla/Component.pm
+5
-1
Schema.pm
Bugzilla/DB/Schema.pm
+6
-0
DB.pm
Bugzilla/Install/DB.pm
+23
-0
Milestone.pm
Bugzilla/Milestone.pm
+5
-0
Version.pm
Bugzilla/Version.pm
+5
-0
buglist.cgi
buglist.cgi
+4
-4
editcomponents.cgi
editcomponents.cgi
+3
-0
editmilestones.cgi
editmilestones.cgi
+4
-0
editversions.cgi
editversions.cgi
+2
-0
enter_bug.cgi
enter_bug.cgi
+2
-2
confirm-delete.html.tmpl
...late/en/default/admin/components/confirm-delete.html.tmpl
+1
-1
edit.html.tmpl
template/en/default/admin/components/edit.html.tmpl
+5
-0
list.html.tmpl
template/en/default/admin/components/list.html.tmpl
+5
-0
edit.html.tmpl
template/en/default/admin/milestones/edit.html.tmpl
+5
-1
list.html.tmpl
template/en/default/admin/milestones/list.html.tmpl
+5
-0
edit.html.tmpl
template/en/default/admin/versions/edit.html.tmpl
+5
-1
list.html.tmpl
template/en/default/admin/versions/list.html.tmpl
+5
-0
create.html.tmpl
template/en/default/bug/create/create.html.tmpl
+8
-5
edit.html.tmpl
template/en/default/bug/edit.html.tmpl
+1
-0
field.html.tmpl
template/en/default/bug/field.html.tmpl
+1
-0
messages.html.tmpl
template/en/default/global/messages.html.tmpl
+14
-1
No files found.
Bugzilla/Component.pm
View file @
77b3adda
...
...
@@ -45,6 +45,7 @@ use constant DB_COLUMNS => qw(
initialowner
initialqacontact
description
isactive
)
;
use
constant
UPDATE_COLUMNS
=>
qw(
...
...
@@ -52,6 +53,7 @@ use constant UPDATE_COLUMNS => qw(
initialowner
initialqacontact
description
isactive
)
;
use
constant
REQUIRED_FIELD_MAP
=>
{
...
...
@@ -66,6 +68,7 @@ use constant VALIDATORS => {
description
=>
\&
_check_description
,
initial_cc
=>
\&
_check_cc_list
,
name
=>
\&
_check_name
,
isactive
=>
\&
Bugzilla::Object::
check_boolean
,
};
use
constant
VALIDATOR_DEPENDENCIES
=>
{
...
...
@@ -300,6 +303,7 @@ sub _create_series {
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
)
=
@_
;
...
...
@@ -416,6 +420,7 @@ sub product {
sub
description
{
return
$_
[
0
]
->
{
'description'
};
}
sub
product_id
{
return
$_
[
0
]
->
{
'product_id'
};
}
sub
is_active
{
return
$_
[
0
]
->
{
'isactive'
};
}
##############################################
# Implement Bugzilla::Field::ChoiceInterface #
...
...
@@ -423,7 +428,6 @@ sub product_id { return $_[0]->{'product_id'}; }
use
constant
FIELD_NAME
=>
'component'
;
use
constant
is_default
=>
0
;
use
constant
is_active
=>
1
;
sub
is_set_on_bug
{
my
(
$self
,
$bug
)
=
@_
;
...
...
Bugzilla/DB/Schema.pm
View file @
77b3adda
...
...
@@ -718,6 +718,8 @@ use constant ABSTRACT_SCHEMA => {
REFERENCES
=>
{
TABLE
=>
'products'
,
COLUMN
=>
'id'
,
DELETE
=>
'CASCADE'
}},
isactive
=>
{
TYPE
=>
'BOOLEAN'
,
NOTNULL
=>
1
,
DEFAULT
=>
'TRUE'
},
],
INDEXES
=>
[
versions_product_id_idx
=>
{
FIELDS
=>
[
qw(product_id value)
],
...
...
@@ -736,6 +738,8 @@ use constant ABSTRACT_SCHEMA => {
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)
],
...
...
@@ -1264,6 +1268,8 @@ use constant ABSTRACT_SCHEMA => {
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)
],
...
...
Bugzilla/Install/DB.pm
View file @
77b3adda
...
...
@@ -631,6 +631,9 @@ sub update_table_definitions {
# 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 #
################################################################
...
...
@@ -3397,6 +3400,26 @@ sub _remove_attachment_isurl {
}
}
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
;
...
...
Bugzilla/Milestone.pm
View file @
77b3adda
...
...
@@ -43,6 +43,7 @@ use constant DB_COLUMNS => qw(
value
product_id
sortkey
isactive
)
;
use
constant
REQUIRED_FIELD_MAP
=>
{
...
...
@@ -52,12 +53,14 @@ 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
,
isactive
=>
\&
Bugzilla::Object::
check_boolean
,
};
use
constant
VALIDATOR_DEPENDENCIES
=>
{
...
...
@@ -205,6 +208,7 @@ sub _check_product {
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
;
...
...
@@ -226,6 +230,7 @@ sub bug_count {
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
;
...
...
Bugzilla/Version.pm
View file @
77b3adda
...
...
@@ -44,6 +44,7 @@ use constant DB_COLUMNS => qw(
id
value
product_id
isactive
)
;
use
constant
REQUIRED_FIELD_MAP
=>
{
...
...
@@ -52,11 +53,13 @@ use constant REQUIRED_FIELD_MAP => {
use
constant
UPDATE_COLUMNS
=>
qw(
value
isactive
)
;
use
constant
VALIDATORS
=>
{
product
=>
\&
_check_product
,
value
=>
\&
_check_value
,
isactive
=>
\&
Bugzilla::Object::
check_boolean
,
};
use
constant
VALIDATOR_DEPENDENCIES
=>
{
...
...
@@ -153,6 +156,7 @@ sub remove_from_db {
###############################
sub
product_id
{
return
$_
[
0
]
->
{
'product_id'
};
}
sub
is_active
{
return
$_
[
0
]
->
{
'isactive'
};
}
sub
product
{
my
$self
=
shift
;
...
...
@@ -167,6 +171,7 @@ sub product {
################################
sub
set_name
{
$_
[
0
]
->
set
(
'value'
,
$_
[
1
]);
}
sub
set_is_active
{
$_
[
0
]
->
set
(
'isactive'
,
$_
[
1
]);
}
sub
_check_value
{
my
(
$invocant
,
$name
,
undef
,
$params
)
=
@_
;
...
...
buglist.cgi
View file @
77b3adda
...
...
@@ -1171,11 +1171,11 @@ if ($dotweak && scalar @bugs) {
# 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
})
)
];
}
}
}
...
...
editcomponents.cgi
View file @
77b3adda
...
...
@@ -128,6 +128,7 @@ if ($action eq 'new') {
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
,
...
...
@@ -230,6 +231,7 @@ if ($action eq 'update') {
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
});
...
...
@@ -239,6 +241,7 @@ if ($action eq 'update') {
$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'
;
...
...
editmilestones.cgi
View file @
77b3adda
...
...
@@ -60,6 +60,7 @@ my $sortkey = trim($cgi->param('sortkey') || 0);
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
...
...
@@ -115,9 +116,11 @@ if ($action eq 'add') {
if
(
$action
eq
'new'
)
{
check_token_data
(
$token
,
'add_milestone'
);
my
$milestone
=
Bugzilla::
Milestone
->
create
({
value
=>
$milestone_name
,
product
=>
$product
,
sortkey
=>
$sortkey
});
delete_token
(
$token
);
$vars
->
{
'message'
}
=
'milestone_created'
;
...
...
@@ -205,6 +208,7 @@ if ($action eq 'update') {
$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.
...
...
editversions.cgi
View file @
77b3adda
...
...
@@ -63,6 +63,7 @@ my $version_name = trim($cgi->param('version') || '');
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
...
...
@@ -204,6 +205,7 @@ if ($action eq 'update') {
$dbh
->
bz_start_transaction
();
$version
->
set_name
(
$version_name
);
$version
->
set_is_active
(
$isactive
);
my
$changes
=
$version
->
update
();
$dbh
->
bz_commit_transaction
();
...
...
enter_bug.cgi
View file @
77b3adda
...
...
@@ -502,7 +502,7 @@ else {
#
# 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
);
...
...
@@ -521,7 +521,7 @@ if ( ($cloned_bug_id) &&
# 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
{
...
...
template/en/default/admin/components/confirm-delete.html.tmpl
View file @
77b3adda
...
...
@@ -83,7 +83,7 @@ from '[% product.name FILTER html %]' product
</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>
...
...
template/en/default/admin/components/edit.html.tmpl
View file @
77b3adda
...
...
@@ -43,6 +43,11 @@
[% 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>
[% IF comp.bug_count > 0 %]
...
...
template/en/default/admin/components/list.html.tmpl
View file @
77b3adda
...
...
@@ -56,6 +56,11 @@
name => "initialowner"
heading => "Default Assignee"
},
{
name => "isactive"
heading => "Active"
yesno_field => 1
},
]
%]
...
...
template/en/default/admin/milestones/edit.html.tmpl
View file @
77b3adda
...
...
@@ -47,7 +47,11 @@
<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 %]">
...
...
template/en/default/admin/milestones/list.html.tmpl
View file @
77b3adda
...
...
@@ -53,6 +53,11 @@
{
name => "sortkey"
heading => "Sortkey"
},
{
name => "isactive"
heading => "Active"
yesno_field => 1
}
]
%]
...
...
template/en/default/admin/versions/edit.html.tmpl
View file @
77b3adda
...
...
@@ -41,7 +41,11 @@
<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 %]">
...
...
template/en/default/admin/versions/list.html.tmpl
View file @
77b3adda
...
...
@@ -45,6 +45,11 @@
name => "name"
heading => "Edit version..."
contentlink => edit_contentlink
},
{
name => "isactive"
heading => "Active"
yesno_field => 1
}
]
%]
...
...
template/en/default/bug/create/create.html.tmpl
View file @
77b3adda
...
...
@@ -238,6 +238,7 @@ TUI_hide_default('attachment_text_field');
[% 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_ %]
...
...
@@ -288,8 +289,9 @@ TUI_hide_default('attachment_text_field');
<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>
...
...
@@ -733,9 +735,10 @@ TUI_hide_default('attachment_text_field');
<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>
...
...
template/en/default/bug/edit.html.tmpl
View file @
77b3adda
...
...
@@ -1117,6 +1117,7 @@
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 %]
...
...
template/en/default/bug/field.html.tmpl
View file @
77b3adda
...
...
@@ -124,6 +124,7 @@
[% 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 %]"
...
...
template/en/default/global/messages.html.tmpl
View file @
77b3adda
...
...
@@ -234,6 +234,9 @@
<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 %]
...
...
@@ -547,6 +550,9 @@
[% 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>.
...
...
@@ -831,9 +837,16 @@
[% ELSIF message_tag == "version_updated" %]
[% title = "Version Updated" %]
[% IF changes.size %]
Changes to the version <em>[% version.name FILTER html %]</em>
have been saved:
<ul>
[% IF changes.value.defined %]
Version renamed to <em>[% version.name FILTER html %]</em>.
<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 %]
...
...
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