Skip to content

Commit

Permalink
Bug 1160430: Backport bug 69267 to BMO (Add the ability to deactivate…
Browse files Browse the repository at this point in the history
… keywords)
  • Loading branch information
Dylan William Hardison authored and globau committed May 19, 2015
1 parent 1e23e69 commit 64fd94e
Show file tree
Hide file tree
Showing 11 changed files with 126 additions and 59 deletions.
13 changes: 13 additions & 0 deletions Bugzilla/Bug.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1894,6 +1894,19 @@ sub _check_keywords {
my $obj = Bugzilla::Keyword->check($keyword);
$keywords{$obj->id} = $obj;
}

my %old_kw_id;
if (blessed $invocant) {
my @old_keywords = @{$invocant->keyword_objects};
%old_kw_id = map { $_->id => 1 } @old_keywords;
}

foreach my $keyword (values %keywords) {
next if $keyword->is_active || exists $old_kw_id{$keyword->id};
ThrowUserError('value_inactive',
{ value => $keyword->name, class => ref $keyword });
}

return [values %keywords];
}

Expand Down
26 changes: 23 additions & 3 deletions Bugzilla/Keyword.pm
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,21 @@ use constant DB_COLUMNS => qw(
keyworddefs.id
keyworddefs.name
keyworddefs.description
keyworddefs.is_active
);

use constant DB_TABLE => 'keyworddefs';

use constant VALIDATORS => {
name => \&_check_name,
description => \&_check_description,
is_active => \&_check_is_active,
};

use constant UPDATE_COLUMNS => qw(
name
description
is_active
);

###############################
Expand All @@ -69,6 +72,7 @@ sub bug_count {

sub set_name { $_[0]->set('name', $_[1]); }
sub set_description { $_[0]->set('description', $_[1]); }
sub set_is_active { $_[0]->set('is_active', $_[1]); }

###############################
#### Subroutines ######
Expand Down Expand Up @@ -132,6 +136,10 @@ sub _check_description {
return $desc;
}

sub _check_is_active { return $_[1] ? 1 : 0 }

sub is_active { return $_[0]->{is_active} }

1;

__END__
Expand All @@ -155,10 +163,10 @@ Bugzilla::Keyword represents a keyword that can be added to a bug.
This implements all standard C<Bugzilla::Object> methods. See
L<Bugzilla::Object> for more details.
=head1 SUBROUTINES
=head1 METHODS
This is only a list of subroutines specific to C<Bugzilla::Keyword>.
See L<Bugzilla::Object> for more subroutines that this object
This is only a list of methods specific to C<Bugzilla::Keyword>.
See L<Bugzilla::Object> for more methods that this object
implements.
=over
Expand All @@ -173,6 +181,18 @@ implements.
Returns: A reference to an array of Keyword objects, or an empty
arrayref if there are no keywords.
=item C<is_active>
Description: Indicates if the keyword may be used on a bug
Params: none
Returns: a boolean value that is true if the keyword can be applied to bugs.
=item C<set_is_active($is_active)>
Description: Set the is_active property to a boolean value
Params: the new value of the is_active property.
Returns: nothing
=back
=cut
7 changes: 6 additions & 1 deletion Bugzilla/Template.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1074,9 +1074,14 @@ sub create {
# Whether or not keywords are enabled, in this Bugzilla.
'use_keywords' => sub { return Bugzilla::Keyword->any_exist; },

# All the keywords.
# All the keywords
'all_keywords' => sub { return Bugzilla::Keyword->get_all(); },

# All the active keywords
'active_keywords' => sub {
return [grep { $_->is_active } Bugzilla::Keyword->get_all()];
},

'feature_enabled' => sub { return Bugzilla->feature(@_); },

# field_descs can be somewhat slow to generate, so we generate
Expand Down
1 change: 1 addition & 0 deletions Bugzilla/WebService/Bug.pm
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ sub _legal_field_values {
elsif ($field_name eq 'keywords') {
my @legal_keywords = Bugzilla::Keyword->get_all;
foreach my $value (@legal_keywords) {
next unless $value->is_active;
push (@result, {
name => $self->type('string', $value->name),
description => $self->type('string', $value->description),
Expand Down
6 changes: 4 additions & 2 deletions editkeywords.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,9 @@ if ($action eq 'add') {
#
if ($action eq 'new') {
check_token_data($token, 'add_keyword');
my $name = $cgi->param('name') || '';
my $desc = $cgi->param('description') || '';
my $name = $cgi->param('name') || '';
my $is_active = $cgi->param('is_active');
my $desc = $cgi->param('description') || '';

my $keyword = Bugzilla::Keyword->create(
{ name => $name, description => $desc });
Expand Down Expand Up @@ -134,6 +135,7 @@ if ($action eq 'update') {
$keyword->set_all({
name => scalar $cgi->param('name'),
description => scalar $cgi->param('description'),
is_active => scalar $cgi->param('is_active'),
});
my $changes = $keyword->update();

Expand Down
2 changes: 1 addition & 1 deletion extensions/BugModal/lib/WebService.pm
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ sub edit {
}

# keywords
my @keywords = Bugzilla::Keyword->get_all();
my @keywords = grep { $_->is_active } Bugzilla::Keyword->get_all();

# results
return {
Expand Down
11 changes: 8 additions & 3 deletions template/en/default/admin/keywords/edit.html.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,19 @@
<form method="post" action="editkeywords.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<th align="right">Name:</th>
<td><input size="64" maxlength="64" name="name"
<th align="right"><label for="name">Name:</label></th>
<td><input size="64" maxlength="64" name="name" id="name"
value="[% keyword.name FILTER html %]"></td>
</tr>
<tr>
<th align="right">Description:</th>
<th><label for="is_active">Enabled For [% terms.Bugs %]</label></th>
<td><input id="is_active" name="is_active" type="checkbox" [% "checked" IF keyword.is_active %]></td>
</tr>
<tr>
<th align="right"><label for="description">Description:</label></th>
<td>
[% INCLUDE global/textarea.html.tmpl
id = 'description'
name = 'description'
minrows = 4
cols = 64
Expand Down
83 changes: 37 additions & 46 deletions template/en/default/admin/keywords/list.html.tmpl
Original file line number Diff line number Diff line change
@@ -1,68 +1,59 @@
[%# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is Netscape Communications
# Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
# Vlad Dascalu <jocuri@softhome.net>
# Jouni Heikniemi <jouni@heikniemi.net>
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]

[%# INTERFACE:
# keywords: array keyword objects having the properties:
# - id: number. The ID of the keyword.
# - name: string. The name of the keyword.
# - is_active: boolean. true if the keyword can be used.
# - description: string. The description of the keyword.
# - bug_count: number. The number of bugs with the keyword.
#%]

[% PROCESS global/variables.none.tmpl %]

[% PROCESS global/header.html.tmpl
title = "Select keyword"
style_urls = ['skins/standard/admin.css']
%]

[% columns = [
{
name => "name"
heading => "Edit keyword..."
contentlink => "editkeywords.cgi?action=edit&amp;id=%%id%%"
},
{
name => "description"
heading => "Description"
allow_html_content => 1
},
{
name => "bug_count"
heading => "$terms.Bugs"
align => "right"
contentlink => "buglist.cgi?keywords=%%name%%"
},
{
heading => "Action"
content => "Delete"
contentlink => "editkeywords.cgi?action=del&amp;id=%%id%%"
}
]
{
name => "name"
heading => "Edit keyword..."
contentlink => "editkeywords.cgi?action=edit&amp;id=%%id%%"
},
{
name => "description"
heading => "Description"
allow_html_content => 1
},
{
name => "is_active",
heading => "Active",
yesno_field => 1
},
{
name => "bug_count"
heading => "$terms.Bugs"
class => "right"
contentlink => "buglist.cgi?keywords=%%name%%"
},
{
heading => "Action"
content => "Delete"
contentlink => "editkeywords.cgi?action=del&amp;id=%%id%%"
}
]
%]

[% PROCESS admin/table.html.tmpl
columns = columns
data = keywords
footer = footer_row
columns = columns
data = keywords
footer = footer_row
%]

<p><a href="editkeywords.cgi?action=add">Add a new keyword</a></p>
Expand Down
2 changes: 1 addition & 1 deletion template/en/default/bug/field.html.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@
</div>
<script type="text/javascript" defer="defer">
YAHOO.bugzilla.keyword_array = [
[%- FOREACH keyword = all_keywords %]
[%- FOREACH keyword = active_keywords %]
[%-# %]"[% keyword.name FILTER js %]"
[%- "," IF NOT loop.last %][% END %]];
YAHOO.bugzilla.keywordAutocomplete.init('[% field.name FILTER js %]',
Expand Down
2 changes: 1 addition & 1 deletion template/en/default/global/user-error.html.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -1401,7 +1401,7 @@
Either you mis-typed the name or that user has not yet registered
for a [% terms.Bugzilla %] account.
[% ELSIF class == "Bugzilla::Keyword" %]
The legal keyword names are <a href="describekeywords.cgi">listed
The legal keyword names are <a href="describekeywords.cgi?show_inactive_keywords=1">listed
here</a>.
[% END %]

Expand Down
32 changes: 31 additions & 1 deletion template/en/default/reports/keywords.html.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,33 @@
title = "$terms.Bugzilla Keyword Descriptions"
%]

<script>
$(document).ready(function () {
var show_inactive_keywords = [% show_inactive_keywords ? "true" : "false" FILTER none %],
link = $("#keywords_show_hide"),
rows = $("tr.keyword_inactive");

link.click(function (event) {
if (show_inactive_keywords) {
show_inactive_keywords = false;
rows.show();
link.html("Hide inactive keywords");
}
else {
show_inactive_keywords = true;
rows.hide();
link.html("Show inactive keywords");
}
event.preventDefault();
}).click();
});
</script>

<p>
<a href="[% urlbase FILTER html %]?show_inactive_keywords=[% show_inactive_keywords ? "1" : "0" FILTER none %]"
id="keywords_show_hide">[% show_inactive_keywords ? "Show" : "Hide" FILTER html %] inactive keywords</a>
</p>

[% FOREACH keyword = keywords %]
[% IF loop.index % 50 == 0 %]
[% IF loop.index != 0 %]
Expand All @@ -44,16 +71,19 @@
<tr bgcolor="#6666FF">
<th align="left">Name</th>
<th align="left">Description</th>
<th>Active</th>
<th align="left">Open [% terms.Bugs %]</th>
<th align="left">Total [% terms.Bugs %]</th>
</tr>
[% END %]

<tr id="[% keyword.name FILTER html %]">
<tr id="[% keyword.name FILTER html %]"
class="[% keyword.is_active ? "keyword_active" : "keyword_inactive" FILTER html %]">
<th>
[% keyword.name FILTER html %]
</th>
<td>[% keyword.description FILTER html_light %]</td>
<td>[% keyword.is_active ? "Yes" : "No" FILTER html %]</td>
<td align="center">
[% IF keyword.bug_count > 0 %]
<a href="buglist.cgi?keywords=[% keyword.name FILTER uri %]&amp;resolution=---">
Expand Down

0 comments on commit 64fd94e

Please sign in to comment.