diff options
author | bbaetz%acm.org <> | 2003-04-02 20:35:00 +0000 |
---|---|---|
committer | bbaetz%acm.org <> | 2003-04-02 20:35:00 +0000 |
commit | b259c4b4252cde8e7926690f6ba419d2ee7c59fc (patch) | |
tree | ae51804f9db83c0b1a49f79b9e0a1848cdd5e7c7 /Bugzilla | |
parent | Bug 195424 - Add a note about new MySQL permissions needed for Bugzilla in My... (diff) | |
download | bugzilla-b259c4b4252cde8e7926690f6ba419d2ee7c59fc.tar.gz bugzilla-b259c4b4252cde8e7926690f6ba419d2ee7c59fc.tar.bz2 bugzilla-b259c4b4252cde8e7926690f6ba419d2ee7c59fc.zip |
Bug 199813 - Make all users of ThrowUserError pass $vars in explicitly.
r=gerv
a=justdave
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/Error.pm | 93 | ||||
-rw-r--r-- | Bugzilla/Search.pm | 19 |
2 files changed, 102 insertions, 10 deletions
diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm new file mode 100644 index 000000000..64314121a --- /dev/null +++ b/Bugzilla/Error.pm @@ -0,0 +1,93 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# The contents of this file are subject to the Mozilla Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code is the Bugzilla Bug Tracking System. +# +# The Initial Developer of the Original Code is Netscape Communications +# Corporation. Portions created by Netscape are +# Copyright (C) 1998 Netscape Communications Corporation. All +# Rights Reserved. +# +# Contributor(s): Bradley Baetz <bbaetz@acm.org> + +use strict; + +package Bugzilla::Error; + +use base qw(Exporter); + +@Bugzilla::Error::EXPORT = qw(ThrowUserError); + +sub ThrowUserError { + my ($error, $vars, $unlock_tables) = @_; + + $vars ||= {}; + + $vars->{error} = $error; + + # Need to do this until User.pm goes in, so that the footer is correct + $vars->{user} = $::vars->{user}; + + Bugzilla->dbh->do("UNLOCK TABLES") if $unlock_tables; + + # XXX - mod_perl + print "Content-type: text/html\n\n" if !$::vars->{'header_done'}; + + my $template = Bugzilla->template; + $template->process("global/user-error.html.tmpl", $vars) + || &::ThrowTemplateError($template->error()); + + exit; +} + +1; + +__END__ + +=head1 NAME + +Bugzilla::Error - Error handling utilities for Bugzilla + +=head1 SYNOPSIS + + use Bugzilla::Error; + + ThrowUserError("error_tag", + { foo => 'bar' }); + +=head1 DESCRIPTION + +Various places throughout the Bugzilla codebase need to report errors to the +user. The C<Throw*Error> family of functions allow this to be done in a +generic and localisable manner. + +=head1 FUNCTIONS + +=over 4 + +=item C<ThrowUserError> + +This function takes an error tag as the first argument, and an optional hashref +of variables as a second argument. These are used by the +I<global/user-error.html.tmpl> template to format the error, using the passed +in variables as required. + +An optional third argument may be supplied. If present (and defined), then the +error handling code will unlock the database tables. In the long term, this +argument will go away, to be replaced by transactional C<rollback> calls. There +is no timeframe for doing so, however. + +=back + +=head1 SEE ALSO + +L<Bugzilla|Bugzilla> diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index ead9156ee..1637671f0 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -103,8 +103,8 @@ sub init { my $c = trim($params->param('votes')); if ($c ne "") { if ($c !~ /^[0-9]*$/) { - $::vars->{'value'} = $c; - &::ThrowUserError("illegal_at_least_x_votes"); + &::ThrowUserError("illegal_at_least_x_votes", + { value => $c }); } push(@specialchart, ["votes", "greaterthan", $c - 1]); } @@ -207,8 +207,8 @@ sub init { if (@clist) { push(@specialchart, \@clist); } else { - $::vars->{'email'} = $email; - &::ThrowUserError("missing_email_type"); + ThrowUserError("missing_email_type", + { email => $email }); } } @@ -217,8 +217,8 @@ sub init { my $c = trim($params->param('changedin')); if ($c ne "") { if ($c !~ /^[0-9]*$/) { - $::vars->{'value'} = $c; - &::ThrowUserError("illegal_changed_in_last_x_days"); + &::ThrowUserError("illegal_changed_in_last_x_days", + { value => $c }); } push(@specialchart, ["changedin", "lessthan", $c + 1]); @@ -558,8 +558,8 @@ sub init { push(@list, "$table.keywordid = $id"); } else { - $::vars->{'keyword'} = $v; - &::ThrowUserError("unknown_keyword"); + ThrowUserError("unknown_keyword", + { keyword => $v }); } } my $haveawordterm; @@ -992,8 +992,7 @@ sub SqlifyDate { } my $date = str2time($str); if (!defined($date)) { - $::vars->{'date'} = $str; - &::ThrowUserError("illegal_date"); + &::ThrowUserError("illegal_date", { date => $str }); } return time2str("%Y-%m-%d %H:%M:%S", $date); } |