]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 170064 - Change error API again to allow vars to be passed in the call. Patch...
authorgerv%gerv.net <>
Mon, 23 Sep 2002 14:12:11 +0000 (14:12 +0000)
committergerv%gerv.net <>
Mon, 23 Sep 2002 14:12:11 +0000 (14:12 +0000)
CGI.pl
post_bug.cgi
process_bug.cgi

diff --git a/CGI.pl b/CGI.pl
index 70c15c932af50aa398317b692b804d8d4556360e..b9504983b116649a22298768e173503bba26b25a 100644 (file)
--- a/CGI.pl
+++ b/CGI.pl
@@ -223,7 +223,7 @@ sub CheckFormField (\%$;\@) {
             $vars->{'field'} = $fieldname;
         }
         
-        ThrowCodeError("illegal_field", "abort");
+        ThrowCodeError("illegal_field", undef, "abort");
       }
 }
 
@@ -827,6 +827,10 @@ sub PutFooter {
 #
 # 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 
@@ -842,13 +846,18 @@ sub DisplayError {
 }
 
 # 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)
@@ -859,10 +868,13 @@ sub ThrowCodeError {
 
 # 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());
index 22aa0e6bd9a19747e90a9ed7731f6adabbac9a4d..206c75c57487ab95cfd1fb1ffca6b36f5198019a 100755 (executable)
@@ -262,14 +262,14 @@ foreach my $b (grep(/^bit-\d*$/, keys %::FORM)) {
     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
index 7325d47658d6007ccf7cfccfb733836643966225..4ddfcca2cf8af56e3efb090735ed0c89394098b6 100755 (executable)
@@ -1067,7 +1067,7 @@ foreach my $id (@idlist) {
                 $vars->{'oldvalue'} = $oldvalues[$i];
                 $vars->{'newvalue'} = $::FORM{$col};
                 $vars->{'field'} = $col;
-                ThrowUserError("illegal_change", "abort");            
+                ThrowUserError("illegal_change", undef, "abort");            
             }
         }
         $i++;
@@ -1082,7 +1082,7 @@ foreach my $id (@idlist) {
         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) {
@@ -1117,7 +1117,7 @@ foreach my $id (@idlist) {
                 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);
@@ -1161,7 +1161,7 @@ foreach my $id (@idlist) {
                     }
                     
                     $vars->{'both'} = $both;
-                    ThrowUserError("dependency_loop_multi", "abort");
+                    ThrowUserError("dependency_loop_multi", undef, "abort");
                 }
             }
             my $tmp = $me;