summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CGI.pl29
-rw-r--r--globals.pl92
-rwxr-xr-xtemplate/default/global/header13
-rw-r--r--template/default/global/message.html.tmpl16
4 files changed, 132 insertions, 18 deletions
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|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
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 "<strike>" . $_[0] . "</strike>" } ,
+ } ,
+ }
+);
+
+# 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 @@
</table>
[% END %]
- [% IF message %]
- <table width="100%" cellspacing="0" cellpadding="5" border="1"><tr><td>
- <font color="green">[% message %]</font>
- </td></tr></table>
- [% END %]
-
- [% Param('shutdownhtml') %]
-
+[% IF message %]
+ <table width="100%" cellspacing="0" cellpadding="5" border="1"><tr><td>
+ <font color="green">[% message %]</font>
+ </td></tr></table>
+[% 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 %]
+ <p>
+ <a href="[% url %]">[% link %]</a>
+ </p>
+[% END %]
+
+[% INCLUDE global/footer %]