#!/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 # use strict; use lib qw(.); use Bugzilla; use Bugzilla::Constants; use Bugzilla::User; 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"});