]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 638509 - Make all boolean charts work with all attachment fields except
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 3 Mar 2011 19:22:18 +0000 (11:22 -0800)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 3 Mar 2011 19:22:18 +0000 (11:22 -0800)
for "Attachment data"
r=mkanat, a=mkanat (module owner)

Bugzilla/Search.pm
xt/lib/Bugzilla/Test/Search/Constants.pm

index 578c0e43dd0929e53e21c0f34c4bd48c0695c9ef..ce4b1605ef35b286f0225534e0ae359f4a88eea9 100644 (file)
@@ -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;
index 227203bc73ea6c6d2b446456a09e0169bd31c756..82b78bd3590693e0bac75ff08cca03d7e5f52d07 100644 (file)
@@ -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] },