mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-02-24 09:09 am

[dw-free] update community membership backend

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

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

Allow viewing members-only posts in communities. Lightly tested.

Patch by [staff profile] mark.

--------------------------------------------------------------------------------
diff -r cda50f44faf8 -r 913ec83595d8 cgi-bin/DW/Logic/LogItems.pm
--- a/cgi-bin/DW/Logic/LogItems.pm	Tue Feb 24 08:41:09 2009 +0000
+++ b/cgi-bin/DW/Logic/LogItems.pm	Tue Feb 24 09:09:34 2009 +0000
@@ -429,8 +429,14 @@ sub recent_items
     my $itemload = $itemshow + $skip;
 
     my $mask = 0;
-    if ($remote && ($remote->{'journaltype'} eq "P" || $remote->{'journaltype'} eq "I") && $remoteid != $userid) {
-        $mask = $u->trustmask( $remote );
+    if ( $remote && ( $remote->is_person || $remote->is_identity ) && $remoteid != $userid ) {
+        # if this is a community we're viewing, fake the mask to select on, as communities
+        # no longer have masks to users
+        if ( $u->is_community ) {
+            $mask = $remote->member_of( $u ) ? 1 : 0;
+        } else {
+            $mask = $u->trustmask( $remote );
+        }
     }
 
     # decide what level of security the remote user can see
diff -r cda50f44faf8 -r 913ec83595d8 cgi-bin/LJ/Entry.pm
--- a/cgi-bin/LJ/Entry.pm	Tue Feb 24 08:41:09 2009 +0000
+++ b/cgi-bin/LJ/Entry.pm	Tue Feb 24 09:09:34 2009 +0000
@@ -874,6 +874,10 @@ 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';
+
+    # check if it's a community and they're a member
+    return 1 if $self->journal->is_community &&
+                $remote->member_of( $self->journal );
 
     my $gmask = $self->journal->trustmask( $remote );
     my $allowed = (int($gmask) & int($self->{'allowmask'}));
@@ -1736,7 +1740,12 @@ sub get_log2_recent_user
                 my $mask = $mask_for_remote{$item->{journalid}};
                 unless (defined $mask) {
                     my $ju = LJ::load_userid( $item->{journalid} );
-                    $mask = $ju->trustmask( $remote );
+                    if ( $ju->is_community ) {
+                        # communities don't have masks towards users, so fake it
+                        $mask = $remote->member_of( $ju ) ? 1 : 0;
+                    } else {
+                        $mask = $ju->trustmask( $remote );
+                    }
                     $mask_for_remote{$item->{journalid}} = $mask;
                 }
                 $permit = $item->{'allowmask'}+0 & $mask+0;
diff -r cda50f44faf8 -r 913ec83595d8 cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Tue Feb 24 08:41:09 2009 +0000
+++ b/cgi-bin/LJ/User.pm	Tue Feb 24 09:09:34 2009 +0000
@@ -4869,6 +4869,9 @@ sub get_postto_list {
 # </LJFUNC>
 sub can_view
 {
+
+# TODO: fold this into LJ::Entry->visible_to :(
+
     &nodb;
     my $remote = shift;
     my $item = shift;
@@ -4896,8 +4899,14 @@ sub can_view
     # so we have to load the user
     return 0 unless $remote->{'journaltype'} eq 'P' || $remote->{'journaltype'} eq 'I';
 
-    # TAG:FR:ljlib:can_view  (turn off bit 0 for just watching?  hmm.)
+    # this far down we have to load the user
     my $u = LJ::want_user( $userid ) or return 0;
+
+    # check if it's a community and they're a member
+    return 1 if $u->is_community &&
+                $remote->member_of( $u );
+
+    # now load allowmask
     my $allowed = ( $u->trustmask( $remoteid ) & int($item->{'allowmask'}) );
     return $allowed ? 1 : 0;  # no need to return matching mask
 }
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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