From dfbc39b00d9dc7f38fa01de7b73569e4dacf1c91 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Wed, 4 May 2005 03:42:48 +0000 Subject: Bug 286357: user preference settings only works if all users sets non-default values for all settings - Patch by Albert Ting r=mkanat a=justdave --- Bugzilla/User/Setting.pm | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'Bugzilla/User') diff --git a/Bugzilla/User/Setting.pm b/Bugzilla/User/Setting.pm index 2319b8a55..a5527e703 100644 --- a/Bugzilla/User/Setting.pm +++ b/Bugzilla/User/Setting.pm @@ -66,11 +66,21 @@ sub new { LEFT JOIN profile_setting ON setting.name = profile_setting.setting_name WHERE name = ? - AND (profile_setting.user_id = ? - OR profile_setting.user_id IS NULL)}, + AND profile_setting.user_id = ?}, undef, $setting_name, $user_id); + # if not defined, then grab the default value + if (! defined $value) { + ($default, $is_enabled) = + $dbh->selectrow_array( + q{SELECT default_value, is_enabled + FROM setting + WHERE name = ?}, + undef, + $setting_name); + } + $self->{'is_enabled'} = $is_enabled; $self->{'default_value'} = $default; @@ -127,7 +137,7 @@ sub add_setting { sub get_all_settings { my ($user_id) = @_; - my $settings = {}; + my $settings = get_defaults($user_id); # first get the defaults my $dbh = Bugzilla->dbh; my $sth = $dbh->prepare( @@ -136,7 +146,6 @@ sub get_all_settings { LEFT JOIN profile_setting ON setting.name = profile_setting.setting_name WHERE profile_setting.user_id = ? - OR profile_setting.user_id IS NULL ORDER BY name}); $sth->execute($user_id); @@ -161,9 +170,12 @@ sub get_all_settings { } sub get_defaults { + my ($user_id) = @_; my $dbh = Bugzilla->dbh; my $default_settings = {}; + $user_id ||= 0; + my $sth = $dbh->prepare(q{SELECT name, default_value, is_enabled FROM setting ORDER BY name}); @@ -171,7 +183,7 @@ sub get_defaults { while (my ($name, $default_value, $is_enabled) = $sth->fetchrow_array()) { $default_settings->{$name} = new Bugzilla::User::Setting( - $name, 0, $is_enabled, $default_value, $default_value, 1); + $name, $user_id, $is_enabled, $default_value, $default_value, 1); } return $default_settings; @@ -297,12 +309,14 @@ Description: Provides the user's choices for each setting in the Params: C<$user_id> - integer - the user id. Returns: a pointer to a hash of settings -=item C +=item C Description: When a user is not logged in, they must use the site defaults for every settings; this subroutine provides them. -Params: none -Returns: A pointer to a hash of settings +Params: C<$user_id> (optional) - integer - the user id. Note that + this optional parameter is mainly for internal use only. +Returns: A pointer to a hash of settings. If $user_id was passed, set + the user_id value for each setting. =item C -- cgit v1.2.3-24-g4f1b