123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/usr/bin/env perl -wT
- # -*- Mode: perl; indent-tabs-mode: nil -*-
- #
- # The contents of this file are subject to the Mozilla Public
- # License Version 1.1 (the "License"); you may not use this file
- # except in compliance with the License. You may obtain a copy of
- # the License at http://www.mozilla.org/MPL/
- #
- # Software distributed under the License is distributed on an "AS
- # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- # implied. See the License for the specific language governing
- # rights and limitations under the License.
- #
- # The Original Code is the Bugzilla Bug Tracking System.
- #
- # The Initial Developer of the Original Code is Netscape Communications
- # Corporation. Portions created by Netscape are
- # Copyright (C) 1998 Netscape Communications Corporation. All
- # Rights Reserved.
- #
- # Contributor(s): Terry Weissman <terry@mozilla.org>
- use strict;
- use lib qw(. lib);
- use Bugzilla;
- use Bugzilla::Constants;
- use Bugzilla::Error;
- use Bugzilla::User;
- use Bugzilla::Keyword;
- use Bugzilla::Bug;
- my $cgi = Bugzilla->cgi;
- my $template = Bugzilla->template;
- my $vars = {};
- my $user = Bugzilla->login();
- my $format = $template->get_format("bug/show", scalar $cgi->param('format'),
- scalar $cgi->param('ctype'));
- # Editable, 'single' HTML bugs are treated slightly specially in a few places
- my $single = !$format->{format} && $format->{extension} eq 'html';
- # If we don't have an ID, _AND_ we're only doing a single bug, then prompt
- if (!$cgi->param('id') && $single) {
- print Bugzilla->cgi->header();
- $template->process("bug/choose.html.tmpl", $vars) ||
- ThrowTemplateError($template->error());
- exit;
- }
- my @bugs = ();
- my %marks;
- if ($single) {
- my $id = $cgi->param('id');
- # Its a bit silly to do the validation twice - that functionality should
- # probably move into Bug.pm at some point
- ValidateBugID($id);
- push @bugs, new Bugzilla::Bug($id);
- if (defined $cgi->param('mark')) {
- foreach my $range (split ',', $cgi->param('mark')) {
- if ($range =~ /^(\d+)-(\d+)$/) {
- foreach my $i ($1..$2) {
- $marks{$i} = 1;
- }
- } elsif ($range =~ /^(\d+)$/) {
- $marks{$1} = 1;
- }
- }
- }
- } else {
- foreach my $id ($cgi->param('id')) {
- # Be kind enough and accept URLs of the form: id=1,2,3.
- my @ids = split(/,/, $id);
- foreach (@ids) {
- my $bug = new Bugzilla::Bug($_);
- # This is basically a backwards-compatibility hack from when
- # Bugzilla::Bug->new used to set 'NotPermitted' if you couldn't
- # see the bug.
- if (!$bug->{error} && !$user->can_see_bug($bug->bug_id)) {
- $bug->{error} = 'NotPermitted';
- }
- push(@bugs, $bug);
- }
- }
- }
- # Determine if Patch Viewer is installed, for Diff link
- eval {
- require PatchReader;
- $vars->{'patchviewerinstalled'} = 1;
- };
- $vars->{'bugs'} = \@bugs;
- $vars->{'marks'} = \%marks;
- $vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
- my @bugids = map {$_->bug_id} grep {!$_->error} @bugs;
- $vars->{'bugids'} = join(", ", @bugids);
- # Next bug in list (if there is one)
- my @bug_list;
- if ($cgi->cookie("BUGLIST")) {
- @bug_list = split(/:/, $cgi->cookie("BUGLIST"));
- }
- $vars->{'bug_list'} = \@bug_list;
- # Work out which fields we are displaying (currently XML only.)
- # If no explicit list is defined, we show all fields. We then exclude any
- # on the exclusion list. This is so you can say e.g. "Everything except
- # attachments" without listing almost all the fields.
- my @fieldlist = (Bugzilla::Bug->fields, 'group', 'long_desc',
- 'attachment', 'attachmentdata', 'token');
- my %displayfields;
- if ($cgi->param("field")) {
- @fieldlist = $cgi->param("field");
- }
- unless (Bugzilla->user->in_group(Bugzilla->params->{"timetrackinggroup"})) {
- @fieldlist = grep($_ !~ /(^deadline|_time)$/, @fieldlist);
- }
- foreach (@fieldlist) {
- $displayfields{$_} = 1;
- }
- foreach ($cgi->param("excludefield")) {
- $displayfields{$_} = undef;
- }
- $vars->{'displayfields'} = \%displayfields;
- print $cgi->header($format->{'ctype'});
- $template->process($format->{'template'}, $vars)
- || ThrowTemplateError($template->error());
|