X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fprofilenoticestream.php;h=bfe49efea579b64644bffff44c4fce19399d5357;hb=0a4eeb89dab241779147c8c02a8f5f0f83533309;hp=64cd31abc48d64f5d83276c5b2ea8db95b8d7d9b;hpb=0dbdcf2936a00282114f1368ead2f5edebc6ae61;p=quix0rs-gnu-social.git diff --git a/lib/profilenoticestream.php b/lib/profilenoticestream.php index 64cd31abc4..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,14 +43,56 @@ if (!defined('STATUSNET')) { class ProfileNoticeStream extends ScopingNoticeStream { - function __construct($profile, $userProfile = -1) + protected $target; + + function __construct(Profile $target, Profile $scoped=null) + { + $this->target = $target; + parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($target), + 'profile:notice_ids:' . $target->getID()), + $scoped); + } + + 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 (is_int($userProfile) && $userProfile == -1) { - $userProfile = Profile::current(); + if ($this->impossibleStream()) { + throw new PrivateStreamException($this->target, $this->scoped); + } else { + return parent::getNotices($offset, $limit, $since_id, $max_id); } - parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($profile), - 'profile:notice_ids:' . $profile->id), - $userProfile); + } + + function impossibleStream() + { + 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 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; + } + } + + return false; } } @@ -71,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'); @@ -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)) {