Remove current user modification hack for Bugzilla::Search

classes
Vitaliy Filippov 2015-12-24 16:42:47 +03:00
parent 3e789c2a51
commit b37cc0c1b3
10 changed files with 73 additions and 72 deletions

View File

@ -80,6 +80,7 @@ sub refresh_sql
params => http_decode_query($query->query), params => http_decode_query($query->query),
fields => [ 'bug_id' ], fields => [ 'bug_id' ],
user => $query->user, user => $query->user,
ignore_permissions => 1,
); );
my $terms = Bugzilla::Search::simplify_expression([ my $terms = Bugzilla::Search::simplify_expression([
'AND_MANY', { term => 'bugs.bug_id=?' }, 'AND_MANY', { term => 'bugs.bug_id=?' },

View File

@ -380,7 +380,6 @@ sub install_before_final_checks
{ {
my ($args) = @_; my ($args) = @_;
print "Refreshing Checkers SQL...\n" if !$args->{silent}; print "Refreshing Checkers SQL...\n" if !$args->{silent};
Bugzilla->request_cache->{user} = Bugzilla::User->super_user;
for (Bugzilla::Checker->get_all) for (Bugzilla::Checker->get_all)
{ {
eval { $_->update }; eval { $_->update };

View File

@ -707,12 +707,14 @@ sub STATIC_COLUMNS
# Now only removes time-tracking fields # Now only removes time-tracking fields
sub COLUMNS sub COLUMNS
{ {
my ($self, $user) = @_;
$user ||= Bugzilla->user;
my $cache = Bugzilla->rc_cache_fields; my $cache = Bugzilla->rc_cache_fields;
return $cache->{columns} if $cache->{columns}; return $cache->{columns}->{$user->id || ''} if $cache->{columns} && $cache->{columns}->{$user->id || ''};
my $columns = { %{ STATIC_COLUMNS() } }; my $columns = { %{ STATIC_COLUMNS() } };
# Non-timetrackers shouldn't see any time-tracking fields # Non-timetrackers shouldn't see any time-tracking fields
if (!Bugzilla->user->is_timetracker) if (!$user->is_timetracker)
{ {
delete $columns->{$_} for keys %{TIMETRACKING_FIELDS()}; delete $columns->{$_} for keys %{TIMETRACKING_FIELDS()};
} }
@ -724,7 +726,7 @@ sub COLUMNS
{ {
$hint = ' FORCE INDEX (longdescs_bug_id_idx)'; $hint = ' FORCE INDEX (longdescs_bug_id_idx)';
} }
my $priv = (Bugzilla->user->is_insider ? "" : "AND ldc0.isprivate=0 "); my $priv = ($user->is_insider ? "" : "AND ldc0.isprivate=0 ");
# Not using JOIN (it could be joined on bug_when=creation_ts), # Not using JOIN (it could be joined on bug_when=creation_ts),
# because it would require COALESCE to an 'isprivate' subquery # because it would require COALESCE to an 'isprivate' subquery
# for private comments. # for private comments.
@ -736,7 +738,7 @@ sub COLUMNS
" ORDER BY ldc0.bug_when DESC LIMIT 1)"; " ORDER BY ldc0.bug_when DESC LIMIT 1)";
# Last commenter and last comment time # Last commenter and last comment time
my $login = 'ldp0.login_name'; my $login = 'ldp0.login_name';
if (!Bugzilla->user->id) if (!$user->id)
{ {
$login = $dbh->sql_string_until($login, $dbh->quote('@')); $login = $dbh->sql_string_until($login, $dbh->quote('@'));
} }
@ -744,31 +746,34 @@ sub COLUMNS
"(SELECT $login FROM longdescs ldc0$hint". "(SELECT $login FROM longdescs ldc0$hint".
" INNER JOIN profiles ldp0 ON ldp0.userid=ldc0.who WHERE ldc0.bug_id = bugs.bug_id $priv". " INNER JOIN profiles ldp0 ON ldp0.userid=ldc0.who WHERE ldc0.bug_id = bugs.bug_id $priv".
" ORDER BY ldc0.bug_when DESC LIMIT 1)"; " ORDER BY ldc0.bug_when DESC LIMIT 1)";
$priv = (Bugzilla->user->is_insider ? "" : "AND lct.isprivate=0 "); $priv = ($user->is_insider ? "" : "AND lct.isprivate=0 ");
$columns->{last_comment_time}->{name} = $columns->{last_comment_time}->{name} =
"(SELECT MAX(lct.bug_when) FROM longdescs lct$hint WHERE lct.bug_id = bugs.bug_id $priv)"; "(SELECT MAX(lct.bug_when) FROM longdescs lct$hint WHERE lct.bug_id = bugs.bug_id $priv)";
# Hide email domain for anonymous users # Hide email domain for anonymous users
$columns->{cc}->{name} = "(SELECT ".$dbh->sql_group_concat((Bugzilla->user->id $columns->{cc}->{name} = "(SELECT ".$dbh->sql_group_concat(($user->id
? 'profiles.login_name' ? 'profiles.login_name'
: $dbh->sql_string_until('profiles.login_name', $dbh->quote('@'))), "','"). : $dbh->sql_string_until('profiles.login_name', $dbh->quote('@'))), "','").
" cc FROM cc, profiles WHERE cc.bug_id=bugs.bug_id AND cc.who=profiles.userid)"; " cc FROM cc, profiles WHERE cc.bug_id=bugs.bug_id AND cc.who=profiles.userid)";
foreach my $col (qw(assigned_to reporter qa_contact)) foreach my $col (qw(assigned_to reporter qa_contact))
{ {
my $sql = "map_${col}.login_name"; my $sql = "map_${col}.login_name";
$columns->{$col}->{name} = Bugzilla->user->id ? $sql : $columns->{$col.'_short'}->{name}; $columns->{$col}->{name} = $user->id ? $sql : $columns->{$col.'_short'}->{name};
} }
Bugzilla::Hook::process('buglist_columns', { columns => $columns }); Bugzilla::Hook::process('buglist_columns', { columns => $columns });
return $cache->{columns} = $columns; return $cache->{columns}->{$user->id || ''} = $columns;
} }
sub REPORT_COLUMNS sub REPORT_COLUMNS
{ {
my ($self, $user) = @_;
my ($user) = @_;
$user ||= Bugzilla->user;
my $cache = Bugzilla->request_cache; my $cache = Bugzilla->request_cache;
return $cache->{report_columns} if defined $cache->{report_columns}; return $cache->{report_columns}->{$user->id || ''} if $cache->{report_columns} && $cache->{report_columns}->{$user->id || ''};
my $columns = { %{ COLUMNS() } }; my $columns = { %{ $self->COLUMNS($user) } };
# There's no reason to support reporting on unique fields. # There's no reason to support reporting on unique fields.
my @no_report_columns = qw( my @no_report_columns = qw(
@ -804,11 +809,12 @@ sub REPORT_COLUMNS
} }
} }
return $cache->{report_columns} = $columns; return $cache->{report_columns}->{$user->id || ''} = $columns;
} }
# Fields that can be searched on for changes # Fields that can be searched on for changes
# This is now used only by query.cgi # This is now used only by query.cgi
# Depends on current user
sub CHANGEDFROMTO_FIELDS sub CHANGEDFROMTO_FIELDS
{ {
# creation_ts, longdesc, longdescs.isprivate, commenter are treated specially # creation_ts, longdesc, longdescs.isprivate, commenter are treated specially
@ -1103,11 +1109,11 @@ sub init
my $H = $self->{params}; my $H = $self->{params};
# $self->{user} = User under which the search will be ran # $self->{user} = User under which the search will be ran (current user by default)
# Bugzilla->user = Just current user
$self->{user} ||= Bugzilla->user; $self->{user} ||= Bugzilla->user;
my $user = $self->{user}; my $user = $self->{user};
my $dbh = Bugzilla->dbh; my $dbh = Bugzilla->dbh;
my $columns = $self->{columns} = $self->COLUMNS($user);
my @specialchart; my @specialchart;
@ -1316,7 +1322,7 @@ sub init
{ {
$_ = $_ ? ($_ eq '%user%' ? $self->{user} : Bugzilla::User::match_name($_, 1)->[0]) : undef; $_ = $_ ? ($_ eq '%user%' ? $self->{user} : Bugzilla::User::match_name($_, 1)->[0]) : undef;
} }
COLUMNS->{interval_time}->{name} = $columns->{interval_time}->{name} =
"(SELECT COALESCE(SUM(ldtime.work_time),0) FROM longdescs ldtime". "(SELECT COALESCE(SUM(ldtime.work_time),0) FROM longdescs ldtime".
" WHERE ldtime.bug_id=bugs.bug_id". " WHERE ldtime.bug_id=bugs.bug_id".
($self->{interval_from} ? " AND ldtime.bug_when >= ".$dbh->quote($self->{interval_from}) : ''). ($self->{interval_from} ? " AND ldtime.bug_when >= ".$dbh->quote($self->{interval_from}) : '').
@ -1355,9 +1361,9 @@ sub init
} }
# Reset relevance column # Reset relevance column
COLUMNS->{relevance}->{bits} = []; $columns->{relevance}->{bits} = [];
COLUMNS->{relevance}->{joins} = []; $columns->{relevance}->{joins} = [];
COLUMNS->{relevance}->{name} = '(0)'; $columns->{relevance}->{name} = '(0)';
# Read charts from form hash # Read charts from form hash
my @charts; my @charts;
@ -1458,7 +1464,7 @@ sub init
} }
} }
if (!$user->is_super_user) if (!$self->{ignore_permissions})
{ {
# If there are some terms in the search, assume it's enough # If there are some terms in the search, assume it's enough
# to select bugs and attach security terms without UNION (OR_MANY). # to select bugs and attach security terms without UNION (OR_MANY).
@ -1524,7 +1530,7 @@ sub init
# write the FROM clause. # write the FROM clause.
foreach my $orderitem (@inputorder) foreach my $orderitem (@inputorder)
{ {
BuildOrderBy($special_order, $orderitem, \@orderby); $self->BuildOrderBy($special_order, $orderitem, \@orderby);
} }
# Now JOIN the correct tables in the FROM clause. # Now JOIN the correct tables in the FROM clause.
@ -1541,16 +1547,16 @@ sub init
my @sql_fields; my @sql_fields;
foreach my $field (@fields) foreach my $field (@fields)
{ {
for my $t (@{ COLUMNS->{$field}->{joins} || [] }) for my $t (@{ $columns->{$field}->{joins} || [] })
{ {
push @supptables, $t if !grep { $_ eq $t } @supptables; push @supptables, $t if !grep { $_ eq $t } @supptables;
} }
if (COLUMNS->{$field}->{name}) if ($columns->{$field}->{name})
{ {
my $alias = $field; my $alias = $field;
# Aliases cannot contain dots in them. We convert them to underscores. # Aliases cannot contain dots in them. We convert them to underscores.
$alias =~ s/\./_/g; $alias =~ s/\./_/g;
push @sql_fields, COLUMNS->{$field}->{name} . " AS $alias"; push @sql_fields, $columns->{$field}->{name} . " AS $alias";
} }
else else
{ {
@ -1580,10 +1586,11 @@ sub sv_quote
# HTML search description, moved here from templates # HTML search description, moved here from templates
sub search_description_html sub search_description_html
{ {
my $self = shift;
my ($exp, $debug, $inner) = @_; my ($exp, $debug, $inner) = @_;
my $opdescs = Bugzilla->messages->{operator_descs}; my $opdescs = Bugzilla->messages->{operator_descs};
my $fdescs = Bugzilla->messages->{field_descs}; my $fdescs = Bugzilla->messages->{field_descs};
$exp = $exp->{terms_without_security} if ref $exp eq 'Bugzilla::Search'; $exp = $self->{terms_without_security} if !$exp;
my $html = ''; my $html = '';
if (ref $exp eq 'ARRAY') if (ref $exp eq 'ARRAY')
{ {
@ -1593,7 +1600,7 @@ sub search_description_html
for my $i (1 .. $#$exp) for my $i (1 .. $#$exp)
{ {
$html .= " <li class='_".lc($op)."'>$op</li>" if $i > 1; $html .= " <li class='_".lc($op)."'>$op</li>" if $i > 1;
$html .= ' <li>'.search_description_html($exp->[$i], $debug, 1).'</li>'; $html .= ' <li>'.$self->search_description_html($exp->[$i], $debug, 1).'</li>' if $exp->[$i];
} }
$html .= '</ul>'; $html .= '</ul>';
} }
@ -1612,7 +1619,7 @@ sub search_description_html
if ($d->[0]) if ($d->[0])
{ {
my $a = COLUMN_ALIASES->{$d->[0]} || $d->[0]; my $a = COLUMN_ALIASES->{$d->[0]} || $d->[0];
$html .= '<span class="search_field">'.html_quote(COLUMNS->{$a}->{title} || $fdescs->{$a} || $a).':</span>'; $html .= '<span class="search_field">'.html_quote($self->{columns}->{$a}->{title} || $fdescs->{$a} || $a).':</span>';
} }
$html .= ' '.$opdescs->{not} if $neg; $html .= ' '.$opdescs->{not} if $neg;
$html .= ' '.$opdescs->{$d->[1]} if !SEARCH_HIDDEN_OPERATORS->{$d->[1]}; $html .= ' '.$opdescs->{$d->[1]} if !SEARCH_HIDDEN_OPERATORS->{$d->[1]};
@ -1642,7 +1649,7 @@ sub search_description_html
if ($f && @$f) if ($f && @$f)
{ {
$s = $opdescs->{desc_fields}; $s = $opdescs->{desc_fields};
$s =~ s/\$1/sv_quote(join(', ', map { COLUMNS->{$_}->{title} || $_ } @$f))/es; $s =~ s/\$1/sv_quote(join(', ', map { $self->{columns}->{$_}->{title} || $_ } @$f))/es;
push @l, $s; push @l, $s;
} }
$html .= join(', ', @l); $html .= join(', ', @l);
@ -1839,6 +1846,7 @@ sub pronoun
# order. That is, that we wanted "A DESC", not "A". # order. That is, that we wanted "A DESC", not "A".
sub BuildOrderBy sub BuildOrderBy
{ {
my $self = shift;
my ($special_order, $orderitem, $stringlist, $reverseorder) = (@_); my ($special_order, $orderitem, $stringlist, $reverseorder) = (@_);
my ($orderfield, $orderdirection) = split_order_term($orderitem); my ($orderfield, $orderdirection) = split_order_term($orderitem);
@ -1865,15 +1873,15 @@ sub BuildOrderBy
{ {
# DESC on a field with non-standard sort order means # DESC on a field with non-standard sort order means
# "reverse the normal order for each field that we map to." # "reverse the normal order for each field that we map to."
BuildOrderBy($special_order, $subitem, $stringlist, $self->BuildOrderBy($special_order, $subitem, $stringlist, $orderdirection =~ m/desc/i);
$orderdirection =~ m/desc/i);
} }
return;
} }
# Aliases cannot contain dots in them. We convert them to underscores. else
$orderfield =~ s/\./_/g if exists COLUMNS->{$orderfield}; {
# Aliases cannot contain dots in them. We convert them to underscores.
push @$stringlist, trim($orderfield . ' ' . $orderdirection); $orderfield =~ s/\./_/g if exists $self->{columns}->{$orderfield};
push @$stringlist, trim($orderfield . ' ' . $orderdirection);
}
} }
# Splits out "asc|desc" from a sort order item. # Splits out "asc|desc" from a sort order item.
@ -1912,7 +1920,7 @@ sub translate_old_column
my $rc = Bugzilla->request_cache; my $rc = Bugzilla->request_cache;
if (!$rc->{columns_by_sql_code}) if (!$rc->{columns_by_sql_code})
{ {
my $col = COLUMNS(); my $col = Bugzilla::Search->COLUMNS;
$rc->{columns_by_sql_code} = { $rc->{columns_by_sql_code} = {
map { $col->{$_}->{name} => $_ } grep { $col->{$_}->{name} } keys %$col map { $col->{$_}->{name} => $_ } grep { $col->{$_}->{name} } keys %$col
}; };
@ -1979,7 +1987,7 @@ sub run_chart
$self->{field} = COLUMN_ALIASES->{$self->{field}} if COLUMN_ALIASES->{$self->{field}}; $self->{field} = COLUMN_ALIASES->{$self->{field}} if COLUMN_ALIASES->{$self->{field}};
# chart -1 is generated by other code above, not from the user- # chart -1 is generated by other code above, not from the user-
# submitted form, so we'll blindly accept any values in chart -1 # submitted form, so we'll blindly accept any values in chart -1
if (!COLUMNS->{$self->{field}} && $check_field_name) if (!$self->{columns}->{$self->{field}} && $check_field_name)
{ {
ThrowUserError('invalid_field_name', { field => $self->{field} }); ThrowUserError('invalid_field_name', { field => $self->{field} });
} }
@ -1998,10 +2006,10 @@ sub run_chart
$self->{quoted} = Bugzilla->dbh->quote(ref $self->{value} ? $self->{value}->[0] : $self->{value}); $self->{quoted} = Bugzilla->dbh->quote(ref $self->{value} ? $self->{value}->[0] : $self->{value});
trick_taint($self->{quoted}); trick_taint($self->{quoted});
} }
if (COLUMNS->{$self->{field}}->{name}) if ($self->{columns}->{$self->{field}}->{name})
{ {
$self->{fieldsql} = COLUMNS->{$self->{field}}->{name}; $self->{fieldsql} = $self->{columns}->{$self->{field}}->{name};
if (my $j = COLUMNS->{$self->{field}}->{joins}) if (my $j = $self->{columns}->{$self->{field}}->{joins})
{ {
# Automatically adds table joins when converted to string # Automatically adds table joins when converted to string
$self->{fieldsql} = bless [ $self->{fieldsql}, $j, $self->{supptables}, $self->{suppseen} ], 'Bugzilla::Search::Code'; $self->{fieldsql} = bless [ $self->{fieldsql}, $j, $self->{supptables}, $self->{suppseen} ], 'Bugzilla::Search::Code';
@ -2389,9 +2397,9 @@ sub _content_matches
}; };
if (!$self->{negated}) if (!$self->{negated})
{ {
push @{COLUMNS->{relevance}->{joins}}, "LEFT JOIN bugs_fulltext_sphinx $table ON $table.id=bugs.bug_id AND $table.query=".$dbh->quote($text); push @{$self->{columns}->{relevance}->{joins}}, "LEFT JOIN bugs_fulltext_sphinx $table ON $table.id=bugs.bug_id AND $table.query=".$dbh->quote($text);
push @{COLUMNS->{relevance}->{bits}}, "$table.weight"; push @{$self->{columns}->{relevance}->{bits}}, "$table.weight";
COLUMNS->{relevance}->{name} = '('.join("+", @{COLUMNS->{relevance}->{bits}}).')'; $self->{columns}->{relevance}->{name} = '('.join("+", @{$self->{columns}->{relevance}->{bits}}).')';
} }
} }
else else
@ -2407,8 +2415,8 @@ sub _content_matches
if (@$ids && !$self->{negated}) if (@$ids && !$self->{negated})
{ {
# Pass relevance (weight) values via an overlong (CASE ... END) # Pass relevance (weight) values via an overlong (CASE ... END)
push @{COLUMNS->{relevance}->{bits}}, '(case'.join('', map { ' when bugs.bug_id='.$_->[0].' then '.$_->[1] } @$ids).' end)'; push @{$self->{columns}->{relevance}->{bits}}, '(case'.join('', map { ' when bugs.bug_id='.$_->[0].' then '.$_->[1] } @$ids).' end)';
COLUMNS->{relevance}->{name} = '('.join("+", @{COLUMNS->{relevance}->{bits}}).')'; $self->{columns}->{relevance}->{name} = '('.join("+", @{$self->{columns}->{relevance}->{bits}}).')';
} }
} }
return; return;
@ -2440,8 +2448,8 @@ sub _content_matches
# this adds more terms to the relevance sql. # this adds more terms to the relevance sql.
if (!$self->{negated}) if (!$self->{negated})
{ {
push @{COLUMNS->{relevance}->{bits}}, @terms[grep { $_&1 } 0..$#terms]; push @{$self->{columns}->{relevance}->{bits}}, @terms[grep { $_&1 } 0..$#terms];
COLUMNS->{relevance}->{name} = $dbh->sql_fulltext_relevance_sum(COLUMNS->{relevance}->{bits}); $self->{columns}->{relevance}->{name} = $dbh->sql_fulltext_relevance_sum($self->{columns}->{relevance}->{bits});
} }
} }
@ -3131,7 +3139,7 @@ sub _in_search_results
my $search = new Bugzilla::Search( my $search = new Bugzilla::Search(
params => http_decode_query($query), params => http_decode_query($query),
fields => [ "bugs.bug_id" ], fields => [ "bugs.bug_id" ],
user => Bugzilla->user, user => $self->user,
); );
my $sqlquery = $search->bugid_query; my $sqlquery = $search->bugid_query;
my $t = "ins_".$self->{sequence}; my $t = "ins_".$self->{sequence};

View File

@ -72,8 +72,6 @@ sub refresh_some_views
my ($userid) = $dbh->selectrow_array('SELECT userid FROM profiles WHERE login_name LIKE ? ORDER BY userid LIMIT 1', undef, $q.'@%'); my ($userid) = $dbh->selectrow_array('SELECT userid FROM profiles WHERE login_name LIKE ? ORDER BY userid LIMIT 1', undef, $q.'@%');
$userid or next; $userid or next;
my $userobj = Bugzilla::User->new($userid) or next; my $userobj = Bugzilla::User->new($userid) or next;
# Modify current user (hack)
Bugzilla->request_cache->{user} = $userobj;
# Determine saved search # Determine saved search
$q = $query; $q = $query;
$q =~ tr/_/%/; $q =~ tr/_/%/;
@ -111,8 +109,6 @@ sub refresh_some_views
$dbh->do($create.'longdescs AS SELECT l.bug_id, u.login_name, l.bug_when, l.thetext, l.work_time FROM longdescs l INNER JOIN '.$bugids.' b ON b.bug_id=l.bug_id INNER JOIN profiles u ON u.userid=l.who'.($userobj->is_insider?'':' WHERE l.isprivate=0')); $dbh->do($create.'longdescs AS SELECT l.bug_id, u.login_name, l.bug_when, l.thetext, l.work_time FROM longdescs l INNER JOIN '.$bugids.' b ON b.bug_id=l.bug_id INNER JOIN profiles u ON u.userid=l.who'.($userobj->is_insider?'':' WHERE l.isprivate=0'));
$dbh->do($create.'bugs_activity AS SELECT a.bug_id, u.login_name, a.bug_when, f.name field_name, a.removed, a.added FROM bugs_activity a INNER JOIN '.$bugids.' b ON b.bug_id=a.bug_id INNER JOIN profiles u ON u.userid=a.who INNER JOIN fielddefs f ON f.id=a.fieldid'); $dbh->do($create.'bugs_activity AS SELECT a.bug_id, u.login_name, a.bug_when, f.name field_name, a.removed, a.added FROM bugs_activity a INNER JOIN '.$bugids.' b ON b.bug_id=a.bug_id INNER JOIN profiles u ON u.userid=a.who INNER JOIN fielddefs f ON f.id=a.fieldid');
} }
# Restore current user
Bugzilla->request_cache->{user} = $old_user;
} }
1; 1;

View File

@ -528,7 +528,7 @@ elsif (($cmdtype eq 'doit') && defined $ARGS->{remtype})
# Column Definition # Column Definition
################################################################################ ################################################################################
my $columns = Bugzilla::Search::COLUMNS; my $columns = Bugzilla::Search->COLUMNS;
################################################################################ ################################################################################
# Display Column Determination # Display Column Determination
@ -1023,7 +1023,6 @@ else
$vars->{bugs} = \@bugs; $vars->{bugs} = \@bugs;
$vars->{buglist} = \@bugidlist; $vars->{buglist} = \@bugidlist;
$vars->{buglist_joined} = join(',', @bugidlist); $vars->{buglist_joined} = join(',', @bugidlist);
$vars->{columns} = $columns;
$vars->{displaycolumns} = \@displaycolumns; $vars->{displaycolumns} = \@displaycolumns;
$vars->{openstates} = [ map { $_->name } grep { $_->is_open } Bugzilla::Status->get_all ]; $vars->{openstates} = [ map { $_->name } grep { $_->is_open } Bugzilla::Status->get_all ];

View File

@ -107,7 +107,7 @@ my $i = 0;
for my $q (@$queries) for my $q (@$queries)
{ {
my $key = $q->{userid}.':'.$q->{name}; my $key = $q->{userid}.':'.$q->{name};
my $user = Bugzilla->request_cache->{user} = Bugzilla::User->new({ id => $q->{userid} }); my $user = Bugzilla::User->new({ id => $q->{userid} });
print("Invalid user $q->{userid}!\n"), next unless $user; print("Invalid user $q->{userid}!\n"), next unless $user;
next if $user->disabledtext; next if $user->disabledtext;
my $s = "Testing $q->{userid}'s $q->{name}... "; my $s = "Testing $q->{userid}'s $q->{name}... ";

View File

@ -56,39 +56,39 @@
<tr> <tr>
<th>Field</th><th>Value</th> <th>Field</th><th>Value</th>
</tr><tr class="bz_feed_product"> </tr><tr class="bz_feed_product">
<td>[% columns.product.title FILTER html %]</td> <td>[% COLUMNS.product.title FILTER html %]</td>
<td>[% bug.product FILTER html %]</td> <td>[% bug.product FILTER html %]</td>
</tr><tr class="bz_feed_component"> </tr><tr class="bz_feed_component">
<td>[% columns.component.title FILTER html %]</td> <td>[% COLUMNS.component.title FILTER html %]</td>
<td>[% bug.component FILTER html %]</td> <td>[% bug.component FILTER html %]</td>
</tr><tr class="bz_feed_assignee"> </tr><tr class="bz_feed_assignee">
<td>[% columns.assigned_to_realname.title FILTER html %]</td> <td>[% COLUMNS.assigned_to_realname.title FILTER html %]</td>
<td>[% bug.assigned_to_realname ? bug.assigned_to_realname : bug.assigned_to FILTER html %]</td> <td>[% bug.assigned_to_realname ? bug.assigned_to_realname : bug.assigned_to FILTER html %]</td>
</tr><tr class="bz_feed_reporter"> </tr><tr class="bz_feed_reporter">
<td>[% columns.reporter_realname.title FILTER html %]</td> <td>[% COLUMNS.reporter_realname.title FILTER html %]</td>
<td>[% bug.reporter_realname ? bug.reporter_realname : bug.reporter FILTER html %]</td> <td>[% bug.reporter_realname ? bug.reporter_realname : bug.reporter FILTER html %]</td>
</tr><tr class="bz_feed_bug_status"> </tr><tr class="bz_feed_bug_status">
<td>[% columns.bug_status.title FILTER html %]</td> <td>[% COLUMNS.bug_status.title FILTER html %]</td>
<td>[% bug.bug_status FILTER html %]</td> <td>[% bug.bug_status FILTER html %]</td>
</tr><tr class="bz_feed_resolution"> </tr><tr class="bz_feed_resolution">
<td>[% columns.resolution.title FILTER html %] </td> <td>[% COLUMNS.resolution.title FILTER html %] </td>
<td>[% bug.resolution FILTER html %]</td> <td>[% bug.resolution FILTER html %]</td>
</tr><tr class="bz_feed_priority"> </tr><tr class="bz_feed_priority">
<td>[% columns.priority.title FILTER html %]</td> <td>[% COLUMNS.priority.title FILTER html %]</td>
<td>[% bug.priority FILTER html %]</td> <td>[% bug.priority FILTER html %]</td>
</tr><tr class="bz_feed_severity"> </tr><tr class="bz_feed_severity">
<td>[% columns.bug_severity.title FILTER html %] </td> <td>[% COLUMNS.bug_severity.title FILTER html %] </td>
<td>[% bug.bug_severity FILTER html %]</td> <td>[% bug.bug_severity FILTER html %]</td>
[% IF Bugzilla.get_field('target_milestone').enabled %] [% IF Bugzilla.get_field('target_milestone').enabled %]
</tr><tr class="bz_feed_target_milestone"> </tr><tr class="bz_feed_target_milestone">
<td>[% columns.target_milestone.title FILTER html %]</td> <td>[% COLUMNS.target_milestone.title FILTER html %]</td>
<td>[% bug.target_milestone FILTER html %]</td> <td>[% bug.target_milestone FILTER html %]</td>
[% END %] [% END %]
</tr><tr class="bz_feed_creation_date"> </tr><tr class="bz_feed_creation_date">
<td>[% columns.creation_ts.title FILTER html %]</td> <td>[% COLUMNS.creation_ts.title FILTER html %]</td>
<td>[% bug.creation_ts FILTER html %]</td> <td>[% bug.creation_ts FILTER html %]</td>
</tr><tr class="bz_feed_changed_date"> </tr><tr class="bz_feed_changed_date">
<td>[% columns.delta_ts.title FILTER html %]</td> <td>[% COLUMNS.delta_ts.title FILTER html %]</td>
<td>[% bug.delta_ts FILTER html -%]</td> <td>[% bug.delta_ts FILTER html -%]</td>
</tr> </tr>
</table> </table>

View File

@ -70,7 +70,7 @@
[% FOREACH id = displaycolumns %] [% FOREACH id = displaycolumns %]
[% NEXT UNLESS loop.count() % 2 == 0 %] [% NEXT UNLESS loop.count() % 2 == 0 %]
[% column = columns.$id %] [% column = COLUMNS.$id %]
[% PROCESS columnheader key=loop.count() %] [% PROCESS columnheader key=loop.count() %]
[% END %] [% END %]
@ -85,7 +85,7 @@
[% FOREACH id = displaycolumns %] [% FOREACH id = displaycolumns %]
[% NEXT IF loop.count() % 2 == 0 %] [% NEXT IF loop.count() % 2 == 0 %]
[% column = columns.$id %] [% column = COLUMNS.$id %]
[% PROCESS columnheader key=loop.count() %] [% PROCESS columnheader key=loop.count() %]
[% END %] [% END %]
@ -95,7 +95,7 @@
[% ELSE %] [% ELSE %]
[% FOREACH id = displaycolumns %] [% FOREACH id = displaycolumns %]
[% column = columns.$id %] [% column = COLUMNS.$id %]
[% PROCESS columnheader key=loop.count() %] [% PROCESS columnheader key=loop.count() %]
[% END %] [% END %]
@ -110,7 +110,7 @@
[% i = lsearch(order_columns, 'bug_id') %] [% i = lsearch(order_columns, 'bug_id') %]
<td><input type="button" value="Apply" id="usr_filter_submit" /></td> <td><input type="button" value="Apply" id="usr_filter_submit" /></td>
[% FOREACH id = displaycolumns %] [% FOREACH id = displaycolumns %]
[% column = columns.$id %] [% column = COLUMNS.$id %]
[% PROCESS columnheaderfilter key=loop.count() %] [% PROCESS columnheaderfilter key=loop.count() %]
[% END %] [% END %]
</tr> </tr>

View File

@ -75,7 +75,7 @@
</form> </form>
</fieldset> </fieldset>
[% search_description %] [% search_description | none %]
<hr /> <hr />

View File

@ -388,8 +388,6 @@ sub run_queries
resolution resolution
short_desc short_desc
); );
# Modify current user (hack)
Bugzilla->request_cache->{user} = $args->{recipient};
my $search = new Bugzilla::Search( my $search = new Bugzilla::Search(
fields => \@searchfields, fields => \@searchfields,
params => http_decode_query($savedquery->query), params => http_decode_query($savedquery->query),