afuna: Cat under a blanket. Text: "Cats are just little people with Fur and Fangs" (Default)
afuna ([personal profile] afuna) wrote in [site community profile] changelog2009-08-09 01:41 pm

[dw-free] clean up cgi-bin/LJ/User.pm

[commit: http://hg.dwscoalition.org/dw-free/rev/cc7c0dce5b7d]

http://bugs.dwscoalition.org/show_bug.cgi?id=1354

Use access methods; don't access the underlying hash directly.

Patch by [personal profile] kareila.

Files modified:
  • cgi-bin/LJ/User.pm
--------------------------------------------------------------------------------
diff -r b99984c3822b -r cc7c0dce5b7d cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Sun Aug 09 13:32:23 2009 +0000
+++ b/cgi-bin/LJ/User.pm	Sun Aug 09 13:40:47 2009 +0000
@@ -381,7 +381,7 @@ sub get_previous_statusvis {
     
     my $extra = $u->selectcol_arrayref(
         "SELECT extra FROM userlog WHERE userid=? AND action='accountstatus' ORDER BY logtime DESC",
-        undef, $u->{userid});
+        undef, $u->userid );
     my @statusvis;
     foreach my $e (@$extra) {
         my %fields;
@@ -404,7 +404,9 @@ sub is_expunged {
 
 sub is_inactive {
     my $u = shift;
-    return $u->statusvis eq 'D' || $u->statusvis eq 'X' || $u->statusvis eq 'S';
+    my $statusvis = $u->statusvis;
+    # true if deleted, expunged or suspended
+    return $statusvis eq 'D' || $statusvis eq 'X' || $statusvis eq 'S';
 }
 
 sub is_locked {
@@ -579,7 +581,7 @@ sub statusvisdate {
 
 sub statusvisdate_unix {
     my $u = shift;
-    return LJ::mysqldate_to_time($u->{statusvisdate});
+    return LJ::mysqldate_to_time( $u->statusvisdate );
 }
 
 
@@ -626,15 +628,13 @@ sub info_for_js {
 
 
 sub is_community {
-    my $u = shift;
-    return $u->{journaltype} eq "C";
+    return $_[0]->{journaltype} eq "C";
 }
 *is_comm = \&is_community;
 
 
 sub is_identity {
-    my $u = shift;
-    return $u->{journaltype} eq "I";
+    return $_[0]->{journaltype} eq "I";
 }
 
 
@@ -666,27 +666,23 @@ sub is_perm {
 
 
 sub is_person {
-    my $u = shift;
-    return $u->{journaltype} eq "P";
+    return $_[0]->{journaltype} eq "P";
 }
 *is_personal = \&is_person;
 
 
 sub is_redirect {
-    my $u = shift;
-    return $u->{journaltype} eq "R";
+    return $_[0]->{journaltype} eq "R";
 }
 
 
 sub is_syndicated {
-    my $u = shift;
-    return $u->{journaltype} eq "Y";
+    return $_[0]->{journaltype} eq "Y";
 }
 
 
 sub journaltype {
-    my $u = shift;
-    return $u->{journaltype};
+    return $_[0]->{journaltype};
 }
 
 
@@ -700,7 +696,7 @@ sub journaltype_readable {
         P => 'personal',
         Y => 'syndicated',
         C => 'community',
-    }->{$u->{journaltype}};
+    }->{$u->journaltype};
 }
 
 
@@ -843,7 +839,7 @@ sub get_renamed_user {
 
     # Traverse the renames to the final journal
     if ($u) {
-        while ($u->{'journaltype'} eq 'R' && $hops-- > 0) {
+        while ( $u->is_redirect && $hops-- > 0 ) {
             my $rt = $u->prop("renamedto");
             last unless length $rt;
             $u = LJ::load_user($rt);
@@ -859,14 +855,14 @@ sub get_renamed_user {
 #       memcache
 sub get_timeactive {
     my ($u) = @_;
-    my $memkey = [$u->{userid}, "timeactive:$u->{userid}"];
+    my $memkey = [$u->userid, "timeactive:" . $u->userid];
     my $active;
     unless (defined($active = LJ::MemCache::get($memkey))) {
         # TODO: die if unable to get handle? This was left verbatim from
         # refactored code.
         my $dbcr = LJ::get_cluster_def_reader($u) or return 0;
         $active = $dbcr->selectrow_array("SELECT timeactive FROM clustertrack2 ".
-                                         "WHERE userid=?", undef, $u->{userid});
+                                         "WHERE userid=?", undef, $u->userid);
         LJ::MemCache::set($memkey, $active, 86400);
     }
     return $active;
@@ -881,7 +877,7 @@ sub kill_all_sessions {
         or return 0;
 
     # forget this user, if we knew they were logged in
-    if ($LJ::CACHE_REMOTE && $LJ::CACHE_REMOTE->{userid} == $u->{userid}) {
+    if ($LJ::CACHE_REMOTE && $LJ::CACHE_REMOTE->userid == $u->userid) {
         LJ::Session->clear_master_cookie;
         LJ::User->set_remote(undef);
     }
@@ -899,7 +895,7 @@ sub kill_session {
 
     $sess->destroy;
 
-    if ($LJ::CACHE_REMOTE && $LJ::CACHE_REMOTE->{userid} == $u->{userid}) {
+    if ($LJ::CACHE_REMOTE && $LJ::CACHE_REMOTE->userid == $u->userid) {
         LJ::Session->clear_master_cookie;
         LJ::User->set_remote(undef);
     }
@@ -935,7 +931,7 @@ sub make_login_session {
     $exptype ||= 'short';
     return 0 unless $u;
 
-    eval { BML::get_request()->notes->{ljuser} = $u->{user}; };
+    eval { BML::get_request()->notes->{ljuser} = $u->user; };
 
     # create session and log user in
     my $sess_opts = {
@@ -1011,7 +1007,7 @@ sub note_activity {
     return undef unless LJ::is_enabled('active_user_tracking');
 
     my $now    = time();
-    my $uid    = $u->{userid}; # yep, lazy typist w/ rsi
+    my $uid    = $u->userid;   # yep, lazy typist w/ rsi
     my $explen = 1800;         # 30 min, same for all types now
 
     my $memkey = [ $uid, "uactive:$atype:$uid" ];
@@ -1051,14 +1047,14 @@ sub record_login {
 
     my $too_old = time() - 86400 * 30;
     $u->do("DELETE FROM loginlog WHERE userid=? AND logintime < ?",
-           undef, $u->{userid}, $too_old);
+           undef, $u->userid, $too_old);
 
     my $r  = DW::Request->get;
     my $ip = LJ::get_remote_ip();
     my $ua = $r->header_in('User-Agent');
 
     return $u->do("INSERT INTO loginlog SET userid=?, sessid=?, logintime=UNIX_TIMESTAMP(), ".
-                  "ip=?, ua=?", undef, $u->{userid}, $sessid, $ip, $ua);
+                  "ip=?, ua=?", undef, $u->userid, $sessid, $ip, $ua);
 }
 
 
@@ -1117,7 +1113,7 @@ sub cache {
 sub cache {
     my ($u, $key) = @_;
     my $val = $u->selectrow_array("SELECT value FROM userblobcache WHERE userid=? AND bckey=?",
-                                  undef, $u->{userid}, $key);
+                                  undef, $u->userid, $key);
     return undef unless defined $val;
     if (my $thaw = eval { Storable::thaw($val); }) {
         return $thaw;
@@ -1132,7 +1128,7 @@ sub cmd_buffer_add {
 sub cmd_buffer_add {
     my ($u, $cmd, $args) = @_;
     $args ||= {};
-    return LJ::cmd_buffer_add($u->{clusterid}, $u->{userid}, $cmd, $args);
+    return LJ::cmd_buffer_add( $u->clusterid, $u->userid, $cmd, $args );
 }
 
 
@@ -1153,10 +1149,9 @@ sub commit {
 
 # $u->do("UPDATE foo SET key=?", undef, $val);
 sub do {
-    my $u = shift;
-    my $query = shift;
-
-    my $uid = $u->{userid}+0
+    my ( $u, $query ) = @_;
+
+    my $uid = $u->userid + 0
         or croak "Database update called on null user object";
 
     my $dbcm = $u->{'_dbcm'} ||= LJ::get_cluster_master($u)
@@ -1195,17 +1190,18 @@ sub errstr {
 
 sub is_innodb {
     my $u = shift;
-    return $LJ::CACHE_CLUSTER_IS_INNO{$u->{clusterid}}
-    if defined $LJ::CACHE_CLUSTER_IS_INNO{$u->{clusterid}};
+    my $cluid = $u->clusterid;
+    return $LJ::CACHE_CLUSTER_IS_INNO{$cluid}
+        if defined $LJ::CACHE_CLUSTER_IS_INNO{$cluid};
 
     my $dbcm = $u->{'_dbcm'} ||= LJ::get_cluster_master($u)
         or croak $u->nodb_err;
     my (undef, $ctable) = $dbcm->selectrow_array("SHOW CREATE TABLE log2");
-    die "Failed to auto-discover database type for cluster \#$u->{clusterid}: [$ctable]"
+    die "Failed to auto-discover database type for cluster \#$cluid: [$ctable]"
         unless $ctable =~ /^CREATE TABLE/;
 
     my $is_inno = ($ctable =~ /=InnoDB/i ? 1 : 0);
-    return $LJ::CACHE_CLUSTER_IS_INNO{$u->{clusterid}} = $is_inno;
+    return $LJ::CACHE_CLUSTER_IS_INNO{$cluid} = $is_inno;
 }
 
 
@@ -1226,7 +1222,7 @@ sub log2_do {
 
     my $dbcm = $u->{_dbcm};
 
-    my $memkey = [$u->{'userid'}, "log2lt:$u->{'userid'}"];
+    my $memkey = [$u->userid, "log2lt:" . $u->userid];
     my $lockkey = $memkey->[1];
 
     $dbcm->selectrow_array("SELECT GET_LOCK(?,10)", undef, $lockkey);
@@ -1242,21 +1238,21 @@ sub log2_do {
 # simple function for getting something from memcache; this assumes that the
 # item being gotten follows the standard format [ $userid, "item:$userid" ]
 sub memc_get {
-    return LJ::MemCache::get( [$_[0]->{userid}, "$_[1]:$_[0]->{userid}"] );
+    return LJ::MemCache::get( [$_[0]->userid, "$_[1]:" . $_[0]->userid] );
 }
 
 
 # sets a predictably named item. usage:
 #   $u->memc_set( key => 'value', [ $timeout ] );
 sub memc_set {
-    return LJ::MemCache::set( [$_[0]->{userid}, "$_[1]:$_[0]->{userid}"], $_[2], $_[3] || 1800 );
+    return LJ::MemCache::set( [$_[0]->userid, "$_[1]:" . $_[0]->userid], $_[2], $_[3] || 1800 );
 }
 
 
 # deletes a predictably named item. usage:
 #   $u->memc_delete( key );
 sub memc_delete {
-    return LJ::MemCache::delete( [$_[0]->{userid}, "$_[1]:$_[0]->{userid}"] );
+    return LJ::MemCache::delete( [$_[0]->userid, "$_[1]:" . $_[0]->userid] );
 }
 
 
@@ -1440,9 +1436,9 @@ sub selectrow_hashref {
 # else returns 1.
 sub selfassert {
     my $u = shift;
-    LJ::assert_is($u->{userid}, $u->{_orig_userid})
+    LJ::assert_is( $u->userid, $u->{_orig_userid} )
         if $u->{_orig_userid};
-    LJ::assert_is($u->{user}, $u->{_orig_user})
+    LJ::assert_is( $u->user, $u->{_orig_user} )
         if $u->{_orig_user};
     return 1;
 }
@@ -1455,7 +1451,7 @@ sub set_cache {
     $expr += $now if $expr < 315532800;  # relative to absolute time
     $value = Storable::nfreeze($value) if ref $value;
     $u->do("REPLACE INTO userblobcache (userid, bckey, value, timeexpire) VALUES (?,?,?,?)",
-           undef, $u->{userid}, $key, $value, $expr);
+           undef, $u->userid, $key, $value, $expr);
 }
 
 
@@ -1515,8 +1511,9 @@ sub talk2_do {
     return undef unless $u->writer;
 
     my $dbcm = $u->{_dbcm};
-
-    my $memkey = [$u->{'userid'}, "talk2:$u->{'userid'}:$nodetype:$nodeid"];
+    my $userid = $u->userid;
+
+    my $memkey = [$userid, "talk2:$userid:$nodetype:$nodeid"];
     my $lockkey = $memkey->[1];
 
     $dbcm->selectrow_array("SELECT GET_LOCK(?,10)", undef, $lockkey);
@@ -1561,7 +1558,8 @@ sub uncache_prop {
 sub uncache_prop {
     my ($u, $name) = @_;
     my $prop = LJ::get_prop("user", $name) or die; # FIXME: use exceptions
-    LJ::MemCache::delete([$u->{userid}, "uprop:$u->{userid}:$prop->{id}"]);
+    my $userid = $u->userid;
+    LJ::MemCache::delete( [$userid, "uprop:$userid:$prop->{id}"] );
     delete $u->{$name};
     return 1;
 }
@@ -2028,8 +2026,8 @@ sub profile_url {
     my ($u, %opts) = @_;
 
     my $url;
-    if ($u->{journaltype} eq "I") {
-        $url = "$LJ::SITEROOT/userinfo?userid=$u->{'userid'}&t=I";
+    if ( $u->is_identity ) {
+        $url = "$LJ::SITEROOT/userinfo?userid=" . $u->userid . "&t=I";
         $url .= "&mode=full" if $opts{full};
     } else {
         $url = $u->journal_base . "/profile";
@@ -2106,7 +2104,7 @@ sub share_contactinfo {
 sub share_contactinfo {
     my ($u, $remote) = @_;
 
-    return 0 if $u->{journaltype} eq "Y";
+    return 0 if $u->is_syndicated;
     return 0 if $u->opt_showcontact eq 'N';
     return 0 if $u->opt_showcontact eq 'R' && !$remote;
     return 0 if $u->opt_showcontact eq 'F' && !$u->trusts( $remote );
@@ -2263,10 +2261,9 @@ sub id {
 
 
 sub ljuser_display {
-    my $u = shift;
-    my $opts = shift;
-
-    return LJ::ljuser($u, $opts) unless $u->{'journaltype'} eq "I";
+    my ( $u, $opts ) = @_;
+
+    return LJ::ljuser( $u, $opts ) unless $u->is_identity;
 
     my $id = $u->identity;
     return "<b>????</b>" unless $id;
@@ -2307,9 +2304,13 @@ sub ljuser_display {
             $imgurl = $site->icon_url;
         }
 
-        my $profile = $profile_url ne '' ? $profile_url : "$LJ::SITEROOT/userinfo?userid=$u->{userid}&amp;t=I$andfull";
-
-        return "<span $display_class lj:user='$name' style='white-space: nowrap;$strike'><a href='$profile'><img src='$imgurl' alt='[info - $type] ' width='$width' height='$height' style='vertical-align: bottom; border: 0; padding-right: 1px;' /></a><a href='$url' rel='nofollow'><b>$name</b></a></span>";
+        my $profile = $profile_url ne '' ? $profile_url :
+            "$LJ::SITEROOT/userinfo?userid=" . $u->userid . "&amp;t=I$andfull";
+  
+        return "<span $display_class lj:user='$name' style='white-space: nowrap;$strike'><a href='$profile'>" .
+            "<img src='$imgurl' alt='[info - $type] ' width='$width' height='$height'" .
+            " style='vertical-align: bottom; border: 0; padding-right: 1px;' /></a>" .
+            "<a href='$url' rel='nofollow'><b>$name</b></a></span>";
 
     } else {
         return "<b>????</b>";
@@ -2345,8 +2346,8 @@ sub new_from_row {
     my $u = bless $row, $class;
 
     # for selfassert method below:
-    $u->{_orig_userid} = $u->{userid};
-    $u->{_orig_user}   = $u->{user};
+    $u->{_orig_userid} = $u->userid;
+    $u->{_orig_user}   = $u->user;
 
     return $u;
 }
@@ -2382,7 +2383,7 @@ sub url {
 
     my $url;
 
-    if ( $u->{journaltype} eq 'I' && ! $u->prop( 'url' ) ) {
+    if ( $u->is_identity && ! $u->prop( 'url' ) ) {
         my $id = $u->identity;
         if ($id && $id->typeid eq 'O') {
             $url = $id->value;
@@ -2403,8 +2404,7 @@ sub url {
 # returns username
 *username = \&user;
 sub user {
-    my $u = shift;
-    return $u->{user};
+    return $_[0]->{user};
 }
 
 
@@ -2457,11 +2457,11 @@ sub dudata_set {
     if ($bytes) {
         $u->do("REPLACE INTO dudata (userid, area, areaid, bytes) ".
                "VALUES (?, ?, $areaid, $bytes)", undef,
-               $u->{userid}, $area);
+               $u->userid, $area);
     } else {
         $u->do("DELETE FROM dudata WHERE userid=? AND ".
                "area=? AND areaid=$areaid", undef,
-               $u->{userid}, $area);
+               $u->userid, $area);
     }
     return 1;
 }
@@ -2488,8 +2488,8 @@ sub log_event {
 
     # now insert the data we have
     $u->do("INSERT INTO userlog (userid, logtime, action, actiontarget, remoteid, ip, uniq, extra) " .
-           "VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?)", undef, $u->{userid}, $type,
-           $targetid, $remote ? $remote->{userid} : undef, $ip, $uniq, $extra);
+           "VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?)", undef, $u->userid, $type,
+           $targetid, $remote ? $remote->userid : undef, $ip, $uniq, $extra);
     return undef if $u->err;
     return 1;
 }
@@ -2902,7 +2902,7 @@ sub get_recent_talkitems {
             "ORDER BY jtalkid DESC ".
             "LIMIT $max_fetch"
         );
-        $sth->execute($u->{'userid'});
+        $sth->execute( $u->userid );
         $raw_talkitems = $sth->fetchall_arrayref({});
         LJ::MemCache::set($memkey, $raw_talkitems, 60*5);
     }
@@ -3263,11 +3263,11 @@ sub delete_email_alias {
 sub delete_email_alias {
     my $u = shift;
 
-    return if exists $LJ::FIXED_ALIAS{$u->{user}};
+    return if exists $LJ::FIXED_ALIAS{$u->user};
 
     my $dbh = LJ::get_db_writer();
     $dbh->do( "DELETE FROM email_aliases WHERE alias=?",
-              undef, "$u->{user}\@$LJ::USER_DOMAIN" );
+              undef, $u->user . "\@$LJ::USER_DOMAIN" );
 
     return 0 if $dbh->err;
     return 1;
@@ -3287,11 +3287,12 @@ sub email_for_feeds {
 
 sub email_raw {
     my $u = shift;
-    $u->{_email} ||= LJ::MemCache::get_or_set([$u->{userid}, "email:$u->{userid}"], sub {
+    my $userid = $u->userid;
+    $u->{_email} ||= LJ::MemCache::get_or_set( [$userid, "email:$userid"], sub {
         my $dbh = LJ::get_db_writer() or die "Couldn't get db master";
-        return $dbh->selectrow_array("SELECT email FROM email WHERE userid=?",
-                                     undef, $u->id);
-    });
+        return $dbh->selectrow_array( "SELECT email FROM email WHERE userid=?",
+                                      undef, $userid );
+    } );
     return $u->{_email};
 }
 
@@ -3321,7 +3322,7 @@ sub emails_visible {
 sub emails_visible {
     my ($u, $remote) = @_;
 
-    return () if $u->{journaltype} =~ /[YI]/;
+    return () if $u->is_identity || $u->is_syndicated;
 
     # security controls
     return () unless $u->share_contactinfo($remote);
@@ -3353,7 +3354,7 @@ sub emails_visible {
 
     if ($LJ::USER_EMAIL && $useremail_cap) {
         if ($whatemail eq "B" || $whatemail eq "V" || $whatemail eq "L") {
-            push @emails, "$u->{'user'}\@$LJ::USER_DOMAIN" unless $u->prop('no_mail_alias');
+            push @emails, $u->user . "\@$LJ::USER_DOMAIN" unless $u->prop('no_mail_alias');
         }
     }
     return wantarray ? @emails : $emails[0];
@@ -3402,13 +3403,13 @@ sub update_email_alias {
     my $u = shift;
 
     return unless $u && $u->get_cap("useremail");
-    return if exists $LJ::FIXED_ALIAS{$u->{'user'}};
+    return if exists $LJ::FIXED_ALIAS{$u->user};
     return if $u->prop("no_mail_alias");
     return unless $u->is_validated;
 
     my $dbh = LJ::get_db_writer();
-    $dbh->do("REPLACE INTO email_aliases (alias, rcpt) VALUES (?,?)",
-             undef, "$u->{'user'}\@$LJ::USER_DOMAIN", $u->email_raw);
+    $dbh->do( "REPLACE INTO email_aliases (alias, rcpt) VALUES (?,?)",
+              undef, $u->user . "\@$LJ::USER_DOMAIN", $u->email_raw );
 
     return 0 if $dbh->err;
     return 1;
@@ -3488,7 +3489,7 @@ sub get_post_ids {
 
     # from the journal entries table for this user
     $query .= " FROM log2 WHERE journalid=?";
-    push(@vals, $u->{userid});
+    push( @vals, $u->userid );
 
     # filter by security
     if ($opts{'security'}) {
@@ -3554,11 +3555,12 @@ sub number_of_posts {
         return $u->get_post_ids(%opts);
     }
 
-    my $memkey = [$u->{userid}, "log2ct:$u->{userid}"];
+    my $userid = $u->userid;
+    my $memkey = [$userid, "log2ct:$userid"];
     my $expire = time() + 3600*24*2; # 2 days
     return LJ::MemCache::get_or_set($memkey, sub {
-        return $u->selectrow_array("SELECT COUNT(*) FROM log2 WHERE journalid=?",
-                                   undef, $u->{userid});
+        return $u->selectrow_array( "SELECT COUNT(*) FROM log2 WHERE journalid=?",
+                                    undef, $userid );
     }, $expire);
 }
 
@@ -3575,7 +3577,7 @@ sub recent_entries {
     my @recent = $u->recent_items(
         itemshow  => $count,
         err       => \$err,
-        clusterid => $u->{clusterid},
+        clusterid => $u->clusterid,
         remote    => $remote,
         order     => $order,
     );
@@ -3615,7 +3617,7 @@ sub set_draft_text {
         my $appending = sub {
             my $prop = LJ::get_prop("user", "entry_draft") or die; # FIXME: use exceptions
             my $rv = $u->do("UPDATE userpropblob SET value = CONCAT(value, ?) WHERE userid=? AND upropid=? AND LENGTH(value)=?",
-                            undef, $new, $u->{userid}, $prop->{id}, length $old);
+                            undef, $new, $u->userid, $prop->{id}, length $old);
             return 0 unless $rv > 0;
             $u->uncache_prop("entry_draft");
             return 1;
@@ -3783,7 +3785,7 @@ sub ljtalk_id {
     my $u = shift;
     croak "Invalid user object passed" unless LJ::isu($u);
 
-    return $u->{'user'}.'@'.$LJ::USER_DOMAIN;
+    return $u->user . '@' . $LJ::USER_DOMAIN;
 }
 
 
@@ -3872,7 +3874,7 @@ sub show_ljtalk {
 # returns a true value if user has a reserved 'ext' name.
 sub external {
     my $u = shift;
-    return $u->{user} =~ /^ext_/;
+    return $u->user =~ /^ext_/;
 }
 
 
@@ -3880,9 +3882,9 @@ sub identity {
 sub identity {
     my $u = shift;
     return $u->{_identity} if $u->{_identity};
-    return undef unless $u->{'journaltype'} eq "I";
-
-    my $memkey = [$u->{userid}, "ident:$u->{userid}"];
+    return undef unless $u->is_identity;
+
+    my $memkey = [$u->userid, "ident:" . $u->userid];
     my $ident = LJ::MemCache::get($memkey);
     if ($ident) {
         my $i = LJ::Identity->new(
@@ -3894,8 +3896,8 @@ sub identity {
     }
 
     my $dbh = LJ::get_db_writer();
-    $ident = $dbh->selectrow_arrayref("SELECT idtype, identity FROM identitymap ".
-                                      "WHERE userid=? LIMIT 1", undef, $u->{userid});
+    $ident = $dbh->selectrow_arrayref( "SELECT idtype, identity FROM identitymap ".
+                                       "WHERE userid=? LIMIT 1", undef, $u->userid );
     if ($ident) {
         LJ::MemCache::set($memkey, $ident);
         my $i = LJ::Identity->new(
@@ -4138,11 +4140,12 @@ sub password {
 sub password {
     my $u = shift;
     return unless $u->is_person;
-    $u->{_password} ||= LJ::MemCache::get_or_set([$u->{userid}, "pw:$u->{userid}"], sub {
+    my $userid = $u->userid;
+    $u->{_password} ||= LJ::MemCache::get_or_set( [$userid, "pw:$userid"], sub {
         my $dbh = LJ::get_db_writer() or die "Couldn't get db master";
-        return $dbh->selectrow_array("SELECT password FROM password WHERE userid=?",
-                                     undef, $u->id);
-    });
+        return $dbh->selectrow_array( "SELECT password FROM password WHERE userid=?",
+                                      undef, $userid );
+    } );
     return $u->{_password};
 }
 
@@ -4436,7 +4439,7 @@ sub message_url {
     croak "invalid user object passed" unless LJ::isu($u);
 
     return undef unless LJ::is_enabled('user_messaging');
-    return "$LJ::SITEROOT/inbox/compose?user=$u->{'user'}";
+    return "$LJ::SITEROOT/inbox/compose?user=" . $u->user;
 }
 
 
@@ -4509,14 +4512,15 @@ sub get_syndicated {
     my $u = shift;
 
     return unless $u->is_syndicated;
-    my $memkey = [$u->{'userid'}, "synd:$u->{'userid'}"];
+    my $userid = $u->userid;
+    my $memkey = [$userid, "synd:$userid"];
 
     my $synd = {};
     $synd = LJ::MemCache::get($memkey);
     unless ($synd) {
         my $dbr = LJ::get_db_reader();
         return unless $dbr;
-        $synd = $dbr->selectrow_hashref("SELECT * FROM syndicated WHERE userid=$u->{'userid'}");
+        $synd = $dbr->selectrow_hashref( "SELECT * FROM syndicated WHERE userid=$userid" );
         LJ::MemCache::set($memkey, $synd, 60 * 30) if $synd;
     }
 
@@ -4562,7 +4566,7 @@ sub activate_userpics {
     # so just return 1 to the caller from here and act like everything went fine
     return 1 if $u->is_expunged;
 
-    my $userid = $u->{'userid'};
+    my $userid = $u->userid;
 
     # active / inactive lists
     my @active = ();
@@ -4575,7 +4579,7 @@ sub activate_userpics {
 
     # select all userpics and build active / inactive lists
     my $sth;
-    if ($u->{'dversion'} > 6) {
+    if ( $u->dversion > 6 ) {
         return undef unless $dbcr;
         $sth = $dbcr->prepare("SELECT picid, state FROM userpic2 WHERE userid=?");
     } else {
@@ -4620,7 +4624,7 @@ sub activate_userpics {
         my %count_picid = ();
         if ($keywords_in) {
             my $sth;
-            if ($u->{'dversion'} > 6) {
+            if ( $u->dversion > 6 ) {
                 $sth = $dbcr->prepare("SELECT k.keyword, m.picid FROM userkeywords k, userpicmap2 m ".
                                       "WHERE k.keyword IN ($keywords_in) AND k.kwid=m.kwid AND k.userid=m.userid " .
                                       "AND k.userid=?");
@@ -4642,7 +4646,7 @@ sub activate_userpics {
 
         @ban = splice(@ban, 0, $to_ban) if @ban > $to_ban;
         my $ban_in = join(",", map { $dbh->quote($_) } @ban);
-        if ($u->{'dversion'} > 6) {
+        if ( $u->dversion > 6 ) {
             $u->do("UPDATE userpic2 SET state='I' WHERE userid=? AND picid IN ($ban_in)",
                    undef, $userid) if $ban_in;
         } else {
@@ -4663,7 +4667,7 @@ sub activate_userpics {
 
         my $activate_in = join(",", map { $dbh->quote($_) } @activate_picids);
         if ($activate_in) {
-            if ($u->{'dversion'} > 6) {
+            if ( $u->dversion > 6 ) {
                 $u->do("UPDATE userpic2 SET state='N' WHERE userid=? AND picid IN ($activate_in)",
                        undef, $userid);
             } else {
@@ -4707,7 +4711,7 @@ sub mogfs_userpic_key {
     my $pic = shift or croak "missing required arg: userpic";
 
     my $picid = ref $pic ? $pic->{picid} : $pic+0;
-    return "up:$self->{userid}:$picid";
+    return "up:" . $self->userid . ":$picid";
 }
 
 
@@ -4803,7 +4807,7 @@ sub show_mutualfriends {
 sub show_mutualfriends {
     my $u = shift;
 
-    return 0 unless $u->journaltype =~ /[PSI]/;
+    return 0 unless $u->is_individual;
     return $u->opt_showmutualfriends ? 1 : 0;
 }
 
@@ -5012,8 +5016,8 @@ sub get_username
         my $u = LJ::load_userid($userid);
         return undef unless $u;
 
-        $LJ::CACHE_USERNAME{$userid} = $u->{'user'};
-        return $u->{'user'};
+        $LJ::CACHE_USERNAME{$userid} = $u->user;
+        return $u->user;
     }
 
     my $dbr = LJ::get_db_reader();
@@ -5282,15 +5286,15 @@ sub load_userids_multiple
         # to the same one.
         $u = _set_u_req_cache($u);
 
-        foreach (@{$need{$u->{'userid'}}}) {
+        foreach ( @{$need{$u->userid}} ) {
             # check if existing target is defined and not what we already have.
             if (my $eu = $$_) {
-                LJ::assert_is($u->{userid}, $eu->{userid});
+                LJ::assert_is( $u->userid, $eu->userid );
             }
             $$_ = $u;
         }
 
-        delete $need{$u->{'userid'}};
+        delete $need{$u->userid};
     };
 
     unless ($LJ::_PRAGMA_FORCE_MASTER) {
@@ -5329,8 +5333,8 @@ sub mark_user_active {
 sub mark_user_active {
     my ($u, $type) = @_;  # not currently using type
     return 0 unless $u;   # do not auto-vivify $u
-    my $uid = $u->{userid};
-    return 0 unless $uid && $u->{clusterid};
+    my $uid = $u->userid;
+    return 0 unless $uid && $u->clusterid;
 
     # Update the clustertrack2 table, but not if we've done it for this
     # user in the last hour.  if no memcache servers are configured
@@ -5342,8 +5346,8 @@ sub mark_user_active {
         my $active = time();
         $u->do("REPLACE INTO clustertrack2 SET ".
                "userid=?, timeactive=?, clusterid=?", undef,
-               $uid, $active, $u->{clusterid}) or return 0;
-        my $memkey = [$u->{userid}, "timeactive:$u->{userid}"];
+               $uid, $active, $u->clusterid) or return 0;
+        my $memkey = [$u->userid, "timeactive:" . $u->userid];
         LJ::MemCache::set($memkey, $active, 86400);
     }
     return 1;
@@ -5360,7 +5364,7 @@ sub mark_user_active {
 # </LJFUNC>
 sub u_equals {
     my ($u1, $u2) = @_;
-    return $u1 && $u2 && $u1->{'userid'} == $u2->{'userid'};
+    return $u1 && $u2 && $u1->userid == $u2->userid;
 }
 
 
@@ -5393,7 +5397,7 @@ sub want_userid
 sub want_userid
 {
     my $uuserid = shift;
-    return ($uuserid->{'userid'} + 0) if ref $uuserid;
+    return ($uuserid->userid + 0) if ref $uuserid;
     return ($uuserid + 0);
 }
 
@@ -5509,7 +5513,7 @@ sub get_remote
     }
 
     LJ::User->set_remote($u);
-    $r->notes->{ljuser} = $u->{user};
+    $r->notes->{ljuser} = $u->user;
     return $u;
 }
 
@@ -5529,7 +5533,7 @@ sub handle_bad_login
         ($udbh = LJ::get_cluster_master($u)))
     {
         $udbh->do("REPLACE INTO loginstall (userid, ip, time) VALUES ".
-                  "(?,INET_ATON(?),UNIX_TIMESTAMP())", undef, $u->{'userid'}, $ip);
+                  "(?,INET_ATON(?),UNIX_TIMESTAMP())", undef, $u->userid, $ip);
     }
     return 1;
 }
@@ -5546,9 +5550,9 @@ sub login_ip_banned
     my $udbr;
     my $rateperiod = LJ::get_cap($u, "rateperiod-failed_login");
     if ($rateperiod && ($udbr = LJ::get_cluster_reader($u))) {
-        my $bantime = $udbr->selectrow_array("SELECT time FROM loginstall WHERE ".
-                                             "userid=$u->{'userid'} AND ip=INET_ATON(?)",
-                                             undef, $ip);
+        my $bantime = $udbr->selectrow_array( "SELECT time FROM loginstall WHERE ".
+                                              "userid=? AND ip=INET_ATON(?)",
+                                              undef, $u->userid, $ip );
         if ($bantime && $bantime > time() - $rateperiod) {
             return 1;
         }
@@ -5612,7 +5616,7 @@ sub alloc_user_counter
     return undef unless $dbh;
 
     my $newmax;
-    my $uid = $u->{'userid'}+0;
+    my $uid = $u->userid + 0;
     return undef unless $uid;
     my $memkey = [$uid, "auc:$uid:$dom"];
 
@@ -5774,8 +5778,8 @@ sub memcache_set_u
     my $expire = time() + 1800;
     my $ar = LJ::MemCache::hash_to_array("user", $u);
     return unless $ar;
-    LJ::MemCache::set([$u->{'userid'}, "userid:$u->{'userid'}"], $ar, $expire);
-    LJ::MemCache::set("uidof:$u->{user}", $u->{userid});
+    LJ::MemCache::set( [$u->userid, "userid:" . $u->userid], $ar, $expire );
+    LJ::MemCache::set( "uidof:" . $u->user, $u->userid );
 }
 
 
@@ -5921,16 +5925,16 @@ sub _set_u_req_cache {
 
     # if we have an existing user singleton, upgrade it with
     # the latested data, but keep using its address
-    if (my $eu = $LJ::REQ_CACHE_USER_ID{$u->{'userid'}}) {
-        LJ::assert_is($eu->{userid}, $u->{userid});
+    if ( my $eu = $LJ::REQ_CACHE_USER_ID{$u->userid} ) {
+        LJ::assert_is( $eu->userid, $u->userid );
         $eu->selfassert;
         $u->selfassert;
 
         $eu->{$_} = $u->{$_} foreach keys %$u;
         $u = $eu;
     }
-    $LJ::REQ_CACHE_USER_NAME{$u->{'user'}} = $u;
-    $LJ::REQ_CACHE_USER_ID{$u->{'userid'}} = $u;
+    $LJ::REQ_CACHE_USER_NAME{$u->user} = $u;
+    $LJ::REQ_CACHE_USER_ID{$u->userid} = $u;
     return $u;
 }
 
@@ -6005,7 +6009,7 @@ sub get_timezone {
             FROM log2
             WHERE journalid = ? AND rlogtime <> ?
             ORDER BY rlogtime LIMIT 1
-        }, undef, $u->{userid}, $LJ::EndOfTime)) {
+        }, undef, $u->userid, $LJ::EndOfTime)) {
         my $logtime = $LJ::EndOfTime - $last_row->{'rlogtime'};
         my $eventtime = LJ::mysqldate_to_time($last_row->{'eventtime'}, 1);
         my $hourdiff = ($eventtime - $logtime) / 3600;
@@ -6100,12 +6104,12 @@ sub ljuser
 
     $profile = $u->profile_url;
 
-    my $type = $u->{'journaltype'};
+    my $type = $u->journaltype;
     my $type_readable = $u->journaltype_readable;
 
     # Mark accounts as deleted that aren't visible, memorial, locked, or read-only
     $opts->{'del'} = 1 unless $u->is_visible || $u->is_memorial || $u->is_locked || $u->is_readonly;
-    $user = $u->{'user'};
+    $user = $u->user;
 
     my $url = $u->journal_base . "/";
     my $head_size = $opts->{head_size};
@@ -6151,7 +6155,7 @@ sub get_bio {
 
     my $bio;
 
-    my $memkey = [$u->{'userid'}, "bio:$u->{'userid'}"];
+    my $memkey = [$u->userid, "bio:" . $u->userid];
     unless ($force) {
         my $bio = LJ::MemCache::get($memkey);
         return $bio if defined $bio;
@@ -6160,8 +6164,8 @@ sub get_bio {
     # not in memcache, fall back to disk
     my $db = @LJ::MEMCACHE_SERVERS || $force ?
       LJ::get_cluster_def_reader($u) : LJ::get_cluster_reader($u);
-    $bio = $db->selectrow_array("SELECT bio FROM userbio WHERE userid=?",
-                                undef, $u->{'userid'});
+    $bio = $db->selectrow_array( "SELECT bio FROM userbio WHERE userid=?",
+                                 undef, $u->userid );
 
     # set in memcache
     LJ::MemCache::add($memkey, $bio);
@@ -6193,8 +6197,8 @@ sub load_user_props
     LJ::load_props("user");
 
     ## user reference
-    my $uid = $u->{'userid'}+0;
-    $uid = LJ::get_userid($u->{'user'}) unless $uid;
+    my $uid = $u->userid + 0;
+    $uid = LJ::get_userid( $u->user ) unless $uid;
 
     my $mem = {};
     my $use_master = 0;
@@ -6243,7 +6247,7 @@ sub load_user_props
             if ($p->{datatype} eq 'blobchar') {
                 $source = "userpropblob"; # clustered blob
             }
-            elsif ($p->{'cldversion'} && $u->{'dversion'} >= $p->{'cldversion'}) {
+            elsif ( $p->{'cldversion'} && $u->dversion >= $p->{'cldversion'} ) {
                 $source = "userproplite2";  # clustered
             }
             elsif ($p->{multihomed}) {
@@ -6424,7 +6428,7 @@ sub set_userprop
     &nodb;
     my ($u, $propname, $value, $memonly) = @_;
     $u = ref $u ? $u : LJ::load_userid($u);
-    my $userid = $u->{'userid'}+0;
+    my $userid = $u->userid + 0;
 
     my $hash = ref $propname eq "HASH" ? $propname : { $propname => $value };
 
@@ -6446,7 +6450,7 @@ sub set_userprop
         if ($p->{datatype} eq 'blobchar') {
             $table = 'userpropblob';
         }
-        elsif ($p->{'cldversion'} && $u->{'dversion'} >= $p->{'cldversion'}) {
+        elsif ( $p->{'cldversion'} && $u->dversion >= $p->{'cldversion'} ) {
             $table = "userproplite2";
         }
         unless ($memonly) {
@@ -6547,7 +6551,7 @@ sub user_search_display {
             $loaded_users = $args{users};
         } elsif (ref $args{users} eq 'ARRAY') { # They did a grep on it or something
             foreach (@{$args{users}}) {
-                $loaded_users->{$_->{userid}} = $_;
+                $loaded_users->{$_->userid} = $_;
             }
         } else {
             return undef;
@@ -6582,7 +6586,7 @@ sub user_search_display {
 
     # If we aren't sorting by time updated, load last updated time for the
     # set of users we are displaying.
-    $updated = LJ::get_timeupdate_multi(map { $_->{userid} } @display)
+    $updated = LJ::get_timeupdate_multi( map { $_->userid } @display )
         unless $args{timesort};
 
     # Allow caller to specify a custom userpic to use instead
@@ -6599,14 +6603,15 @@ sub user_search_display {
         # when the site is overloaded we don't always load the users
         # we request.
         next unless LJ::isu($u);
-
+        
         $ret .= "<div class='user-search-display'>";
         $ret .= "<table style='height: 105px'><tr>";
 
         $ret .= "<td style='width: 100px; text-align: center;'>";
         $ret .= "<a href='" . $u->allpics_base . "'>";
         if (my $picid = $get_picid->($u)) {
-            $ret .= "<img src='$LJ::USERPIC_ROOT/$picid/$u->{userid}' alt='$u->{user} userpic' style='border: 1px solid #000;' />";
+            $ret .= "<img src='$LJ::USERPIC_ROOT/$picid/" . $u->userid . "' alt='";
+            $ret .= $u->user . " userpic' style='border: 1px solid #000;' />";
         } else {
             $ret .= "<img src='$LJ::IMGPREFIX/nouserpic.png' alt='" . BML::ml( 'search.user.nopic' );
             $ret .= "' style='border: 1px solid #000;' width='100' height='100' />";
@@ -6716,7 +6721,8 @@ sub rate_check {
     return 0 unless $u->writer;
 
     # delete inapplicable stuff (or some of it)
-    $u->do("DELETE FROM ratelog WHERE userid=$u->{'userid'} AND rlid=$rp->{'id'} ".
+    my $userid = $u->userid;
+    $u->do("DELETE FROM ratelog WHERE userid=$userid AND rlid=$rp->{'id'} ".
            "AND evttime < $beforeperiod LIMIT 1000");
 
     my $udbr = LJ::get_cluster_reader($u);
@@ -6724,7 +6730,7 @@ sub rate_check {
              ? $opts->{'ip'}
              : $udbr->quote($opts->{'limit_by_ip'} || "0.0.0.0");
     my $sth = $udbr->prepare("SELECT evttime, quantity FROM ratelog WHERE ".
-                             "userid=$u->{'userid'} AND rlid=$rp->{'id'} ".
+                             "userid=$userid AND rlid=$rp->{'id'} ".
                              "AND ip=INET_ATON($ip) ".
                              "AND evttime > $beforeperiod");
     $sth->execute;
@@ -6779,8 +6785,9 @@ sub rate_log
 
     # log current
     $count = $count + 0;
+    my $userid = $u->userid;
     $u->do("INSERT INTO ratelog (userid, rlid, evttime, ip, quantity) VALUES ".
-           "($u->{'userid'}, $rp->{'id'}, $now, INET_ATON($ip), $count)");
+           "($userid, $rp->{'id'}, $now, INET_ATON($ip), $count)");
 
     # delete memcache, except in the case of rate limiting by ip
     unless ($opts->{limit_by_ip}) {
@@ -6818,17 +6825,17 @@ sub delete_all_comments {
            ($t = $dbcm->selectcol_arrayref("SELECT jtalkid FROM talk2 WHERE ".
                                            "nodetype=? AND journalid=? ".
                                            "AND nodeid=? LIMIT $chunk_size", undef,
-                                           $nodetype, $u->{'userid'}, $nodeid))
+                                           $nodetype, $u->userid, $nodeid))
            && $t && @$t)
     {
         my $in = join(',', map { $_+0 } @$t);
         return 1 unless $in;
         foreach my $table (qw(talkprop2 talktext2 talk2)) {
-            $u->do("DELETE FROM $table WHERE journalid=? AND jtalkid IN ($in)",
-                   undef, $u->{'userid'});
+            $u->do( "DELETE FROM $table WHERE journalid=? AND jtalkid IN ($in)",
+                    undef, $u->userid );
         }
         # decrement memcache
-        LJ::MemCache::decr([$u->{'userid'}, "talk2ct:$u->{'userid'}"], scalar(@$t));
+        LJ::MemCache::decr( [$u->userid, "talk2ct:" . $u->userid], scalar(@$t) );
         $loop = 0 unless @$t == $chunk_size;
     }
     return 1;
@@ -6863,7 +6870,7 @@ sub can_manage {
     return 1 if LJ::u_equals($u, $remote);
 
     # people/syn/rename accounts can only be managed by the one account
-    return undef if $u->{journaltype} =~ /^[PYR]$/;
+    return undef if $u->journaltype =~ /^[PYR]$/;
 
     # check for admin access
     return undef unless LJ::check_rel($u, $remote, 'A');
@@ -6914,7 +6921,7 @@ sub get_authas_list {
     my %users;
     LJ::load_userids_multiple([ map { $_, \$users{$_} } @$ids ], [$u]);
 
-    return map { $_->{'user'} }
+    return map { $_->user }
                grep { ! $opts->{'cap'} || LJ::get_cap($_, $opts->{'cap'}) }
                grep { ! $opts->{'type'} || $opts->{'type'} eq $_->{'journaltype'} }
 
@@ -6922,8 +6929,8 @@ sub get_authas_list {
                grep { $opts->{'showall'} || $_->is_visible || $_->is_readonly || LJ::u_equals($_, $u) }
 
                # can't work as an expunged account
-               grep { !$_->is_expunged && $_->{clusterid} > 0 }
-               $u,  sort { $a->{'user'} cmp $b->{'user'} } values %users;
+               grep { ! $_->is_expunged && $_->clusterid > 0 }
+               $u,  sort { $a->user cmp $b->user } values %users;
 }
 
 
@@ -6952,7 +6959,7 @@ sub get_postto_list {
     my %users;
     LJ::load_userids_multiple([ map { $_, \$users{$_} } @$ids ], [$u]);
 
-    return $u->{'user'}, sort map { $_->{'user'} }
+    return $u->user, sort map { $_->user }
                          grep { ! $opts->{'cap'} || LJ::get_cap($_, $opts->{'cap'}) }
                          grep { ! $opts->{'type'} || $opts->{'type'} eq $_->{'journaltype'} }
                          grep { $_->clusterid > 0 }
@@ -7010,7 +7017,7 @@ sub can_view
     return 0 unless $remote;
 
     my $userid = int($item->{'ownerid'} || $item->{'journalid'});
-    my $remoteid = int($remote->{'userid'});
+    my $remoteid = int( $remote->userid );
 
     # owners can always see their own.
     return 1 if $userid == $remoteid;
@@ -7024,7 +7031,7 @@ sub can_view
 
     # if it's usemask, we have to refuse non-personal journals,
     # so we have to load the user
-    return 0 unless $remote->{'journaltype'} eq 'P' || $remote->{'journaltype'} eq 'I';
+    return 0 unless $remote->is_individual;
 
     # this far down we have to load the user
     my $u = LJ::want_user( $userid ) or return 0;
@@ -7061,8 +7068,8 @@ sub get_interests
         return $ints;
     }
 
-    my $uid = $u->{userid};
-    my $uitable = $u->{'journaltype'} eq 'C' ? 'comminterests' : 'userinterests';
+    my $uid = $u->userid;
+    my $uitable = $u->is_community ? 'comminterests' : 'userinterests';
 
     # load the ids
     my $ids;
@@ -7148,7 +7155,7 @@ sub set_interests
     my ($u, $old, $new) = @_;
 
     $u = LJ::want_user($u);
-    my $userid = $u->{'userid'};
+    my $userid = $u->userid;
     return undef unless $userid;
 
     return undef unless ref $old eq 'HASH';
@@ -7160,7 +7167,7 @@ sub set_interests
 
     # user interests go in a different table than user interests,
     # though the schemas are the same so we can run the same queries on them
-    my $uitable = $u->{'journaltype'} eq 'C' ? 'comminterests' : 'userinterests';
+    my $uitable = $u->is_community ? 'comminterests' : 'userinterests';
 
     # track if we made changes to refresh memcache later.
     my $did_mod = 0;
@@ -7517,11 +7524,11 @@ sub load_user_privs
     return unless $dbr;
     foreach (@privs) { $remote->{'_privloaded'}->{$_}++; }
     @privs = map { $dbr->quote($_) } @privs;
-    my $sth = $dbr->prepare("SELECT pl.privcode, pm.arg ".
-                            "FROM priv_map pm, priv_list pl ".
-                            "WHERE pm.prlid=pl.prlid AND ".
-                            "pl.privcode IN (" . join(',',@privs) . ") ".
-                            "AND pm.userid=$remote->{'userid'}");
+    my $sth = $dbr->prepare( "SELECT pl.privcode, pm.arg ".
+                             "FROM priv_map pm, priv_list pl ".
+                             "WHERE pm.prlid=pl.prlid AND ".
+                             "pl.privcode IN (" . join(',',@privs) . ") ".
+                             "AND pm.userid=" . $remote->userid );
     $sth->execute;
     while (my ($priv, $arg) = $sth->fetchrow_array) {
         unless (defined $arg) { $arg = ""; }  # NULL -> ""
@@ -7559,11 +7566,11 @@ sub get_daycounts
         my %getargs = $r->args if $r;
         if (defined $getargs{'viewall'} and $getargs{'viewall'} eq '1' and LJ::check_priv($remote, 'canview', '*')) {
             $viewall = 1;
-            LJ::statushistory_add($u->{'userid'}, $remote->{'userid'},
-                "viewall", "calendar");
-        }
-
-        if ($remote->{'userid'} == $uid || $viewall) {
+            LJ::statushistory_add( $u->userid, $remote->userid,
+                "viewall", "calendar" );
+        }
+
+        if ( $remote->userid == $uid || $viewall ) {
             $secwhere = "";   # see everything
             $memkind = 'a'; # all
         } elsif ( $remote->is_individual ) {
@@ -7644,13 +7651,13 @@ sub journal_base
         my $hookurl = LJ::run_hook("journal_base", $u, $vhost);
         return $hookurl if $hookurl;
 
-        $user = $u->{'user'};
+        $user = $u->user;
         unless (defined $vhost) {
             if ($LJ::FRONTPAGE_JOURNAL eq $user) {
                 $vhost = "front";
-            } elsif ($u->{'journaltype'} eq "P") {
+            } elsif ( $u->is_person ) {
                 $vhost = "";
-            } elsif ($u->{'journaltype'} eq "C") {
+            } elsif ( $u->is_community ) {
                 $vhost = "community";
             }
 
@@ -7727,7 +7734,7 @@ sub make_journal
     return unless $styleid;
 
 
-    $u->{'_journalbase'} = LJ::journal_base($u->{'user'}, $opts->{'vhost'});
+    $u->{'_journalbase'} = LJ::journal_base( $u->user, $opts->{'vhost'} );
 
     my $eff_view = $LJ::viewinfo{$view}->{'styleof'} || $view;
 
@@ -7748,7 +7755,7 @@ sub make_journal
     # LJ::load_user caching, this may be assigning between the same
     # underlying hashref)
     $remote->{'opt_nctalklinks'} = $u->{'opt_nctalklinks'} if
-        ($remote && $remote->{'userid'} == $u->{'userid'});
+        ( $remote && $remote->userid == $u->userid );
 
     my $stylesys = 1;
     if ($styleid == -1) {
@@ -7838,12 +7845,11 @@ sub make_journal
         $opts->{pathextra} = undef;
     }
 
-    $r->note(journalid => $u->{'userid'})
+    $r->note( journalid => $u->userid )
         if $r;
 
     my $notice = sub {
-        my $msg = shift;
-        my $status = shift;
+        my ( $msg, $status ) = @_;
 
         my $url = "$LJ::SITEROOT/users/$user/";
         $opts->{'status'} = $status if $status;
@@ -7892,8 +7898,8 @@ sub make_journal
             <p>$msg</p>
         }.("<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->\n" x 50);
     };
-    if ($LJ::USER_VHOSTS && $opts->{'vhost'} eq "users" && $u->{'journaltype'} ne 'R' &&
-        ! LJ::get_cap($u, "userdomain")) {
+    if ( $LJ::USER_VHOSTS && $opts->{'vhost'} eq "users" && ! $u->is_redirect &&
+        ! LJ::get_cap( $u, "userdomain" ) ) {
         return $notice->( BML::ml( 'error.vhost.nodomain', { user_domain => $LJ::USER_DOMAIN } ) );
     }
     if ($opts->{'vhost'} =~ /^other:/ && ! LJ::get_cap($u, "domainmap")) {
@@ -7974,7 +7980,7 @@ sub make_journal
 
         # throw an error if we're rendering in S1, but not for renamed accounts
         return $error->( BML::ml( 'error.tag.s1' ), "404 Not Found", BML::ml( 'error.tag.name' ) )
-            if $stylesys == 1 && $view ne 'data' && $u->{journaltype} ne 'R';
+            if $stylesys == 1 && $view ne 'data' && ! $u->is_redirect;
 
         # overwrite any tags that exist
         $opts->{tags} = [];
@@ -8009,11 +8015,11 @@ sub make_journal
 
         # throw an error if we're rendering in S1, but not for renamed accounts
         return $error->( BML::ml( 'error.security.s1' ), "404 Not Found", BML::ml( 'error.security.name' ) )
-            if $stylesys == 1 && $view ne 'data' && $u->journaltype ne 'R';
+            if $stylesys == 1 && $view ne 'data' && ! $u->is_redirect;
 
         # check the filter itself
         if ($securityfilter =~ /^(?:public|friends|private)$/i) {
-            $opts->{'securityfilter'} = lc($securityfilter);
+            $opts->{securityfilter} = lc($securityfilter);
 
         # see if they want to filter by a custom group
         } elsif ($securityfilter =~ /^group:(.+)$/i) {
@@ -8114,15 +8120,15 @@ sub userpic_count {
 sub userpic_count {
     my $u = shift or return undef;
 
-    if ($u->{'dversion'} > 6) {
+    if ( $u->dversion > 6 ) {
         my $dbcr = LJ::get_cluster_def_reader($u) or return undef;
         return $dbcr->selectrow_array("SELECT COUNT(*) FROM userpic2 " .
-                                      "WHERE userid=? AND state <> 'X'", undef, $u->{'userid'});
+                                      "WHERE userid=? AND state <> 'X'", undef, $u->userid);
     }
 
     my $dbh = LJ::get_db_writer() or return undef;
     return $dbh->selectrow_array("SELECT COUNT(*) FROM userpic " .
-                                 "WHERE userid=? AND state <> 'X'", undef, $u->{'userid'});
+                                 "WHERE userid=? AND state <> 'X'", undef, $u->userid);
 }
 
 
@@ -8157,7 +8163,7 @@ sub remote_has_priv
 
     my $dbr = LJ::get_db_reader();
     my $sth = $dbr->prepare("SELECT pm.arg FROM priv_map pm, priv_list pl WHERE pm.prlid=pl.prlid AND pl.privcode=? AND pm.userid=?");
-    $sth->execute($privcode, $remote->{'userid'});
+    $sth->execute( $privcode, $remote->userid );
 
     my $match = 0;
     if (ref $ref eq "ARRAY") { @$ref = (); }
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
No Subject Icon Selected
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org