Commit 2545c095 authored by lpsolit%gmail.com's avatar lpsolit%gmail.com

Bug 304601: Bugzilla::Config's :locations exports need to be in their own module…

Bug 304601: Bugzilla::Config's :locations exports need to be in their own module - Patch by Frédéric Buclin <LpSolit@gmail.com> r=mkanat for the main patch, r=myk for the patch about CGI.pm a=justdave Bug 328637: Remove all legal_* versioncache arrays - Patch by Frédéric Buclin <LpSolit@gmail.com> r=mkanat a=justdave Bug 110503 - Eliminate versioncache
parent b687ddef
......@@ -25,11 +25,10 @@ package Bugzilla;
use strict;
use Bugzilla::Constants;
use Bugzilla::Auth;
use Bugzilla::Auth::Persist::Cookie;
use Bugzilla::CGI;
use Bugzilla::Config qw(:DEFAULT :locations);
use Bugzilla::Constants;
use Bugzilla::DB;
use Bugzilla::Template;
use Bugzilla::User;
......@@ -175,7 +174,7 @@ sub login {
my $authorizer = new Bugzilla::Auth();
$type = LOGIN_REQUIRED if Bugzilla->cgi->param('GoAheadAndLogIn');
if (!defined $type || $type == LOGIN_NORMAL) {
$type = Param('requirelogin') ? LOGIN_REQUIRED : LOGIN_NORMAL;
$type = Bugzilla->params->{'requirelogin'} ? LOGIN_REQUIRED : LOGIN_NORMAL;
}
my $authenticated_user = $authorizer->login($type);
......@@ -274,7 +273,7 @@ sub switch_to_shadow_db {
my $class = shift;
if (!$_dbh_shadow) {
if (Param('shadowdb')) {
if (Bugzilla->params->{'shadowdb'}) {
$_dbh_shadow = Bugzilla::DB::connect_shadow();
} else {
$_dbh_shadow = $_dbh_main;
......@@ -329,7 +328,7 @@ sub _cleanup {
# When we support transactions, need to ->rollback here
$_dbh_main->disconnect if $_dbh_main;
$_dbh_shadow->disconnect if $_dbh_shadow and Param("shadowdb");
$_dbh_shadow->disconnect if $_dbh_shadow && Bugzilla->params->{"shadowdb"};
undef $_dbh_main;
undef $_dbh_shadow;
undef $_dbh;
......@@ -337,6 +336,7 @@ sub _cleanup {
sub _load_param_values {
my %params;
my $datadir = bz_locations()->{'datadir'};
if (-e "$datadir/params") {
# Note that checksetup.pl sets file permissions on '$datadir/params'
......
......@@ -30,10 +30,6 @@ package Bugzilla::Bug;
use strict;
use vars qw(@legal_platform
@legal_priority @legal_severity @legal_opsys @legal_bug_status
@settable_resolution);
use CGI::Carp qw(fatalsToBrowser);
use Bugzilla::Attachment;
......@@ -651,8 +647,6 @@ sub choices {
return $self->{'choices'} if exists $self->{'choices'};
return {} if $self->{'error'};
&::GetVersionTable();
$self->{'choices'} = {};
$self->{prod_obj} ||= new Bugzilla::Product({name => $self->{product}});
......@@ -665,25 +659,41 @@ sub choices {
}
# Hack - this array contains "". See bug 106589.
my @res = grep ($_, @::settable_resolution);
my @res = grep ($_, @{settable_resolutions()});
$self->{'choices'} =
{
'product' => \@prodlist,
'rep_platform' => \@::legal_platform,
'priority' => \@::legal_priority,
'bug_severity' => \@::legal_severity,
'op_sys' => \@::legal_opsys,
'bug_status' => \@::legal_bug_status,
'resolution' => \@res,
'component' => [map($_->name, @{$self->{prod_obj}->components})],
'version' => [map($_->name, @{$self->{prod_obj}->versions})],
'rep_platform' => get_legal_field_values('rep_platform'),
'priority' => get_legal_field_values('priority'),
'bug_severity' => get_legal_field_values('bug_severity'),
'op_sys' => get_legal_field_values('op_sys'),
'bug_status' => get_legal_field_values('bug_status'),
'resolution' => \@res,
'component' => [map($_->name, @{$self->{prod_obj}->components})],
'version' => [map($_->name, @{$self->{prod_obj}->versions})],
'target_milestone' => [map($_->name, @{$self->{prod_obj}->milestones})],
};
return $self->{'choices'};
}
# List of resolutions that may be set directly by hand in the bug form.
# 'MOVED' and 'DUPLICATE' are excluded from the list because setting
# bugs to those resolutions requires a special process.
sub settable_resolutions {
my $resolutions = get_legal_field_values('resolution');
my $pos = lsearch($resolutions, 'DUPLICATE');
if ($pos >= 0) {
splice(@$resolutions, $pos, 1);
}
$pos = lsearch($resolutions, 'MOVED');
if ($pos >= 0) {
splice(@$resolutions, $pos, 1);
}
return $resolutions;
}
# Convenience Function. If you need speed, use this. If you need
# other Bug fields in addition to this, just create a new Bug with
# the alias.
......
......@@ -102,11 +102,6 @@ END
# This hash usually comes from the "mailrecipients" var in a template call.
sub Send {
my ($id, $forced) = (@_);
# This only works in a sub. Probably something to do with the
# require abuse we do.
&::GetVersionTable();
return ProcessOneBug($id, $forced);
}
......
......@@ -40,7 +40,6 @@ use CGI::Carp qw(fatalsToBrowser);
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Config;
# We need to disable output buffering - see bug 179174
$| = 1;
......@@ -79,11 +78,14 @@ sub new {
$self->{Bugzilla_cookie_list} = [];
# Send appropriate charset
$self->charset(Param('utf8') ? 'UTF-8' : '');
$self->charset(Bugzilla->params->{'utf8'} ? 'UTF-8' : '');
# Redirect to SSL if required
if (Param('sslbase') ne '' and Param('ssl') eq 'always' and i_am_cgi()) {
$self->require_https(Param('sslbase'));
if (Bugzilla->params->{'sslbase'} ne ''
&& Bugzilla->params->{'ssl'} eq 'always'
&& i_am_cgi())
{
$self->require_https(Bugzilla->params->{'sslbase'});
}
# Check for errors
......@@ -221,8 +223,9 @@ sub send_cookie {
}
# Add the default path and the domain in.
$paramhash{'-path'} = Param('cookiepath');
$paramhash{'-domain'} = Param('cookiedomain') if Param('cookiedomain');
$paramhash{'-path'} = Bugzilla->params->{'cookiepath'};
$paramhash{'-domain'} = Bugzilla->params->{'cookiedomain'}
if Bugzilla->params->{'cookiedomain'};
# Move the param list back into an array for the call to cookie().
foreach (keys(%paramhash)) {
......
......@@ -112,19 +112,20 @@ use vars qw(@param_list);
do $localconfig;
my %params;
# Load in the param definitions
foreach my $item ((glob "$libpath/Bugzilla/Config/*.pm")) {
$item =~ m#/([^/]+)\.pm$#;
my $module = $1;
next if ($module eq 'Common');
require "Bugzilla/Config/$module.pm";
my @new_param_list = "Bugzilla::Config::$module"->get_param_list();
foreach my $item (@new_param_list) {
$params{$item->{'name'}} = $item;
sub _load_params {
foreach my $item ((glob "$libpath/Bugzilla/Config/*.pm")) {
$item =~ m#/([^/]+)\.pm$#;
my $module = $1;
next if ($module eq 'Common');
require "Bugzilla/Config/$module.pm";
my @new_param_list = "Bugzilla::Config::$module"->get_param_list();
foreach my $item (@new_param_list) {
$params{$item->{'name'}} = $item;
}
push(@parampanels, $module);
push(@param_list, @new_param_list);
}
push(@parampanels, $module);
push(@param_list, @new_param_list);
}
# END INIT CODE
# Subroutines go here
......@@ -132,6 +133,7 @@ foreach my $item ((glob "$libpath/Bugzilla/Config/*.pm")) {
sub Param {
my ($param) = @_;
_load_params unless %params;
my %param_values = %{Bugzilla->params};
# By this stage, the param must be in the hash
......@@ -153,6 +155,7 @@ sub Param {
sub SetParam {
my ($name, $value) = @_;
_load_params unless %params;
die "Unknown param $name" unless (exists $params{$name});
my $entry = $params{$name};
......@@ -176,7 +179,6 @@ sub UpdateParams {
# Note that this isn't particularly 'clean' in terms of separating
# the backend code (ie this) from the actual params.
# We don't care about that, though
my $param = Bugzilla->params;
# Old Bugzilla versions stored the version number in the params file
......@@ -239,6 +241,7 @@ sub UpdateParams {
# --- DEFAULTS FOR NEW PARAMS ---
_load_params unless %params;
foreach my $item (@param_list) {
my $name = $item->{'name'};
$param->{$name} = $item->{'default'} unless exists $param->{$name};
......
......@@ -34,11 +34,18 @@ package Bugzilla::Config::BugFields;
use strict;
use Bugzilla::Config::Common;
use Bugzilla::Field;
$Bugzilla::Config::BugFields::sortkey = "04";
sub get_param_list {
my $class = shift;
my @legal_priorities = @{get_legal_field_values('priority')};
my @legal_severities = @{get_legal_field_values('bug_severity')};
my @legal_platforms = @{get_legal_field_values('rep_platform')};
my @legal_OS = @{get_legal_field_values('op_sys')};
my @param_list = (
{
name => 'useclassification',
......@@ -85,23 +92,23 @@ sub get_param_list {
{
name => 'defaultpriority',
type => 's',
choices => \@::legal_priority,
default => $::legal_priority[-1],
choices => \@legal_priorities,
default => $legal_priorities[-1],
checker => \&check_priority
},
{
name => 'defaultseverity',
type => 's',
choices => \@::legal_severity,
default => $::legal_severity[-1],
choices => \@legal_severities,
default => $legal_severities[-1],
checker => \&check_severity
},
{
name => 'defaultplatform',
type => 's',
choices => ['', @::legal_platform],
choices => ['', @legal_platforms],
default => '',
checker => \&check_platform
},
......@@ -109,7 +116,7 @@ sub get_param_list {
{
name => 'defaultopsys',
type => 's',
choices => ['', @::legal_opsys],
choices => ['', @legal_OS],
default => '',
checker => \&check_opsys
} );
......
......@@ -29,34 +29,15 @@
# Frédéric Buclin <LpSolit@gmail.com>
#
# This file defines all the parameters that we have a GUI to edit within
# Bugzilla.
# ATTENTION!!!! THIS FILE ONLY CONTAINS THE DEFAULTS.
# You cannot change your live settings by editing this file.
# Only adding new parameters is done here. Once the parameter exists, you
# must use %baseurl%/editparams.cgi from the web to edit the settings.
# This file is included via |do|, mainly because of circular dependency issues
# (such as globals.pl -> Bugzilla::Config -> this -> Bugzilla::Config)
# which preclude compile time loading.
# Those issues may go away at some point, and the contents of this file
# moved somewhere else. Please try to avoid more dependencies from here
# to other code
# (Note that these aren't just added directly to Bugzilla::Config, because
# the backend prefs code is separate to this...)
package Bugzilla::Config::Common;
use strict;
use Socket;
use Bugzilla::Config qw(:DEFAULT $templatedir $webdotdir);
use Bugzilla::Util;
use Bugzilla::Constants;
use Bugzilla::Field;
use base qw(Exporter);
@Bugzilla::Config::Common::EXPORT =
......@@ -132,40 +113,40 @@ sub check_sslbase {
sub check_priority {
my ($value) = (@_);
&::GetVersionTable();
if (lsearch(\@::legal_priority, $value) < 0) {
my $legal_priorities = get_legal_field_values('priority');
if (lsearch($legal_priorities, $value) < 0) {
return "Must be a legal priority value: one of " .
join(", ", @::legal_priority);
join(", ", @$legal_priorities);
}
return "";
}
sub check_severity {
my ($value) = (@_);
&::GetVersionTable();
if (lsearch(\@::legal_severity, $value) < 0) {
my $legal_severities = get_legal_field_values('bug_severity');
if (lsearch($legal_severities, $value) < 0) {
return "Must be a legal severity value: one of " .
join(", ", @::legal_severity);
join(", ", @$legal_severities);
}
return "";
}
sub check_platform {
my ($value) = (@_);
&::GetVersionTable();
if (lsearch(['', @::legal_platform], $value) < 0) {
my $legal_platforms = get_legal_field_values('rep_platform');
if (lsearch(['', @$legal_platforms], $value) < 0) {
return "Must be empty or a legal platform value: one of " .
join(", ", @::legal_platform);
join(", ", @$legal_platforms);
}
return "";
}
sub check_opsys {
my ($value) = (@_);
&::GetVersionTable();
if (lsearch(['', @::legal_opsys], $value) < 0) {
my $legal_OS = get_legal_field_values('op_sys');
if (lsearch(['', @$legal_OS], $value) < 0) {
return "Must be empty or a legal operating system value: one of " .
join(", ", @::legal_opsys);
join(", ", @$legal_OS);
}
return "";
}
......@@ -177,7 +158,7 @@ sub check_shadowdb {
return "";
}
if (!Param('shadowdbhost')) {
if (!Bugzilla->params->{'shadowdbhost'}) {
return "You need to specify a host when using a shadow database";
}
......@@ -215,6 +196,7 @@ sub check_webdotbase {
return "The file path \"$value\" is not a valid executable. Please specify the complete file path to 'dot' if you intend to generate graphs locally.";
}
# Check .htaccess allows access to generated images
my $webdotdir = bz_locations()->{'webdotdir'};
if(-e "$webdotdir/.htaccess") {
open HTACCESS, "$webdotdir/.htaccess";
if(! grep(/ \\\.png\$/,<HTACCESS>)) {
......@@ -259,8 +241,8 @@ sub check_user_verify_class {
} elsif ($class eq 'LDAP') {
eval "require Net::LDAP";
return "Error requiring Net::LDAP: '$@'" if $@;
return "LDAP servername is missing" unless Param("LDAPserver");
return "LDAPBaseDN is empty" unless Param("LDAPBaseDN");
return "LDAP servername is missing" unless Bugzilla->params->{"LDAPserver"};
return "LDAPBaseDN is empty" unless Bugzilla->params->{"LDAPBaseDN"};
} else {
return "Unknown user_verify_class '$class' in check_user_verify_class";
}
......@@ -282,6 +264,7 @@ sub check_languages {
if(!scalar(@languages)) {
return "You need to specify a language tag."
}
my $templatedir = bz_locations()->{'templatedir'};
foreach my $language (@languages) {
if( ! -d "$templatedir/$language/custom"
&& ! -d "$templatedir/$language/default") {
......
......@@ -35,7 +35,7 @@ use strict;
use File::Spec; # for find_languages
use Bugzilla::Config qw($templatedir);
use Bugzilla::Constants;
use Bugzilla::Config::Common;
$Bugzilla::Config::L10n::sortkey = "08";
......@@ -62,7 +62,8 @@ sub get_param_list {
sub find_languages {
my @languages = ();
opendir(DIR, $templatedir) || return "Can't open 'template' directory: $!";
opendir(DIR, bz_locations()->{'templatedir'})
|| return "Can't open 'template' directory: $!";
foreach my $dir (readdir(DIR)) {
next unless $dir =~ /^([a-z-]+)$/i;
my $lang = $1;
......
......@@ -33,6 +33,7 @@ use strict;
use base qw(Exporter);
@Bugzilla::Constants::EXPORT = qw(
bz_locations
CONTROLMAPNA
CONTROLMAPSHOWN
CONTROLMAPDEFAULT
......@@ -278,8 +279,6 @@ use constant FIELD_TYPE_FREETEXT => 1;
use constant BUG_STATE_OPEN => ('NEW', 'REOPENED', 'ASSIGNED',
'UNCONFIRMED');
1;
# Data about what we require for different databases.
use constant DB_MODULE => {
'mysql' => {db => 'Bugzilla::DB::Mysql', db_version => '4.0.14',
......@@ -289,3 +288,48 @@ use constant DB_MODULE => {
dbd => 'DBD::Pg', dbd_version => '1.45',
name => 'PostgreSQL'},
};
# Under mod_perl, get this from a .htaccess config variable,
# and/or default from the current 'real' dir.
# At some stage after this, it may be possible for these dir locations
# to go into localconfig. localconfig can't be specified in a config file,
# except possibly with mod_perl. If you move localconfig, you need to change
# the define here.
# $libpath is really only for mod_perl; its not yet possible to move the
# .pms elsewhere.
# $webdotdir must be in the webtree somewhere. Even if you use a local dot,
# we output images to there. Also, if $webdot dir is not relative to the
# bugzilla root directory, you'll need to change showdependencygraph.cgi to
# set image_url to the correct location.
# The script should really generate these graphs directly...
# Note that if $libpath is changed, some stuff will break, notably dependency
# graphs (since the path will be wrong in the HTML). This will be fixed at
# some point.
sub bz_locations {
my $libpath = '.';
my $project;
my $localconfig;
my $datadir;
if ($ENV{'PROJECT'} && $ENV{'PROJECT'} =~ /^(\w+)$/) {
$project = $1;
$localconfig = "$libpath/localconfig.$project";
$datadir = "$libpath/data/$project";
} else {
$localconfig = "$libpath/localconfig";
$datadir = "$libpath/data";
}
# Returns a hash of paths.
return {
'libpath' => $libpath,
'templatedir' => "$libpath/template",
'project' => $project,
'localconfig' => $localconfig,
'datadir' => $datadir,
'attachdir' => "$datadir/attachments",
'webdotdir' => "$datadir/webdot",
'extensionsdir' => "$libpath/extensions"
};
}
1;
......@@ -26,7 +26,6 @@ use base qw(Exporter);
@Bugzilla::Error::EXPORT = qw(ThrowCodeError ThrowTemplateError ThrowUserError);
use Bugzilla::Config qw($datadir);
use Bugzilla::Constants;
use Bugzilla::Util;
use Date::Format;
......@@ -42,6 +41,7 @@ sub _throw_error {
# and the transaction is rolled back (if supported)
Bugzilla->dbh->bz_unlock_tables(UNLOCK_ABORT);
my $datadir = bz_locations()->{'datadir'};
# If a writable $datadir/errorlog exists, log error details there.
if (-w "$datadir/errorlog") {
require Data::Dumper;
......@@ -115,9 +115,9 @@ sub ThrowTemplateError {
# Try a template first; but if this one fails too, fall back
# on plain old print statements.
if (!$template->process("global/code-error.html.tmpl", $vars)) {
my $maintainer = Bugzilla::Config::Param('maintainer');
my $error = Bugzilla::Util::html_quote($vars->{'template_error_msg'});
my $error2 = Bugzilla::Util::html_quote($template->error());
my $maintainer = Bugzilla->params->{'maintainer'};
my $error = html_quote($vars->{'template_error_msg'});
my $error2 = html_quote($template->error());
print <<END;
<tt>
<p>
......
......@@ -70,7 +70,7 @@ package Bugzilla::Field;
use strict;
use base qw(Exporter);
@Bugzilla::Field::EXPORT = qw(check_field get_field_id);
@Bugzilla::Field::EXPORT = qw(check_field get_field_id get_legal_field_values);
use Bugzilla::Util;
use Bugzilla::Constants;
......@@ -280,6 +280,36 @@ sub match {
=pod
=over
=item C<get_legal_field_values($field)>
Description: returns all the legal values for a field that has a
list of legal values, like rep_platform or resolution.
The table where these values are stored must at least have
the following columns: value, isactive, sortkey.
Params: C<$field> - Name of the table where valid values are.
Returns: a reference to a list of valid values.
=back
=cut
sub get_legal_field_values {
my ($field) = @_;
my $dbh = Bugzilla->dbh;
my $result_ref = $dbh->selectcol_arrayref(
"SELECT value FROM $field
WHERE isactive = ?
ORDER BY sortkey, value", undef, (1));
return $result_ref;
}
=pod
=head2 Data Validation
=over
......@@ -288,15 +318,17 @@ sub match {
Description: Makes sure the field $name is defined and its $value
is non empty. If @legal_values is defined, this routine
also checks whether its value is one of the legal values
associated with this field. If the test is successful,
checks whether its value is one of the legal values
associated with this field, else it checks against
the default valid values for this field obtained by
C<get_legal_field_values($name)>. If the test is successful,
the function returns 1. If the test fails, an error
is thrown (by default), unless $no_warn is true, in which
case the function returns 0.
Params: $name - the field name
$value - the field value
@legal_values - (optional) ref to a list of legal values
@legal_values - (optional) list of legal values
$no_warn - (optional) do not throw an error if true
Returns: 1 on success; 0 on failure if $no_warn is true (else an
......@@ -310,17 +342,21 @@ sub check_field {
my ($name, $value, $legalsRef, $no_warn) = @_;
my $dbh = Bugzilla->dbh;
# If $legalsRef is undefined, we use the default valid values.
unless (defined $legalsRef) {
$legalsRef = get_legal_field_values($name);
}
if (!defined($value)
|| trim($value) eq ""
|| (defined($legalsRef) && lsearch($legalsRef, $value) < 0))
|| lsearch($legalsRef, $value) < 0)
{
return 0 if $no_warn; # We don't want an error to be thrown; return.
trick_taint($name);
my ($result) = $dbh->selectrow_array('SELECT description FROM fielddefs
WHERE name = ?', undef, $name);
my $field = $result || $name;
ThrowCodeError('illegal_field', { field => $field });
my $field = new Bugzilla::Field($name);
my $field_desc = $field ? $field->description : $name;
ThrowCodeError('illegal_field', { field => $field_desc });
}
return 1;
}
......
......@@ -115,8 +115,6 @@ sub init {
my $dbh = Bugzilla->dbh;
&::GetVersionTable();
# First, deal with all the old hard-coded non-chart-based poop.
if (grep(/map_assigned_to/, @$fieldsref)) {
push @supptables, "INNER JOIN profiles AS map_assigned_to " .
......@@ -182,25 +180,26 @@ sub init {
# into their equivalent lists of open and closed statuses.
if ($params->param('bug_status')) {
my @bug_statuses = $params->param('bug_status');
if (scalar(@bug_statuses) == scalar(@::legal_bug_status)
my @legal_statuses = @{get_legal_field_values('bug_status')};
if (scalar(@bug_statuses) == scalar(@legal_statuses)
|| $bug_statuses[0] eq "__all__")
{
$params->delete('bug_status');
}
elsif ($bug_statuses[0] eq '__open__') {
$params->param('bug_status', map(is_open_state($_) ? $_ : undef,
@::legal_bug_status));
@legal_statuses));
}
elsif ($bug_statuses[0] eq "__closed__") {
$params->param('bug_status', map(is_open_state($_) ? undef : $_,
@::legal_bug_status));
@legal_statuses));
}
}
if ($params->param('resolution')) {
my @resolutions = $params->param('resolution');
if (scalar(@resolutions) == scalar(@::legal_resolution)) {
my $legal_resolutions = get_legal_field_values('resolution');
if (scalar(@resolutions) == scalar(@$legal_resolutions)) {
$params->delete('resolution');
}
}
......@@ -924,7 +923,6 @@ sub init {
},
"^keywords,(?!changed)" => sub {
&::GetVersionTable();
my @list;
my $table = "keywords_$chartid";
foreach my $value (split(/[\s,]+/, $v)) {
......
......@@ -28,6 +28,7 @@ use Bugzilla::Error;
use Bugzilla::Constants;
use Bugzilla::Keyword;
use Bugzilla::Bug;
use Bugzilla::Field;
use base qw(Exporter);
@Bugzilla::Search::Quicksearch::EXPORT = qw(quicksearch);
......@@ -144,8 +145,8 @@ sub quicksearch {
}
# It's no alias either, so it's a more complex query.
&::GetVersionTable();
my $legal_statuses = get_legal_field_values('bug_status');
my $legal_resolutions = get_legal_field_values('resolution');
# Globally translate " AND ", " OR ", " NOT " to space, pipe, dash.
$searchstring =~ s/\s+AND\s+/ /g;
......@@ -158,12 +159,12 @@ sub quicksearch {
my @closedStates;
my (%states, %resolutions);
foreach (@::legal_bug_status) {
foreach (@$legal_statuses) {
push(@closedStates, $_) unless is_open_state($_);
}
foreach (@openStates) { $states{$_} = 1 }
if ($words[0] eq 'ALL') {
foreach (@::legal_bug_status) { $states{$_} = 1 }
foreach (@$legal_statuses) { $states{$_} = 1 }
shift @words;
}
elsif ($words[0] eq 'OPEN') {
......@@ -175,7 +176,7 @@ sub quicksearch {
\%resolutions,
[split(/,/, substr($words[0], 1))],
\@closedStates,
\@::legal_resolution)) {
$legal_resolutions)) {
shift @words;
# Allowing additional resolutions means we need to keep
# the "no resolution" resolution.
......@@ -191,8 +192,8 @@ sub quicksearch {
if (matchPrefixes(\%states,
\%resolutions,
[split(/,/, $words[0])],
\@::legal_bug_status,
\@::legal_resolution)) {
$legal_statuses,
$legal_resolutions)) {
shift @words;
}
else {
......@@ -292,7 +293,7 @@ sub quicksearch {
}
# Severity
elsif (grep({lc($word) eq substr($_, 0, 3)}
@::legal_severity)) {
@{get_legal_field_values('bug_severity')})) {
addChart('bug_severity', 'substring',
$word, $negate);
}
......
......@@ -42,15 +42,11 @@ use Bugzilla::User;
use Bugzilla::Bug;
use Bugzilla::Product;
use Bugzilla::Keyword;
use Bugzilla::Field;
# Include the Bugzilla CGI and general utility library.
require "globals.pl";
use vars qw(@legal_platform
@legal_priority
@legal_severity
@settable_resolution);
my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
......@@ -90,7 +86,6 @@ if ($dotweak) {
|| ThrowUserError("auth_failure", {group => "editbugs",
action => "modify",
object => "multiple_bugs"});
GetVersionTable();
}
# Hack to support legacy applications that think the RDF ctype is at format=rdf.
......@@ -1042,11 +1037,11 @@ if ($dotweak) {
$vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
$vars->{'products'} = Bugzilla->user->get_enterable_products;
$vars->{'platforms'} = \@::legal_platform;
$vars->{'op_sys'} = \@::legal_opsys;
$vars->{'priorities'} = \@::legal_priority;
$vars->{'severities'} = \@::legal_severity;
$vars->{'resolutions'} = \@::settable_resolution;
$vars->{'platforms'} = get_legal_field_values('rep_platform');
$vars->{'op_sys'} = get_legal_field_values('op_sys');
$vars->{'priorities'} = get_legal_field_values('priority');
$vars->{'severities'} = get_legal_field_values('bug_severity');
$vars->{'resolutions'} = Bugzilla::Bug->settable_resolutions;
$vars->{'unconfirmedstate'} = 'UNCONFIRMED';
......
......@@ -33,8 +33,6 @@ require "globals.pl";
Bugzilla->login();
GetVersionTable();
my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
my $vars = {};
......
......@@ -52,8 +52,6 @@ if (chdir("graphs")) {
chdir("..");
}
GetVersionTable();
# Let Throw*Error() work correctly outside a web browser.
Bugzilla->batch(1);
Bugzilla->switch_to_shadow_db();
......
......@@ -35,19 +35,7 @@ use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Keyword;
use Bugzilla::Bug;
# Suppress "used only once" warnings.
use vars
qw(
@legal_priority
@legal_severity
@legal_platform
@legal_opsys
@legal_resolution
);
# Use the global template variables defined in globals.pl
# to generate the output.
use Bugzilla::Field;
my $user = Bugzilla->login(LOGIN_OPTIONAL);
......@@ -57,18 +45,15 @@ if (Param('requirelogin') && !$user->id) {
display_data();
}
# Retrieve this installation's configuration.
GetVersionTable();
# Pass a bunch of Bugzilla configuration to the templates.
my $vars = {};
$vars->{'priority'} = \@::legal_priority;
$vars->{'severity'} = \@::legal_severity;
$vars->{'platform'} = \@::legal_platform;
$vars->{'op_sys'} = \@::legal_opsys;
$vars->{'priority'} = get_legal_field_values('priority');
$vars->{'severity'} = get_legal_field_values('bug_severity');
$vars->{'platform'} = get_legal_field_values('rep_platform');
$vars->{'op_sys'} = get_legal_field_values('op_sys');
$vars->{'keyword'} = [map($_->name, Bugzilla::Keyword->get_all)];
$vars->{'resolution'} = \@::legal_resolution;
$vars->{'status'} = \@::legal_bug_status;
$vars->{'resolution'} = get_legal_field_values('resolution');
$vars->{'status'} = get_legal_field_values('bug_status');
# Include a list of product objects.
$vars->{'products'} = $user->get_selectable_products;
......@@ -77,7 +62,7 @@ $vars->{'products'} = $user->get_selectable_products;
# be made part of the configuration.
my @open_status;
my @closed_status;
foreach my $status (@::legal_bug_status) {
foreach my $status (@{$vars->{'status'}}) {
is_open_state($status) ? push(@open_status, $status)
: push(@closed_status, $status);
}
......
......@@ -753,32 +753,6 @@
ask in the newsgroup.
</para>
</section>
<section id="dbmodify">
<title>Modifying Your Running System</title>
<para>
Bugzilla optimizes database lookups by storing all relatively
static information in the <filename>versioncache</filename>
file, located in the <filename class="directory">data/</filename>
subdirectory under your installation directory.
</para>
<para>
If you make a change to the structural data in your database (the
versions table for example), or to the <quote>constants</quote>
encoded in <filename>defparams.pl</filename>, you will need to remove
the cached content from the data directory (by doing a
<command>rm data/versioncache</command>), or your changes won't show up.
</para>
<para>
<filename>versioncache</filename> gets regenerated automatically
whenever it's more than an hour old, so Bugzilla will eventually
notice your changes by itself, but generally you want it to notice
right away, so that you can test things.
</para>
</section>
<section id="dbdoc">
<title>MySQL Bugzilla Database Introduction</title>
......
......@@ -54,8 +54,6 @@ if (defined $cgi->param('ctype') && $cgi->param('ctype') eq "xul") {
my $template = Bugzilla->template;
my $vars = {};
GetVersionTable();
# collectstats.pl uses duplicates.cgi to generate the RDF duplicates stats.
# However, this conflicts with requirelogin if it's enabled; so we make
# logging-in optional if we are running from the command line.
......
......@@ -115,9 +115,6 @@ if ($action eq 'new') {
$dbh->do("INSERT INTO classifications (name, description)
VALUES (?, ?)", undef, ($class_name, $description));
# Make versioncache flush
unlink "$datadir/versioncache";
$vars->{'classification'} = $class_name;
LoadTemplate($action);
......@@ -173,8 +170,6 @@ if ($action eq 'delete') {
$dbh->bz_unlock_tables();
unlink "$datadir/versioncache";
$vars->{'classification'} = $classification;
LoadTemplate($action);
......@@ -222,10 +217,8 @@ if ($action eq 'update') {
trick_taint($class_name);
$dbh->do("UPDATE classifications SET name = ? WHERE id = ?",
undef, ($class_name, $class_old->id));
$vars->{'updated_classification'} = 1;
unlink "$datadir/versioncache";
$vars->{'updated_classification'} = 1;
}
if ($description ne $class_old->description) {
......@@ -235,8 +228,6 @@ if ($action eq 'update') {
($description, $class_old->id));
$vars->{'updated_description'} = 1;
unlink "$datadir/versioncache";
}
$dbh->bz_unlock_tables();
......
......@@ -175,8 +175,6 @@ if ($action eq 'new') {
# Insert default charting queries for this product.
# If they aren't using charting, this won't do any harm.
GetVersionTable();
my @series;
my $prodcomp = "&product=" . url_quote($product->name) .
......@@ -208,9 +206,6 @@ if ($action eq 'new') {
$series->writeToDatabase();
}
# Make versioncache flush
unlink "$datadir/versioncache";
$component =
new Bugzilla::Component({product_id => $product->id,
name => $comp_name});
......@@ -280,8 +275,6 @@ if ($action eq 'delete') {
$dbh->bz_unlock_tables();
unlink "$datadir/versioncache";
$vars->{'comp'} = $component;
$vars->{'product'} = $product;
$template->process("admin/components/deleted.html.tmpl", $vars)
......@@ -367,7 +360,6 @@ if ($action eq 'update') {
$dbh->do("UPDATE components SET name = ? WHERE id = ?",
undef, ($comp_name, $component_old->id));
unlink "$datadir/versioncache";
$vars->{'updated_name'} = 1;
}
......
......@@ -152,9 +152,6 @@ if ($action eq 'new') {
(id, name, description) VALUES (?, ?, ?)',
undef, ($newid, $name, $description));
# Make versioncache flush
unlink "$datadir/versioncache";
print $cgi->header();
$vars->{'name'} = $name;
......@@ -226,9 +223,6 @@ if ($action eq 'update') {
$dbh->do('UPDATE keyworddefs SET name = ?, description = ?
WHERE id = ?', undef, ($name, $description, $id));
# Make versioncache flush
unlink "$datadir/versioncache";
print $cgi->header();
$vars->{'name'} = $name;
......@@ -267,9 +261,6 @@ if ($action eq 'delete') {
$dbh->do('DELETE FROM keywords WHERE keywordid = ?', undef, $id);
$dbh->do('DELETE FROM keyworddefs WHERE id = ?', undef, $id);
# Make versioncache flush
unlink "$datadir/versioncache";
print $cgi->header();
$vars->{'name'} = $name;
......
......@@ -144,9 +144,6 @@ if ($action eq 'new') {
VALUES ( ?, ?, ? )',
undef, $milestone_name, $product->id, $sortkey);
# Make versioncache flush
unlink "$datadir/versioncache";
$milestone = new Bugzilla::Milestone($product->id,
$milestone_name);
$vars->{'milestone'} = $milestone;
......@@ -227,8 +224,6 @@ if ($action eq 'delete') {
$dbh->do("DELETE FROM milestones WHERE product_id = ? AND value = ?",
undef, ($product->id, $milestone->name));
unlink "$datadir/versioncache";
$template->process("admin/milestones/deleted.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;
......@@ -292,7 +287,6 @@ if ($action eq 'update') {
$product->id,
$milestone_old->name);
unlink "$datadir/versioncache";
$vars->{'updated_sortkey'} = 1;
}
......@@ -337,8 +331,6 @@ if ($action eq 'update') {
$product->id,
$milestone_old->name);
unlink "$datadir/versioncache";
$vars->{'updated_name'} = 1;
}
......
......@@ -49,14 +49,12 @@ my $current_panel = $cgi->param('section') || 'core';
$current_panel =~ /^([A-Za-z0-9_-]+)$/;
$current_panel = $1;
GetVersionTable();
my $current_module;
my @panels = ();
foreach my $panel (@parampanels) {
next if ($panel eq 'Common');
require "Bugzilla/Config/$panel.pm";
my @module_param_list = "Bugzilla::Config::${panel}"->get_param_list();
my @module_param_list = "Bugzilla::Config::${panel}"->get_param_list(1);
my $item = { name => lc($panel),
current => ($current_panel eq lc($panel)) ? 1 : 0,
param_list => \@module_param_list,
......@@ -70,7 +68,7 @@ $vars->{panels} = \@panels;
if ($action eq 'save' && $current_module) {
my @changes = ();
my @module_param_list = "Bugzilla::Config::${current_module}"->get_param_list();
my @module_param_list = "Bugzilla::Config::${current_module}"->get_param_list(1);
foreach my $i (@module_param_list) {
my $name = $i->{'name'};
......@@ -128,7 +126,6 @@ if ($action eq 'save' && $current_module) {
$vars->{'param_changed'} = \@changes;
WriteParams();
unlink "$datadir/versioncache";
}
$template->process("admin/params/editparams.html.tmpl", $vars)
......
......@@ -45,10 +45,7 @@ use Bugzilla::Classification;
use Bugzilla::Milestone;
use Bugzilla::Group;
use Bugzilla::User;
# Shut up misguided -w warnings about "used only once". "use vars" just
# doesn't work for me.
use vars qw(@legal_bug_status @legal_resolution);
use Bugzilla::Field;
#
# Preliminary checks:
......@@ -273,8 +270,7 @@ if ($action eq 'new') {
if ($cgi->param('createseries')) {
# Insert default charting queries for this product.
# If they aren't using charting, this won't do any harm.
GetVersionTable();
#
# $open_name and $product are sqlquoted by the series code
# and never used again here, so we can trick_taint them.
my $open_name = $cgi->param('open_name');
......@@ -283,12 +279,12 @@ if ($action eq 'new') {
my @series;
# We do every status, every resolution, and an "opened" one as well.
foreach my $bug_status (@::legal_bug_status) {
foreach my $bug_status (@{get_legal_field_values('bug_status')}) {
push(@series, [$bug_status,
"bug_status=" . url_quote($bug_status)]);
}
foreach my $resolution (@::legal_resolution) {
foreach my $resolution (@{get_legal_field_values('resolution')}) {
next if !$resolution;
push(@series, [$resolution, "resolution=" .url_quote($resolution)]);
}
......@@ -309,11 +305,8 @@ if ($action eq 'new') {
$series->writeToDatabase();
}
}
# Make versioncache flush
unlink "$datadir/versioncache";
$vars->{'product'} = $product;
$template->process("admin/products/created.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;
......@@ -417,8 +410,6 @@ if ($action eq 'delete') {
$dbh->bz_unlock_tables();
unlink "$datadir/versioncache";
$template->process("admin/products/deleted.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;
......@@ -878,7 +869,6 @@ if ($action eq 'update') {
}
$dbh->bz_unlock_tables();
unlink "$datadir/versioncache";
my $product = new Bugzilla::Product({name => $product_name});
......
......@@ -217,8 +217,6 @@ if ($action eq 'new') {
VALUES ( ?, ? )");
$sth->execute($value, $sortkey);
unlink "$datadir/versioncache";
$vars->{'value'} = $value;
$vars->{'field'} = $field;
$template->process("admin/fieldvalues/created.html.tmpl",
......@@ -287,8 +285,6 @@ if ($action eq 'delete') {
$dbh->bz_unlock_tables();
unlink "$datadir/versioncache";
$vars->{'value'} = $value;
$vars->{'field'} = $field;
$template->process("admin/fieldvalues/deleted.html.tmpl",
......@@ -354,7 +350,6 @@ if ($action eq 'update') {
$dbh->do("UPDATE $field SET sortkey = ? WHERE value = ?",
undef, $sortkey, $valueold);
unlink "$datadir/versioncache";
$vars->{'updated_sortkey'} = 1;
$vars->{'sortkey'} = $sortkey;
}
......@@ -377,8 +372,6 @@ if ($action eq 'update') {
$dbh->do("UPDATE $field SET value = ? WHERE value = ?",
undef, $value, $valueold);
unlink "$datadir/versioncache";
$vars->{'updated_value'} = 1;
}
......@@ -387,13 +380,12 @@ if ($action eq 'update') {
# If the old value was the default value for the field,
# update data/params accordingly.
# This update is done while tables are unlocked due to the
# annoying call to GetVersionTable in Bugzilla/Config/Common.pm.
# annoying calls in Bugzilla/Config/Common.pm.
if ($value ne $valueold
&& $valueold eq Param($defaults{$field}))
{
SetParam($defaults{$field}, $value);
WriteParams();
unlink "$datadir/versioncache";
$vars->{'default_value_updated'} = 1;
}
......
......@@ -144,9 +144,6 @@ if ($action eq 'new') {
$dbh->do("INSERT INTO versions (value, product_id)
VALUES (?, ?)", undef, ($version_name, $product->id));
# Make versioncache flush
unlink "$datadir/versioncache";
$version = new Bugzilla::Version($product->id, $version_name);
$vars->{'version'} = $version;
$vars->{'product'} = $product;
......@@ -201,8 +198,6 @@ if ($action eq 'delete') {
$dbh->do("DELETE FROM versions WHERE product_id = ? AND value = ?",
undef, ($product->id, $version->name));
unlink "$datadir/versioncache";
$vars->{'version'} = $version;
$vars->{'product'} = $product;
......@@ -279,8 +274,6 @@ if ($action eq 'update') {
WHERE product_id = ? AND value = ?", undef,
($version_name, $product->id, $version_old->name));
unlink "$datadir/versioncache";
$vars->{'updated_name'} = 1;
}
......
......@@ -46,15 +46,9 @@ use Bugzilla::Product;
use Bugzilla::Classification;
use Bugzilla::Keyword;
use Bugzilla::Token;
use Bugzilla::Field;
require "globals.pl";
use vars qw(
@legal_opsys
@legal_platform
@legal_priority
@legal_severity
);
my $user = Bugzilla->login(LOGIN_REQUIRED);
my $cloned_bug;
......@@ -312,8 +306,6 @@ if ($cloned_bug_id) {
$cloned_bug = new Bugzilla::Bug($cloned_bug_id, $user->id);
}
GetVersionTable();
if (scalar(@{$product->components}) == 1) {
# Only one component; just pick it.
$cgi->param('component', $product->components->[0]->name);
......@@ -323,10 +315,10 @@ my %default;
$vars->{'product'} = $product;
$vars->{'priority'} = \@legal_priority;
$vars->{'bug_severity'} = \@legal_severity;
$vars->{'rep_platform'} = \@legal_platform;
$vars->{'op_sys'} = \@legal_opsys;
$vars->{'priority'} = get_legal_field_values('priority');
$vars->{'bug_severity'} = get_legal_field_values('bug_severity');
$vars->{'rep_platform'} = get_legal_field_values('rep_platform');
$vars->{'op_sys'} = get_legal_field_values('op_sys');
$vars->{'use_keywords'} = 1 if Bugzilla::Keyword::keyword_count();
......
......@@ -39,23 +39,6 @@ use Bugzilla::Config qw(:DEFAULT ChmodDataFile $localconfig $datadir);
use Bugzilla::User;
use Bugzilla::Error;
# Shut up misguided -w warnings about "used only once". For some reason,
# "use vars" chokes on me when I try it here.
sub globals_pl_sillyness {
my $zz;
$zz = @main::legal_bug_status;
$zz = @main::legal_opsys;
$zz = @main::legal_platform;
$zz = @main::legal_priority;
$zz = @main::legal_severity;
}
#
# Here are the --LOCAL-- variables defined in 'localconfig' that we'll use
# here
#
# XXX - Move this to Bugzilla::Config once code which uses these has moved out
# of globals.pl
do $localconfig;
......@@ -68,88 +51,6 @@ use Date::Parse; # For str2time().
# Use standard Perl libraries for cross-platform file/directory manipulation.
use File::Spec;
# XXXX - this needs to go away
sub GenerateVersionTable {
my $dbh = Bugzilla->dbh;
@::legal_priority = get_legal_field_values("priority");
@::legal_severity = get_legal_field_values("bug_severity");
@::legal_platform = get_legal_field_values("rep_platform");
@::legal_opsys = get_legal_field_values("op_sys");
@::legal_bug_status = get_legal_field_values("bug_status");
@::legal_resolution = get_legal_field_values("resolution");
# 'settable_resolution' is the list of resolutions that may be set
# directly by hand in the bug form. Start with the list of legal
# resolutions and remove 'MOVED' and 'DUPLICATE' because setting
# bugs to those resolutions requires a special process.
#
@::settable_resolution = @::legal_resolution;
my $w = lsearch(\@::settable_resolution, "DUPLICATE");
if ($w >= 0) {
splice(@::settable_resolution, $w, 1);
}
my $z = lsearch(\@::settable_resolution, "MOVED");
if ($z >= 0) {
splice(@::settable_resolution, $z, 1);
}
require File::Temp;
my ($fh, $tmpname) = File::Temp::tempfile("versioncache.XXXXX",
DIR => "$datadir");
print $fh "#\n";
print $fh "# DO NOT EDIT!\n";
print $fh "# This file is automatically generated at least once every\n";
print $fh "# hour by the GenerateVersionTable() sub in globals.pl.\n";
print $fh "# Any changes you make will be overwritten.\n";
print $fh "#\n";
require Data::Dumper;
print $fh (Data::Dumper->Dump([\@::legal_priority, \@::legal_severity,
\@::legal_platform, \@::legal_opsys,
\@::legal_bug_status, \@::legal_resolution],
['*::legal_priority', '*::legal_severity',
'*::legal_platform', '*::legal_opsys',
'*::legal_bug_status', '*::legal_resolution']));
print $fh (Data::Dumper->Dump([\@::settable_resolution],
['*::settable_resolution']));
print $fh "1;\n";
close $fh;
rename ($tmpname, "$datadir/versioncache")
|| die "Can't rename $tmpname to versioncache";
ChmodDataFile("$datadir/versioncache", 0666);
}
$::VersionTableLoaded = 0;
sub GetVersionTable {
return if $::VersionTableLoaded;
my $file_generated = 0;
if (!-r "$datadir/versioncache") {
GenerateVersionTable();
$file_generated = 1;
}
require "$datadir/versioncache";
$::VersionTableLoaded = 1;
}
# Returns a list of all the legal values for a field that has a
# list of legal values, like rep_platform or resolution.
sub get_legal_field_values {
my ($field) = @_;
my $dbh = Bugzilla->dbh;
my $result_ref = $dbh->selectcol_arrayref(
"SELECT value FROM $field
WHERE isactive = ?
ORDER BY sortkey, value", undef, (1));
return @$result_ref;
}
############# Live code below here (that is, not subroutine defs) #############
use Bugzilla;
......
......@@ -86,6 +86,7 @@ use Bugzilla::User;
use Bugzilla::Util;
use Bugzilla::Constants;
use Bugzilla::Keyword;
use Bugzilla::Field;
use MIME::Base64;
use MIME::Parser;
......@@ -116,7 +117,6 @@ use constant OK_LEVEL => 3;
use constant DEBUG_LEVEL => 2;
use constant ERR_LEVEL => 1;
GetVersionTable();
our @logs;
our @attachments;
our $bugtotal;
......@@ -128,19 +128,6 @@ my ($timestamp) = $dbh->selectrow_array("SELECT NOW()");
# Helper sub routines #
###############################################################################
# This can go away as soon as data/versioncache is removed. Since we still
# have to use GetVersionTable() though, it stays for now.
sub sillyness {
my $zz;
$zz = @::legal_bug_status;
$zz = @::legal_opsys;
$zz = @::legal_platform;
$zz = @::legal_priority;
$zz = @::legal_severity;
$zz = @::legal_resolution;
}
sub MailMessage {
return unless ($mail);
my $subject = shift;
......@@ -180,27 +167,6 @@ sub Error {
exit;
}
# This will be implemented in Bugzilla::Field as soon as bug 31506 lands
sub check_field {
my ($name, $value, $legalsRef, $no_warn) = @_;
my $dbh = Bugzilla->dbh;
if (!defined($value)
|| trim($value) eq ""
|| (defined($legalsRef) && lsearch($legalsRef, $value) < 0))
{
return 0 if $no_warn; # We don't want an error to be thrown; return.
trick_taint($name);
my ($result) = $dbh->selectrow_array("SELECT description FROM fielddefs
WHERE name = ?", undef, $name);
my $field = $result || $name;
ThrowCodeError('illegal_field', { field => $field });
}
return 1;
}
# This subroutine handles flags for process_bug. It is generic in that
# it can handle both attachment flags and bug flags.
sub flag_handler {
......@@ -741,7 +707,7 @@ sub process_bug {
# imported is valid. If it is not we use the defaults set in the parameters.
if (defined( $bug_fields{'bug_severity'} )
&& check_field('bug_severity', scalar $bug_fields{'bug_severity'},
\@::legal_severity, ERR_LEVEL) )
undef, ERR_LEVEL) )
{
push( @values, $bug_fields{'bug_severity'} );
}
......@@ -758,7 +724,7 @@ sub process_bug {
if (defined( $bug_fields{'priority'} )
&& check_field('priority', scalar $bug_fields{'priority'},
\@::legal_priority, ERR_LEVEL ) )
undef, ERR_LEVEL ) )
{
push( @values, $bug_fields{'priority'} );
}
......@@ -775,7 +741,7 @@ sub process_bug {
if (defined( $bug_fields{'rep_platform'} )
&& check_field('rep_platform', scalar $bug_fields{'rep_platform'},
\@::legal_platform, ERR_LEVEL ) )
undef, ERR_LEVEL ) )
{
push( @values, $bug_fields{'rep_platform'} );
}
......@@ -792,7 +758,7 @@ sub process_bug {
if (defined( $bug_fields{'op_sys'} )
&& check_field('op_sys', scalar $bug_fields{'op_sys'},
\@::legal_opsys, ERR_LEVEL ) )
undef, ERR_LEVEL ) )
{
push( @values, $bug_fields{'op_sys'} );
}
......@@ -898,10 +864,10 @@ sub process_bug {
my $has_status = defined($bug_fields{'bug_status'});
my $valid_res = check_field('resolution',
scalar $bug_fields{'resolution'},
\@::legal_resolution, ERR_LEVEL );
undef, ERR_LEVEL );
my $valid_status = check_field('bug_status',
scalar $bug_fields{'bug_status'},
\@::legal_bug_status, ERR_LEVEL );
undef, ERR_LEVEL );
my $is_open = is_open_state($bug_fields{'bug_status'});
my $status = $bug_fields{'bug_status'} || undef;
my $resolution = $bug_fields{'resolution'} || undef;
......
......@@ -39,16 +39,6 @@ use Bugzilla::Product;
use Bugzilla::Keyword;
use Bugzilla::Token;
# Shut up misguided -w warnings about "used only once". For some reason,
# "use vars" chokes on me when I try it here.
sub sillyness {
my $zz;
$zz = @::legal_opsys;
$zz = @::legal_platform;
$zz = @::legal_priority;
$zz = @::legal_severity;
}
my $user = Bugzilla->login(LOGIN_REQUIRED);
my $cgi = Bugzilla->cgi;
......@@ -248,14 +238,12 @@ if (!Param('letsubmitterchoosepriority')) {
$cgi->param(-name => 'priority', -value => Param('defaultpriority'));
}
GetVersionTable();
# Some more sanity checking
check_field('rep_platform', scalar $cgi->param('rep_platform'), \@::legal_platform);
check_field('bug_severity', scalar $cgi->param('bug_severity'), \@::legal_severity);
check_field('priority', scalar $cgi->param('priority'), \@::legal_priority);
check_field('op_sys', scalar $cgi->param('op_sys'), \@::legal_opsys);
check_field('bug_status', scalar $cgi->param('bug_status'), ['UNCONFIRMED', 'NEW']);
check_field('rep_platform', scalar $cgi->param('rep_platform'));
check_field('bug_severity', scalar $cgi->param('bug_severity'));
check_field('priority', scalar $cgi->param('priority'));
check_field('op_sys', scalar $cgi->param('op_sys'));
check_field('bug_status', scalar $cgi->param('bug_status'), ['UNCONFIRMED', 'NEW']);
check_field('version', scalar $cgi->param('version'),
[map($_->name, @{$product->versions})]);
check_field('target_milestone', scalar $cgi->param('target_milestone'),
......
......@@ -64,15 +64,6 @@ use Bugzilla::Keyword;
use Bugzilla::Flag;
use Bugzilla::FlagType;
# Shut up misguided -w warnings about "used only once":
use vars qw(%legal_opsys
%legal_platform
%legal_priority
%settable_resolution
%legal_severity
);
my $user = Bugzilla->login(LOGIN_REQUIRED);
my $whoid = $user->id;
my $grouplist = $user->groups_as_string;
......@@ -266,8 +257,6 @@ if ($cgi->cookie("BUGLIST") && defined $cgi->param('id')) {
$vars->{'bug_list'} = \@bug_list;
}
GetVersionTable();
foreach my $field_name ('product', 'component', 'version') {
defined($cgi->param($field_name))
|| ThrowCodeError('undefined_field', { field => $field_name });
......@@ -639,10 +628,10 @@ if (defined $cgi->param('id')) {
check_field('target_milestone', scalar $cgi->param('target_milestone'),
[map($_->name, @{$prod_obj->milestones})]);
}
check_field('rep_platform', scalar $cgi->param('rep_platform'), \@::legal_platform);
check_field('op_sys', scalar $cgi->param('op_sys'), \@::legal_opsys);
check_field('priority', scalar $cgi->param('priority'), \@::legal_priority);
check_field('bug_severity', scalar $cgi->param('bug_severity'), \@::legal_severity);
check_field('rep_platform', scalar $cgi->param('rep_platform'));
check_field('op_sys', scalar $cgi->param('op_sys'));
check_field('priority', scalar $cgi->param('priority'));
check_field('bug_severity', scalar $cgi->param('bug_severity'));
# Those fields only have to exist. We don't validate their value here.
foreach my $field_name ('bug_file_loc', 'short_desc', 'longdesclength') {
......@@ -1173,7 +1162,7 @@ SWITCH: for ($cgi->param('knob')) {
/^(resolve|change_resolution)$/ && CheckonComment( "resolve" ) && do {
# Check here, because its the only place we require the resolution
check_field('resolution', scalar $cgi->param('resolution'),
\@::settable_resolution);
Bugzilla::Bug->settable_resolutions);
# don't resolve as fixed while still unresolved blocking bugs
if (Param("noresolveonopenblockers")
......
......@@ -37,15 +37,7 @@ use Bugzilla::User;
use Bugzilla::Util;
use Bugzilla::Product;
use Bugzilla::Keyword;
use vars qw(
@legal_resolution
@legal_bug_status
@legal_opsys
@legal_platform
@legal_priority
@legal_severity
);
use Bugzilla::Field;
my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
......@@ -240,12 +232,10 @@ if (Param('usetargetmilestone')) {
$vars->{'have_keywords'} = Bugzilla::Keyword::keyword_count();
GetVersionTable();
push @::legal_resolution, "---"; # Oy, what a hack.
shift @::legal_resolution;
# Another hack - this array contains "" for some reason. See bug 106589.
$vars->{'resolution'} = \@::legal_resolution;
my $legal_resolutions = get_legal_field_values('resolution');
push(@$legal_resolutions, "---"); # Oy, what a hack.
# Another hack - this array contains "" for some reason. See bug 106589.
$vars->{'resolution'} = [grep ($_, @$legal_resolutions)];
my @chfields;
......@@ -272,11 +262,11 @@ if (UserInGroup(Param('timetrackinggroup'))) {
}
@chfields = (sort(@chfields));
$vars->{'chfield'} = \@chfields;
$vars->{'bug_status'} = \@::legal_bug_status;
$vars->{'rep_platform'} = \@::legal_platform;
$vars->{'op_sys'} = \@::legal_opsys;
$vars->{'priority'} = \@::legal_priority;
$vars->{'bug_severity'} = \@::legal_severity;
$vars->{'bug_status'} = get_legal_field_values('bug_status');
$vars->{'rep_platform'} = get_legal_field_values('rep_platform');
$vars->{'op_sys'} = get_legal_field_values('op_sys');
$vars->{'priority'} = get_legal_field_values('priority');
$vars->{'bug_severity'} = get_legal_field_values('bug_severity');
# Boolean charts
my @fields;
......
......@@ -26,10 +26,9 @@ use lib ".";
require "globals.pl";
use vars qw(@legal_opsys @legal_platform @legal_severity);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Field;
my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
......@@ -48,8 +47,6 @@ if (grep(/^cmd-/, $cgi->param())) {
use Bugzilla::Search;
GetVersionTable();
Bugzilla->login();
my $dbh = Bugzilla->switch_to_shadow_db();
......@@ -329,12 +326,12 @@ sub get_names {
my ($names, $isnumeric, $field) = @_;
# These are all the fields we want to preserve the order of in reports.
my %fields = ('priority' => \@::legal_priority,
'bug_severity' => \@::legal_severity,
'rep_platform' => \@::legal_platform,
'op_sys' => \@::legal_opsys,
'bug_status' => \@::legal_bug_status,
'resolution' => [' ', @::legal_resolution]);
my %fields = ('priority' => get_legal_field_values('priority'),
'bug_severity' => get_legal_field_values('bug_severity'),
'rep_platform' => get_legal_field_values('rep_platform'),
'op_sys' => get_legal_field_values('op_sys'),
'bug_status' => get_legal_field_values('bug_status'),
'resolution' => [' ', @{get_legal_field_values('resolution')}]);
my $field_list = $fields{$field};
my @sorted;
......
......@@ -55,8 +55,6 @@ use Bugzilla;
# to viewing reports, as well. Time to check the login in that case.
my $user = Bugzilla->login();
GetVersionTable();
Bugzilla->switch_to_shadow_db();
my $cgi = Bugzilla->cgi;
......
......@@ -54,8 +54,6 @@ if (!$cgi->param('id') && $single) {
my $format = $template->get_format("bug/show", scalar $cgi->param('format'),
scalar $cgi->param('ctype'));
GetVersionTable();
my @bugs = ();
my %marks;
......
......@@ -33,8 +33,6 @@ require "globals.pl";
my $template = Bugzilla->template;
my $vars = {};
GetVersionTable();
#
# Date handling
#
......
......@@ -433,8 +433,6 @@ Bugzilla->login(LOGIN_REQUIRED);
$cgi->param('Bugzilla_login', $bugzilla_login);
$cgi->param('Bugzilla_password', $bugzilla_password);
GetVersionTable();
$vars->{'changes_saved'} = $cgi->param('dosave');
my $current_tab_name = $cgi->param('tab') || "account";
......
......@@ -112,8 +112,6 @@ sub show_bug {
# Display all the votes for a particular user. If it's the user
# doing the viewing, give them the option to edit them too.
sub show_user {
GetVersionTable();
my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $user = Bugzilla->user;
......@@ -253,9 +251,6 @@ sub record_votes {
############################################################################
# End Data/Security Validation
############################################################################
GetVersionTable();
my $who = Bugzilla->user->id;
# If the user is voting for bugs, make sure they aren't overstuffing
......
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