diff options
Diffstat (limited to 'editsettings.cgi')
-rwxr-xr-x | editsettings.cgi | 107 |
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"}); |