Update of /cvs/scoop/scoop/lib/Scoop/Users
In directory sodium.sabren.com:/tmp/cvs-serv9158/lib/Scoop/Users

Modified Files:
	Prefs.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: Prefs.pm
===================================================================
RCS file: /cvs/scoop/scoop/lib/Scoop/Users/Prefs.pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Prefs.pm	17 Aug 2004 19:03:41 -0000	1.2
--- Prefs.pm	27 Aug 2004 22:32:52 -0000	1.3
***************
*** 88,94 ****
  
  	if ($reset) {
! 		$write = '1';
! 		%params = $S->_reset_user_prefs($page, $uid);
! 		$message .= "$page preferences reset to defaults";
  	}
  	$message .= $S->_save_user_prefs($page, $uid, $nick) if ($write); 
--- 88,93 ----
  
  	if ($reset) {
! 		$S->_reset_user_prefs($page, $uid);
! 		$message .= "$page preferences reset to defaults<BR>";
  	}
  	$message .= $S->_save_user_prefs($page, $uid, $nick) if ($write); 
***************
*** 176,180 ****
  
  			$preftemplate = $S->interpolate($preftemplate,$keys);
! 			$preftemplate =~ s/%%value%%/$prefvalue/;
  	
  			$item_list .= $preftemplate;
--- 175,179 ----
  
  			$preftemplate = $S->interpolate($preftemplate,$keys);
! 			$preftemplate =~ s/%%value%%/$prefvalue/g;
  	
  			$item_list .= $preftemplate;
***************
*** 306,311 ****
  		} 
  
- 		# now force prefs to refresh from the db
- 		delete($S->{USER_DATA_CACHE}->{$uid});
  	}
  
--- 305,308 ----
***************
*** 346,350 ****
  
  	# skip unchanged params
! 	next if $user->{prefs}->{$pref} eq $value;
  	# check length then regexp
  	if ( $pref_item->{length} ) {
--- 343,347 ----
  
  	# skip unchanged params
! 	return if $user->{prefs}->{$pref} eq $value;
  	# check length then regexp
  	if ( $pref_item->{length} ) {
***************
*** 355,361 ****
  	if ( $pref_item->{regex} && $value ) {
  		warn "testing $value against regex $pref_item->{regex}" if $DEBUG;
! 		unless ( $value =~ /$pref_item->{regex}/ ) {
! 			return "<P>%%error_font%%$pref_item->{title} ($value) does not validate%%error_font_end%%</P>";
! 		}
  	}
  
--- 352,368 ----
  	if ( $pref_item->{regex} && $value ) {
  		warn "testing $value against regex $pref_item->{regex}" if $DEBUG;
! 
!                 if ($pref_item->{regex} =~ /^BOX,(.*)$/) {
!                         my @args = split /,/, $1;
!                         my $box = shift @args;
!                         if (my $err = $S->box_magic($box,$pref_item,$value, at args)) {
!                                 # If we get a return value at all, it's an error
!                                 return $err;
!                         }
!                 } else {
!                         unless ( $value =~ /$pref_item->{regex}/ ) {
!                                 return "<P>%%error_font%%$pref_item->{title} ($value) does not validate%%error_font_end%%</P>";
!                         }
!                 }
  	}
  
***************
*** 395,398 ****
--- 402,410 ----
  		$S->run_hook('pref_change', $uid, $pref, $value);
  		$sth->finish;
+ 		# now force prefs to refresh from the db
+ 		delete $S->{USER_DATA_CACHE}->{$uid};
+ 		if ( $uid == $S->{UID} ) {
+ 			delete $S->{prefs};
+ 		}
  		return "Saved $pref_item->{title}<BR>";
  	} else {
***************
*** 407,411 ****
  
  Resets all the user prefs which should appear on the given page to the defaults
! specified in the prefs admin tool
  
  =cut
--- 419,424 ----
  
  Resets all the user prefs which should appear on the given page to the defaults
! specified in the prefs admin tool by deleting them from the database and the
! user data cache
  
  =cut
***************
*** 415,426 ****
  	my $page = shift;
  	my $uid = shift;
! 	my %params;
  
! 	my @preflist = $S->_pref_list($page,$uid);
  
  	foreach my $pref (@preflist) {
! 		$params{$pref} = $S->{PREF_ITEMS}->{$pref}->{default_value};
  	}
! 	return %params;
  }
  
--- 428,452 ----
  	my $page = shift;
  	my $uid = shift;
! 	my $user = $S->user_data($uid);
! 	my $q_uid = $S->dbh->quote($uid);
  
! 	my @preflist = $S->_pref_list($page,$user);
! 	my @sqlpreflist;
  
  	foreach my $pref (@preflist) {
! 		delete $S->{USER_DATA_CACHE}->{$uid}->{prefs}->{$pref};
! 		push @sqlpreflist, $S->dbh->quote($pref);
! 		if ($uid == $S->{UID}) {
! 			delete $S->{prefs}->{$pref};
! 		}
  	}
! 
! 	my ($rv,$sth) = $S->db_delete({
! 		DEBUG => $DEBUG,
! 		FROM => 'userprefs',
! 		WHERE => qq|uid=$q_uid AND prefname IN (| . join(',', @sqlpreflist) . ')'
! 	});
! 
! 	return;
  }