summaryrefslogtreecommitdiffstats
path: root/editparams.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'editparams.cgi')
-rwxr-xr-xeditparams.cgi179
1 files changed, 82 insertions, 97 deletions
diff --git a/editparams.cgi b/editparams.cgi
index 8924a0edc..4b1db455b 100755
--- a/editparams.cgi
+++ b/editparams.cgi
@@ -20,126 +20,111 @@
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
# J. Paul Reed <preed@sigkill.com>
-
+# Frédéric Buclin <LpSolit@gmail.com>
use strict;
use lib ".";
use Bugzilla::Constants;
-use Bugzilla::Config qw(:DEFAULT :admin);
+use Bugzilla::Config qw(:DEFAULT :admin :params $datadir);
require "globals.pl";
+use vars qw($vars @parampanels);
my $user = Bugzilla->login(LOGIN_REQUIRED);
-
+my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
-print Bugzilla->cgi->header();
+print $cgi->header();
$user->in_group('tweakparams')
|| ThrowUserError("auth_failure", {group => "tweakparams",
action => "modify",
object => "parameters"});
-$template->put_header("Edit parameters");
-
-print "This lets you edit the basic operating parameters of bugzilla.\n";
-print "Be careful!\n";
-print "<p>\n";
-print "Any item you check Reset on will get reset to its default value.\n";
-
-print "<form method=post action=doeditparams.cgi><table>\n";
-
-my $rowbreak = "<tr><td colspan=2><hr></td></tr>";
-print $rowbreak;
-
-foreach my $i (GetParamList()) {
- my $name = $i->{'name'};
- my $value = Param($name);
- print "<tr><th align=right valign=top>$name:</th><td>$i->{'desc'}</td></tr>\n";
- print "<tr><td valign=top><input type=checkbox name=reset-$name>Reset</td><td>\n";
- SWITCH: for ($i->{'type'}) {
- /^t$/ && do {
- print "<input size=80 name=$name value=\"" .
- value_quote($value) . "\">\n";
- last SWITCH;
- };
- /^l$/ && do {
- print "<textarea wrap=hard name=$name rows=10 cols=80>" .
- value_quote($value) . "</textarea>\n";
- last SWITCH;
- };
- /^b$/ && do {
- my $on;
- my $off;
- if ($value) {
- $on = "checked";
- $off = "";
- } else {
- $on = "";
- $off = "checked";
- }
- print "<input type=radio name=$name value=1 $on>On\n";
- print "<input type=radio name=$name value=0 $off>Off\n";
- last SWITCH;
- };
- /^m$/ && do {
- my @choices = @{$i->{'choices'}};
- ## showing 5 options seems like a nice round number; this should
- ## probably be configurable; if you care, file a bug ;-)
- my $boxSize = scalar(@choices) < 5 ? scalar(@choices) : 5;
-
- print "<select multiple size=\"$boxSize\" name=\"$name\">\n";
-
- foreach my $item (@choices) {
- my $selected = "";
-
- if (lsearch($value, $item) >= 0) {
- $selected = "selected";
- }
+my $action = trim($cgi->param('action') || '');
+my $current_panel = $cgi->param('section') || 'core';
+$current_panel =~ /^([A-Za-z0-9_-]+)$/;
+$current_panel = $1;
+
+my $current_module;
+my @panels = ();
+foreach my $panel (@parampanels) {
+ next if ($panel eq 'Common');
+ my @module_param_list = "Bugzilla::Config::${panel}"->get_param_list();
+ my $item = { name => lc($panel),
+ current => ($current_panel eq lc($panel)) ? 1 : 0,
+ param_list => \@module_param_list,
+ sortkey => eval "\$Bugzilla::Config::${panel}::sortkey;"
+ };
+ push(@panels, $item);
+ $current_module = $panel if ($current_panel eq lc($panel));
+}
- print "<option $selected value=\"" . html_quote($item) . "\">" .
- html_quote($item) . "</option>\n";
- }
+$vars->{panels} = \@panels;
- print "</select>\n";
- last SWITCH;
- };
- /^s$/ && do {
- print "<select name=\"$name\">\n";
- my @choices = @{$i->{'choices'}};
+if ($action eq "save") {
+ my @changes = ();
+ my @module_param_list = "Bugzilla::Config::${current_module}"->get_param_list();
- foreach my $item (@choices) {
- my $selected = "";
+ foreach my $i (@module_param_list) {
+ my $name = $i->{'name'};
+ my $value = $cgi->param($name);
- if ($value eq $item) {
- $selected = "selected";
+ if (defined $cgi->param("reset-$name")) {
+ $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$//;
+ }
+ }
+
+ my $changed;
+ if ($i->{'type'} eq 'm') {
+ my @old = sort @{Param($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;
+ }
}
-
- print "<option $selected value=\"" . html_quote($item) . "\">" .
- html_quote($item) . "</option>\n";
-
}
- print "</select>\n";
- last SWITCH;
- };
- # DEFAULT
- print "<font color=red><blink>Unknown param type $i->{'type'}!!!</blink></font>\n";
+ } else {
+ $changed = ($value eq Param($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 });
+ }
+ }
+ push(@changes, $name);
+ SetParam($name, $value);
+ if (($name eq "shutdownhtml") && ($value ne "")) {
+ $vars->{'shutdown_is_active'} = 1;
+ }
+ }
}
- print "</td></tr>\n";
- print $rowbreak;
-}
-
-print "<tr><th align=right valign=top>version:</th><td>
-What version of Bugzilla this is. This can't be modified.
-<tr><td></td><td>" . $Bugzilla::Config::VERSION . "</td></tr>";
-
-print "</table>\n";
+ $vars->{'message'} = 'parameters_updated';
+ $vars->{'param_changed'} = \@changes;
-print "<input type=reset value=\"Reset form\"><br>\n";
-print "<input type=submit value=\"Submit changes\">\n";
-
-print "</form>\n";
+ WriteParams();
+ unlink "$datadir/versioncache";
+}
-print "<p><a href=query.cgi>Skip all this, and go back to the query page</a>\n";
-$template->put_footer();
+$template->process("admin/params/editparams.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());