From ea25630305fbd3b55c142c32aab82f9cc7afccfa Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Tue, 11 Aug 2009 04:34:17 +0000 Subject: 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 r=LpSolit, a=LpSolit --- Bugzilla/Keyword.pm | 16 ---------------- Bugzilla/Object.pm | 26 +++++++++++++++++++++----- Bugzilla/Template.pm | 8 +++++++- attachment.cgi | 3 --- buglist.cgi | 13 ++++++++----- colchange.cgi | 2 +- enter_bug.cgi | 2 -- post_bug.cgi | 1 - process_bug.cgi | 1 - query.cgi | 2 -- show_bug.cgi | 1 - template/en/default/search/form.html.tmpl | 2 +- 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 - - 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 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 + +Returns C<1> if there are any of these objects in the database, +C<0> otherwise. + =item C 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 %] : -- cgit v1.2.3-24-g4f1b