diff options
Diffstat (limited to 'colchange.cgi')
-rwxr-xr-x | colchange.cgi | 232 |
1 files changed, 120 insertions, 112 deletions
diff --git a/colchange.cgi b/colchange.cgi index 77d9f11ee..8add4f2f7 100755 --- a/colchange.cgi +++ b/colchange.cgi @@ -24,146 +24,154 @@ use Storable qw(dclone); # Maps parameters that control columns to the names of columns. use constant COLUMN_PARAMS => { - 'useclassification' => ['classification'], - 'usetargetmilestone' => ['target_milestone'], - 'useqacontact' => ['qa_contact', 'qa_contact_realname'], - 'usestatuswhiteboard' => ['status_whiteboard'], - 'timetrackinggroup' => ['deadline'], + 'useclassification' => ['classification'], + 'usetargetmilestone' => ['target_milestone'], + 'useqacontact' => ['qa_contact', 'qa_contact_realname'], + 'usestatuswhiteboard' => ['status_whiteboard'], + 'timetrackinggroup' => ['deadline'], }; # We only show these columns if an object of this type exists in the # database. -use constant COLUMN_CLASSES => { - 'Bugzilla::Flag' => 'flagtypes.name', - 'Bugzilla::Keyword' => 'keywords', -}; +use constant COLUMN_CLASSES => + {'Bugzilla::Flag' => 'flagtypes.name', 'Bugzilla::Keyword' => 'keywords',}; my $user = Bugzilla->login(); -my $cgi = Bugzilla->cgi; +my $cgi = Bugzilla->cgi; my $template = Bugzilla->template; -my $vars = {}; +my $vars = {}; my $columns = dclone(Bugzilla::Search::COLUMNS); # You can't manually select "relevance" as a column you want to see. delete $columns->{'relevance'}; -foreach my $param (keys %{ COLUMN_PARAMS() }) { - next if Bugzilla->params->{$param}; - foreach my $column (@{ COLUMN_PARAMS->{$param} }) { - delete $columns->{$column}; - } +foreach my $param (keys %{COLUMN_PARAMS()}) { + next if Bugzilla->params->{$param}; + foreach my $column (@{COLUMN_PARAMS->{$param}}) { + delete $columns->{$column}; + } } -foreach my $class (keys %{ COLUMN_CLASSES() }) { - eval("use $class; 1;") || die $@; - my $column = COLUMN_CLASSES->{$class}; - delete $columns->{$column} if !$class->any_exist; +foreach my $class (keys %{COLUMN_CLASSES()}) { + eval("use $class; 1;") || die $@; + my $column = COLUMN_CLASSES->{$class}; + delete $columns->{$column} if !$class->any_exist; } if (!$user->is_timetracker) { - foreach my $column (TIMETRACKING_FIELDS) { - delete $columns->{$column}; - } + foreach my $column (TIMETRACKING_FIELDS) { + delete $columns->{$column}; + } } $vars->{'columns'} = $columns; my @collist; if (defined $cgi->param('rememberedquery')) { - my $search; - if (defined $cgi->param('saved_search')) { - $search = new Bugzilla::Search::Saved($cgi->param('saved_search')); - } - - my $token = $cgi->param('token'); - if ($search) { - check_hash_token($token, [$search->id, $search->name]); - } - else { - check_hash_token($token, ['default-list']); - } - - my $splitheader = 0; - if (defined $cgi->param('resetit')) { - @collist = DEFAULT_COLUMN_LIST; - } else { - if (defined $cgi->param("selected_columns")) { - @collist = grep { exists $columns->{$_} } - $cgi->param("selected_columns"); - } - if (defined $cgi->param('splitheader')) { - $splitheader = $cgi->param('splitheader')? 1: 0; - } - } - my $list = join(" ", @collist); - - if ($list) { - # Only set the cookie if this is not a saved search. - # Saved searches have their own column list - if (!$cgi->param('save_columns_for_search')) { - $cgi->send_cookie(-name => 'COLUMNLIST', - -value => $list, - -expires => 'Fri, 01-Jan-2038 00:00:00 GMT'); - } - } - else { - $cgi->remove_cookie('COLUMNLIST'); - } - if ($splitheader) { - $cgi->send_cookie(-name => 'SPLITHEADER', - -value => $splitheader, - -expires => 'Fri, 01-Jan-2038 00:00:00 GMT'); + my $search; + if (defined $cgi->param('saved_search')) { + $search = new Bugzilla::Search::Saved($cgi->param('saved_search')); + } + + my $token = $cgi->param('token'); + if ($search) { + check_hash_token($token, [$search->id, $search->name]); + } + else { + check_hash_token($token, ['default-list']); + } + + my $splitheader = 0; + if (defined $cgi->param('resetit')) { + @collist = DEFAULT_COLUMN_LIST; + } + else { + if (defined $cgi->param("selected_columns")) { + @collist = grep { exists $columns->{$_} } $cgi->param("selected_columns"); } - else { - $cgi->remove_cookie('SPLITHEADER'); + if (defined $cgi->param('splitheader')) { + $splitheader = $cgi->param('splitheader') ? 1 : 0; } - - $vars->{'message'} = "change_columns"; - - if ($cgi->param('save_columns_for_search') - && defined $search && $search->user->id == $user->id) - { - my $params = new Bugzilla::CGI($search->url); - $params->param('columnlist', join(",", @collist)); - $search->set_url($params->query_string()); - $search->update(); + } + my $list = join(" ", @collist); + + if ($list) { + + # Only set the cookie if this is not a saved search. + # Saved searches have their own column list + if (!$cgi->param('save_columns_for_search')) { + $cgi->send_cookie( + -name => 'COLUMNLIST', + -value => $list, + -expires => 'Fri, 01-Jan-2038 00:00:00 GMT' + ); } - - my $params = new Bugzilla::CGI($cgi->param('rememberedquery')); + } + else { + $cgi->remove_cookie('COLUMNLIST'); + } + if ($splitheader) { + $cgi->send_cookie( + -name => 'SPLITHEADER', + -value => $splitheader, + -expires => 'Fri, 01-Jan-2038 00:00:00 GMT' + ); + } + else { + $cgi->remove_cookie('SPLITHEADER'); + } + + $vars->{'message'} = "change_columns"; + + if ( $cgi->param('save_columns_for_search') + && defined $search + && $search->user->id == $user->id) + { + my $params = new Bugzilla::CGI($search->url); $params->param('columnlist', join(",", @collist)); - $vars->{'redirect_url'} = "buglist.cgi?".$params->query_string(); - - - # If we're running on Microsoft IIS, $cgi->redirect discards - # the Set-Cookie lines. In mod_perl, $cgi->redirect with cookies - # causes the page to be rendered as text/plain. - # Workaround is to use the old-fashioned redirection mechanism. - # See bug 214466 and bug 376044 for details. - if ($ENV{'MOD_PERL'} - || $ENV{'SERVER_SOFTWARE'} =~ /Microsoft-IIS/ - || $ENV{'SERVER_SOFTWARE'} =~ /Sun ONE Web/) - { - print $cgi->header(-type => "text/html", - -refresh => "0; URL=$vars->{'redirect_url'}"); - } - else { - print $cgi->redirect($vars->{'redirect_url'}); - exit; - } - - $template->process("global/message.html.tmpl", $vars) - || ThrowTemplateError($template->error()); + $search->set_url($params->query_string()); + $search->update(); + } + + my $params = new Bugzilla::CGI($cgi->param('rememberedquery')); + $params->param('columnlist', join(",", @collist)); + $vars->{'redirect_url'} = "buglist.cgi?" . $params->query_string(); + + + # If we're running on Microsoft IIS, $cgi->redirect discards + # the Set-Cookie lines. In mod_perl, $cgi->redirect with cookies + # causes the page to be rendered as text/plain. + # Workaround is to use the old-fashioned redirection mechanism. + # See bug 214466 and bug 376044 for details. + if ( $ENV{'MOD_PERL'} + || $ENV{'SERVER_SOFTWARE'} =~ /Microsoft-IIS/ + || $ENV{'SERVER_SOFTWARE'} =~ /Sun ONE Web/) + { + print $cgi->header( + -type => "text/html", + -refresh => "0; URL=$vars->{'redirect_url'}" + ); + } + else { + print $cgi->redirect($vars->{'redirect_url'}); exit; + } + + $template->process("global/message.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; } if (defined $cgi->param('columnlist')) { - @collist = split(/[ ,]+/, $cgi->param('columnlist')); -} elsif (defined $cgi->cookie('COLUMNLIST')) { - @collist = split(/ /, $cgi->cookie('COLUMNLIST')); -} else { - @collist = DEFAULT_COLUMN_LIST; + @collist = split(/[ ,]+/, $cgi->param('columnlist')); +} +elsif (defined $cgi->cookie('COLUMNLIST')) { + @collist = split(/ /, $cgi->cookie('COLUMNLIST')); +} +else { + @collist = DEFAULT_COLUMN_LIST; } $vars->{'collist'} = \@collist; @@ -173,12 +181,12 @@ $vars->{'buffer'} = $cgi->query_string(); my $search; if (defined $cgi->param('query_based_on')) { - my $searches = $user->queries; - my ($search) = grep($_->name eq $cgi->param('query_based_on'), @$searches); + my $searches = $user->queries; + my ($search) = grep($_->name eq $cgi->param('query_based_on'), @$searches); - if ($search) { - $vars->{'saved_search'} = $search; - } + if ($search) { + $vars->{'saved_search'} = $search; + } } # Generate and return the UI (HTML page) from the appropriate template. |