X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fprofilenoticestream.php;h=7ff4163fcbc96dbdde5b583219872ef46a886591;hb=543d968b81b97c9ebd46de063d8d70621c12015b;hp=64cd31abc48d64f5d83276c5b2ea8db95b8d7d9b;hpb=d7f96307dc84b49cce11f63260002dc77ef9641f;p=quix0rs-gnu-social.git diff --git a/lib/profilenoticestream.php b/lib/profilenoticestream.php index 64cd31abc4..7ff4163fcb 100644 --- a/lib/profilenoticestream.php +++ b/lib/profilenoticestream.php @@ -28,11 +28,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } /** * Stream of notices by a profile @@ -47,15 +43,57 @@ if (!defined('STATUSNET')) { class ProfileNoticeStream extends ScopingNoticeStream { + var $streamProfile; + var $userProfile; + function __construct($profile, $userProfile = -1) { if (is_int($userProfile) && $userProfile == -1) { $userProfile = Profile::current(); } + $this->streamProfile = $profile; + $this->userProfile = $userProfile; parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($profile), 'profile:notice_ids:' . $profile->id), $userProfile); } + + function getNoticeIds($offset, $limit, $since_id=null, $max_id=null) + { + if ($this->impossibleStream()) { + return array(); + } else { + return parent::getNoticeIds($offset, $limit, $since_id, $max_id); + } + } + + function getNotices($offset, $limit, $since_id=null, $max_id=null) + { + if ($this->impossibleStream()) { + throw new PrivateStreamException($this->streamProfile, $this->userProfile); + } else { + return parent::getNotices($offset, $limit, $since_id, $max_id); + } + } + + function impossibleStream() + { + if (!$this->streamProfile->readableBy($this->userProfile)) { + // cannot read because it's a private stream and either noone's logged in or they are not subscribers + return true; + } + + // If it's a spammy stream, and no user or not a moderator + + if (common_config('notice', 'hidespam')) { + if ($this->streamProfile->hasRole(Profile_role::SILENCED) && + (empty($this->userProfile) || (($this->userProfile->id !== $this->streamProfile->id) && !$this->userProfile->hasRight(Right::REVIEWSPAM)))) { + return true; + } + } + + return false; + } } /** @@ -72,9 +110,11 @@ class ProfileNoticeStream extends ScopingNoticeStream class RawProfileNoticeStream extends NoticeStream { protected $profile; + protected $selectVerbs = array(); // select all verbs function __construct($profile) { + parent::__construct(); $this->profile = $profile; } @@ -90,6 +130,8 @@ class RawProfileNoticeStream extends NoticeStream Notice::addWhereSinceId($notice, $since_id); Notice::addWhereMaxId($notice, $max_id); + self::filterVerbs($notice, $this->selectVerbs); + $notice->orderBy('created DESC, id DESC'); if (!is_null($offset)) {