Update of /cvs/scoop/scoop/lib/Scoop/Admin
In directory sodium.sabren.com:/tmp/cvs-serv9158/lib/Scoop/Admin
Modified Files:
EditUser.pm
Log Message:
A few more bugfixes to userprefs stuff. Caching issues, validation tweaks,
and fixing a bug with pref reset. See the SBM, bugs 118, 119, 120, and 121.
--janra
Index: EditUser.pm
===================================================================
RCS file: /cvs/scoop/scoop/lib/Scoop/Admin/EditUser.pm,v
retrieving revision 1.135
retrieving revision 1.136
diff -C2 -d -r1.135 -r1.136
*** EditUser.pm 4 Aug 2004 21:49:48 -0000 1.135
--- EditUser.pm 27 Aug 2004 22:32:52 -0000 1.136
***************
*** 195,211 ****
pref()
! This is a nice convenient method for getting and setting preferences
! for the logged in user. It's intended for use from within boxes and
! other places where you don't want the hastle of having to address
! the prefs table directly. It can be used one of three ways:
!
! $S->pref({pref1 => 'value1', pref2 => 'value2'}); # Sets multiple prefs
!
! $S->pref('pref1','value1'); # Sets a single preference value
my $value = $S->pref('pref1'); # Returns the value for the named preference
- It is hoped that this method will become the standard for accessing preferences
-
=cut
--- 195,204 ----
pref()
! This is a nice convenient method for getting preferences for the logged in
! user. You should use this instead of accessing the userprefs table directly
! because it uses cached values - both more convenient and faster.
my $value = $S->pref('pref1'); # Returns the value for the named preference
=cut
***************
*** 213,289 ****
my $S = shift;
my $key = shift;
- my $value = shift;
- my ($rv, $sth);
return unless defined $key;
! if( ref($key) eq 'HASH') { # Set a bunch of prefs
! my $quid = $S->dbh->quote($S->{UID});
! for (keys %{$key}) {
! if ( exists $S->{prefs}->{$_} ) {
! my $qkey = $S->dbh->quote($_);
! my $qvalue = $S->dbh->quote($key->{$_});
!
! ($rv, $sth) = $S->db_update({
! WHAT => 'userprefs',
! SET => qq| prefvalue = $qvalue |,
! WHERE => qq|uid = $quid AND prefname = $qkey |
! });
! } else {
! my $qkey = $S->dbh->quote($_);
! my $qvalue = $S->dbh->quote($key->{$_});
!
! ($rv, $sth) = $S->db_insert({
! INTO => 'userprefs',
! COLS => 'uid, prefname, prefvalue',
! VALUES => qq| $quid, $qkey, $qvalue |
! });
!
! }
!
! # Don't forget to update the cache and stuff
! $S->{prefs}->{$_} = $key->{$_};
! $S->{USER_DATA_CACHE}->{ $S->{UID} }->{prefs}->{$_} = $key->{$_};
!
! unless( $rv ) {
! return $S->dbh->errstr();
! }
! }
!
! } elsif (defined $value) { # Set only one pref
! if (defined $S->{prefs}->{$key}) {
! my $qkey = $S->dbh->quote($key);
! my $qvalue = $S->dbh->quote($value);
!
! ($rv, $sth) = $S->db_update({
! DEBUG => 0,
! WHAT => 'userprefs',
! SET => qq| prefvalue = $qvalue |,
! WHERE => qq|uid = $S->{UID} AND prefname = $qkey |
! });
!
! } else {
! my $qkey = $S->dbh->quote($key);
! my $qvalue = $S->dbh->quote($value);
!
! ($rv, $sth) = $S->db_insert({
! DEBUG => 0,
! INTO => 'userprefs',
! COLS => 'uid, prefname, prefvalue',
! VALUES => qq| $S->{UID}, $qkey, $qvalue |
! });
! }
!
! # Don't forget to update the cache and stuff
! $S->{prefs}->{$key} = $value;
! $S->{USER_DATA_CACHE}->{ $S->{UID} }->{prefs}->{$key} = $value;
!
! unless ($rv) {
! warn "errstr is ", $S->dbh->errstr(), "\n";
! return $S->dbh->errstr();
! }
! } else {
! return defined($S->{prefs}->{$key}) ? $S->{prefs}->{$key} : $S->{PREF_ITEMS}->{$key}->{default_value};
! }
return;
--- 206,215 ----
my $S = shift;
my $key = shift;
return unless defined $key;
+ $S->_set_prefs() unless $S->{prefs}; # you can force a reload of prefs by deleting $S->{prefs}
+ # very useful when you're changing prefs as part of a request
! return defined($S->{prefs}->{$key}) ? $S->{prefs}->{$key} : $S->{PREF_ITEMS}->{$key}->{default_value};
return;