X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fprofilenoticestream.php;h=bfe49efea579b64644bffff44c4fce19399d5357;hb=0a4eeb89dab241779147c8c02a8f5f0f83533309;hp=f7154a52be9563ae3bc90551ee370838ae84771d;hpb=2eed1e2ae26d2e9b9429c7c941adc3c6be80a5b1;p=quix0rs-gnu-social.git diff --git a/lib/profilenoticestream.php b/lib/profilenoticestream.php index f7154a52be..bfe49efea5 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,22 +43,17 @@ if (!defined('STATUSNET')) { class ProfileNoticeStream extends ScopingNoticeStream { - var $streamProfile; - var $userProfile; + protected $target; - function __construct($profile, $userProfile = -1) + function __construct(Profile $target, Profile $scoped=null) { - 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); + $this->target = $target; + parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($target), + 'profile:notice_ids:' . $target->getID()), + $scoped); } - function getNoticeIds($offset, $limit, $since_id, $max_id) + function getNoticeIds($offset, $limit, $since_id=null, $max_id=null) { if ($this->impossibleStream()) { return array(); @@ -71,31 +62,32 @@ class ProfileNoticeStream extends ScopingNoticeStream } } - function getNotices($offset, $limit, $sinceId = null, $maxId = null) + function getNotices($offset, $limit, $since_id=null, $max_id=null) { if ($this->impossibleStream()) { - return new ArrayWrapper(array()); + throw new PrivateStreamException($this->target, $this->scoped); } else { - return parent::getNotices($offset, $limit, $sinceId, $maxId); + return parent::getNotices($offset, $limit, $since_id, $max_id); } } function impossibleStream() { - $user = User::staticGet('id', $this->streamProfile->id); - - // If it's a private stream, and no user or not a subscriber - - if (!empty($user) && $user->private_stream && - (empty($this->userProfile) || !$this->userProfile->isSubscribed($this->streamProfile))) { + if (!$this->target->readableBy($this->scoped)) { + // 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)))) { + // if this is a silenced user + if ($this->target->hasRole(Profile_role::SILENCED) + // and we are either not logged in + && (!$this->scoped instanceof Profile + // or if we are, we are not logged in as the target, and we don't have right to review spam + || (!$this->scoped->sameAs($this->target) && !$this->scoped->hasRight(Right::REVIEWSPAM)) + )) { return true; } } @@ -117,18 +109,20 @@ class ProfileNoticeStream extends ScopingNoticeStream class RawProfileNoticeStream extends NoticeStream { - protected $profile; + protected $target; + protected $selectVerbs = array(); // select all verbs - function __construct($profile) + function __construct(Profile $target) { - $this->profile = $profile; + parent::__construct(); + $this->target = $target; } function getNoticeIds($offset, $limit, $since_id, $max_id) { $notice = new Notice(); - $notice->profile_id = $this->profile->id; + $notice->profile_id = $this->target->getID(); $notice->selectAdd(); $notice->selectAdd('id'); @@ -136,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)) {