Bug 338375: Use Bugzilla->params everywhere instead of Param().

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave
This commit is contained in:
mkanat%bugzilla.org 2006-07-03 21:42:47 +00:00
Родитель 30f6d2eada
Коммит f2dd0345c6
57 изменённых файлов: 9 добавлений и 291 удалений

Просмотреть файл

@ -50,7 +50,6 @@ that users upload to the Bugzilla server.
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Flag;
use Bugzilla::Config;
use Bugzilla::User;
use Bugzilla::Util qw(trick_taint);

Просмотреть файл

@ -32,7 +32,6 @@ use fields qw(
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Config;
use Bugzilla::Auth::Login::Stack;
use Bugzilla::Auth::Verify::Stack;
use Bugzilla::Auth::Persist::Cookie;

Просмотреть файл

@ -33,7 +33,6 @@ use strict;
use base qw(Bugzilla::Auth::Login);
use constant user_can_create_account => 1;
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Util;
use Bugzilla::Error;

Просмотреть файл

@ -24,7 +24,6 @@ package Bugzilla::Auth::Login::Env;
use strict;
use base qw(Bugzilla::Auth::Login);
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Error;

Просмотреть файл

@ -32,7 +32,6 @@ package Bugzilla::Auth::Persist::Cookie;
use strict;
use fields qw();
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Util;
use Bugzilla::Token;

Просмотреть файл

@ -35,7 +35,6 @@ use fields qw(
ldap
);
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Error;

Просмотреть файл

@ -33,7 +33,6 @@ use strict;
use CGI::Carp qw(fatalsToBrowser);
use Bugzilla::Attachment;
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Field;
use Bugzilla::Flag;

Просмотреть файл

@ -35,7 +35,6 @@ package Bugzilla::BugMail;
use Bugzilla::Error;
use Bugzilla::User;
use Bugzilla::Constants;
use Bugzilla::Config;
use Bugzilla::Util;
use Bugzilla::Bug;
use Bugzilla::Product;

Просмотреть файл

@ -35,9 +35,6 @@ use strict;
use base qw(Exporter);
use Bugzilla::Constants;
# Module stuff
@Bugzilla::Config::EXPORT = qw(Param);
# Don't export localvars by default - people should have to explicitly
# ask for it, as a (probably futile) attempt to stop code using it
# when it shouldn't
@ -92,28 +89,6 @@ sub param_panels {
return @param_panels;
}
sub Param {
my ($param) = @_;
_load_params unless %params;
my %param_values = %{Bugzilla->params};
# By this stage, the param must be in the hash
die "Can't find param named $param" unless (exists $params{$param});
# When module startup code runs (which is does even via -c, when using
# |use|), we may try to grab params which don't exist yet. This affects
# tests, so have this as a fallback for the -c case
return $params{$param}->{default}
if ($^C && not exists $param_values{$param});
# If we have a value for the param, return it
return $param_values{$param} if exists $param_values{$param};
# Else error out
die "No value for param $param (try running checksetup.pl again)";
}
sub SetParam {
my ($name, $value) = @_;
@ -277,11 +252,6 @@ Bugzilla::Config - Configuration parameters for Bugzilla
=head1 SYNOPSIS
# Getting parameters
use Bugzilla::Config;
my $fooSetting = Bugzilla->params->{'foo'};
# Administration functions
use Bugzilla::Config qw(:admin);
@ -305,11 +275,6 @@ Parameters can be set, retrieved, and updated.
=over 4
=item C<Bugzilla->params->{$name}>
Returns the Param with the specified name. Either a string, or, in the case
of multiple-choice parameters, an array reference.
=item C<SetParam($name, $value)>
Sets the param named $name to $value. Values are checked using the checker

Просмотреть файл

@ -35,7 +35,7 @@ use DBI;
# Inherit the DB class from DBI::db.
use base qw(DBI::db);
use Bugzilla::Config qw(:DEFAULT :db);
use Bugzilla::Config qw(:db);
use Bugzilla::Constants;
use Bugzilla::Util;
use Bugzilla::Error;

Просмотреть файл

@ -61,7 +61,6 @@ package Bugzilla::Flag;
use Bugzilla::FlagType;
use Bugzilla::User;
use Bugzilla::Config;
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Mailer;

Просмотреть файл

@ -59,7 +59,6 @@ use Bugzilla::User;
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Config;
######################################################################
# Global Variables

Просмотреть файл

@ -37,7 +37,6 @@ use base qw(Exporter);
@Bugzilla::Mailer::EXPORT = qw(MessageToMTA);
use Bugzilla::Constants;
use Bugzilla::Config;
use Bugzilla::Util;
use Mail::Header;

Просмотреть файл

@ -34,7 +34,6 @@ package Bugzilla::Search;
use base qw(Exporter);
@Bugzilla::Search::EXPORT = qw(IsValidQueryType);
use Bugzilla::Config;
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Constants;

Просмотреть файл

@ -23,7 +23,6 @@ package Bugzilla::Search::Quicksearch;
# Make it harder for us to do dangerous things in Perl.
use strict;
use Bugzilla::Config;
use Bugzilla::Error;
use Bugzilla::Constants;
use Bugzilla::Keyword;

Просмотреть файл

@ -35,7 +35,6 @@ package Bugzilla::Template;
use strict;
use Bugzilla::Constants;
use Bugzilla::Config;
use Bugzilla::Util;
use Bugzilla::User;
use Bugzilla::Error;
@ -771,7 +770,7 @@ sub create {
# Default variables for all templates
VARIABLES => {
# Function for retrieving global parameters.
'Param' => \&Bugzilla::Config::Param,
'Param' => sub { return Bugzilla->params->{$_[0]}; },
# Function to create date strings
'time2str' => \&Date::Format::time2str,

Просмотреть файл

@ -25,7 +25,6 @@ package Bugzilla::Template::Plugin::Hook;
use strict;
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Template;
use Bugzilla::Util;

Просмотреть файл

@ -29,7 +29,6 @@ use strict;
# Bundle the functions in this file together into the "Bugzilla::Token" package.
package Bugzilla::Token;
use Bugzilla::Config;
use Bugzilla::Error;
use Bugzilla::Mailer;
use Bugzilla::Util;

Просмотреть файл

@ -40,7 +40,6 @@ use strict;
# This module implements utilities for dealing with Bugzilla users.
package Bugzilla::User;
use Bugzilla::Config;
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Constants;

Просмотреть файл

@ -38,7 +38,7 @@ use strict;
use lib qw(.);
use Bugzilla;
use Bugzilla::Config qw(:DEFAULT :localconfig);
use Bugzilla::Config qw(:localconfig);
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Flag;

Просмотреть файл

@ -38,7 +38,6 @@ use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Search;
use Bugzilla::Search::Quicksearch;
use Bugzilla::User;

Просмотреть файл

@ -47,7 +47,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Chart;

Просмотреть файл

@ -517,7 +517,7 @@ BEGIN {
$::ENV{'PATH'} = $env;
require Bugzilla::Config;
import Bugzilla::Config qw(:DEFAULT :admin);
import Bugzilla::Config qw(:admin);
}
# 12/17/00 justdave@syndicomm.com - removed declarations of the localconfig

Просмотреть файл

@ -27,7 +27,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Error;
use Bugzilla::User;
use Bugzilla::Keyword;

Просмотреть файл

@ -37,7 +37,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Search;
use Bugzilla::User;

Просмотреть файл

@ -32,7 +32,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Error;
use Bugzilla::Keyword;
use Bugzilla::Bug;

Просмотреть файл

@ -38,7 +38,7 @@
#
# You need to work with bug_email.pl the MIME::Parser installed.
#
# $Id: bug_email.pl,v 1.43 2006-07-03 21:26:22 mkanat%bugzilla.org Exp $
# $Id: bug_email.pl,v 1.44 2006-07-03 21:42:47 mkanat%bugzilla.org Exp $
###############################################################
# 02/12/2000 (SML)
@ -91,7 +91,6 @@ use lib "../";
use Bugzilla;
use BugzillaEmail;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Constants;
use Bugzilla::Util;
use Bugzilla::BugMail;

Просмотреть файл

@ -1,198 +0,0 @@
#!/usr/bin/perl -w
# -*- 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 purpose of this script is to take an email message, which
# specifies a bugid and append it to the bug as part of the longdesc
# table
# Contributor : Seth M. Landsman <seth@dworkin.net>
# 03/15/00 : Initial version by SML
# 03/15/00 : processmail gets called
# Email subject must be of format :
# .* Bug ### .*
# replying to a typical bugzilla email should be valid
# TODO :
# 1. better way to get the body text (I don't know what dump_entity() is
# actually doing
use strict;
use MIME::Parser;
BEGIN {
chdir ".."; # this script lives in contrib, change to main
push @INC, "contrib";
push @INC, "."; # this script lives in contrib
}
use Bugzilla;
use Bugzilla::Constants;
use BugzillaEmail;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::BugMail;
my $dbh = Bugzilla->dbh;
# Create a new MIME parser:
my $parser = new MIME::Parser;
my $Comment = "";
# Create and set the output directory:
# FIXME: There should be a $BUGZILLA_HOME variable (SML)
my $datadir = bz_locations()->{'datadir'};
(-d "$datadir/mimedump-tmp") or mkdir "$datadir/mimedump-tmp",0755 or die "mkdir: $!";
(-w "$datadir/mimedump-tmp") or die "can't write to directory";
$parser->output_dir("$datadir/mimedump-tmp");
# Read the MIME message:
my $entity = $parser->read(\*STDIN) or die "couldn't parse MIME stream";
$entity->remove_sig(10); # Removes the signature in the last 10 lines
# Getting values from parsed mail
my $Sender = $entity->get( 'From' );
$Sender ||= $entity->get( 'Reply-To' );
my $Message_ID = $entity->get( 'Message-Id' );
die (" *** Can't find Sender-address in sent mail ! ***\n" ) unless defined( $Sender );
chomp( $Sender );
chomp( $Message_ID );
print "Dealing with the sender $Sender\n";
my $SenderShort = $Sender;
$SenderShort =~ s/^.*?([a-zA-Z0-9_.-]+?\@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+).*$/$1/;
$SenderShort = findUser($SenderShort);
print "SenderShort is $SenderShort\n";
if (!defined($SenderShort)) {
$SenderShort = $Sender;
$SenderShort =~ s/^.*?([a-zA-Z0-9_.-]+?\@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+).*$/$1/;
}
print "The sendershort is now $SenderShort\n";
if (!defined($SenderShort)) {
DealWithError("No such user $SenderShort exists.");
}
my $Subject = $entity->get('Subject');
print "The subject is $Subject\n";
my ($bugid) = ($Subject =~ /\[Bug ([\d]+)\]/);
print "The bugid is $bugid\n";
# make sure the bug exists
my $found_id = $dbh->selectrow_array(q{SELECT bug_id
FROM bugs
WHERE bug_id = ?}, undef, $bugid);
print "Did we find the bug? $found_id-\n";
if (!defined($found_id)) {
DealWithError("Bug $bugid does not exist");
}
# get the user id
my $userid = $dbh->selectrow_array(q{SELECT userid FROM profiles WHERE } .
$dbh->sql_istrcmp('login_name', '?'), undef, $SenderShort);
if (!defined($userid)) {
DealWithError("Userid not found for $SenderShort");
}
# parse out the text of the message
dump_entity($entity);
# Get rid of the bug id
$Subject =~ s/\[Bug [\d]+\]//;
#my $Comment = "This is only a test ...";
my $Body = "Subject: " . $Subject . "\n" . $Comment;
# shove it in the table
$dbh->do(q{INSERT INTO longdescs SET bug_id= ?, who= ?, bug_when= NOW(), thetext= ? },
undef, $found_id, $userid, $Body);
Bugzilla::BugMail::Send( $found_id, { changer => $SenderShort } );
sub DealWithError {
my ($reason) = @_;
print $reason . "\n";
exit 100;
}
# Yanking this wholesale from bug_email, 'cause I know this works. I'll
# figure out what it really does later
#------------------------------
#
# dump_entity ENTITY, NAME
#
# Recursive routine for parsing a mime coded mail.
# One mail may contain more than one mime blocks, which need to be
# handled. Therefore, this function is called recursively.
#
# It gets the for bugzilla important information from the mailbody and
# stores them into the global attachment-list @attachments. The attachment-list
# is needed in storeAttachments.
#
sub dump_entity {
my ($entity, $name) = @_;
defined($name) or $name = "'anonymous'";
my $IO;
# Output the body:
my @parts = $entity->parts;
if (@parts) { # multipart...
my $i;
foreach $i (0 .. $#parts) { # dump each part...
dump_entity($parts[$i], ("$name, part ".(1+$i)));
}
} else { # single part...
# Get MIME type, and display accordingly...
my $msg_part = $entity->head->get( 'Content-Disposition' );
$msg_part ||= "";
my ($type, $subtype) = split('/', $entity->head->mime_type);
my $body = $entity->bodyhandle;
my ($data, $on_disk );
if( $msg_part =~ /^attachment/ ) {
# Attached File
my $des = $entity->head->get('Content-Description');
$des ||= "";
if( defined( $body->path )) { # Data is on disk
$on_disk = 1;
$data = $body->path;
} else { # Data is in core
$on_disk = 0;
$data = $body->as_string;
}
# push ( @attachments, [ $data, $entity->head->mime_type, $on_disk, $des ] );
} else {
# Real Message
if ($type =~ /^(text|message)$/) { # text: display it...
if ($IO = $body->open("r")) {
$Comment .= $_ while (defined($_ = $IO->getline));
$IO->close;
} else { # d'oh!
print "$0: couldn't find/open '$name': $!";
}
} else { print "Oooops - no Body !\n"; }
}
}
}

Просмотреть файл

@ -48,7 +48,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Getopt::Long;

Просмотреть файл

@ -4,7 +4,7 @@
#
# Nick Barnes, Ravenbrook Limited, 2004-04-01.
#
# $Id: sendbugmail.pl,v 1.6 2006-07-03 21:26:22 mkanat%bugzilla.org Exp $
# $Id: sendbugmail.pl,v 1.7 2006-07-03 21:42:47 mkanat%bugzilla.org Exp $
#
# Bugzilla email script for Bugzilla 2.17.4 and later. Invoke this to send
# bugmail for a bug which has been changed directly in the database.
@ -17,7 +17,6 @@
use lib qw(.);
use Bugzilla;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::BugMail;
use Bugzilla::User;

Просмотреть файл

@ -26,7 +26,6 @@ use lib qw(.);
use Net::LDAP;
use Bugzilla;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::User;
my $cgi = Bugzilla->cgi;

Просмотреть файл

@ -30,7 +30,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Error;
use Bugzilla::User;
use Bugzilla::BugMail;

Просмотреть файл

@ -31,7 +31,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Search;

Просмотреть файл

@ -27,7 +27,6 @@ use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Classification;
my $cgi = Bugzilla->cgi;

Просмотреть файл

@ -31,7 +31,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Series;
use Bugzilla::Util;
use Bugzilla::Error;

Просмотреть файл

@ -29,7 +29,7 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT :admin);
use Bugzilla::Config qw(:admin);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Group;

Просмотреть файл

@ -27,7 +27,7 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT :admin);
use Bugzilla::Config qw(:admin);
use Bugzilla::Config::Common;
use Bugzilla::Util;
use Bugzilla::Error;

Просмотреть файл

@ -36,7 +36,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Bug;

Просмотреть файл

@ -25,7 +25,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::User;

Просмотреть файл

@ -25,7 +25,7 @@ use Bugzilla;
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT :admin);
use Bugzilla::Config qw(:admin);
# List of different tables that contain the changeable field values
# (the old "enums.") Keep them in alphabetical order by their

Просмотреть файл

@ -31,7 +31,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::User;

Просмотреть файл

@ -39,7 +39,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Bug;

Просмотреть файл

@ -79,7 +79,6 @@ use Bugzilla::Version;
use Bugzilla::Component;
use Bugzilla::Milestone;
use Bugzilla::FlagType;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::BugMail;
use Bugzilla::Mailer;
use Bugzilla::User;

Просмотреть файл

@ -33,7 +33,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Error;
use Bugzilla::Update;

Просмотреть файл

@ -30,7 +30,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Attachment;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Bug;

Просмотреть файл

@ -45,7 +45,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Bug;
use Bugzilla::Mailer;
use Bugzilla::User;

Просмотреть файл

@ -31,7 +31,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Bug;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Search;
use Bugzilla::User;
use Bugzilla::Util;

Просмотреть файл

@ -29,7 +29,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::User;

Просмотреть файл

@ -39,7 +39,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;

Просмотреть файл

@ -31,7 +31,6 @@ use strict;
use lib qw(.);
use Bugzilla;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Flag;

Просмотреть файл

@ -26,7 +26,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Error;
use Bugzilla::User;
use Bugzilla::Keyword;

Просмотреть файл

@ -29,7 +29,6 @@ use File::Temp;
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Bug;

Просмотреть файл

@ -25,7 +25,6 @@ use Date::Format; # strftime
use Bugzilla;
use Bugzilla::Constants; # LOGIN_*
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Bug; # EmitDependList
use Bugzilla::Util; # trim
use Bugzilla::Error;

Просмотреть файл

@ -28,7 +28,6 @@ use lib qw(.);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Search;
use Bugzilla::Util;
use Bugzilla::Error;

Просмотреть файл

@ -29,7 +29,6 @@ use lib ".";
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Util;
use Bugzilla::Error;
use Bugzilla::Bug;

Просмотреть файл

@ -29,7 +29,6 @@ use strict;
use lib ".";
use Bugzilla;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Constants;
use Bugzilla::Search;
use Bugzilla::User;

Просмотреть файл

@ -31,7 +31,6 @@ use strict;
use lib '.';
use Bugzilla;
use Bugzilla::Config qw(:DEFAULT);
use Bugzilla::Mailer;
use Bugzilla::Util;