summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'editparams.cgi')
-rwxr-xr-xeditparams.cgi201
1 files changed, 105 insertions, 96 deletions
diff --git a/editparams.cgi b/editparams.cgi
index ae569c2eb..eb34bd53a 100755
--- a/editparams.cgi
+++ b/editparams.cgi
@@ -24,131 +24,140 @@ use Bugzilla::User;
use Bugzilla::User::Setting;
use Bugzilla::Status;
-my $user = Bugzilla->login(LOGIN_REQUIRED);
-my $cgi = Bugzilla->cgi;
+my $user = Bugzilla->login(LOGIN_REQUIRED);
+my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
-my $vars = {};
+my $vars = {};
print $cgi->header();
$user->in_group('tweakparams')
- || ThrowUserError("auth_failure", {group => "tweakparams",
- action => "access",
- object => "parameters"});
+ || ThrowUserError("auth_failure",
+ {group => "tweakparams", action => "access", object => "parameters"});
-my $action = trim($cgi->param('action') || '');
-my $token = $cgi->param('token');
+my $action = trim($cgi->param('action') || '');
+my $token = $cgi->param('token');
my $current_panel = $cgi->param('section') || 'core';
$current_panel =~ /^([A-Za-z0-9_-]+)$/;
$current_panel = $1;
my $current_module;
-my @panels = ();
+my @panels = ();
my $param_panels = Bugzilla::Config::param_panels();
foreach my $panel (keys %$param_panels) {
- my $module = $param_panels->{$panel};
- eval("require $module") || die $@;
- my @module_param_list = "$module"->get_param_list();
- my $item = { name => lc($panel),
- current => ($current_panel eq lc($panel)) ? 1 : 0,
- param_list => \@module_param_list,
- sortkey => eval "\$${module}::sortkey;"
- };
- defined($item->{'sortkey'}) || ($item->{'sortkey'} = 100000);
- push(@panels, $item);
- $current_module = $panel if ($current_panel eq lc($panel));
+ my $module = $param_panels->{$panel};
+ eval("require $module") || die $@;
+ my @module_param_list = "$module"->get_param_list();
+ my $item = {
+ name => lc($panel),
+ current => ($current_panel eq lc($panel)) ? 1 : 0,
+ param_list => \@module_param_list,
+ sortkey => eval "\$${module}::sortkey;"
+ };
+ defined($item->{'sortkey'}) || ($item->{'sortkey'} = 100000);
+ push(@panels, $item);
+ $current_module = $panel if ($current_panel eq lc($panel));
}
-my %hook_panels = map { $_->{name} => { params => $_->{param_list} } }
- @panels;
+my %hook_panels = map { $_->{name} => {params => $_->{param_list}} } @panels;
+
# Note that this hook is also called in Bugzilla::Config.
-Bugzilla::Hook::process('config_modify_panels', { panels => \%hook_panels });
+Bugzilla::Hook::process('config_modify_panels', {panels => \%hook_panels});
$vars->{panels} = \@panels;
if ($action eq 'save' && $current_module) {
- check_token_data($token, 'edit_parameters');
- my @changes = ();
- my @module_param_list = @{ $hook_panels{lc($current_module)}->{params} };
-
- foreach my $i (@module_param_list) {
- my $name = $i->{'name'};
- my $value = $cgi->param($name);
-
- if (defined $cgi->param("reset-$name") && !$i->{'no_reset'}) {
- $value = $i->{'default'};
- } else {
- if ($i->{'type'} eq 'm') {
- # This simplifies the code below
- $value = [ $cgi->param($name) ];
- } else {
- # Get rid of windows/mac-style line endings.
- $value =~ s/\r\n?/\n/g;
- # assume single linefeed is an empty string
- $value =~ s/^\n$//;
- }
- # Stop complaining if the URL has no trailing slash.
- # XXX - This hack can go away once bug 303662 is implemented.
- if ($name =~ /(?<!webdot)base$/) {
- $value = "$value/" if ($value && $value !~ m#/$#);
- }
- }
+ check_token_data($token, 'edit_parameters');
+ my @changes = ();
+ my @module_param_list = @{$hook_panels{lc($current_module)}->{params}};
+
+ foreach my $i (@module_param_list) {
+ my $name = $i->{'name'};
+ my $value = $cgi->param($name);
- my $changed;
- if ($i->{'type'} eq 'm') {
- my @old = sort @{Bugzilla->params->{$name}};
- my @new = sort @$value;
- if (scalar(@old) != scalar(@new)) {
- $changed = 1;
- } else {
- $changed = 0; # Assume not changed...
- for (my $cnt = 0; $cnt < scalar(@old); ++$cnt) {
- if ($old[$cnt] ne $new[$cnt]) {
- # entry is different, therefore changed
- $changed = 1;
- last;
- }
- }
- }
- } else {
- $changed = ($value eq Bugzilla->params->{$name})? 0 : 1;
+ if (defined $cgi->param("reset-$name") && !$i->{'no_reset'}) {
+ $value = $i->{'default'};
+ }
+ else {
+ if ($i->{'type'} eq 'm') {
+
+ # This simplifies the code below
+ $value = [$cgi->param($name)];
+ }
+ else {
+ # Get rid of windows/mac-style line endings.
+ $value =~ s/\r\n?/\n/g;
+
+ # assume single linefeed is an empty string
+ $value =~ s/^\n$//;
+ }
+
+ # Stop complaining if the URL has no trailing slash.
+ # XXX - This hack can go away once bug 303662 is implemented.
+ if ($name =~ /(?<!webdot)base$/) {
+ $value = "$value/" if ($value && $value !~ m#/$#);
+ }
+ }
+
+ my $changed;
+ if ($i->{'type'} eq 'm') {
+ my @old = sort @{Bugzilla->params->{$name}};
+ my @new = sort @$value;
+ if (scalar(@old) != scalar(@new)) {
+ $changed = 1;
+ }
+ else {
+ $changed = 0; # Assume not changed...
+ for (my $cnt = 0; $cnt < scalar(@old); ++$cnt) {
+ if ($old[$cnt] ne $new[$cnt]) {
+
+ # entry is different, therefore changed
+ $changed = 1;
+ last;
+ }
}
+ }
+ }
+ else {
+ $changed = ($value eq Bugzilla->params->{$name}) ? 0 : 1;
+ }
- if ($changed) {
- if (exists $i->{'checker'}) {
- my $ok = $i->{'checker'}->($value, $i);
- if ($ok ne "") {
- ThrowUserError('invalid_parameter', { name => $name, err => $ok });
- }
- } elsif ($name eq 'globalwatchers') {
- # can't check this as others, as Bugzilla::Config::Common
- # cannot use Bugzilla::User
- foreach my $watcher (split(/[,\s]+/, $value)) {
- ThrowUserError(
- 'invalid_parameter',
- { name => $name, err => "no such user $watcher" }
- ) unless login_to_id($watcher);
- }
- }
- push(@changes, $name);
- SetParam($name, $value);
- if (($name eq "shutdownhtml") && ($value ne "")) {
- $vars->{'shutdown_is_active'} = 1;
- }
- if ($name eq 'duplicate_or_move_bug_status') {
- Bugzilla::Status::add_missing_bug_status_transitions($value);
- }
+ if ($changed) {
+ if (exists $i->{'checker'}) {
+ my $ok = $i->{'checker'}->($value, $i);
+ if ($ok ne "") {
+ ThrowUserError('invalid_parameter', {name => $name, err => $ok});
+ }
+ }
+ elsif ($name eq 'globalwatchers') {
+
+ # can't check this as others, as Bugzilla::Config::Common
+ # cannot use Bugzilla::User
+ foreach my $watcher (split(/[,\s]+/, $value)) {
+ ThrowUserError('invalid_parameter',
+ {name => $name, err => "no such user $watcher"})
+ unless login_to_id($watcher);
}
+ }
+ push(@changes, $name);
+ SetParam($name, $value);
+ if (($name eq "shutdownhtml") && ($value ne "")) {
+ $vars->{'shutdown_is_active'} = 1;
+ }
+ if ($name eq 'duplicate_or_move_bug_status') {
+ Bugzilla::Status::add_missing_bug_status_transitions($value);
+ }
}
+ }
- $vars->{'message'} = 'parameters_updated';
- $vars->{'param_changed'} = \@changes;
+ $vars->{'message'} = 'parameters_updated';
+ $vars->{'param_changed'} = \@changes;
- write_params();
- delete_token($token);
+ write_params();
+ delete_token($token);
}
$vars->{'token'} = issue_session_token('edit_parameters');
$template->process("admin/params/editparams.html.tmpl", $vars)
- || ThrowTemplateError($template->error());
+ || ThrowTemplateError($template->error());