2010-09-29 Joseph Pecoraro <joepeck@webkit.org>
[WebKit-https.git] / BugsSite / page.cgi
1 #!/usr/bin/env perl -wT
2 # -*- Mode: perl; indent-tabs-mode: nil -*-
3 #
4 # The contents of this file are subject to the Mozilla Public
5 # License Version 1.1 (the "License"); you may not use this file
6 # except in compliance with the License. You may obtain a copy of
7 # the License at http://www.mozilla.org/MPL/
8 #
9 # Software distributed under the License is distributed on an "AS
10 # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11 # implied. See the License for the specific language governing
12 # rights and limitations under the License.
13 #
14 # The Original Code is the Bugzilla Bug Tracking System.
15 #
16 # The Initial Developer of the Original Code is Netscape Communications
17 # Corporation. Portions created by Netscape are
18 # Copyright (C) 1998 Netscape Communications Corporation. All
19 # Rights Reserved.
20 #
21 # Contributor(s): Gervase Markham <gerv@gerv.net>
22 #
23
24 ###############################################################################
25 # This CGI is a general template display engine. To display templates using it,
26 # put them in the "pages" subdirectory of en/default, call them
27 # "foo.<ctype>.tmpl" and use the URL page.cgi?id=foo.<ctype> , where <ctype> is
28 # a content-type, e.g. html.
29 ###############################################################################
30
31 use strict;
32
33 use lib qw(. lib);
34
35 use Bugzilla;
36 use Bugzilla::Error;
37
38 Bugzilla->login();
39
40 my $cgi = Bugzilla->cgi;
41 my $template = Bugzilla->template;
42
43 my $id = $cgi->param('id');
44 if ($id) {
45     # Remove all dodgy chars, and split into name and ctype.
46     $id =~ s/[^\w\-\.]//g;
47     $id =~ /(.*)\.(.*)/;
48     if (!$2) {
49         # if this regexp fails to match completely, something bad came in
50         ThrowCodeError("bad_page_cgi_id", { "page_id" => $id });
51     }
52
53     my $format = $template->get_format("pages/$1", undef, $2);
54     
55     $cgi->param('id', $id);
56
57     print $cgi->header($format->{'ctype'});
58
59     $template->process("$format->{'template'}")
60       || ThrowTemplateError($template->error());
61 }
62 else {
63     ThrowUserError("no_page_specified");
64 }