kareila: (Default)
kareila ([personal profile] kareila) wrote in [site community profile] changelog2009-07-30 04:47 pm

[dw-free] migrate journaltype checks to use abstracted functions instead

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

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

Code cleanup: use journaltype & statusvis methods instead of direct lookups.

Patch by [staff profile] denise.

Files modified:
  • bin/moveucluster.pl
  • bin/upgrading/blobify_userpics.pl
  • bin/upgrading/migrate-phoneposts.pl
  • bin/upgrading/migrate-userpics.pl
  • bin/upgrading/move0cluster.pl
  • cgi-bin/Apache/LiveJournal.pm
  • cgi-bin/Apache/LiveJournal/Interface/Blogger.pm
  • cgi-bin/DW/BusinessRules/InviteCodes.pm
  • cgi-bin/DW/InviteCodes.pm
  • cgi-bin/DW/Logic/LogItems.pm
  • cgi-bin/DW/Logic/UserLinkBar.pm
  • cgi-bin/DW/User/Edges/WatchTrust/UserHelper.pm
  • cgi-bin/LJ/CProd/Feeds.pm
  • cgi-bin/LJ/Comment.pm
  • cgi-bin/LJ/Console/Command/ChangeJournalType.pm
  • cgi-bin/LJ/Console/Command/SetBadpassword.pm
  • cgi-bin/LJ/Entry.pm
  • cgi-bin/LJ/M/FriendsOf.pm
  • cgi-bin/LJ/Portal/Box/Friends.pm
  • cgi-bin/LJ/Portal/Box/FriendsPage.pm
  • cgi-bin/LJ/Portal/Box/PopWithFriends.pm
  • cgi-bin/LJ/Portal/Box/RecentComments.pm
  • cgi-bin/LJ/S2.pm
  • cgi-bin/LJ/S2/DayPage.pm
  • cgi-bin/LJ/S2/EntryPage.pm
  • cgi-bin/LJ/S2/FriendsPage.pm
  • cgi-bin/LJ/S2/MonthPage.pm
  • cgi-bin/LJ/S2/RecentPage.pm
  • cgi-bin/LJ/S2/ReplyPage.pm
  • cgi-bin/LJ/Session.pm
  • cgi-bin/LJ/SixDegrees.pm
  • cgi-bin/LJ/User.pm
  • cgi-bin/ljfeed.pl
  • cgi-bin/ljprotocol.pl
  • cgi-bin/supportlib.pl
  • cgi-bin/taglib.pl
  • cgi-bin/talklib.pl
  • cgi-bin/weblib.pl
  • htdocs/accountstatus.bml
  • htdocs/admin/userlog.bml
  • htdocs/allpics.bml
  • htdocs/birthdays.bml
  • htdocs/community/join.bml
  • htdocs/community/leave.bml
  • htdocs/community/manage.bml
  • htdocs/community/members.bml
  • htdocs/community/sentinvites.bml
  • htdocs/community/settings.bml
  • htdocs/community/transfer.bml
  • htdocs/delcomment.bml
  • htdocs/editjournal.bml
  • htdocs/edittags.bml
  • htdocs/inbox/compose.bml
  • htdocs/interests.bml
  • htdocs/login.bml
  • htdocs/lostinfo.bml
  • htdocs/manage/circle/add.bml
  • htdocs/manage/index.bml
  • htdocs/mobile/index.bml
  • htdocs/multisearch.bml
  • htdocs/register.bml
  • htdocs/support/see_request.bml
  • htdocs/talkpost.bml
  • htdocs/talkread.bml
  • htdocs/tools/memadd.bml
  • htdocs/tools/memories.bml
  • htdocs/tools/recent_comments.bml
  • htdocs/view/index.bml
--------------------------------------------------------------------------------
diff -r 17d6af7ec9b3 -r b31a63fd1737 bin/moveucluster.pl
--- a/bin/moveucluster.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/bin/moveucluster.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -680,8 +680,8 @@ sub moveUser {
                       "random_user_set" => 1, # "
                       );
 
-    $skip_table{'inviterecv'} = 1 if $u->{journaltype} ne 'P'; # non-person, skip invites received
-    $skip_table{'invitesent'} = 1 if $u->{journaltype} ne 'C'; # not community, skip invites sent
+    $skip_table{'inviterecv'} = 1 unless $u->is_person; # if not person, skip invites received
+    $skip_table{'invitesent'} = 1 unless $u->is_community; # if not community, skip invites sent
 
     # we had a concern at the time of writing this dependency optization
     # that we might use "log3" and "talk3" tables in the future with the
@@ -740,8 +740,7 @@ sub moveUser {
         next if $skip_table{$table};
 
         # people accounts don't have moderated posts
-        next if $u->{'journaltype'} eq "P" && ($table eq "modlog" ||
-                                               $table eq "modblob");
+        next if $u->is_person && ($table eq "modlog" || $table eq "modblob");
 
         # don't waste time looking at dependent tables with empty parents
         next if $dep{$table} && $was_empty{$dep{$table}};
diff -r 17d6af7ec9b3 -r b31a63fd1737 bin/upgrading/blobify_userpics.pl
--- a/bin/upgrading/blobify_userpics.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/bin/upgrading/blobify_userpics.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -38,7 +38,7 @@ while ($loop) {
         die "Can't find userid: $uid" unless $u;
 
         # sometimes expunges don't expunge all the way.
-        if ($u->{'statusvis'} eq "X") {
+        if ( $u->is_expunged ) {
             $db->do("DELETE FROM userpicblob2 WHERE userid=$uid AND picid=$picid");
             next;
         }
diff -r 17d6af7ec9b3 -r b31a63fd1737 bin/upgrading/migrate-phoneposts.pl
--- a/bin/upgrading/migrate-phoneposts.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/bin/upgrading/migrate-phoneposts.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -155,7 +155,7 @@ sub handle_userid {
     # if they're expunged, they might have data somewhere if they were
     # copy-moved from A to B, then expunged on B.  now we're on A and
     # need to delete it ourselves (if purge-old is on)
-    if ($u->{clusterid} == 0 && $u->{statusvis} eq "X") {
+    if ( $u->{clusterid} == 0 && $u->is_expunged ) {
         return unless $purge;
         # if we get here, the user has indicated they want data purged, get handle
         my $to_purge_dbcm = get_db_handle($cid);
diff -r 17d6af7ec9b3 -r b31a63fd1737 bin/upgrading/migrate-userpics.pl
--- a/bin/upgrading/migrate-userpics.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/bin/upgrading/migrate-userpics.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -161,7 +161,7 @@ sub handle_userid {
     # if they're expunged, they might have data somewhere if they were
     # copy-moved from A to B, then expunged on B.  now we're on A and
     # need to delete it ourselves (if purge-old is on)
-    if ($u->{clusterid} == 0 && $u->{statusvis} eq "X") {
+    if ( $u->{clusterid} == 0 && $u->is_expunged ) {
         return unless $purge;
         # if we get here, the user has indicated they want data purged, get handle
         my $to_purge_dbcm = get_db_handle($cid);
diff -r 17d6af7ec9b3 -r b31a63fd1737 bin/upgrading/move0cluster.pl
--- a/bin/upgrading/move0cluster.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/bin/upgrading/move0cluster.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -123,7 +123,7 @@ if ($opt_prelocked) {
     }
 }
 
-if ($opt_expungedel && $u->{'statusvis'} eq "D" &&
+if ($opt_expungedel && $u->is_deleted &&
     LJ::mysqldate_to_time($u->{'statusvisdate'}) < time() - 86400*31) {
 
     print "Expunging user '$u->{'user'}'\n";
@@ -512,7 +512,7 @@ elsif ($sclust > 0)
 
     # manual moving (dumb copies)
     foreach my $table (@manual_move, @local_tables) {
-	next if ($table eq "modlog" || $table eq "modblob") && $u->{journaltype} eq "P";
+	next if ($table eq "modlog" || $table eq "modblob") && $u->is_person;
         print "  moving $table ...\n" if $optv > 1;
         my @cols;
         my $sth = $dbo->prepare("DESCRIBE $table");
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/Apache/LiveJournal.pm
--- a/cgi-bin/Apache/LiveJournal.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/Apache/LiveJournal.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -730,7 +730,7 @@ sub trans
         # journals. This ensures redirects work sensibly for all valid paths
         # under a given username, without sprinkling redirects everywhere.
         my $u = LJ::load_user($user);
-        if ($u && $u->{'journaltype'} eq 'R' && $u->{'statusvis'} eq 'R') {
+        if ( $u && $u->is_redirect && $u->is_renamed ) {
             LJ::load_user_props($u, 'renamedto');
             my $renamedto = $u->{'renamedto'};
             if ($renamedto ne '') {
@@ -1076,7 +1076,7 @@ sub userpic_content
 
     # Load the user object and pic and make sure the picture is viewable
     my $u = LJ::load_userid($userid);
-    return NOT_FOUND unless $u && $u->{'statusvis'} !~ /[XS]/;
+    return NOT_FOUND unless $u && ! ( $u->is_expunged || $u->is_suspended );
 
     my %upics;
     LJ::load_userpics(\%upics, [ $u, $picid ]);
@@ -1358,7 +1358,7 @@ sub journal_content
         {
             my $u = LJ::load_user($RQ{'user'});
             my $base = "$LJ::SITEROOT/users/$RQ{'user'}";
-            $base = "$LJ::SITEROOT/community/$RQ{'user'}" if $u && $u->{'journaltype'} eq "C";
+            $base = "$LJ::SITEROOT/community/$RQ{'user'}" if $u && $u->is_community;
             return redir($r, "$base$uri$args_wq");
         }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/Apache/LiveJournal/Interface/Blogger.pm
--- a/cgi-bin/Apache/LiveJournal/Interface/Blogger.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/Apache/LiveJournal/Interface/Blogger.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -130,7 +130,7 @@ sub getUsersBlogs {
     my $us = LJ::load_userids(@$ids);
     my @list = ($u);
     foreach (sort { $a->{user} cmp $b->{user} } values %$us) {
-        next unless $_->{'statusvis'} eq "V";
+        next unless $_->is_visible;
         push @list, $_;
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/DW/BusinessRules/InviteCodes.pm
--- a/cgi-bin/DW/BusinessRules/InviteCodes.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/DW/BusinessRules/InviteCodes.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -134,9 +134,7 @@ sub search_class {
 
     while (my $row = $sth->fetchrow_hashref) {
         push @uids, $row->{userid}
-            if $row->{journaltype} eq 'P'
-               && $row->{status} eq 'A'
-               && $row->{statusvis} eq 'V';
+            if $row->is_person && $row->{status} eq 'A' && $row->is_visible;
         $max_nusers--;
     }
 
@@ -151,9 +149,7 @@ sub search_class {
 
     while (my $row = $sth->fetchrow_hashref) {
         push @uids, $row->{userid}
-            if $row->{journaltype} eq 'P'
-               && $row->{status} eq 'A'
-               && $row->{statusvis} eq 'V';
+            if $row->is_person && $row->{status} eq 'A' && $row->is_visible;
         $max_nusers--;
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/DW/InviteCodes.pm
--- a/cgi-bin/DW/InviteCodes.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/DW/InviteCodes.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -194,7 +194,7 @@ sub check_code {
 
     # is the inviter suspended?
     my $u = LJ::load_userid( $ac->{userid} );
-    return 0 if ( $u && $u->{statusvis} eq "S" );
+    return 0 if ( $u && $u->is_suspended );
 
     return 1;
 }
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/DW/Logic/LogItems.pm
--- a/cgi-bin/DW/Logic/LogItems.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/DW/Logic/LogItems.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -97,8 +97,8 @@ sub watch_items
         # delete u objects based on 'showtypes'
         foreach my $fid ( keys %$friends_u ) {
             my $fu = $friends_u->{$fid};
-            if ($fu->{statusvis} ne 'V' ||
-                $valid_types && index(uc($valid_types), $fu->{journaltype}) == -1)
+            if ( ! $fu->is_visible ||
+                 $valid_types && index(uc($valid_types), $fu->{journaltype}) == -1 )
             {
                 delete $friends_u->{$fid};
                 delete $friends->{$fid};
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/DW/Logic/UserLinkBar.pm
--- a/cgi-bin/DW/Logic/UserLinkBar.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/DW/Logic/UserLinkBar.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -411,7 +411,7 @@ sub tellafriend {
     my $remote = $self->{remote};
     my $user = $u->user;
 
-    if ( $remote && $u->{journaltype} ne 'I' && LJ::is_enabled('tellafriend') )
+    if ( $remote && ! $u->is_identity && LJ::is_enabled('tellafriend') )
     {
         my $link = {
             url => "tools/tellafriend.bml?user=$user",
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/DW/User/Edges/WatchTrust/UserHelper.pm
--- a/cgi-bin/DW/User/Edges/WatchTrust/UserHelper.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/DW/User/Edges/WatchTrust/UserHelper.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -147,8 +147,7 @@ sub _mutually_trusted_users {
     my $us = LJ::load_userids(@ids);
     return $fom->{t_mut_users} = [
                                   sort { $a->display_name cmp $b->display_name }
-                                  grep { $_->{statusvis} =~ /[VML]/ &&
-                                        ($_->{journaltype} eq "P" || $_->{journaltype} eq "I") }
+                                  grep { $_->statusvis =~ /[VML]/ && $_->is_individual }
                                   map  { $us->{$_} ? ($us->{$_}) : () }
                                   @ids
                                  ];
@@ -164,8 +163,7 @@ sub _mutually_watched_users {
     my $us = LJ::load_userids(@ids);
     return $fom->{w_mut_users} = [
                                   sort { $a->display_name cmp $b->display_name }
-                                  grep { $_->{statusvis} =~ /[VML]/ &&
-                                        ($_->{journaltype} eq "P" || $_->{journaltype} eq "I") }
+                                  grep { $_->statusvis =~ /[VML]/ && $_->is_individual }
                                   map  { $us->{$_} ? ($us->{$_}) : () }
                                   @ids
                                  ];
@@ -245,19 +243,11 @@ sub _trusted_by_users {
 
     my $us = LJ::load_userids(@to_load);
     return $fom->{_trusted_by_users} = [
-                                    sort {
-                                        $a->display_name cmp $b->display_name
-                                    }
-                                    grep {
-                                        $_->{statusvis} =~ /[VML]/ &&
-                                            ($_->{journaltype} eq "P" ||
-                                             $_->{journaltype} eq "I")
-                                        }
-                                    map {
-                                        $us->{$_} ? ($us->{$_}) : ()
-                                        }
-                                    @to_load
-                                    ];
+                                        sort { $a->display_name cmp $b->display_name }
+                                        grep { $_->statusvis =~ /[VML]/ && $_->is_individual }
+                                        map  { $us->{$_} ? ($us->{$_}) : () }
+                                        @to_load
+                                       ];
 
 }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/CProd/Feeds.pm
--- a/cgi-bin/LJ/CProd/Feeds.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/CProd/Feeds.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -14,7 +14,7 @@ sub applicable {
         my ($user, $name, $suserid, $url, $count) = @{ $popsyn->[$_] };
 
         my $suser = LJ::load_userid($suserid);
-        return 0 if ($friends{$suserid} || $suser->{'statusvis'} ne "V");
+        return 0 if ( $friends{$suserid} || ! $suser->is_visible );
     }
     return 1;
 }
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Comment.pm
--- a/cgi-bin/LJ/Comment.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Comment.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -857,7 +857,7 @@ sub visible_to {
                    || LJ::u_equals($u, $self->entry->poster )); # posted the entry
 
     # comments from suspended users aren't visible
-    return 0 if $self->poster && $self->poster->{statusvis} eq 'S';
+    return 0 if $self->poster && $self->poster->is_suspended;
 
     return 1;
 }
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Console/Command/ChangeJournalType.pm
--- a/cgi-bin/LJ/Console/Command/ChangeJournalType.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Console/Command/ChangeJournalType.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -40,7 +40,7 @@ sub execute {
         unless $u->is_visible;
 
     return $self->error("Account is not a personal or community journal.")
-        unless $u->journaltype =~ /[PC]/;
+        unless $u->is_person || $u->is_community;
 
     return $self->error("You cannot convert your own account.")
         if LJ::u_equals($remote, $u);
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Console/Command/SetBadpassword.pm
--- a/cgi-bin/LJ/Console/Command/SetBadpassword.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Console/Command/SetBadpassword.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -34,8 +34,8 @@ sub execute {
     return $self->error("Cannot set bad password flag for a purged account.")
         if $u->is_expunged;
 
-    return $self->error("Account is not a personal or shared journal.")
-        unless $u->journaltype =~ /[PS]/;
+    return $self->error("Account is not a personal journal.")
+        unless $u->is_person;
 
     return $self->error("Second argument must be 'on' or 'off'.")
         unless $state =~ /^(?:on|off)/;
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Entry.pm
--- a/cgi-bin/LJ/Entry.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Entry.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -842,10 +842,10 @@ sub visible_to
     # can't see anything unless the journal is visible
     # unless you have viewsome. then, other restrictions apply
     if (!$viewsome) {
-        return 0 if $self->journal->{statusvis} =~ m/[DSX]/;
+        return 0 if $self->journal->is_inactive;
 
         # can't see anything by suspended users
-        return 0 if $self->poster->{statusvis} eq 'S';
+        return 0 if $self->poster->is_suspended;
 
         # can't see suspended entries
         return 0 if $self->is_suspended_for($remote);
@@ -872,7 +872,7 @@ sub visible_to
 
     # 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;
 
     # check if it's a community and they're a member
     return 1 if $self->journal->is_community &&
@@ -1669,7 +1669,7 @@ sub get_log2_recent_user
         next if $item->{'security'} eq 'private'
             and $item->{'journalid'} != $remote->{'userid'};
         if ($item->{'security'} eq 'usemask') {
-            next unless $remote->{'journaltype'} eq "P" || $remote->{'journaltype'} eq 'I';
+            next unless $remote->is_individual;
             my $permit = ($item->{'journalid'} == $remote->{'userid'});
             unless ($permit) {
                 # $mask for $item{journalid} should always be the same since get_log2_recent_log
@@ -1730,7 +1730,7 @@ sub get_itemid_near2
 
     my $dbr = LJ::get_cluster_reader($u);
     my $jid = $u->{'userid'}+0;
-    my $field = $u->{'journaltype'} eq "P" ? "revttime" : "rlogtime";
+    my $field = $u->is_person ? "revttime" : "rlogtime";
 
     my $stime = $dbr->selectrow_array("SELECT $field FROM log2 WHERE ".
                                       "journalid=$jid AND jitemid=$jitemid");
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/M/FriendsOf.pm
--- a/cgi-bin/LJ/M/FriendsOf.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/M/FriendsOf.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -113,11 +113,10 @@ sub _mutual_friends {
     my $us = LJ::load_userids(@ids);
     return $fom->{mutual_friends} = [
                                      sort { $a->display_name cmp $b->display_name }
-                                     grep { $_->{statusvis} =~ /[VML]/ &&
-                                           ($_->{journaltype} eq "P" || $_->{journaltype} eq "I") }
+                                     grep { $_->statusvis =~ /[VML]/ && $_->is_individual }
                                      map  { $us->{$_} ? ($us->{$_}) : () }
                                      @ids
-                                     ];
+                                    ];
 }
 
 # returns arrayref of mutual friendids.  sorted by username
@@ -174,19 +173,11 @@ sub _friend_ofs {
 
     my $us = LJ::load_userids(@to_load);
     return $fom->{_friendof_us} = [
-                                    sort {
-                                        $a->display_name cmp $b->display_name
-                                    }
-                                    grep {
-                                        $_->{statusvis} =~ /[VML]/ &&
-                                            ($_->{journaltype} eq "P" ||
-                                             $_->{journaltype} eq "I")
-                                        }
-                                    map {
-                                        $us->{$_} ? ($us->{$_}) : ()
-                                        }
-                                    @to_load
-                                    ];
+                                   sort { $a->display_name cmp $b->display_name }
+                                   grep { $_->statusvis =~ /[VML]/ && $_->is_individual }
+                                   map { $us->{$_} ? ($us->{$_}) : () }
+                                   @to_load
+                                  ];
 
 }
 
@@ -206,19 +197,11 @@ sub _member_of {
 
     my $us = LJ::load_userids(@to_load);
     return $fom->{_member_of_us} = [
-                                    sort {
-                                        $a->display_name cmp $b->display_name
-                                    }
-                                    grep {
-                                        $_->{statusvis} eq 'V' &&
-                                            ($_->{journaltype} eq "C" ||
-                                             $_->{journaltype} eq "S")
-                                        }
-                                    map {
-                                        $us->{$_} ? ($us->{$_}) : ()
-                                        }
+                                    sort { $a->display_name cmp $b->display_name }
+                                    grep { $_->is_visible && $_->is_community }
+                                    map { $us->{$_} ? ($us->{$_}) : () }
                                     @to_load
-                                    ];
+                                   ];
 
 }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Portal/Box/Friends.pm
--- a/cgi-bin/LJ/Portal/Box/Friends.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Portal/Box/Friends.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -54,12 +54,12 @@ sub generate_content {
     my $displaying;
 
     if ($friends_u) {
-        grep { $friendcount++ if $friends_u->{$_}->{'journaltype'} eq 'P'; } keys %$friends_u;
+        grep { $friendcount++ if $friends_u->{$_}->is_person; } keys %$friends_u;
         my @sortedfriends = sort { $friends_u->{$a}->{'user'} cmp $friends_u->{$b}->{'user'} } keys %$friends_u;
 
         foreach my $fid (@sortedfriends) {
             my $fu = $friends_u->{$fid};
-            next if $fu->{'journaltype'} ne 'P';
+            next unless $fu->is_person;
 
             unless ($foundfriends < $maxshow) {
                 chop $friendlist;
@@ -110,13 +110,13 @@ sub generate_content {
 
     if ($showcomm) {
         if ($friends_u) {
-            grep { $commcount++ if $friends_u->{$_}->{'journaltype'} eq 'C'; } keys %$friends_u;
+            grep { $commcount++ if $friends_u->{$_}->is_community; } keys %$friends_u;
             my @sortedfriends = sort { $friends_u->{$a}->{'user'} cmp $friends_u->{$b}->{'user'} } keys %$friends_u;
 
             foreach my $fid (@sortedfriends) {
                 my $fu = $friends_u->{$fid};
 
-                next if $fu->{'journaltype'} ne 'C';
+                next unless $fu->is_community;
 
                 my $journallink = $fu->journal_base();
                 $commlist .= "<a href=\"$journallink\">$fu->{user}</a>, ";
@@ -144,13 +144,13 @@ sub generate_content {
 
     if ($showsyn) {
         if ($friends_u) {
-            grep { $syncount++ if $friends_u->{$_}->{'journaltype'} eq 'Y'; } keys %$friends_u;
+            grep { $syncount++ if $friends_u->{$_}->is_syndicated; } keys %$friends_u;
             my @sortedfriends = sort { $friends_u->{$a}->{'user'} cmp $friends_u->{$b}->{'user'} } keys %$friends_u;
 
             foreach my $fid (@sortedfriends) {
                 my $fu = $friends_u->{$fid};
 
-                next if $fu->{'journaltype'} ne 'Y';
+                next unless $fu->is_syndicated;
 
                 my $journallink = $fu->journal_base();
                 $synlist .= "<a href=\"$journallink\">$fu->{user}</a>, ";
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Portal/Box/FriendsPage.pm
--- a/cgi-bin/LJ/Portal/Box/FriendsPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Portal/Box/FriendsPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -98,7 +98,7 @@ sub generate_content {
 
         my $posteru    = $entry->poster;
 
-        next if $posteru && $posteru->{statusvis} =~ /[XSD]/;
+        next if $posteru && $posteru->is_inactive;
 
         my $poster     = $posteru->ljuser_display;
         my $props      = $entry->props;
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Portal/Box/PopWithFriends.pm
--- a/cgi-bin/LJ/Portal/Box/PopWithFriends.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Portal/Box/PopWithFriends.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -102,10 +102,9 @@ sub generate_content {
 
         my $fofu = $fofus->{$popid};
 
-        my $journaltype = $fofu->{journaltype};
-        next if ($journaltype eq 'P' || $journaltype eq 'I') && !$showpeople;
-        next if $journaltype eq 'C' && !$showcoms;
-        next if $journaltype eq 'Y' && !$showsyn;
+        next if $fofu->is_individual && !$showpeople;
+        next if $fofu->is_community  && !$showcoms;
+        next if $fofu->is_syndicated && !$showsyn;
 
         my $friendcount = $count{$popid};
         next if $friendcount == 0;
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Portal/Box/RecentComments.pm
--- a/cgi-bin/LJ/Portal/Box/RecentComments.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Portal/Box/RecentComments.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -88,7 +88,7 @@ sub generate_content {
         last unless $commentcount++ < $maxshow;
 
         my $pu = $us->{$r->{posterid}};
-        next if $pu && $pu->{statusvis} =~ /[XS]/;
+        next if $pu && ( $pu->is_suspended || $pu->is_expunged) ;
         my $jtalkid = $r->{'jtalkid'};
 
         # get entry info for linking
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2.pm
--- a/cgi-bin/LJ/S2.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -2071,7 +2071,7 @@ sub Page
     }
 
     # Identity (type I) accounts only have read views
-    $p->{'views_order'} = [ 'read', 'userinfo' ] if $u->{'journaltype'} eq 'I';
+    $p->{'views_order'} = [ 'read', 'userinfo' ] if $u->is_identity;
 
     return $p;
 }
@@ -2493,7 +2493,7 @@ sub viewer_is_friend
     return 0 unless defined($LJ::S2::CURR_PAGE);
 
     my $ju = $LJ::S2::CURR_PAGE->{'_u'};
-    return 0 if $ju->{journaltype} eq 'C';
+    return 0 if $ju->is_community;
     return $ju->trusts( $remote );
 }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2/DayPage.pm
--- a/cgi-bin/LJ/S2/DayPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2/DayPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -138,7 +138,7 @@ sub DayPage
         }
 
         # don't show posts from suspended users or suspended posts
-        next ENTRY if $apu{$posterid} && $apu{$posterid}->{'statusvis'} eq 'S' && ! $viewsome;
+        next ENTRY if $apu{$posterid} && $apu{$posterid}->is_suspended && ! $viewsome;
         next ENTRY if $entry_obj && $entry_obj->is_suspended_for($remote);
 
         if ($LJ::UNICODE && $logprops{$itemid}->{'unknown8bit'}) {
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2/EntryPage.pm
--- a/cgi-bin/LJ/S2/EntryPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2/EntryPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -134,7 +134,7 @@ sub EntryPage
                 $text =~ s{<(?!/?lj)(.*?)>} {&lt;$1&gt;}gi;
             }
             LJ::CleanHTML::clean_comment(\$text, { 'preformatted' => $com->{'props'}->{'opt_preformatted'},
-                                                   'anon_comment' => (!$pu || $pu->{'journaltype'} eq 'I'),
+                                                   'anon_comment' => (!$pu || $pu->is_identity),
                                                });
 
             # local time in mysql format to gmtime
@@ -254,7 +254,7 @@ sub EntryPage
             # don't show info from suspended users
             # FIXME: ideally the load_comments should only return these
             # items if there are children, otherwise they should be hidden entirely
-            if ($pu && $pu->{'statusvis'} eq "S" && !$viewsome) {
+            if ($pu && $pu->is_suspended && !$viewsome) {
                 $s2com->{'text'} = "";
                 $s2com->{'subject'} = "";
                 $s2com->{'full'} = 0;
@@ -427,7 +427,7 @@ sub EntryPage_entry
         }
     }
 
-    if (($pu && $pu->{'statusvis'} eq 'S') && !$viewsome) {
+    if ( $pu && $pu->is_suspended && ! $viewsome ) {
         $opts->{'suspendeduser'} = 1;
         return;
     }
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2/FriendsPage.pm
--- a/cgi-bin/LJ/S2/FriendsPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2/FriendsPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -246,7 +246,7 @@ sub FriendsPage
         my $po = $posters{$posterid} || $friends{$posterid};
 
         # don't allow posts from suspended users or suspended posts
-        if ($po->{'statusvis'} eq 'S' || ($entry_obj && $entry_obj->is_suspended_for($remote))) {
+        if ($po->is_suspended || ($entry_obj && $entry_obj->is_suspended_for($remote))) {
             $hiddenentries++; # Remember how many we've skipped for later
             next ENTRY;
         }
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2/MonthPage.pm
--- a/cgi-bin/LJ/S2/MonthPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2/MonthPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -122,7 +122,7 @@ sub MonthPage
 
         # don't show posts from suspended users or suspended posts
         next unless $pu{$posterid};
-        next ENTRY if $pu{$posterid}->{'statusvis'} eq 'S' && !$viewsome;
+        next ENTRY if $pu{$posterid}->is_suspended && !$viewsome;
         next ENTRY if $entry_obj && $entry_obj->is_suspended_for($remote);
 
 	if ($LJ::UNICODE && $logprops{$itemid}->{'unknown8bit'}) {
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2/RecentPage.pm
--- a/cgi-bin/LJ/S2/RecentPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2/RecentPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -97,8 +97,7 @@ sub RecentPage
         security      => $opts->{securityfilter},
         itemids       => \@itemids,
         dateformat    => 'S2',
-        order         => ( $u->{journaltype} eq 'C' || $u->{journaltype} eq 'Y' )  # community or syndicated
-                          ? 'logtime' : '',
+        order         => ( $u->is_community || $u->is_syndicated ) ? 'logtime' : '',
         err           => \$err,
     );
 
@@ -153,7 +152,7 @@ sub RecentPage
         $itemnum++;
 
         # don't show posts from suspended users or suspended posts unless the user doing the viewing says to (and is allowed)
-        next ENTRY if $apu{$posterid} && $apu{$posterid}->{'statusvis'} eq 'S' && !$viewsome;
+        next ENTRY if $apu{$posterid} && $apu{$posterid}->is_suspended && !$viewsome;
         next ENTRY if $entry_obj && $entry_obj->is_suspended_for($remote);
 
         if ($LJ::UNICODE && $logprops{$itemid}->{'unknown8bit'}) {
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/S2/ReplyPage.pm
--- a/cgi-bin/LJ/S2/ReplyPage.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/S2/ReplyPage.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -159,7 +159,7 @@ sub ReplyPage
         my $comment_userpic;
         if ($parpost->{'posterid'}) {
             $pu = LJ::load_userid($parpost->{'posterid'});
-            return $opts->{handler_return} = 403 if $pu->{statusvis} eq 'S'; # do not show comments by suspended users
+            return $opts->{handler_return} = 403 if $pu->is_suspended; # do not show comments by suspended users
             $s2poster = UserLite($pu);
 
             my $pickw = LJ::Entry->userpic_kw_from_props($parpost->{'props'});
@@ -169,7 +169,7 @@ sub ReplyPage
         LJ::CleanHTML::clean_comment(\$parpost->{'body'},
                                      {
                                          'preformatted' => $parpost->{'props'}->{'opt_preformatted'},
-                                         'anon_comment' => !$parpost->{posterid} || $pu->{'journaltype'} eq 'I',
+                                         'anon_comment' => !$parpost->{posterid} || $pu->is_identity,
                                      });
 
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/Session.pm
--- a/cgi-bin/LJ/Session.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/Session.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -604,7 +604,7 @@ sub session_from_master_cookie {
         }
 
         # locked accounts can't be logged in
-        if ($u->{statusvis} eq 'L') {
+        if ( $u->is_locked ) {
             $err->("User account is locked.");
             next COOKIE;
         }
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/SixDegrees.pm
--- a/cgi-bin/LJ/SixDegrees.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/SixDegrees.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -11,7 +11,7 @@ sub find_path
 {
     my ($fu, $tu, $timeout) = @_;
     return () unless $fu && $tu;
-    return () unless $fu->{journaltype} eq "P" && $tu->{journaltype} eq "P";
+    return () unless $fu->is_individual && $tu->is_individual;
 
     $LJ::SixDegrees::MEMC_EXPIRE ||= 86400;
 
@@ -178,7 +178,7 @@ sub link_fetch
     my @clean_list;  # visible users, not communities
     foreach my $uid (@$listref) {
 	my $u = $cache->{$uid};
-	next unless $u && $u->{'statusvis'} eq "V" && $u->{'journaltype'} eq "P";
+	next unless $u && $u->is_visible && $u->is_individual;
 	push @clean_list, $uid;
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/LJ/User.pm	Thu Jul 30 11:38:40 2009 -0500
@@ -405,6 +405,10 @@ sub is_expunged {
     return $u->statusvis eq 'X' || $u->clusterid == 0;
 }
 
+sub is_inactive {
+    my $u = shift;
+    return $u->statusvis eq 'D' || $u->statusvis eq 'X' || $u->statusvis eq 'S';
+}
 
 sub is_locked {
     my $u = shift;
@@ -662,6 +666,12 @@ sub is_person {
     return $u->{journaltype} eq "P";
 }
 *is_personal = \&is_person;
+
+
+sub is_redirect {
+    my $u = shift;
+    return $u->{journaltype} eq "R";
+}
 
 
 sub is_syndicated {
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/ljfeed.pl
--- a/cgi-bin/ljfeed.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/ljfeed.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -62,7 +62,7 @@ sub make_feed
     # for syndicated accounts, redirect to the syndication URL
     # However, we only want to do this if the data we're returning
     # is similar. (Not FOAF, for example)
-    if ($u->{'journaltype'} eq 'Y') {
+    if ( $u->is_syndicated ) {
         my $synurl = $dbr->selectrow_array("SELECT synurl FROM syndicated WHERE userid=$u->{'userid'}");
         unless ($synurl) {
             return 'No syndication URL available.';
@@ -175,7 +175,7 @@ sub make_feed
         my $ditemid = $itemid*256 + $it->{'anum'};
         my $entry_obj = LJ::Entry->new($u, ditemid => $ditemid);
 
-        next ENTRY if $posteru{$it->{'posterid'}} && $posteru{$it->{'posterid'}}->{'statusvis'} eq 'S';
+        next ENTRY if $posteru{$it->{'posterid'}} && $posteru{$it->{'posterid'}}->is_suspended;
         next ENTRY if $entry_obj && $entry_obj->is_suspended_for($remote);
 
         if ($LJ::UNICODE && $logprops{$itemid}->{'unknown8bit'}) {
@@ -589,12 +589,12 @@ sub create_view_atom
 # create a FOAF page for a user
 sub create_view_foaf {
     my ($journalinfo, $u, $opts) = @_;
-    my $comm = ($u->{journaltype} eq 'C');
+    my $comm = $u->is_community;
 
     my $ret;
 
     # return nothing if we're not a user
-    unless ($u->{journaltype} eq 'P' || $comm) {
+    unless ( $u->is_person || $comm ) {
         $opts->{handler_return} = 404;
         return undef;
     }
@@ -713,12 +713,12 @@ sub create_view_foaf {
     }
 
     # user schools
-    if ($u->{'journaltype'} ne 'Y' &&
+    if (!$u->is_syndicated &&
         LJ::is_enabled('schools')  &&
         ($u->{'opt_showschools'} eq '' || $u->{'opt_showschools'} eq 'Y')) {
 
         my $schools = LJ::Schools::get_attended($u);
-        if ($u->{'journaltype'} ne 'C' && $schools && %$schools ) {
+        if ( ! $u->is_community && $schools && %$schools ) {
              my @links;
              foreach my $sid (sort { $schools->{$a}->{year_start} <=> $schools->{$b}->{year_start} } keys %$schools) {
                  my $link = "$LJ::SITEROOT/schools/" .
@@ -777,7 +777,7 @@ sub create_view_foaf {
     foreach my $trustid ( @ids ) {
         next if $trustid == $u->id;
         my $fu = $users->{$trustid};
-        next if $fu->{statusvis} =~ /[DXS]/ || $fu->{journaltype} ne 'P';
+        next if $fu->is_inactive || ! $fu->is_person;
 
         my $name = LJ::exml($fu->name_raw);
         my $tagline = LJ::exml($fu->prop('journaltitle') || '');
@@ -805,7 +805,7 @@ sub create_view_foaf {
 # YADIS capability discovery
 sub create_view_yadis {
     my ($journalinfo, $u, $opts) = @_;
-    my $person = ($u->{journaltype} eq 'P');
+    my $person = $u->is_person;
 
     my $ret = "";
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/ljprotocol.pl
--- a/cgi-bin/ljprotocol.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/ljprotocol.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -462,7 +462,7 @@ sub sendmessage
     return undef unless authenticate($req, $err, $flags);
     my $u = $flags->{'u'};
 
-    return fail($err, 305) if $u->statusvis eq 'S'; # suspended cannot send private messages
+    return fail($err, 305) if $u->is_suspended; # suspended cannot send private messages
 
     my $msg_limit = LJ::get_cap($u, "usermessage_length");
 
@@ -541,7 +541,7 @@ sub login
         if $ver>=1 and not $LJ::UNICODE;
 
     # do not let locked people log in
-    return fail($err, 308) if $u->{statusvis} eq 'L';
+    return fail($err, 308) if $u->is_locked;
 
     ## return a message to the client to be displayed (optional)
     login_message($req, $res, $flags);
@@ -925,7 +925,7 @@ sub common_event_validation
             # only people should have unknown8bit entries.
             my $uowner = $flags->{u_owner} || $flags->{u};
             return fail($err,207,'Posting in a community with international or special characters require a Unicode-capable LiveJournal client.  Download one at http://www.livejournal.com/download/.')
-                if $uowner->{journaltype} ne 'P';
+                if ! $uowner->is_person;
 
             # so rest of site can change chars to ? marks until
             # default user's encoding is set.  (legacy support)
@@ -1019,17 +1019,16 @@ sub postevent
     return fail($err,200) unless $req->{'event'} =~ /\S/;
 
     ### make sure community or identity journals don't post
-    return fail($err,150) if ($u->{'journaltype'} eq "C" ||
-                              $u->{'journaltype'} eq "I");
+    return fail($err,150) if $u->is_community || $u->is_identity;
 
     # suspended users can't post
-    return fail($err,305) if ($u->{'statusvis'} eq "S");
+    return fail($err,305) if $u->is_suspended;
 
     # memorials can't post
-    return fail($err,309) if $u->{statusvis} eq 'M';
+    return fail($err,309) if $u->is_memorial;
 
     # locked accounts can't post
-    return fail($err,308) if $u->{statusvis} eq 'L';
+    return fail($err,308) if $u->is_locked;
 
     # check the journal's read-only bit
     return fail($err,306) if LJ::get_cap($uowner, "readonly");
@@ -1047,7 +1046,7 @@ sub postevent
     return fail($err,317) if $uowner->is_readonly;
 
     # can't post to deleted/suspended community
-    return fail($err,307) unless $uowner->{'statusvis'} eq "V";
+    return fail($err,307) unless $uowner->is_visible;
 
     # must have a validated email address to post to a community
     # unless this is approved from the mod queue (we'll error out initially, but in case they change later)
@@ -1117,7 +1116,7 @@ sub postevent
     }
 
     # are they trying to post back in time?
-    if ($posterid == $ownerid && $u->{'journaltype'} ne 'Y' &&
+    if ($posterid == $ownerid && !$u->is_syndicated &&
         !$time_was_faked && $u->{'newesteventtime'} &&
         $eventtime lt $u->{'newesteventtime'} &&
         !$req->{'props'}->{'opt_backdated'}) {
@@ -1162,7 +1161,7 @@ sub postevent
     # don't allow backdated posts in communities
     return fail($err,152) if
         ($req->{'props'}->{"opt_backdated"} &&
-         $uowner->{'journaltype'} ne "P");
+         ! $uowner->is_person);
 
     # do processing of embedded polls (doesn't add to database, just
     # does validity checking)
@@ -1171,7 +1170,7 @@ sub postevent
     {
         return fail($err,301,"Your account type doesn't permit creating polls.")
             unless (LJ::get_cap($u, "makepoll")
-                    || ($uowner->{'journaltype'} eq "C"
+                    || ($uowner->is_community
                         && LJ::get_cap($uowner, "makepoll")));
 
         my $error = "";
@@ -1239,7 +1238,7 @@ sub postevent
     };
 
     # if posting to a moderated community, store and bail out here
-    if ($uowner->{'journaltype'} eq 'C' && $uowner->{'moderated'} && !$flags->{'nomod'}) {
+    if ($uowner->is_community && $uowner->{'moderated'} && !$flags->{'nomod'}) {
         # don't moderate admins, moderators & pre-approved users
         my $dbh = LJ::get_db_writer();
         my $relcount = $dbh->selectrow_array("SELECT COUNT(*) FROM reluser ".
@@ -1346,7 +1345,7 @@ sub postevent
     $getlock->(); return $res if $res_done;
 
     # do rate-checking
-    if ($u->{'journaltype'} ne "Y" && ! LJ::rate_log($u, "post", 1)) {
+    if ( ! $u->is_syndicated && ! LJ::rate_log($u, "post", 1) ) {
         return $fail->($err,405);
     }
 
@@ -1586,7 +1585,7 @@ sub editevent
     return fail($err,306) if LJ::get_cap($uowner, "readonly");
 
     # can't edit in deleted/suspended community
-    return fail($err,307) unless $uowner->{'statusvis'} eq "V" || $uowner->is_readonly;
+    return fail($err,307) unless $uowner->is_visible || $uowner->is_readonly;
 
     my $dbcm = LJ::get_cluster_master($uowner);
     return fail($err,306) unless $dbcm;
@@ -1699,7 +1698,7 @@ sub editevent
     # don't allow backdated posts in communities
     return fail($err,152) if
         ($req->{'props'}->{"opt_backdated"} &&
-         $uowner->{'journaltype'} ne "P");
+         ! $uowner->is_person);
 
     # make year/mon/day/hour/min optional in an edit event,
     # and just inherit their old values
@@ -1926,7 +1925,7 @@ sub getevents
     return fail($err,502) unless $dbcr && $dbr;
 
     # can't pull events from deleted/suspended journal
-    return fail($err,307) unless $uowner->{'statusvis'} eq "V" || $uowner->is_readonly;
+    return fail($err,307) unless $uowner->is_visible || $uowner->is_readonly;
 
     my $reject_code = $LJ::DISABLE_PROTOCOL{getevents};
     if (ref $reject_code eq "CODE") {
@@ -1937,7 +1936,7 @@ sub getevents
 
     # if this is on, we sort things different (logtime vs. posttime)
     # to avoid timezone issues
-    my $is_community = ($uowner->{journaltype} eq "C");
+    my $is_community = $uowner->is_community;
 
     # in some cases we'll use the master, to ensure there's no
     # replication delay.  useful cases: getting one item, use master
@@ -2290,7 +2289,7 @@ sub sessiongenerate {
     };
 
     # do not let locked people do this
-    return fail($err, 308) if $u->{statusvis} eq 'L';
+    return fail($err, 308) if $u->is_locked;
 
     my $sess = LJ::Session->create($u, %$sess_opts);
 
@@ -2337,7 +2336,7 @@ sub list_friends
                    grep { $us->{$_->[0]} } @frow)
     {
         my $u = $us->{$f->[0]};
-        next if $opts->{'friendof'} && $u->{'statusvis'} ne 'V';
+        next if $opts->{'friendof'} && ! $u->is_visible;
 
         my $r = {
             'username' => $u->{'user'},
@@ -2373,13 +2372,13 @@ sub list_friends
             'C' => 'community',
             'Y' => 'syndicated',
             'I' => 'identity',
-        }->{$u->{'journaltype'}} if $u->{'journaltype'} ne 'P';
+        }->{$u->journaltype} unless $u->is_person;
 
         $r->{"status"} = {
             'D' => "deleted",
             'S' => "suspended",
             'X' => "purged",
-        }->{$u->{'statusvis'}} if $u->{'statusvis'} ne 'V';
+        }->{$u->statusvis} unless $u->is_visible;
 
         push @$res, $r;
         # won't happen for zero limit (which means no limit)
@@ -2709,7 +2708,7 @@ sub authenticate
     }
 
     return fail( $err, 100 ) unless $u;
-    return fail( $err, 100 ) if $u->{statusvis} eq 'X';
+    return fail( $err, 100 ) if $u->is_expunged;
     return fail( $err, 505 ) unless $u->{clusterid};
 
     my $r = DW::Request->get;
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/supportlib.pl
--- a/cgi-bin/supportlib.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/supportlib.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -221,7 +221,7 @@ sub can_append
     my ($sp, $remote, $auth) = @_;
     if (is_poster($sp, $remote, $auth)) { return 1; }
     return 0 unless $remote;
-    return 0 unless $remote->{'statusvis'} eq "V";
+    return 0 unless $remote->is_visible;
     if ($sp->{_cat}->{'allow_screened'}) { return 1; }
     if (can_help($sp, $remote)) { return 1; }
     return 0;
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/taglib.pl
--- a/cgi-bin/taglib.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/taglib.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -461,7 +461,7 @@ sub can_add_tags {
     my $u = LJ::want_user(shift);
     my $remote = LJ::want_user(shift);
     return undef unless $u && $remote;
-    return undef unless $remote->{journaltype} eq 'P';
+    return undef unless $remote->is_person;
     return undef if LJ::is_banned($remote, $u);
 
     # get permission hashref and check it; note that we fall back to the control
@@ -486,7 +486,7 @@ sub can_control_tags {
     my $u = LJ::want_user(shift);
     my $remote = LJ::want_user(shift);
     return undef unless $u && $remote;
-    return undef unless $remote->{journaltype} eq 'P';
+    return undef unless $remote->is_person;
     return undef if LJ::is_banned($remote, $u);
 
     # get permission hashref and check it
@@ -545,10 +545,10 @@ sub get_permission_levels {
 
     # return defaults for accounts
     unless ($u->{opt_tagpermissions}) {
-        if ($u->{journaltype} eq 'C') {
+        if ( $u->is_community ) {
             # communities are members (friends) add, private (maintainers) control
             return { add => 'friends', control => 'private' };
-        } elsif ($u->{journaltype} eq 'P') {
+        } elsif ( $u->is_person ) {
             # people let friends add, self control
             return { add => 'private', control => 'private' };
         } else {
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/talklib.pl
--- a/cgi-bin/talklib.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/talklib.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -1211,7 +1211,7 @@ sub talkform {
 
     # make sure journal isn't locked
     return "Sorry, this journal is locked and comments cannot be posted to it or edited at this time."
-        if $journalu->{statusvis} eq 'L';
+        if $journalu->is_locked;
 
     # check max comments only if posting a new comment (not when editing)
     unless ($editid) {
@@ -2844,7 +2844,7 @@ sub init {
     return $bmlerr->('talk.error.nojournal') unless $journalu;
     return $err->($LJ::MSG_READONLY_USER) if LJ::get_cap($journalu, "readonly");
 
-    return $err->("Account is locked, unable to post or edit a comment.") if $journalu->{statusvis} eq 'L';
+    return $err->("Account is locked, unable to post or edit a comment.") if $journalu->is_locked;
 
     my $r = BML::get_request();
     $r->notes->{journalid} = $journalu->{'userid'}
@@ -2941,8 +2941,7 @@ sub init {
                     $bmlerr->("$SC.error.noopenid");
                 }
 
-                unless ($up->{'journaltype'} eq "P" ||
-                        ($up->{'journaltype'} eq "I" && $cookie_auth)) {
+                unless ( $up->is_person || ( $up->is_identity && $cookie_auth ) ) {
                     $bmlerr->("$SC.error.postshared");
                 }
 
@@ -3124,7 +3123,7 @@ sub init {
     $init->{parpost} = $parpost;
 
     # don't allow anonymous comments on syndicated items
-    if ($journalu->{'journaltype'} eq "Y" && $journalu->{'opt_whocanreply'} eq "all") {
+    if ( $journalu->is_syndicated && $journalu->{'opt_whocanreply'} eq "all" ) {
         $journalu->{'opt_whocanreply'} = "reg";
     }
 
@@ -3139,16 +3138,13 @@ sub init {
     }
 
     if ($up) {
-        if ($up->{'status'} eq "N" && $up->{'journaltype'} ne "I" && !LJ::run_hook("journal_allows_unvalidated_commenting", $journalu)) {
+        if ($up->{'status'} eq "N" && !$up->is_identity && !LJ::run_hook("journal_allows_unvalidated_commenting", $journalu)) {
             $err->(BML::ml("$SC.error.noverify2", {'aopts' => "href='$LJ::SITEROOT/register.bml'"}));
         }
-        if ($up->{'statusvis'} eq "D") {
-            $bmlerr->("$SC.error.deleted");
-        } elsif ($up->{'statusvis'} eq "S") {
-            $bmlerr->("$SC.error.suspended");
-        } elsif ($up->{'statusvis'} eq "X") {
-            $bmlerr->("$SC.error.purged");
-        }
+
+        $bmlerr->("$SC.error.purged")    if $up->is_expunged;
+        $bmlerr->("$SC.error.deleted")   if $up->is_deleted;
+        $bmlerr->("$SC.error.suspended") if $up->is_suspended;
     }
 
     if ($journalu->{'opt_whocanreply'} eq "friends") {
@@ -3590,7 +3586,7 @@ sub check_rate {
     return 1 unless @LJ::MEMCACHE_SERVERS;
 
     # return right away if the account is suspended
-    return 0 if $remote && $remote->{'statusvis'} =~ /[SD]/;
+    return 0 if $remote && ( $remote->is_suspended || $remote->is_deleted );
 
     # allow some users to be very aggressive commenters and authors. i.e. our bots.
     return 1 if $remote 
diff -r 17d6af7ec9b3 -r b31a63fd1737 cgi-bin/weblib.pl
--- a/cgi-bin/weblib.pl	Thu Jul 30 09:32:00 2009 -0500
+++ b/cgi-bin/weblib.pl	Thu Jul 30 11:38:40 2009 -0500
@@ -3643,12 +3643,11 @@ sub statusvis_message_js {
 
     return "" unless $u;
 
-    my $statusvis = $u->statusvis;
-    return "" unless $statusvis =~ /^[LMO]$/;
+    return "" unless $u->is_locked || $u->is_memorial || $u->is_readonly;
 
-    my $statusvis_full = "locked" if $statusvis eq "L";
-    $statusvis_full = "memorial" if $statusvis eq "M";
-    $statusvis_full = "readonly" if $statusvis eq "O";
+    my $statusvis_full = "locked" if $u->is_locked;
+    $statusvis_full = "memorial" if $u->is_memorial;
+    $statusvis_full = "readonly" if $u->is_readonly;
 
     LJ::need_res("js/statusvis_message.js");
     return "<script>Site.StatusvisMessage=\"" . LJ::Lang::ml("statusvis_message.$statusvis_full") . "\";</script>";
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/accountstatus.bml
--- a/htdocs/accountstatus.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/accountstatus.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -49,7 +49,7 @@ body<=
 
         # invalid statusvis
         return LJ::bad_input($ML{'.error.invalid'})
-            unless $statusvis eq 'D' || $statusvis eq 'V';
+            unless $u->is_deleted || $u->is_visible;
 
         # no need to change?
         return $ok->(BML::ml('.message.nochange', {'statusvis' => $statusvis{$statusvis} }))
@@ -62,7 +62,7 @@ body<=
         my @date = localtime(time);
         my $date = sprintf("%02d:%02d %02d/%02d/%04d", @date[2,1], $date[3], $date[4]+1, $date[5]+1900);
 
-        if ($statusvis eq 'D') {
+        if ( $u->is_deleted ) {
             
             $res = $u->set_deleted;
 
@@ -76,7 +76,7 @@ body<=
                     datetime => $date,
                 })->fire;
             }
-        } elsif ($statusvis eq 'V') {
+        } elsif ( $u->is_visible ) {
             ## Restore previous statusvis of journal. It may be different
             ## from 'V', it may be read-only, or locked, or whatever.
             my @previous_status = grep { $_ ne 'D' } $u->get_previous_statusvis;
@@ -110,7 +110,7 @@ body<=
         # success
         $ret .= $ok->(BML::ml('.message.success', {'statusvis' => $statusvis{$statusvis} }));
 
-        if ($statusvis eq 'D') {
+        if ( $u->is_deleted ) {
             $ret .= "<?p $ML{'.message.deleted'} p?>";
 
             if ( $u->is_person ) {
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/admin/userlog.bml
--- a/htdocs/admin/userlog.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/admin/userlog.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -51,7 +51,7 @@ FORM
         unless $u;
 
     return $err->("User is deleted and purged.")
-        if $u->statusvis eq "X";
+        if $u->is_expunged;
 
     my $dbcr = LJ::get_cluster_reader($u);
     return $err->("Unable to get user cluster reader.")
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/allpics.bml
--- a/htdocs/allpics.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/allpics.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -80,7 +80,7 @@
     }
 
     # redirect renamed users
-    if ($u->{'journaltype'} eq "R") {
+    if ( $u->is_redirect ) {
         LJ::load_user_props($u, "renamedto");
         return BML::redirect("$LJ::SITEROOT/allpics.bml?user=$u->{'renamedto'}")
             if $u->{'renamedto'};
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/birthdays.bml
--- a/htdocs/birthdays.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/birthdays.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -17,7 +17,7 @@ body<=
         return BML::ml('.error.invaliduser', { user => LJ::ehtml($GET{user}) })
             unless $u;
         return BML::ml('.error.badstatus', { user => LJ::ljuser($u->{user}) })
-            if $u->{statusvis} ne 'V';
+            unless $u->is_visible;
     }
 
     my $body;
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/join.bml
--- a/htdocs/community/join.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/join.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -15,7 +15,7 @@ body<=
 
     # bad statusvis?
     return "<?h1 $ML{'.error.statusvis.title'} h1?><?p $ML{'.error.statusvis.body'} p?>"
-        unless $remote->{statusvis} eq 'V';
+        unless $remote->is_visible;
 
     # make sure a community doesn't join a community
     return "<?h1 $ML{'Error'} h1?><?p $ML{'.label.commlogged'} p?>"
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/leave.bml
--- a/htdocs/community/leave.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/leave.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -26,7 +26,7 @@
 
     # error check
     return $error->($ML{'.label.infoerror'})
-        unless $cu && $cu->{journaltype} =~ /[CS]/;
+        unless $cu && $cu->is_community;
 
     # used in both paths below
     my $ecname = LJ::ehtml($cu->{'name'});
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/manage.bml
--- a/htdocs/community/manage.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/manage.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -20,7 +20,7 @@ body<=
     }
 
     return "<?h1 $ML{'Error'} h1?><?p $ML{'.error.badaccounttype'} p?>"
-       unless $remote->{journaltype} eq 'P';
+       unless $remote->is_person;
 
     $ret .= "<?p $ML{'.commlist.text'} p?>";
     $ret .= "<div style='margin: 15px 0'>";
@@ -49,7 +49,7 @@ body<=
        $sth->execute;
        while (my ($uid, $membership) = $sth->fetchrow_array) {
            my $cu = $us->{$uid};
-           next unless $cu && $cu->{statusvis} eq "V" || $cu->is_readonly;
+           next unless $cu && ( $cu->is_visible || $cu->is_readonly );
            $names{$uid} = [ $cu->{user}, $cu->{name}, -1 ];
            if ($mods{$uid}) {
                $modcount{$uid} = $names{$uid}[2] = LJ::get_mod_queue_count( $uid );
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/members.bml
--- a/htdocs/community/members.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/members.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -104,7 +104,7 @@ body<=
 
             my $target_disp = LJ::ljuser($target);
 
-            unless ($target->{statusvis} eq 'V') {
+            unless ( $target->is_visible ) {
                 push @add_errors, BML::ml( '.error.notactive',
                                            { user => $target_disp } );
                 next;
@@ -118,7 +118,7 @@ body<=
                 next;
             }
 
-            unless ($target->{'journaltype'} eq 'P') {
+            unless ( $target->is_person ) {
                 push @add_errors, BML::ml( '.error.invaliduser',
                                            { user => $target_disp,
                                              type => $target->{'journaltype'} } );
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/sentinvites.bml
--- a/htdocs/community/sentinvites.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/sentinvites.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -40,7 +40,7 @@ body<=
     }
 
     # make sure it is a comm
-    unless ($c->{'journaltype'} eq 'C') {
+    unless ( $c->is_community ) {
         $ret .= "<?h1 $ML{'Error'} h1?><?p ";
         $ret .= BML::ml('.error.notcomm', { 'user' => LJ::ljuser($c) });
         $ret .= " p?>";
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/settings.bml
--- a/htdocs/community/settings.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/settings.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -41,7 +41,7 @@ body<=
         return $ret;
     }
 
-    unless ($remote->{'journaltype'} eq 'P') {
+    unless ( $remote->is_person ) {
         $ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'.error.maintainertype'} p?>";
         return $ret;
     }
@@ -92,7 +92,7 @@ body<=
         }
 
         # if it's already a community, don't let them turn it into a community
-        if ($mode eq 'create' && !%errors && $cu->{journaltype} eq 'C') {
+        if ( $mode eq 'create' && !%errors && $cu->is_community ) {
             $errors{'username'} = $ML{'.error.alreadycomm'};
         }
         
@@ -206,7 +206,7 @@ body<=
             return BML::redirect("$LJ::SITEROOT/community/manage.bml");
         }
 
-        unless ($c->{'journaltype'} eq 'C') {
+        unless ( $c->is_community ) {
             $ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'.error.notcomm'} p?>";
             return $ret;
         } 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/community/transfer.bml
--- a/htdocs/community/transfer.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/community/transfer.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -10,7 +10,7 @@
     return "<?needlogin?>" unless $remote;
 
     # bad statusvis?
-    unless ($remote->{statusvis} eq 'V') {
+    unless ( $remote->is_visible ) {
         $body = "<?h1 $ML{'.badstatus.title'} h1?><?p $ML{'.badstatus.body'} p?>";
         return;
     }
@@ -25,8 +25,8 @@
         # the rest of the errors assume a community exists
         if ($cu) {
             # status/type errors
-            $errors{username} = $ML{'.error.notcomm'} unless $cu->{journaltype} eq 'C';
-            $errors{username} = $ML{'.error.badstatus'} if !%errors && $cu->{statusvis} !~ /[VD]/;
+            $errors{username} = $ML{'.error.notcomm'} unless $cu->is_community;
+            $errors{username} = $ML{'.error.badstatus'} unless %errors || $cu->is_visible || $cu->is_deleted;
 
             # are they already a maintainer?
             $errors{username} = $ML{'.error.alreadyadmin'} if !%errors && LJ::can_manage($remote, $cu);
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/delcomment.bml
--- a/htdocs/delcomment.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/delcomment.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -48,7 +48,7 @@ _info?><?_code
 
     # can't delete if you're suspended
     return $bad_input->($ML{'.error.suspended'})
-        if $remote->{statusvis} eq 'S';
+        if $remote->is_suspended;
 
     return $error->($LJ::MSG_READONLY_USER) if LJ::get_cap($u, "readonly");
 
@@ -84,7 +84,7 @@ _info?><?_code
 
     # can $remote delete this comment?
     unless (LJ::Talk::can_delete($remote, $u, $jposter, $tp->{'userpost'})) {
-        my $err = $u->{'journaltype'} eq 'C' ? $ML{'.error.cantdelete.comm'} : $ML{'.error.cantdelete'};
+        my $err = $u->is_community ? $ML{'.error.cantdelete.comm'} : $ML{'.error.cantdelete'};
         return $error->($err);
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/editjournal.bml
--- a/htdocs/editjournal.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/editjournal.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -29,7 +29,7 @@ body<=
     return LJ::bad_input( $ML{'error.invalidauth'} )
         unless $u;
     return LJ::bad_input( $ML{'error.person'} )
-        unless $u->{'journaltype'} eq 'P';
+        unless $u->is_person;
 
     # are we modify a community post?
     my $usejournal = $GET{'usejournal'} || $POST{'usejournal'} || $GET{'journal'};
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/edittags.bml
--- a/htdocs/edittags.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/edittags.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -23,7 +23,7 @@ body<=
     my $u = LJ::load_user($journal);
     return $err->($ML{'.invalid.journal'}) unless $u;
     return $err->($ML{'.readonly.journal'}) if $u->is_readonly;
-    return $err->($ML{'.invalid.journal'}) unless $u->{statusvis} eq 'V';
+    return $err->($ML{'.invalid.journal'}) unless $u->is_visible;
 
     my $ditemid = ($GET{itemid} || $POST{itemid})+0;
     my $anum = $ditemid % 256;
@@ -42,7 +42,7 @@ body<=
 
         unless ($remote->can_manage($u) && !$pu->is_suspended) {
             return $err->($ML{'.readonly.poster'}) if $pu->is_readonly;
-            return $err->($ML{'.invalid.journal'}) if $pu->{statusvis} ne 'V';
+            return $err->($ML{'.invalid.journal'}) unless $pu->is_visible;
         }
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/inbox/compose.bml
--- a/htdocs/inbox/compose.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/inbox/compose.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -36,7 +36,7 @@ body<=
 
     my @errors;
 
-    push @errors, $ML{'.suspended.cannot.send'} if $remote->statusvis eq 'S';
+    push @errors, $ML{'.suspended.cannot.send'} if $remote->is_suspended;
 
     # Submitted message
     if (LJ::did_post()) {
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/interests.bml
--- a/htdocs/interests.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/interests.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -28,7 +28,7 @@ body<=
 
     my $maxinterests = $remote ? $remote->get_cap( 'interests' ) : 0;
 
-    my $table = sub { $_[0]->{'journaltype'} eq 'C' ? 'comminterests' : 'userinterests' };
+    my $table = sub { $_[0]->is_community ? 'comminterests' : 'userinterests' };
 
     if (!$did_post && $GET{'view'} eq "popular") {
         return $ML{'.popular.disabled'} unless LJ::is_enabled('interests-popular');
@@ -120,7 +120,7 @@ body<=
         }
 
         # if a community, remove any old rows from userinterests
-        if ($remote->{'journaltype'} eq 'C') {
+        if ( $remote->is_community ) {
             $dbh->do("DELETE FROM userinterests WHERE userid=?", undef, $remote->{'userid'});
         }
 
@@ -340,7 +340,7 @@ body<=
         }
 
         # if a community, remove any old rows from userinterests
-        if ($u->{'journaltype'} eq 'C') {
+        if ( $u->is_community ) {
             my $dbh = LJ::get_db_writer();
             $dbh->do("DELETE FROM userinterests WHERE userid=?", undef, $u->{'userid'});
         }
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/login.bml
--- a/htdocs/login.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/login.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -283,7 +283,7 @@
             } else {
                 push @errors, [ purged_user => "$ML{'error.purged.text'}" ] if $u->is_expunged;
                 push @errors, [ community_disabled_login => "$ML{'error.nocommlogin'}" ]
-                    if $u->{'journaltype'} eq 'C' && ! LJ::is_enabled('community-logins');
+                    if $u->is_community && ! LJ::is_enabled('community-logins');
             }
 
             if (LJ::get_cap($u, "readonly")) {
@@ -319,7 +319,7 @@
             }
 
             push @errors, [ account_locked => 'This account is locked and cannot be logged in to at this time.' ]
-                if $u->{statusvis} eq 'L';
+                if $u->is_locked;
 
             if (@errors) {
                 $login_html->();
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/lostinfo.bml
--- a/htdocs/lostinfo.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/lostinfo.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -105,11 +105,11 @@ body<=
             return "<?h1 $title h1?>\n<?p $msg p?>";
         };
 
-        if ($u->{'journaltype'} eq 'Y') {
+        if ( $u->is_syndicated ) {
             return $err->( $ML{'.error.syndicated'} );
         }
 
-        if ($u->{'journaltype'} eq 'C' && !length $u->password) {
+        if ( $u->is_community && ! length $u->password ) {
             # community with no password
             return $err->( $ML{'.error.commnopassword'} );
         }
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/manage/circle/add.bml
--- a/htdocs/manage/circle/add.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/manage/circle/add.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -120,16 +120,16 @@
     my $icon = $u->large_journal_icon;
     if ( $u->is_visible ) {
         # was this a syndicated add?
-        if ($u->{journaltype} eq 'Y') {
+        if ( $u->is_syndicated ) {
             $windowtitle = BML::ml('.confirm.syn.title1'.$add, {'user'=> $user });
             $title = BML::ml('.confirm.syn.title1'.$add, {'icon'=> $icon, 'user'=> $user });
             $body .= "<?p $ML{'.confirm.text1.feed'} p?>";
 
         # Is this account redirected?
-        } elsif ($u->{'journaltype'} eq "R" && $u->prop('renamedto')) {
+        } elsif ( $u->is_redirect && $u->prop('renamedto') ) {
             return BML::redirect("$LJ::SITEROOT/manage/circle/add.bml?user=" . $u->prop('renamedto'));
 
-        } elsif ($u->{'journaltype'} eq "C") {
+        } elsif ( $u->is_community ) {
             $windowtitle = BML::ml('.confirm.title.community'.$add, {'user'=> $user });
             $title = BML::ml('.confirm.title.community'.$add, {'icon'=> $icon, 'user'=> $user });
             unless ( $remote->member_of( $u ) ) {
@@ -140,7 +140,7 @@
                 }
             }
         } else {
-            if ($u->{'journaltype'} eq "I") {
+            if ( $u->is_identity ) {
                $windowtitle = BML::ml('.confirm.title.person'.$add, {'user'=> $u->display_name });
                $title = BML::ml('.confirm.title.person'.$add, {'icon'=> $icon, 'user'=> $u->display_name });
             } else {
@@ -439,7 +439,7 @@
 
     $ret .= "</div>\n";
 
-   if ($u->{'journaltype'} eq "C") {
+   if ( $u->is_community ) {
        $body .= "<br />$ML{'.disclaimer'}";
    }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/manage/index.bml
--- a/htdocs/manage/index.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/manage/index.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -111,7 +111,7 @@ list<=
 
 <?_code
     my $u = $BMLCodeBlock::u;
-    return '' if $u->{'journaltype'} eq 'I';
+    return '' if $u->is_identity;
 
     return '<li><a href="/changepassword.bml" title="<?_ml .information.changepass.about _ml?>"><?_ml .information.changepass _ml?></a></li>';
 _code?>
@@ -122,7 +122,7 @@ _code?>
 
 <?_code
     my $u = $BMLCodeBlock::u;
-    return '' if $u->{'journaltype'} eq 'I';
+    return '' if $u->is_identity;
 
     return '<li><a href="./emailpost.bml" title="<?_ml .information.mobilepost.about _ml?>"><?_ml .information.mobilepost _ml?></a></li>';
 _code?>
@@ -186,7 +186,7 @@ list<=
 list<=
 <?_code
     my $u = $BMLCodeBlock::u;
-    return '' if $u->{'journaltype'} eq 'I';
+    return '' if $u->is_identity;
 
     return '<li><a href="/editjournal.bml" title="<?_ml .entries.edit.about _ml?>"><?_ml /editjournal.bml.title _ml?></a></li>';
 _code?>
@@ -195,7 +195,7 @@ _code?>
 
 <?_code
     my $u = $BMLCodeBlock::u;
-    return '' if $u->{'journaltype'} eq 'I';
+    return '' if $u->is_identity;
     return '' unless LJ::is_enabled('tags');
     my $authas = $BMLCodeBlock::authas;
     return qq(<li><a href="/manage/tags.bml$authas" title="<?_ml .entries.tags.about _ml?>"><?_ml /manage/tags.bml.title2 _ml?></a></li>);
@@ -233,7 +233,7 @@ block?>
 
 <?_code
     my $u = $BMLCodeBlock::u;
-    return '' if $u->{'journaltype'} eq 'I';
+    return '' if $u->is_identity;
 
     return qq(
 <?block
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/mobile/index.bml
--- a/htdocs/mobile/index.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/mobile/index.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -25,7 +25,7 @@
         $ret .= "<li>" . BML::ml( ".options.logged_in", { aopts => "href='login'" } );
         $ret .= $u->display_name . "</li>";
         $ret .= "<li>" . BML::ml( ".options.post", { aopts => "href='post'", sitename => $LJ::SITENAMESHORT } ). "</li>"
-            unless $u->{'journaltype'} eq 'I';
+            unless $u->is_identity;
         $ret .= "<li>" . BML::ml( ".options.readingpage", { aopts => "href='read'" } ) . "</li>";
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/multisearch.bml
--- a/htdocs/multisearch.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/multisearch.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -39,7 +39,7 @@
                 # presumably users will start registering usernames that match our site navigation tags,
                 # so let's preempt that and throw them into a lame bottom section when site-defined tags
                 # are alse present.
-                $last_is_untrusted = 1 if $u->{statusvis} eq "V";
+                $last_is_untrusted = 1 if $u->is_visible;
             }
         }
 
@@ -81,7 +81,7 @@
                 } else {
                     $link = "<a href=\"" . LJ::ehtml($dst->url) . "\">" . LJ::ehtml($dst->title) . "</a>";
                 }
-                if (!$lju || ($lju && $lju->{statusvis} eq "V")) {
+                if ( ! $lju || $lju->is_visible ) {
                     $body .= "<li>$link</li>\n";
                 }
             }
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/register.bml
--- a/htdocs/register.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/register.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -85,8 +85,8 @@ body<=
              BML::ml('.error.emailchanged', { aopts => "href='$LJ::SITEROOT/register.bml'" }) . " p?>";
      }
 
-     ## if the user is OpenID, prove that he is human
-     if ($u->{journaltype} eq 'I' && LJ::is_enabled("recaptcha")) {
+     ## if the user is OpenID, prove that he or she is human
+     if ( $u->is_identity && LJ::is_enabled("recaptcha") ) {
         require Captcha::reCAPTCHA;
         my $c = Captcha::reCAPTCHA->new;
         if ($POST{recaptcha_response_field}) {
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/support/see_request.bml
--- a/htdocs/support/see_request.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/support/see_request.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -876,7 +876,7 @@ body<=
     my $validationnag;
     if (!(LJ::isu($u) && ($u->{'status'} eq 'T')) &&
         ($u->{'status'} eq "N" || $u->{'status'} eq "T") &&
-        $u->{'journaltype'} ne 'I' && ! $is_poster) {
+        ! $u->is_identity && ! $is_poster) {
         my $reminder = LJ::load_include('validationreminder');
         $validationnag .= "\n\n$reminder" if $reminder;
     }
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/talkpost.bml
--- a/htdocs/talkpost.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/talkpost.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -57,7 +57,7 @@ body<=
     return $LJ::MSG_READONLY_USER if $LJ::CLUSTER_DOWN{0} || ! $dbcr;
 
     # redirect if account was renamed
-    if ($u->{'journaltype'} eq "R") {
+    if ( $u->is_redirect ) {
         LJ::load_user_props($u, "renamedto");
         if ($u->{'renamedto'} ne "") {
             my $id = $FORM{'itemid'}+0;
@@ -185,7 +185,7 @@ body<=
         if $parpost->{'state'} eq "F";
 
     # don't allow anonymous comments on syndicated items
-    if ($u->{'journaltype'} eq "Y" && $u->{'opt_whocanreply'} eq "all") {
+    if ( $u->is_syndicated && $u->{'opt_whocanreply'} eq "all" ) {
         $u->{'opt_whocanreply'} = "reg";
     }
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/talkread.bml
--- a/htdocs/talkread.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/talkread.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -80,7 +80,7 @@ body<=
     }
 
     # redirect if account was renamed
-    if ($u->{'journaltype'} eq "R") {
+    if ( $u->is_redirect ) {
         LJ::load_user_props($u, "renamedto");
         if ($u->{'renamedto'} ne "") {
             return BML::redirect(LJ::journal_base($u->{'renamedto'}) . "/$ditemid.html");
@@ -670,7 +670,7 @@ body<=
                 $ret .= "</td></tr><tr><td class='commentbody usercontent'>";
 
                 LJ::CleanHTML::clean_comment(\$post->{'body'}, { 'preformatted' => $post->{'props'}->{'opt_preformatted'},
-                                                                 'anon_comment' => (!$pu || $pu->{'journaltype'} eq 'I'),
+                                                                 'anon_comment' => ( !$pu || $pu->is_identity ),
                                                              });
                 BML::ebml(\$post->{'body'});
                 my $event = $post->{'body'};
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/tools/memadd.bml
--- a/htdocs/tools/memadd.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/tools/memadd.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -38,7 +38,7 @@
                     'friends' => $ML{'label.security.friends'},
                     'private' => $ML{'label.security.private'}, );
 
-    if ($memoryu->{'journaltype'} eq "C") {
+    if ( $memoryu->is_community ) {
         $secopts{'private'} = $ML{'label.security.maintainers'};
         $secopts{'friends'} = $ML{'label.security.members'};
     }
@@ -253,7 +253,7 @@
         $body .= "<tr><th align='right' valign='top'>$ML{'.security'}</th><td>";
         $body .= LJ::html_select({name => 'security', selected => defined $memory ? $memory->{'security'} : undef},
                                  map { ($_, $secopts{$_}) } qw(public friends private));
-        if ($memoryu->{'journaltype'} eq "C") {
+        if ( $memoryu->is_community ) {
             $body .= "<br /><small>$ML{'.whocansee.comm'}</small></td></tr><tr><th></th><td>\n";
         } else {
             $body .= "<br /><small>$ML{'.whocansee'}</small></td></tr><tr><th></th><td>\n";
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/tools/memories.bml
--- a/htdocs/tools/memories.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/tools/memories.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -76,7 +76,7 @@
 
  my $userid = $u->{'userid'};
 
- if ($u->{'journaltype'} eq "R") {
+ if ( $u->is_redirect ) {
     LJ::load_user_props($u, "renamedto");
     return BML::redirect("/tools/memories.bml?user=$u->{'renamedto'}$authasarg");
  }
@@ -164,7 +164,7 @@
  if ($authasu) {
      if ($is_owner) {
          $securities = [];
-     } elsif ($authasu->{'journaltype'} eq 'P' && $u->trusts_or_has_member( $authasu )) {
+     } elsif ( $authasu->is_person && $u->trusts_or_has_member( $authasu ) ) {
          $securities = ['public', 'friends'];
      }
  }
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/tools/recent_comments.bml
--- a/htdocs/tools/recent_comments.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/tools/recent_comments.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -43,7 +43,7 @@ body<=
 
     my (@recv, @posted, %talkids);
     my %need_userid;
-    $need_userid{$u->{userid}} = 1 if $u->{'journaltype'} eq 'C'; # Need to load the community for logtext
+    $need_userid{$u->{userid}} = 1 if $u->is_community; # Need to load the community for logtext
     my %logrow;  # "jid nodeid" -> $logrow
     my %need_logids;  # hash of "journalid jitemid" => [journalid, jitemid]
 
@@ -133,7 +133,7 @@ body<=
         next if $r->{state} eq "D";
 
         my $pu = $us->{$r->{posterid}};
-        next if $pu->{statusvis} =~ /[XS]/;
+        next if $pu->is_expunged || $pu->is_suspended;
 
         $r->{'props'} = $props{$r->{'jtalkid'}};
 
diff -r 17d6af7ec9b3 -r b31a63fd1737 htdocs/view/index.bml
--- a/htdocs/view/index.bml	Thu Jul 30 09:32:00 2009 -0500
+++ b/htdocs/view/index.bml	Thu Jul 30 11:38:40 2009 -0500
@@ -44,7 +44,7 @@
         return;
     }
 
-    if ($u->{'journaltype'} eq "R") {
+    if ( $u->is_redirect ) {
         LJ::load_user_props($u, "renamedto");
         if ($u->{'renamedto'}) {
             return BML::redirect(sprintf(LJ::journal_base($u->{'renamedto'}) . "/%04d/%02d/", $FORM{'y'}, $FORM{'m'}));
@@ -94,7 +94,7 @@
     if ($remote) {
         if ($remote->{'userid'} == $u->{'userid'} || $viewall) {
             $secwhere = "";   # see everything
-        } elsif ($remote->{'journaltype'} eq 'P') {
+        } elsif ( $remote->is_person ) {
             my $gmask = $u->trustmask( $remote );
             $secwhere = "AND (l.security='public' OR (l.security='usemask' AND l.allowmask & $gmask))"
                 if $gmask;
@@ -113,7 +113,7 @@
     $title = $monlang;
     $title .= ", $year - $u->{'user'}";
 
-    my $is_person = $u->{'journaltype'} eq "P";
+    my $is_person = $u->is_person;
     if ($is_person) {
         $body .= "<?h1 Month View h1?><?p Here are the subjects of all posts by user " . LJ::ljuser($u->{'user'}) . " in $monlang, $year. p?>";
     } else {
--------------------------------------------------------------------------------

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