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;
}