summaryrefslogtreecommitdiffstats
path: root/editsettings.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'editsettings.cgi')
-rwxr-xr-xeditsettings.cgi107
1 files changed, 107 insertions, 0 deletions
diff --git a/editsettings.cgi b/editsettings.cgi
new file mode 100755
index 000000000..7ce05b2a2
--- /dev/null
+++ b/editsettings.cgi
@@ -0,0 +1,107 @@
+#!/usr/bin/perl -wT
+# -*- 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.
+#
+# Contributor(s): Shane H. W. Travis <travis@sedsystems.ca>
+#
+
+use strict;
+use lib qw(.);
+
+use Bugzilla;
+use Bugzilla::Constants;
+use Bugzilla::User::Setting;
+
+require "CGI.pl";
+
+# Use global template variables.
+use vars qw($template $vars);
+
+###############################
+### Subroutine Definitions ###
+###############################
+
+sub LoadSettings {
+
+ $vars->{'settings'} = Bugzilla::User::Setting::get_defaults();
+
+ my @setting_list = keys %{$vars->{'settings'}};
+ $vars->{'setting_names'} = \@setting_list;
+}
+
+sub SaveSettings{
+
+ my $cgi = Bugzilla->cgi;
+
+ $vars->{'settings'} = Bugzilla::User::Setting::get_defaults();
+ my @setting_list = keys %{$vars->{'settings'}};
+
+ foreach my $name (@setting_list) {
+ my $changed = 0;
+ my $old_enabled = $vars->{'settings'}->{$name}->{'is_enabled'};
+ my $old_value = $vars->{'settings'}->{$name}->{'default_value'};
+ my $enabled = defined $cgi->param("${name}-enabled") || 0;
+ my $value = $cgi->param("${name}");
+
+ # remove taint
+ if ($value =~ /^(\w+)$/ ) {
+ $value = $1;
+ }
+
+ if ( ($old_enabled != $enabled) ||
+ ($old_value ne $value) ) {
+ Bugzilla::User::Setting::set_default($name, $value, $enabled);
+ }
+ }
+}
+
+###################
+### Live code ###
+###################
+
+Bugzilla->login(LOGIN_REQUIRED);
+
+my $cgi = Bugzilla->cgi;
+print $cgi->header;
+
+UserInGroup("tweakparams")
+ || ThrowUserError("auth_failure", {group => "tweakparams",
+ action => "modify",
+ object => "settings"});
+
+my $action = trim($cgi->param('action') || 'load');
+
+if ($action eq 'update') {
+ SaveSettings();
+ $vars->{'changes_saved'} = 1;
+
+ $template->process("admin/settings/updated.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
+
+ exit;
+}
+
+if ($action eq 'load') {
+ LoadSettings();
+
+ $template->process("admin/settings/edit.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
+
+ exit;
+}
+
+#
+# No valid action found
+#
+ThrowUserError('no_valid_action', {'field' => "settings"});