summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2009-08-11 06:34:17 +0200
committermkanat%bugzilla.org <>2009-08-11 06:34:17 +0200
commitea25630305fbd3b55c142c32aab82f9cc7afccfa (patch)
tree1b554df79fe0a83a02075566615552783e9e873b
parent918a8c245f8d0d7d0926a015aa9a4940c14ebdd3 (diff)
downloadbugzilla-ea25630305fbd3b55c142c32aab82f9cc7afccfa.tar.gz
bugzilla-ea25630305fbd3b55c142c32aab82f9cc7afccfa.tar.xz
Bug 509045: Make "use_keywords" a global template variable instead of having to pass it to templates all the time
Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit
-rw-r--r--Bugzilla/Keyword.pm16
-rw-r--r--Bugzilla/Object.pm26
-rw-r--r--Bugzilla/Template.pm8
-rwxr-xr-xattachment.cgi3
-rwxr-xr-xbuglist.cgi13
-rwxr-xr-xcolchange.cgi2
-rwxr-xr-xenter_bug.cgi2
-rwxr-xr-xpost_bug.cgi1
-rwxr-xr-xprocess_bug.cgi1
-rwxr-xr-xquery.cgi2
-rwxr-xr-xshow_bug.cgi1
-rw-r--r--template/en/default/search/form.html.tmpl2
12 files changed, 38 insertions, 39 deletions
diff --git a/Bugzilla/Keyword.pm b/Bugzilla/Keyword.pm
index 2152b338d..f4742bebd 100644
--- a/Bugzilla/Keyword.pm
+++ b/Bugzilla/Keyword.pm
@@ -74,12 +74,6 @@ sub set_description { $_[0]->set('description', $_[1]); }
#### Subroutines ######
###############################
-sub keyword_count {
- my ($count) =
- Bugzilla->dbh->selectrow_array('SELECT COUNT(*) FROM keyworddefs');
- return $count;
-}
-
sub get_all_with_bug_count {
my $class = shift;
my $dbh = Bugzilla->dbh;
@@ -145,8 +139,6 @@ Bugzilla::Keyword - A Keyword that can be added to a bug.
use Bugzilla::Keyword;
- my $count = Bugzilla::Keyword::keyword_count;
-
my $description = $keyword->description;
my $keywords = Bugzilla::Keyword->get_all_with_bug_count();
@@ -166,14 +158,6 @@ implements.
=over
-=item C<keyword_count()>
-
- Description: A utility function to get the total number
- of keywords defined. Mostly used to see
- if there are any keywords defined at all.
- Params: none
- Returns: An integer, the count of keywords.
-
=item C<get_all_with_bug_count()>
Description: Returns all defined keywords. This is an efficient way
diff --git a/Bugzilla/Object.pm b/Bugzilla/Object.pm
index d2e5a8dda..cfa2bfeb6 100644
--- a/Bugzilla/Object.pm
+++ b/Bugzilla/Object.pm
@@ -170,14 +170,16 @@ sub match {
elsif ( $field eq 'WHERE' ) {
# the WHERE value is a hashref where the keys are
# "column_name operator ?" and values are the placeholder's
- # value.
- foreach my $k (keys( %$value )) {
- push( @terms, $k );
- push( @values, $value->{$k} );
+ # value (either a scalar or an array of values).
+ foreach my $k (keys %$value) {
+ push(@terms, $k);
+ my @this_value = ref($value->{$k}) ? @{ $value->{$k} }
+ : ($value->{$k});
+ push(@values, @this_value);
}
next;
}
-
+
if (ref $value eq 'ARRAY') {
# IN () is invalid SQL, and if we have an empty list
# to match against, we're just returning an empty
@@ -335,6 +337,15 @@ sub remove_from_db {
#### Subroutines ######
###############################
+sub any_exist {
+ my $class = shift;
+ my $table = $class->DB_TABLE;
+ my $dbh = Bugzilla->dbh;
+ my $any_exist = $dbh->selectrow_array(
+ "SELECT 1 FROM $table " . $dbh->sql_limit(1));
+ return $any_exist ? 1 : 0;
+}
+
sub create {
my ($class, $params) = @_;
my $dbh = Bugzilla->dbh;
@@ -880,6 +891,11 @@ Returns C<1> if the passed-in value is true, C<0> otherwise.
=over
+=item C<any_exist>
+
+Returns C<1> if there are any of these objects in the database,
+C<0> otherwise.
+
=item C<get_all>
Description: Returns all objects in this table from the database.
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index 49954a521..22ea4b7cc 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -37,7 +37,9 @@ use strict;
use Bugzilla::Bug;
use Bugzilla::Constants;
use Bugzilla::Install::Requirements;
-use Bugzilla::Install::Util qw(install_string template_include_path include_languages);
+use Bugzilla::Install::Util qw(install_string template_include_path
+ include_languages);
+use Bugzilla::Keyword;
use Bugzilla::Util;
use Bugzilla::User;
use Bugzilla::Error;
@@ -752,6 +754,10 @@ sub create {
return $cache->{template_bug_fields};
},
+ # Whether or not keywords are enabled, in this Bugzilla.
+ 'use_keywords' => sub { return Bugzilla::Keyword->any_exist; },
+
+
# These don't work as normal constants.
DB_MODULE => \&Bugzilla::Constants::DB_MODULE,
REQUIRED_MODULES =>
diff --git a/attachment.cgi b/attachment.cgi
index 8614026db..bbbf4afb3 100755
--- a/attachment.cgi
+++ b/attachment.cgi
@@ -523,7 +523,6 @@ sub insert {
$vars->{'bugs'} = [new Bugzilla::Bug($bugid)];
$vars->{'header_done'} = 1;
$vars->{'contenttypemethod'} = $cgi->param('contenttypemethod');
- $vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
print $cgi->header();
# Generate and return the UI (HTML page) from the appropriate template.
@@ -644,7 +643,6 @@ sub update {
$vars->{'attachment'} = $attachment;
$vars->{'bugs'} = [$bug];
$vars->{'header_done'} = 1;
- $vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
print $cgi->header();
@@ -716,7 +714,6 @@ sub delete_attachment {
# Required to display the bug the deleted attachment belongs to.
$vars->{'bugs'} = [$bug];
$vars->{'header_done'} = 1;
- $vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
$template->process("attachment/updated.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
diff --git a/buglist.cgi b/buglist.cgi
index 35d0c0291..47e1f4ba5 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -575,7 +575,10 @@ elsif (($cmdtype eq "doit") && defined $cgi->param('remtype')) {
# exists, add/remove bugs to it, else create it. But if we are
# considering an existing tag, then it has to exist and we throw
# an error if it doesn't (hence the usage of !$is_new_name).
- if (my $old_query = LookupNamedQuery($query_name, undef, LIST_OF_BUGS, !$is_new_name)) {
+ my ($old_query, $query_id) =
+ LookupNamedQuery($query_name, undef, LIST_OF_BUGS, !$is_new_name);
+
+ if ($old_query) {
# We get the encoded query. We need to decode it.
my $old_cgi = new Bugzilla::CGI($old_query);
foreach my $bug_id (split /[\s,]+/, scalar $old_cgi->param('bug_id')) {
@@ -599,9 +602,10 @@ elsif (($cmdtype eq "doit") && defined $cgi->param('remtype')) {
# Only keep bug IDs we want to add/keep. Disregard deleted ones.
my @bug_ids = grep { $bug_ids{$_} == 1 } keys %bug_ids;
# If the list is now empty, we could as well delete it completely.
- ThrowUserError('no_bugs_in_list', {'tag' => $query_name})
- unless scalar(@bug_ids);
-
+ if (!scalar @bug_ids) {
+ ThrowUserError('no_bugs_in_list', {name => $query_name,
+ query_id => $query_id});
+ }
$new_query = "bug_id=" . join(',', sort {$a <=> $b} @bug_ids);
$query_type = LIST_OF_BUGS;
}
@@ -1135,7 +1139,6 @@ if ($dotweak && scalar @bugs) {
object => 'multiple_bugs'});
}
$vars->{'dotweak'} = 1;
- $vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
# issue_session_token needs to write to the master DB.
Bugzilla->switch_to_main_db();
diff --git a/colchange.cgi b/colchange.cgi
index a521ee168..5aef57ff8 100755
--- a/colchange.cgi
+++ b/colchange.cgi
@@ -71,7 +71,7 @@ if (Bugzilla->params->{"useqacontact"}) {
if (Bugzilla->params->{"usestatuswhiteboard"}) {
push(@masterlist, "status_whiteboard");
}
-if (Bugzilla::Keyword::keyword_count()) {
+if (Bugzilla::Keyword->any_exist) {
push(@masterlist, "keywords");
}
diff --git a/enter_bug.cgi b/enter_bug.cgi
index 408336121..071276f1d 100755
--- a/enter_bug.cgi
+++ b/enter_bug.cgi
@@ -380,8 +380,6 @@ $vars->{'bug_severity'} = get_legal_field_values('bug_severity');
$vars->{'rep_platform'} = get_legal_field_values('rep_platform');
$vars->{'op_sys'} = get_legal_field_values('op_sys');
-$vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
-
$vars->{'assigned_to'} = formvalue('assigned_to');
$vars->{'assigned_to_disabled'} = !$has_editbugs;
$vars->{'cc_disabled'} = 0;
diff --git a/post_bug.cgi b/post_bug.cgi
index 997b621ad..c6e4006e0 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -279,7 +279,6 @@ if ($cgi->cookie("BUGLIST")) {
@bug_list = split(/:/, $cgi->cookie("BUGLIST"));
}
$vars->{'bug_list'} = \@bug_list;
-$vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
if ($token) {
trick_taint($token);
diff --git a/process_bug.cgi b/process_bug.cgi
index f10467d4e..85e6c60fc 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -69,7 +69,6 @@ my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
-$vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
######################################################################
# Subroutines
diff --git a/query.cgi b/query.cgi
index 577410681..ab07fbf0f 100755
--- a/query.cgi
+++ b/query.cgi
@@ -230,8 +230,6 @@ if (Bugzilla->params->{'usetargetmilestone'}) {
$vars->{'target_milestone'} = \@milestones;
}
-$vars->{'have_keywords'} = Bugzilla::Keyword::keyword_count();
-
my @chfields;
push @chfields, "[Bug creation]";
diff --git a/show_bug.cgi b/show_bug.cgi
index 42fad7121..c0e543234 100755
--- a/show_bug.cgi
+++ b/show_bug.cgi
@@ -99,7 +99,6 @@ eval {
$vars->{'bugs'} = \@bugs;
$vars->{'marks'} = \%marks;
-$vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
my @bugids = map {$_->bug_id} grep {!$_->error} @bugs;
$vars->{'bugids'} = join(", ", @bugids);
diff --git a/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl
index 078ff8c6b..5df8bc0a9 100644
--- a/template/en/default/search/form.html.tmpl
+++ b/template/en/default/search/form.html.tmpl
@@ -285,7 +285,7 @@ function doOnSelectProduct(selectmode) {
[% END %]
[% END %]
- [% IF have_keywords %]
+ [% IF use_keywords %]
<tr>
<th align="right">
<label for="keywords" accesskey="k"><a href="describekeywords.cgi"><u>K</u>eywords</a></label>: