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:
@@ -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 (?, ?, ?)});
|
||||
|
||||
80
mozilla/webtools/bugzilla/Bugzilla/User/Setting/Skin.pm
Normal file
80
mozilla/webtools/bugzilla/Bugzilla/User/Setting/Skin.pm
Normal 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
|
||||
Reference in New Issue
Block a user