Bug 322693: Create a mechanism to manage multiple custom skins.

Patch by Marc Schumann <wurblzap@gmail.com>;
r=myk,mkanat; a=myk


git-svn-id: svn://10.0.0.236/trunk@209287 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
wurblzap%gmail.com
2006-09-06 20:45:30 +00:00
parent a3d8bb7cdc
commit 95895ee8a9
10 changed files with 201 additions and 26 deletions

View File

@@ -14,6 +14,7 @@
#
# Contributor(s): Shane H. W. Travis <travis@sedsystems.ca>
# Max Kanat-Alexander <mkanat@bugzilla.org>
# Marc Schumann <wurblzap@gmail.com>
#
@@ -39,10 +40,10 @@ sub new {
my $user_id = shift;
my $class = ref($invocant) || $invocant;
my $subclass = '';
# Create a ref to an empty hash and bless it
my $self = {};
bless($self, $class);
my $dbh = Bugzilla->dbh;
@@ -60,9 +61,10 @@ sub new {
# to retrieve the information for this setting ourselves.
if (scalar @_ == 0) {
my ($default, $is_enabled, $value) =
my ($default, $is_enabled, $value);
($default, $is_enabled, $value, $subclass) =
$dbh->selectrow_array(
q{SELECT default_value, is_enabled, setting_value
q{SELECT default_value, is_enabled, setting_value, subclass
FROM setting
LEFT JOIN profile_setting
ON setting.name = profile_setting.setting_name
@@ -73,9 +75,9 @@ sub new {
# if not defined, then grab the default value
if (! defined $value) {
($default, $is_enabled) =
($default, $is_enabled, $subclass) =
$dbh->selectrow_array(
q{SELECT default_value, is_enabled
q{SELECT default_value, is_enabled, subclass
FROM setting
WHERE name = ?},
undef,
@@ -96,12 +98,23 @@ sub new {
}
}
else {
# If the values were passed in, simply assign them and return.
$self->{'is_enabled'} = shift;
$self->{'default_value'} = shift;
$self->{'value'} = shift;
$self->{'is_default'} = shift;
($subclass) = $dbh->selectrow_array(
q{SELECT subclass FROM setting WHERE name = ?},
undef,
$setting_name);
# If the values were passed in, simply assign them and return.
$self->{'is_enabled'} = shift;
$self->{'default_value'} = shift;
$self->{'value'} = shift;
$self->{'is_default'} = shift;
}
if ($subclass) {
eval('require ' . $class . '::' . $subclass);
$@ && ThrowCodeError('setting_subclass_invalid',
{'subclass' => $subclass});
$class = $class . '::' . $subclass;
}
bless($self, $class);
$self->{'_setting_name'} = $setting_name;
$self->{'_user_id'} = $user_id;
@@ -114,18 +127,18 @@ sub new {
###############################
sub add_setting {
my ($name, $values, $default_value) = @_;
my ($name, $values, $default_value, $subclass) = @_;
my $dbh = Bugzilla->dbh;
return if _setting_exists($name);
($name && $values && $default_value)
($name && $default_value)
|| ThrowCodeError("setting_info_invalid");
print "Adding a new user setting called '$name'\n";
$dbh->do(q{INSERT INTO setting (name, default_value, is_enabled)
VALUES (?, ?, 1)},
undef, ($name, $default_value));
$dbh->do(q{INSERT INTO setting (name, default_value, is_enabled, subclass)
VALUES (?, ?, 1, ?)},
undef, ($name, $default_value, $subclass));
my $sth = $dbh->prepare(q{INSERT INTO setting_value (name, value, sortindex)
VALUES (?, ?, ?)});

View File

@@ -0,0 +1,80 @@
# -*- 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): Marc Schumann <wurblzap@gmail.com>
#
package Bugzilla::User::Setting::Skin;
use strict;
use base qw(Bugzilla::User::Setting);
use Bugzilla::Constants;
use File::Spec::Functions;
use File::Basename;
use constant BUILTIN_SKIN_NAMES => ['standard'];
sub legal_values {
my ($self) = @_;
return $self->{'legal_values'} if defined $self->{'legal_values'};
my $dirbase = bz_locations()->{'skinsdir'};
# Avoid modification of the list BUILTIN_SKIN_NAMES points to by copying the
# list over instead of simply writing $legal_values = BUILTIN_SKIN_NAMES.
my @legal_values = @{(BUILTIN_SKIN_NAMES)};
foreach my $direntry (glob(catdir($dirbase, '*'))) {
if (-d $direntry) {
# Stylesheet set
push(@legal_values, basename($direntry));
}
elsif ($direntry =~ /\.css$/) {
# Single-file stylesheet
push(@legal_values, basename($direntry));
}
}
return $self->{'legal_values'} = \@legal_values;
}
1;
__END__
=head1 NAME
Bugzilla::User::Setting::Skin - Object for a user preference setting for skins
=head1 SYNOPSIS
=head1 DESCRIPTION
Skin.pm extends Bugzilla::User::Setting and implements a class specialized for
skins settings.
=head1 METHODS
=over
=item C<legal_values()>
Description: Returns all legal skins
Params: none
Returns: A reference to an array containing the names of all legal skins
=back