]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 574577: commenter_pronoun, cc_pronoun, and contact_pronoun should all be merged
authorFrédéric Buclin <LpSolit@gmail.com>
Tue, 24 Jan 2012 17:33:37 +0000 (18:33 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Tue, 24 Jan 2012 17:33:37 +0000 (18:33 +0100)
r/a=mkanat

Bugzilla/Search.pm

index 40c4ae32a9e3a120643bb4e72c6a002b540f3de5..b21a3b3850406fab13e3a01946543cb894c427eb 100644 (file)
@@ -317,8 +317,8 @@ use constant OPERATOR_FIELD_OVERRIDE => {
 use constant SPECIAL_PARSING => {
     # Pronoun Fields (Ones that can accept %user%, etc.)
     assigned_to => \&_contact_pronoun,
-    cc          => \&_cc_pronoun,
-    commenter   => \&_commenter_pronoun,
+    cc          => \&_contact_pronoun,
+    commenter   => \&_contact_pronoun,
     qa_contact  => \&_contact_pronoun,
     reporter    => \&_contact_pronoun,
     
@@ -2022,11 +2022,11 @@ sub _contact_pronoun {
 
 sub _contact_exact_group {
     my ($self, $args) = @_;
-    my ($value, $operator, $field, $chart_id, $joins) =
-        @$args{qw(value operator field chart_id joins)};
+    my ($value, $operator, $field, $chart_id, $joins, $sequence) =
+        @$args{qw(value operator field chart_id joins sequence)};
     my $dbh = Bugzilla->dbh;
     my $user = $self->_user;
-    
+
     $value =~ /\%group\.([^%]+)%/;
     my $group = Bugzilla::Group->check({ name => $1, _error => 'invalid_group_name' });
     $group->check_members_are_visible();
@@ -2034,11 +2034,28 @@ sub _contact_exact_group {
       || ThrowUserError('invalid_group_name', {name => $group->name});
 
     my $group_ids = Bugzilla::Group->flatten_group_membership($group->id);
+
+    if ($field eq 'cc' && $chart_id eq '') {
+        # This is for the email1, email2, email3 fields from query.cgi.
+        $chart_id = "CC$$sequence";
+        $args->{sequence}++;
+    }
+
+    my $from = $field;
+    # These fields need an additional table.
+    if ($field =~ /^(commenter|cc)$/) {
+        my $join_table = $field;
+        $join_table = 'longdescs' if $field eq 'commenter';
+        my $join_table_alias = "${field}_$chart_id";
+        push(@$joins, { table => $join_table, as => $join_table_alias });
+        $from = "$join_table_alias.who";
+    }
+
     my $table = "user_group_map_$chart_id";
     my $join = {
         table => 'user_group_map',
         as    => $table,
-        from  => $field,
+        from  => $from,
         to    => 'user_id',
         extra => [$dbh->sql_in("$table.group_id", $group_ids),
                   "$table.isbless = 0"],
@@ -2052,76 +2069,6 @@ sub _contact_exact_group {
     }
 }
 
-sub _cc_pronoun {
-    my ($self, $args) = @_;
-    my ($full_field, $value) = @$args{qw(full_field value)};
-    my $user = $self->_user;
-
-    if ($value =~ /\%group/) {
-        return $self->_cc_exact_group($args);
-    }
-    elsif ($value =~ /^(%\w+%)$/) {
-        $args->{value} = pronoun($1, $user);
-        $args->{quoted} = $args->{value};
-        $args->{value_is_id} = 1;
-    }
-}
-
-sub _cc_exact_group {
-    my ($self, $args) = @_;
-    my ($chart_id, $sequence, $joins, $operator, $value) =
-        @$args{qw(chart_id sequence joins operator value)};
-    my $user = $self->_user;
-    my $dbh = Bugzilla->dbh;
-    
-    $value =~ m/%group\.([^%]+)%/;
-    my $group = Bugzilla::Group->check({ name => $1, _error => 'invalid_group_name' });
-    $group->check_members_are_visible();
-    $user->in_group($group)
-      || ThrowUserError('invalid_group_name', {name => $group->name});
-
-    my $all_groups = Bugzilla::Group->flatten_group_membership($group->id);
-
-    # This is for the email1, email2, email3 fields from query.cgi.
-    if ($chart_id eq "") {
-        $chart_id = "CC$$sequence";
-        $args->{sequence}++;
-    }
-    
-    my $cc_table = "cc_$chart_id";
-    push(@$joins, { table => 'cc', as => $cc_table });
-    my $group_table = "user_group_map_$chart_id";
-    my $group_join = {
-        table => 'user_group_map',
-        as    => $group_table,
-        from  => "$cc_table.who",
-        to    => 'user_id',
-        extra => [$dbh->sql_in("$group_table.group_id", $all_groups),
-                  "$group_table.isbless = 0"],
-    };
-    push(@$joins, $group_join);
-
-    if ($operator =~ /^not/) {
-        $args->{term} = "$group_table.group_id IS NULL";
-    }
-    else {
-        $args->{term} = "$group_table.group_id IS NOT NULL";
-    }
-}
-
-# XXX This should probably be merged with cc_pronoun.
-sub _commenter_pronoun {
-    my ($self, $args) = @_;
-    my $value = $args->{value};
-    my $user = $self->_user;
-
-    if ($value =~ /^(%\w+%)$/) {
-        $args->{value} = pronoun($1, $user);
-        $args->{quoted} = $args->{value};
-        $args->{value_is_id} = 1;
-    }
-}
-
 #####################################################################
 # Search Functions
 #####################################################################