summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CGI.pl21
-rw-r--r--template/en/default/global/code-error.html.tmpl36
-rw-r--r--template/en/default/global/user-error.html.tmpl33
3 files changed, 77 insertions, 13 deletions
diff --git a/CGI.pl b/CGI.pl
index 4dfc772e8..d3ca9f8f9 100644
--- a/CGI.pl
+++ b/CGI.pl
@@ -865,7 +865,6 @@ sub PutFooter {
# ThrowTemplateError instead.
sub DisplayError {
($vars->{'error'}, $vars->{'title'}) = (@_);
- $vars->{'title'} ||= "Error";
print "Content-type: text/html\n\n" if !$vars->{'header_done'};
$template->process("global/user-error.html.tmpl", $vars)
@@ -878,11 +877,10 @@ sub DisplayError {
# $vars->{'variables'} is a reference to a hash of useful debugging info.
sub ThrowCodeError {
($vars->{'error'}, $vars->{'variables'}, my $unlock_tables) = (@_);
- $vars->{'title'} = "Code Error";
SendSQL("UNLOCK TABLES") if $unlock_tables;
- # We may optionally log something to file here.
+ # We may one day log something to file here.
print "Content-type: text/html\n\n" if !$vars->{'header_done'};
$template->process("global/code-error.html.tmpl", $vars)
@@ -892,9 +890,12 @@ sub ThrowCodeError {
}
# For errors made by the user.
+# The correct use of this function is to pass an error tag, defined in
+# user-error.html.tmpl, as the first parameter, and then, optionally,
+# undef as the second parameter and $unlock_tables as the third.
+# The second parameter will eventually go away.
sub ThrowUserError {
($vars->{'error'}, $vars->{'title'}, my $unlock_tables) = (@_);
- $vars->{'title'} ||= "Error";
SendSQL("UNLOCK TABLES") if $unlock_tables;
@@ -905,18 +906,20 @@ sub ThrowUserError {
exit;
}
-# If the template system isn't working, we can't use a template.
-# This should only be called if a template->process() fails.
+# This function should only be called if a template->process() fails.
+# It tries another template first, because often one template being
+# broken or missing doesn't mean that they all are. But it falls back on
+# a print statement.
# The Content-Type will already have been printed.
sub ThrowTemplateError {
- ($vars->{'error'}) = (@_);
- $vars->{'title'} = "Template Error";
+ ($vars->{'template_error_msg'}) = (@_);
+ $vars->{'error'} = "template_error";
# Try a template first; but if this one fails too, fall back
# on plain old print statements.
if (!$template->process("global/code-error.html.tmpl", $vars)) {
my $maintainer = Param('maintainer');
- my $error = html_quote($vars->{'error'});
+ my $error = html_quote($vars->{'template_error_msg'});
my $error2 = html_quote($template->error());
print <<END;
<tt>
diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl
index 4b5ac2f67..64bf5064e 100644
--- a/template/en/default/global/code-error.html.tmpl
+++ b/template/en/default/global/code-error.html.tmpl
@@ -21,11 +21,43 @@
[%# INTERFACE:
# header_done: boolean. True if the header has already been printed.
- # error: string. The error message to be printed. May contain HTML.
+ # error: string. The tag of the error, or the error message to be displayed
+ # (deprecated). May contain HTML if it's an error message.
+ # title: string. If error is an error message, the title (deprecated.)
# variables: hash. Useful data about the problem. The keys are the variable
# names, and the values the variable values.
#%]
+[%# This is a list of all the possible code errors. Please keep them in
+ # alphabetical order by error tag, and leave a blank line between errors.
+ #%]
+
+[% DEFAULT title = "Internal Error" %]
+
+[% error_message = BLOCK %]
+ [% IF error == "aaa_example_error_tag" %]
+ [% title = "Example Error" %]
+ This is an example error. The title is set above. This text is the body
+ of the error. It can contain arbitrary <b>HTML</b>, and also references
+ to any [% parameters %] which you may have set before calling
+ ThrowCodeError.
+
+ [% ELSIF error == "another_error_tag" %]
+ This is another sample error, without a special title. This
+ should be the usual usage for this file. This sample can be removed.
+
+ [% ELSIF error == "template_error" %]
+ [% template_error_msg %]
+
+ [% ELSE %]
+ [%# Cope with legacy calling convention, where "error" was the string
+ # to print.
+ #%]
+
+ [% error %]
+ [% END %]
+[% END %]
+
[% UNLESS header_done %]
[% PROCESS global/header.html.tmpl %]
[% END %]
@@ -46,7 +78,7 @@
<tr>
<td bgcolor="#ff0000">
<font size="+2">
- [% error %]
+ [% error_message %]
</font>
</td>
</tr>
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
index f24b5293f..b9654a135 100644
--- a/template/en/default/global/user-error.html.tmpl
+++ b/template/en/default/global/user-error.html.tmpl
@@ -21,9 +21,38 @@
[%# INTERFACE:
# header_done: boolean. True if the header has already been printed.
- # error: string. The error message to be displayed. May contain HTML.
+ # error: string. The tag of the error, or the error message to be displayed
+ # (deprecated). May contain HTML if it's an error message.
+ # title: string. If error is an error message, the title (deprecated.)
#%]
+
+[%# This is a list of all the possible user errors. Please keep them in
+ # alphabetical order by error tag, and leave a blank line between errors.
+ #%]
+
+[% DEFAULT title = "Error" %]
+[% error_message = BLOCK %]
+ [% IF error == "aaa_example_error_tag" %]
+ [% title = "Example Error" %]
+ This is an example error. The title is set above. This text is the body
+ of the error. It can contain arbitrary <b>HTML</b>, and also references
+ to any [% parameters %] which you may have set before calling
+ ThrowUserError.
+
+ [% ELSIF error == "another_error_tag" %]
+ [% title = "Another Error" %]
+ This is another sample error. It can be removed.
+
+ [% ELSE %]
+ [%# Cope with legacy calling convention, where "error" was the string
+ # to print.
+ #%]
+
+ [% error %]
+ [% END %]
+[% END %]
+
[% UNLESS header_done %]
[% PROCESS global/header.html.tmpl %]
[% END %]
@@ -32,7 +61,7 @@
<tr>
<td bgcolor="#ff0000">
<font size="+2">
- [% error %]
+ [% error_message %]
</font>
</td>
</tr>