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;