$vars->{'field'} = $fieldname;
}
- ThrowCodeError("illegal_field", "abort");
+ ThrowCodeError("illegal_field", undef, "abort");
}
}
#
# If you are doing incremental output, set $vars->{'header_done'} once you've
# 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
}
# 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 {
- ($vars->{'error'}, my $unlock_tables, $vars->{'variables'}) = (@_);
+ ($vars->{'error'}, my $extra_vars, my $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'};
$template->process("global/code-error.html.tmpl", $vars)
# For errors made by the user.
sub ThrowUserError {
- ($vars->{'error'}, my $unlock_tables) = (@_);
+ ($vars->{'error'}, my $extra_vars, my $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'};
$template->process("global/user-error.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
if ($::FORM{$b}) {
my $v = substr($b, 4);
$v =~ /^(\d+)$/
- || ThrowCodeError("group_id_invalid", "abort");
+ || ThrowCodeError("group_id_invalid", undef, "abort");
if (!GroupIsActive($v)) {
# Prevent the user from adding the bug to an inactive group.
# Should only happen if there is a bug in Bugzilla or the user
# hacked the "enter bug" form since otherwise the UI
# for adding the bug to the group won't appear on that form.
$vars->{'bit'} = $v;
- ThrowCodeError("inactive_group", "abort");
+ ThrowCodeError("inactive_group", undef, "abort");
}
SendSQL("SELECT user_id FROM user_group_map
WHERE user_id = $::userid
$vars->{'oldvalue'} = $oldvalues[$i];
$vars->{'newvalue'} = $::FORM{$col};
$vars->{'field'} = $col;
- ThrowUserError("illegal_change", "abort");
+ ThrowUserError("illegal_change", undef, "abort");
}
}
$i++;
if ($value eq FetchOneColumn()) {
SendSQL("UNLOCK TABLES");
$vars->{'bug_id'} = $id;
- ThrowUserError("milestone_required", "abort");
+ ThrowUserError("milestone_required", undef, "abort");
}
}
if (defined $::FORM{'delta_ts'} && $::FORM{'delta_ts'} ne $delta_ts) {
next if $i eq "";
if ($id eq $i) {
- ThrowUserError("dependency_loop_single", "abort");
+ ThrowUserError("dependency_loop_single", undef, "abort");
}
if (!exists $seen{$i}) {
push(@{$deptree{$target}}, $i);
}
$vars->{'both'} = $both;
- ThrowUserError("dependency_loop_multi", "abort");
+ ThrowUserError("dependency_loop_multi", undef, "abort");
}
}
my $tmp = $me;