page.cgi 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. # This CGI is a general template display engine. To display templates using it,
  25. # put them in the "pages" subdirectory of en/default, call them
  26. # "foo.<ctype>.tmpl" and use the URL page.cgi?id=foo.<ctype> , where <ctype> is
  27. # a content-type, e.g. html.
  28. ###############################################################################
  29. use strict;
  30. use lib qw(. lib);
  31. use Bugzilla;
  32. use Bugzilla::Error;
  33. Bugzilla->login();
  34. my $cgi = Bugzilla->cgi;
  35. my $template = Bugzilla->template;
  36. my $id = $cgi->param('id');
  37. if ($id) {
  38. # Remove all dodgy chars, and split into name and ctype.
  39. $id =~ s/[^\w\-\.]//g;
  40. $id =~ /(.*)\.(.*)/;
  41. if (!$2) {
  42. # if this regexp fails to match completely, something bad came in
  43. ThrowCodeError("bad_page_cgi_id", { "page_id" => $id });
  44. }
  45. my $format = $template->get_format("pages/$1", undef, $2);
  46. $cgi->param('id', $id);
  47. print $cgi->header($format->{'ctype'});
  48. $template->process("$format->{'template'}")
  49. || ThrowTemplateError($template->error());
  50. }
  51. else {
  52. ThrowUserError("no_page_specified");
  53. }