]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
function for checking scope rules for Profile
authorEvan Prodromou <evan@status.net>
Thu, 17 Mar 2011 02:55:14 +0000 (22:55 -0400)
committerEvan Prodromou <evan@status.net>
Thu, 17 Mar 2011 16:16:09 +0000 (12:16 -0400)
classes/Profile.php

index 88edf5cbb3c1d0912e4cd9b5d86f6b949f768be9..ba7d6296f82d45555761d0a87efd65e1abe2b384 100644 (file)
@@ -1076,4 +1076,44 @@ class Profile extends Memcached_DataObject
 
         return $profile;
     }
+
+    function canRead(Notice $notice)
+    {
+        if ($notice->scope & Notice::SITE_SCOPE) {
+            $user = $this->getUser();
+            if (empty($user)) {
+                return false;
+            }
+        }
+
+        if ($notice->scope & Notice::ADDRESSEE_SCOPE) {
+            $replies = $notice->getReplies();
+
+            if (!in_array($this->id, $replies)) {
+                $groups = $notice->getGroups();
+
+                $foundOne = false;
+
+                foreach ($groups as $group) {
+                    if ($this->isMember($group)) {
+                        $foundOne = true;
+                        break;
+                    }
+                }
+
+                if (!$foundOne) {
+                    return false;
+                }
+            }
+        }
+
+        if ($notice->scope & Notice::FOLLOWER_SCOPE) {
+            $author = $notice->getProfile();
+            if (!Subscription::exists($this, $author)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
 }