From 0742929eb43ee5e3e67b59a9159ca416cbd0d4be Mon Sep 17 00:00:00 2001 From: "myk%mozilla.org" <> Date: Sun, 3 Feb 2002 17:27:02 +0000 Subject: Fix for bug 121747: Stops every script before it does anything else if Bugzilla is currently shut down. Also adds global template instantiation code to globals.pl. Patch by Myk Melez . r=gerv,kiko --- CGI.pl | 29 ++++++---- globals.pl | 92 +++++++++++++++++++++++++++++++ template/default/global/header | 13 ++--- template/default/global/message.html.tmpl | 16 ++++++ 4 files changed, 132 insertions(+), 18 deletions(-) create mode 100644 template/default/global/message.html.tmpl diff --git a/CGI.pl b/CGI.pl index eb8f5f037..f99013e25 100644 --- a/CGI.pl +++ b/CGI.pl @@ -52,6 +52,25 @@ use CGI::Carp qw(fatalsToBrowser); require 'globals.pl'; +# If Bugzilla is shut down, do not go any further, just display a message +# to the user about the downtime. (do)editparams.cgi is exempted from +# this message, of course, since it needs to be available in order for +# the administrator to open Bugzilla back up. +if (Param("shutdownhtml") && $0 !~ m:[\\/](do)?editparams.cgi$:) { + # The shut down message we are going to display to the user. + $::vars->{'title'} = "Bugzilla is Down"; + $::vars->{'h1'} = "Bugzilla is Down"; + $::vars->{'message'} = Param("shutdownhtml"); + + # Return the appropriate HTTP response headers. + print "Content-Type: text/html\n\n"; + + # Generate and return an HTML message about the downtime. + $::template->process("global/message.html.tmpl", $::vars) + || DisplayError("Template process failed: " . $::template->error()); + exit; +} + sub GeneratePersonInput { my ($field, $required, $def_value, $extraJavaScript) = (@_); $extraJavaScript ||= ""; @@ -1110,16 +1129,6 @@ sub PutHeader { $extra = ""; } $jscript ||= ""; - # If we are shutdown, we want a very basic page to give that - # information. Also, the page title should indicate that - # we are down. - if (Param('shutdownhtml')) { - $title = "Bugzilla is Down"; - $h1 = "Bugzilla is currently down"; - $h2 = ""; - $extra = ""; - $jscript = ""; - } print qq| diff --git a/globals.pl b/globals.pl index 86478b03c..cc05ae345 100644 --- a/globals.pl +++ b/globals.pl @@ -53,6 +53,8 @@ sub globals_pl_sillyness { $zz = @main::prodmaxvotes; $zz = $main::superusergroupset; $zz = $main::userid; + $zz = $main::template; + $zz = $main::vars; } # @@ -1549,4 +1551,94 @@ sub trim { return $str; } +############################################################################### +# Global Templatization Code + +# Use the template toolkit (http://www.template-toolkit.org/) to generate +# the user interface using templates in the "template/" subdirectory. +use Template; + +# Create the global template object that processes templates and specify +# configuration parameters that apply to all templates processed in this script. +$::template = Template->new( + { + # Colon-separated list of directories containing templates. + INCLUDE_PATH => "template/custom:template/default" , + + # Allow templates to be specified with relative paths. + RELATIVE => 1 , + + # Remove white-space before template directives (PRE_CHOMP) and at the + # beginning and end of templates and template blocks (TRIM) for better + # looking, more compact content. Use the plus sign at the beginning + # of directives to maintain white space (i.e. [%+ DIRECTIVE %]). + PRE_CHOMP => 1 , + TRIM => 1 , + + # Functions for processing text within templates in various ways. + FILTERS => + { + # Render text in strike-through style. + strike => sub { return "" . $_[0] . "" } , + } , + } +); + +# Use the Toolkit Template's Stash module to add utility pseudo-methods +# to template variables. +use Template::Stash; + +# Add "contains***" methods to list variables that search for one or more +# items in a list and return boolean values representing whether or not +# one/all/any item(s) were found. +$Template::Stash::LIST_OPS->{ contains } = + sub { + my ($list, $item) = @_; + return grep($_ eq $item, @$list); + }; + +$Template::Stash::LIST_OPS->{ containsany } = + sub { + my ($list, $items) = @_; + foreach my $item (@$items) { + return 1 if grep($_ eq $item, @$list); + } + return 0; + }; + +# Add a "substr" method to the Template Toolkit's "scalar" object +# that returns a substring of a string. +$Template::Stash::SCALAR_OPS->{ substr } = + sub { + my ($scalar, $offset, $length) = @_; + return substr($scalar, $offset, $length); + }; + +# Add a "truncate" method to the Template Toolkit's "scalar" object +# that truncates a string to a certain length. +$Template::Stash::SCALAR_OPS->{ truncate } = + sub { + my ($string, $length, $ellipsis) = @_; + $ellipsis ||= ""; + + return $string if !$length || length($string) <= $length; + + my $strlen = $length - length($ellipsis); + my $newstr = substr($string, 0, $strlen) . $ellipsis; + return $newstr; + }; + +# Define the global variables and functions that will be passed to the UI +# template. Additional values may be added to this hash before templates +# are processed. +$::vars = + { + # Function for retrieving global parameters. + 'Param' => \&Param , + + # Function for processing global parameters that contain references + # to other global parameters. + 'PerformSubsts' => \&PerformSubsts , + }; + 1; diff --git a/template/default/global/header b/template/default/global/header index 1efdbf51c..627a52571 100755 --- a/template/default/global/header +++ b/template/default/global/header @@ -41,11 +41,8 @@ [% END %] - [% IF message %] -
- [% message %] -
- [% END %] - - [% Param('shutdownhtml') %] - +[% IF message %] +
+ [% message %] +
+[% END %] diff --git a/template/default/global/message.html.tmpl b/template/default/global/message.html.tmpl new file mode 100644 index 000000000..03253242a --- /dev/null +++ b/template/default/global/message.html.tmpl @@ -0,0 +1,16 @@ +[% DEFAULT title = "Bugzilla Message" %] + +[% INCLUDE global/header title=title %] + +[%# The "header" template automatically displays the contents of a "message" + variable if it finds one, so it is not necessary to display the message + here. %] + +[%# Display a URL if the calling script has included one. %] +[% IF url && link %] +

+ [% link %] +

+[% END %] + +[% INCLUDE global/footer %] -- cgit v1.2.3-24-g4f1b