From 9785bd9b3e44af9cbd4fc37b37b5eb00a94b69ee Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Thu, 3 Mar 2011 11:22:18 -0800 Subject: Bug 638509 - Make all boolean charts work with all attachment fields except for "Attachment data" r=mkanat, a=mkanat (module owner) --- Bugzilla/Search.pm | 35 +++++++++----------------------- xt/lib/Bugzilla/Test/Search/Constants.pm | 14 ------------- 2 files changed, 10 insertions(+), 39 deletions(-) diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 578c0e43d..ce4b1605e 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -271,11 +271,9 @@ use constant OPERATOR_FIELD_OVERRIDE => { _non_changed => \&_attach_data_thedata, }, # We check all attachment fields against this. - 'attachments' => { - _non_changed => \&_attachments, - }, - blocked => MULTI_SELECT_OVERRIDE, - bug_group => MULTI_SELECT_OVERRIDE, + attachments => MULTI_SELECT_OVERRIDE, + blocked => MULTI_SELECT_OVERRIDE, + bug_group => MULTI_SELECT_OVERRIDE, classification => { _non_changed => \&_classification_nonchanged, }, @@ -2351,26 +2349,6 @@ sub _attach_data_thedata { $args->{full_field} = "$data_table.thedata"; } -sub _attachments { - my ($self, $args) = @_; - my ($chart_id, $joins, $field) = - @$args{qw(chart_id joins field)}; - my $dbh = Bugzilla->dbh; - - my $table = "attachments_$chart_id"; - my $extra = $self->_user->is_insider ? [] : ["$table.isprivate = 0"]; - my $join = { - table => 'attachments', - as => $table, - extra => $extra, - }; - push(@$joins, $join); - $field =~ /^attachments\.(.+)$/; - my $attach_field = $1; - - $args->{full_field} = "$table.$attach_field"; -} - sub _join_flag_tables { my ($self, $args) = @_; my ($joins, $chart_id) = @$args{qw(joins chart_id)}; @@ -2616,6 +2594,13 @@ sub _multiselect_table { $args->{full_field} = 'isprivate'; return "longdescs"; } + elsif ($field =~ /^attachments/) { + $args->{_extra_where} = " AND isprivate = 0" + if !$self->_user->is_insider; + $field =~ /^attachments\.(.+)$/; + $args->{full_field} = $1; + return "attachments"; + } my $table = "bug_$field"; $args->{full_field} = "bug_$field.value"; return $table; diff --git a/xt/lib/Bugzilla/Test/Search/Constants.pm b/xt/lib/Bugzilla/Test/Search/Constants.pm index 227203bc7..82b78bd35 100644 --- a/xt/lib/Bugzilla/Test/Search/Constants.pm +++ b/xt/lib/Bugzilla/Test/Search/Constants.pm @@ -196,8 +196,6 @@ use constant SUBSTR_NO_FIELD_ADD => FIELD_TYPE_DATETIME, qw( # bug_file_loc can be NULL, so it gets missed by the normal # notequals search. # -# attachments.* notequals doesn't find bugs that lack attachments. -# # deadline notequals does not find bugs that lack deadlines # # setters notequal doesn't find bugs that fully lack flags. @@ -205,13 +203,7 @@ use constant SUBSTR_NO_FIELD_ADD => FIELD_TYPE_DATETIME, qw( # # requestees.login_name doesn't find bugs that fully lack requestees. use constant NEGATIVE_BROKEN => ( - 'attachments.isobsolete' => { contains => [5] }, - 'attachments.ispatch' => { contains => [5] }, - 'attachments.isprivate' => { contains => [5] }, 'attach_data.thedata' => { contains => [5] }, - 'attachments.description' => { contains => [5] }, - 'attachments.filename' => { contains => [5] }, - 'attachments.mimetype' => { contains => [5] }, bug_file_loc => { contains => [5] }, deadline => { contains => [5] }, # Custom fields are busted because they can be NULL. @@ -413,12 +405,6 @@ use constant PG_BROKEN => { # NOT test that is broken. use constant COMMON_BROKEN_NOT => ( "attach_data.thedata" => { contains => [5] }, - "attachments.description" => { contains => [5] }, - "attachments.filename" => { contains => [5] }, - "attachments.isobsolete" => { contains => [5] }, - "attachments.ispatch" => { contains => [5] }, - "attachments.isprivate" => { contains => [5] }, - "attachments.mimetype" => { contains => [5] }, "bug_file_loc" => { contains => [5] }, "deadline" => { contains => [5] }, "flagtypes.name" => { contains => [5] }, -- cgit v1.2.3-24-g4f1b