// If there's no scope, anyone (even anon) is in scope.
- if ($scope == 0) {
- return true;
- }
+ if ($scope == 0) { // Not private
- // If there's scope, anon cannot be in scope
+ return !$this->isHiddenSpam();
- if (empty($profile)) {
- return false;
- }
+ } else { // Private, somehow
- // Author is always in scope
+ // If there's scope, anon cannot be in scope
- if ($this->profile_id == $profile->id) {
- return true;
- }
+ if (empty($profile)) {
+ return false;
+ }
- // Only for users on this site
+ // Author is always in scope
- if ($scope & Notice::SITE_SCOPE) {
- $user = $profile->getUser();
- if (empty($user)) {
- return false;
+ if ($this->profile_id == $profile->id) {
+ return true;
+ }
+
+ // Only for users on this site
+
+ if ($scope & Notice::SITE_SCOPE) {
+ $user = $profile->getUser();
+ if (empty($user)) {
+ return false;
+ }
}
- }
- // Only for users mentioned in the notice
+ // Only for users mentioned in the notice
- if ($scope & Notice::ADDRESSEE_SCOPE) {
+ if ($scope & Notice::ADDRESSEE_SCOPE) {
- $repl = Reply::pkeyGet(array('notice_id' => $this->id,
- 'profile_id' => $profile->id));
+ $repl = Reply::pkeyGet(array('notice_id' => $this->id,
+ 'profile_id' => $profile->id));
- if (empty($repl)) {
- return false;
+ if (empty($repl)) {
+ return false;
+ }
}
- }
- // Only for members of the given group
+ // Only for members of the given group
- if ($scope & Notice::GROUP_SCOPE) {
+ if ($scope & Notice::GROUP_SCOPE) {
- // XXX: just query for the single membership
+ // XXX: just query for the single membership
- $groups = $this->getGroups();
+ $groups = $this->getGroups();
- $foundOne = false;
+ $foundOne = false;
- foreach ($groups as $group) {
- if ($profile->isMember($group)) {
- $foundOne = true;
- break;
+ foreach ($groups as $group) {
+ if ($profile->isMember($group)) {
+ $foundOne = true;
+ break;
+ }
+ }
+
+ if (!$foundOne) {
+ return false;
}
}
- if (!$foundOne) {
- return false;
+ // Only for followers of the author
+
+ $author = null;
+
+ if ($scope & Notice::FOLLOWER_SCOPE) {
+
+ $author = $this->getProfile();
+
+ if (!Subscription::exists($profile, $author)) {
+ return false;
+ }
}
+
+ return !$this->isHiddenSpam();
}
+ }
+
+ function isHiddenSpam() {
- // Only for followers of the author
+
+ // Hide posts by silenced users from everyone but moderators.
+
+ if (common_config('notice', 'hidespam')) {
- if ($scope & Notice::FOLLOWER_SCOPE) {
$author = $this->getProfile();
- if (!Subscription::exists($profile, $author)) {
- return false;
+
+ if ($author->hasRole(Profile_role::SILENCED)) {
+ if (!$profile->hasRole(Profile_role::MODERATOR)) {
+ return true;
+ }
}
}
- return true;
+ return false;
}
static function groupsFromText($text, $profile)
Memcached_DataObject::pivotGet('Notice', 'repeat_of', $ids, array('profile_id' => $p->id));
}
+ if (common_config('notice', 'hidespam')) {
+
+ $pids = array();
+
+ foreach ($profiles as $profile) {
+ $pids[] = $profile->id;
+ }
+
+ Memcached_DataObject::pivotGet('Profile_role',
+ 'profile_id',
+ $pids,
+ array('role' => Profile_role::SILENCED));
+ }
+
Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $avatarSize));
}
}