[dw-free] cleaning up userpics code
[commit: http://hg.dwscoalition.org/dw-free/rev/ded9aadc4199]
http://bugs.dwscoalition.org/show_bug.cgi?id=513
Modernize/refactor userpics code. Use object methods rather than class
methods.
Patch by
kareila.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=513
Modernize/refactor userpics code. Use object methods rather than class
methods.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- cgi-bin/LJ/Console/Command/ExpungeUserpic.pm
- cgi-bin/LJ/User.pm
- cgi-bin/ljuserpics.pl
-------------------------------------------------------------------------------- diff -r 094089044eb8 -r ded9aadc4199 cgi-bin/LJ/Console/Command/ExpungeUserpic.pm --- a/cgi-bin/LJ/Console/Command/ExpungeUserpic.pm Tue Sep 07 16:41:24 2010 +0800 +++ b/cgi-bin/LJ/Console/Command/ExpungeUserpic.pm Tue Sep 07 16:47:28 2010 +0800 @@ -48,8 +48,7 @@ sub execute { return $self->error("Invalid userpic URL.") unless $u; - # the actual expunging happens in ljlib - my ($rval, @hookval) = LJ::expunge_userpic($u, $picid); + my ( $rval, @hookval ) = $u->expunge_userpic( $picid ); return $self->error("Error expunging userpic.") unless $rval; diff -r 094089044eb8 -r ded9aadc4199 cgi-bin/LJ/User.pm --- a/cgi-bin/LJ/User.pm Tue Sep 07 16:41:24 2010 +0800 +++ b/cgi-bin/LJ/User.pm Tue Sep 07 16:47:28 2010 +0800 @@ -6181,6 +6181,39 @@ sub clear_userpic_kw_map { $self->{picid_kw_map} = undef; } +# Expunges a userpic so that the system will no longer deliver this userpic. +# If your site has off-site caching or something similar, you can also define +# a hook "expunge_userpic" which will be called with a picid and userid when +# a pic is expunged. +sub expunge_userpic { + my ( $u, $picid ) = @_; + $picid += 0; + return undef unless $picid && LJ::isu( $u ); + + # get the pic information + my $state; + + my $dbcm = LJ::get_cluster_master( $u ); + return undef unless $dbcm && $u->writer; + + $state = $dbcm->selectrow_array( 'SELECT state FROM userpic2 WHERE userid = ? AND picid = ?', + undef, $u->userid, $picid ); + return undef unless $state; # invalid pic + return $u->userid if $state eq 'X'; # already expunged + + # else now mark it + $u->do( "UPDATE userpic2 SET state='X' WHERE userid = ? AND picid = ?", undef, $u->userid, $picid ); + return LJ::error( $dbcm ) if $dbcm->err; + $u->do( "DELETE FROM userpicmap2 WHERE userid = ? AND picid = ?", undef, $u->userid, $picid ); + + # now clear the user's memcache picture info + LJ::Userpic->delete_cache( $u ); + + # call the hook and get out of here + my @rval = LJ::Hooks::run_hooks( 'expunge_userpic', $picid, $u->userid ); + return ( $u->userid, map {$_->[0]} grep {$_ && @$_ && $_->[0]} @rval ); +} + sub get_userpic_count { my $u = shift or return undef; my $count = scalar LJ::Userpic->load_user_userpics($u); diff -r 094089044eb8 -r ded9aadc4199 cgi-bin/ljuserpics.pl --- a/cgi-bin/ljuserpics.pl Tue Sep 07 16:41:24 2010 +0800 +++ b/cgi-bin/ljuserpics.pl Tue Sep 07 16:47:28 2010 +0800 @@ -106,67 +106,6 @@ sub load_userpics { LJ::MemCache::set([$id,"userpic.$id"], LJ::MemCache::hash_to_array("userpic", $ur)); } } -} - -# <LJFUNC> -# name: LJ::expunge_userpic -# des: Expunges a userpic so that the system will no longer deliver this userpic. If -# your site has off-site caching or something similar, you can also define a hook -# "expunge_userpic" which will be called with a picid and userid when a pic is -# expunged. -# args: u, picid -# des-picid: ID of the picture to expunge. -# des-u: User object -# returns: undef on error, or the userid of the picture owner on success. -# </LJFUNC> -sub expunge_userpic { - # take in a picid and expunge it from the system so that it can no longer be used - my ($u, $picid) = @_; - $picid += 0; - return undef unless $picid && ref $u; - - # get the pic information - my $state; - - my $dbcm = LJ::get_cluster_master( $u ); - return undef unless $dbcm && $u->writer; - - $state = $dbcm->selectrow_array( 'SELECT state FROM userpic2 WHERE userid = ? AND picid = ?', - undef, $u->userid, $picid ); - return undef unless $state; # invalid pic - return $u->userid if $state eq 'X'; # already expunged - - # else now mark it - $u->do( "UPDATE userpic2 SET state='X' WHERE userid = ? AND picid = ?", undef, $u->userid, $picid ); - return LJ::error( $dbcm ) if $dbcm->err; - $u->do( "DELETE FROM userpicmap2 WHERE userid = ? AND picid = ?", undef, $u->userid, $picid ); - - # now clear the user's memcache picture info - LJ::Userpic->delete_cache( $u ); - - # call the hook and get out of here - my @rval = LJ::Hooks::run_hooks( 'expunge_userpic', $picid, $u->userid ); - return ( $u->userid, map {$_->[0]} grep {$_ && @$_ && $_->[0]} @rval ); -} - -# <LJFUNC> -# name: LJ::activate_userpics -# des: des: Wrapper around [func[LJ::User::activate_userpics]] for compatibility. -# args: uuserid -# returns: undef on failure 1 on success -# </LJFUNC> -sub activate_userpics -{ - my $u = shift; - return undef unless LJ::isu($u); - - # if a userid was given, get a real $u object - $u = LJ::load_userid($u, "force") unless isu($u); - - # should have a $u object now - return undef unless isu($u); - - return $u->activate_userpics; } # <LJFUNC> --------------------------------------------------------------------------------