Commit cc5259d7 authored by gerv%gerv.net's avatar gerv%gerv.net

Bug 170064 - Change error API again to allow vars to be passed in the call.…

Bug 170064 - Change error API again to allow vars to be passed in the call. Patch by gerv; r=bbaetz.
parent 91906eca
...@@ -223,7 +223,7 @@ sub CheckFormField (\%$;\@) { ...@@ -223,7 +223,7 @@ sub CheckFormField (\%$;\@) {
$vars->{'field'} = $fieldname; $vars->{'field'} = $fieldname;
} }
ThrowCodeError("illegal_field", "abort"); ThrowCodeError("illegal_field", undef, "abort");
} }
} }
...@@ -827,6 +827,10 @@ sub PutFooter { ...@@ -827,6 +827,10 @@ sub PutFooter {
# #
# If you are doing incremental output, set $vars->{'header_done'} once you've # If you are doing incremental output, set $vars->{'header_done'} once you've
# done the header. # done the header.
#
# You can call Throw*Error with extra template variables in one pass by using
# the $extra_vars hash reference parameter:
# ThrowUserError("some_tag", { bug_id => $bug_id, size => 127 });
############################################################################### ###############################################################################
# DisplayError is deprecated. Use ThrowCodeError, ThrowUserError or # DisplayError is deprecated. Use ThrowCodeError, ThrowUserError or
...@@ -842,13 +846,18 @@ sub DisplayError { ...@@ -842,13 +846,18 @@ sub DisplayError {
} }
# For "this shouldn't happen"-type places in the code. # For "this shouldn't happen"-type places in the code.
# $vars->{'variables'} is a reference to a hash of useful debugging info. # The contents of $extra_vars get printed out in the template - useful for
# debugging info.
sub ThrowCodeError { sub ThrowCodeError {
($vars->{'error'}, my $unlock_tables, $vars->{'variables'}) = (@_); ($vars->{'error'}, my $extra_vars, my $unlock_tables) = (@_);
SendSQL("UNLOCK TABLES") if $unlock_tables; SendSQL("UNLOCK TABLES") if $unlock_tables;
# We may one day log something to file here. # Copy the extra_vars into the vars hash
@::vars{keys %$extra_vars} = values %$extra_vars;
# We may one day log something to file here also.
$vars->{'variables'} = $extra_vars;
print "Content-type: text/html\n\n" if !$vars->{'header_done'}; print "Content-type: text/html\n\n" if !$vars->{'header_done'};
$template->process("global/code-error.html.tmpl", $vars) $template->process("global/code-error.html.tmpl", $vars)
...@@ -859,10 +868,13 @@ sub ThrowCodeError { ...@@ -859,10 +868,13 @@ sub ThrowCodeError {
# For errors made by the user. # For errors made by the user.
sub ThrowUserError { sub ThrowUserError {
($vars->{'error'}, my $unlock_tables) = (@_); ($vars->{'error'}, my $extra_vars, my $unlock_tables) = (@_);
SendSQL("UNLOCK TABLES") if $unlock_tables; SendSQL("UNLOCK TABLES") if $unlock_tables;
# Copy the extra_vars into the vars hash
@::vars{keys %$extra_vars} = values %$extra_vars;
print "Content-type: text/html\n\n" if !$vars->{'header_done'}; print "Content-type: text/html\n\n" if !$vars->{'header_done'};
$template->process("global/user-error.html.tmpl", $vars) $template->process("global/user-error.html.tmpl", $vars)
|| ThrowTemplateError($template->error()); || ThrowTemplateError($template->error());
......
...@@ -262,14 +262,14 @@ foreach my $b (grep(/^bit-\d*$/, keys %::FORM)) { ...@@ -262,14 +262,14 @@ foreach my $b (grep(/^bit-\d*$/, keys %::FORM)) {
if ($::FORM{$b}) { if ($::FORM{$b}) {
my $v = substr($b, 4); my $v = substr($b, 4);
$v =~ /^(\d+)$/ $v =~ /^(\d+)$/
|| ThrowCodeError("group_id_invalid", "abort"); || ThrowCodeError("group_id_invalid", undef, "abort");
if (!GroupIsActive($v)) { if (!GroupIsActive($v)) {
# Prevent the user from adding the bug to an inactive group. # Prevent the user from adding the bug to an inactive group.
# Should only happen if there is a bug in Bugzilla or the user # Should only happen if there is a bug in Bugzilla or the user
# hacked the "enter bug" form since otherwise the UI # hacked the "enter bug" form since otherwise the UI
# for adding the bug to the group won't appear on that form. # for adding the bug to the group won't appear on that form.
$vars->{'bit'} = $v; $vars->{'bit'} = $v;
ThrowCodeError("inactive_group", "abort"); ThrowCodeError("inactive_group", undef, "abort");
} }
SendSQL("SELECT user_id FROM user_group_map SendSQL("SELECT user_id FROM user_group_map
WHERE user_id = $::userid WHERE user_id = $::userid
......
...@@ -1067,7 +1067,7 @@ foreach my $id (@idlist) { ...@@ -1067,7 +1067,7 @@ foreach my $id (@idlist) {
$vars->{'oldvalue'} = $oldvalues[$i]; $vars->{'oldvalue'} = $oldvalues[$i];
$vars->{'newvalue'} = $::FORM{$col}; $vars->{'newvalue'} = $::FORM{$col};
$vars->{'field'} = $col; $vars->{'field'} = $col;
ThrowUserError("illegal_change", "abort"); ThrowUserError("illegal_change", undef, "abort");
} }
} }
$i++; $i++;
...@@ -1082,7 +1082,7 @@ foreach my $id (@idlist) { ...@@ -1082,7 +1082,7 @@ foreach my $id (@idlist) {
if ($value eq FetchOneColumn()) { if ($value eq FetchOneColumn()) {
SendSQL("UNLOCK TABLES"); SendSQL("UNLOCK TABLES");
$vars->{'bug_id'} = $id; $vars->{'bug_id'} = $id;
ThrowUserError("milestone_required", "abort"); ThrowUserError("milestone_required", undef, "abort");
} }
} }
if (defined $::FORM{'delta_ts'} && $::FORM{'delta_ts'} ne $delta_ts) { if (defined $::FORM{'delta_ts'} && $::FORM{'delta_ts'} ne $delta_ts) {
...@@ -1117,7 +1117,7 @@ foreach my $id (@idlist) { ...@@ -1117,7 +1117,7 @@ foreach my $id (@idlist) {
next if $i eq ""; next if $i eq "";
if ($id eq $i) { if ($id eq $i) {
ThrowUserError("dependency_loop_single", "abort"); ThrowUserError("dependency_loop_single", undef, "abort");
} }
if (!exists $seen{$i}) { if (!exists $seen{$i}) {
push(@{$deptree{$target}}, $i); push(@{$deptree{$target}}, $i);
...@@ -1161,7 +1161,7 @@ foreach my $id (@idlist) { ...@@ -1161,7 +1161,7 @@ foreach my $id (@idlist) {
} }
$vars->{'both'} = $both; $vars->{'both'} = $both;
ThrowUserError("dependency_loop_multi", "abort"); ThrowUserError("dependency_loop_multi", undef, "abort");
} }
} }
my $tmp = $me; my $tmp = $me;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment