Removing whitespace and creating an early-return in inScope

This commit is contained in:
Mikael Nordfeldth 2015-02-24 22:44:43 +01:00
parent 325e784ccd
commit 060dbe1b56
1 changed files with 102 additions and 137 deletions

View File

@ -128,7 +128,7 @@ class Notice extends Managed_DataObject
return $def; return $def;
} }
/* Notice types */ /* Notice types */
const LOCAL_PUBLIC = 1; const LOCAL_PUBLIC = 1;
const REMOTE = 0; const REMOTE = 0;
@ -142,7 +142,7 @@ class Notice extends Managed_DataObject
const FOLLOWER_SCOPE = 8; const FOLLOWER_SCOPE = 8;
protected $_profile = array(); protected $_profile = array();
/** /**
* Will always return a profile, if anything fails it will * Will always return a profile, if anything fails it will
* (through _setProfile) throw a NoProfileException. * (through _setProfile) throw a NoProfileException.
@ -157,7 +157,7 @@ class Notice extends Managed_DataObject
} }
return $this->_profile[$this->profile_id]; return $this->_profile[$this->profile_id];
} }
public function _setProfile(Profile $profile=null) public function _setProfile(Profile $profile=null)
{ {
if (!$profile instanceof Profile) { if (!$profile instanceof Profile) {
@ -268,7 +268,7 @@ class Notice extends Managed_DataObject
} }
return $title; return $title;
} }
public function getContent() public function getContent()
{ {
return $this->content; return $this->content;
@ -674,7 +674,7 @@ class Notice extends Managed_DataObject
$notice->insert(); // throws exception on failure $notice->insert(); // throws exception on failure
// If it's not part of a conversation, it's // If it's not part of a conversation, it's
// the beginning of a new conversation. // the beginning of a new conversation.
if (empty($notice->conversation)) { if (empty($notice->conversation)) {
$orig = clone($notice); $orig = clone($notice);
// $act->context->conversation will be null if it was not provided // $act->context->conversation will be null if it was not provided
$conv = Conversation::create($notice, $options['conversation']); $conv = Conversation::create($notice, $options['conversation']);
@ -777,7 +777,7 @@ class Notice extends Managed_DataObject
'distribute' => true); 'distribute' => true);
// options will have default values when nothing has been supplied // options will have default values when nothing has been supplied
$options = array_merge($defaults, $options); $options = array_merge($defaults, $options);
foreach (array_keys($defaults) as $key) { foreach (array_keys($defaults) as $key) {
// Only convert the keynames we specify ourselves from 'defaults' array into variables // Only convert the keynames we specify ourselves from 'defaults' array into variables
$$key = $options[$key]; $$key = $options[$key];
@ -957,7 +957,7 @@ class Notice extends Managed_DataObject
// Prepare inbox delivery, may be queued to background. // Prepare inbox delivery, may be queued to background.
$stored->distribute(); $stored->distribute();
} }
return $stored; return $stored;
} }
@ -1067,13 +1067,9 @@ class Notice extends Managed_DataObject
} }
$args = func_get_args(); $args = func_get_args();
$format = array_shift($args); $format = array_shift($args);
$keyPart = vsprintf($format, $args); $keyPart = vsprintf($format, $args);
$cacheKey = Cache::key($keyPart); $cacheKey = Cache::key($keyPart);
$c->delete($cacheKey); $c->delete($cacheKey);
// delete the "last" stream, too, if this notice is // delete the "last" stream, too, if this notice is
@ -1187,24 +1183,20 @@ class Notice extends Managed_DataObject
} }
protected $_attachments = array(); protected $_attachments = array();
function attachments() { function attachments() {
if (isset($this->_attachments[$this->id])) { if (isset($this->_attachments[$this->id])) {
return $this->_attachments[$this->id]; return $this->_attachments[$this->id];
} }
$f2ps = File_to_post::listGet('post_id', array($this->id));
$ids = array();
foreach ($f2ps[$this->id] as $f2p) {
$ids[] = $f2p->file_id;
}
$files = File::multiGet('id', $ids);
$f2ps = File_to_post::listGet('post_id', array($this->id));
$ids = array();
foreach ($f2ps[$this->id] as $f2p) {
$ids[] = $f2p->file_id;
}
$files = File::multiGet('id', $ids);
$this->_attachments[$this->id] = $files->fetchAll(); $this->_attachments[$this->id] = $files->fetchAll();
return $this->_attachments[$this->id]; return $this->_attachments[$this->id];
} }
@ -1286,7 +1278,7 @@ class Notice extends Managed_DataObject
$root->free(); $root->free();
return $root; return $root;
} }
if (is_null($profile)) { if (is_null($profile)) {
$keypart = sprintf('notice:conversation_root:%d:null', $this->id); $keypart = sprintf('notice:conversation_root:%d:null', $this->id);
} else { } else {
@ -1294,7 +1286,7 @@ class Notice extends Managed_DataObject
$this->id, $this->id,
$profile->id); $profile->id);
} }
$root = self::cacheGet($keypart); $root = self::cacheGet($keypart);
if ($root !== false && $root->inScope($profile)) { if ($root !== false && $root->inScope($profile)) {
@ -1707,9 +1699,9 @@ class Notice extends Managed_DataObject
function getReplyProfiles() function getReplyProfiles()
{ {
$ids = $this->getReplies(); $ids = $this->getReplies();
$profiles = Profile::multiGet('id', $ids); $profiles = Profile::multiGet('id', $ids);
return $profiles->fetchAll(); return $profiles->fetchAll();
} }
@ -1747,9 +1739,9 @@ class Notice extends Managed_DataObject
* *
* @return array of Group objects * @return array of Group objects
*/ */
protected $_groups = array(); protected $_groups = array();
function getGroups() function getGroups()
{ {
// Don't save groups for repeats // Don't save groups for repeats
@ -1757,27 +1749,24 @@ class Notice extends Managed_DataObject
if (!empty($this->repeat_of)) { if (!empty($this->repeat_of)) {
return array(); return array();
} }
if (isset($this->_groups[$this->id])) { if (isset($this->_groups[$this->id])) {
return $this->_groups[$this->id]; return $this->_groups[$this->id];
} }
$gis = Group_inbox::listGet('notice_id', array($this->id)); $gis = Group_inbox::listGet('notice_id', array($this->id));
$ids = array(); $ids = array();
foreach ($gis[$this->id] as $gi) foreach ($gis[$this->id] as $gi) {
{
$ids[] = $gi->group_id; $ids[] = $gi->group_id;
} }
$groups = User_group::multiGet('id', $ids); $groups = User_group::multiGet('id', $ids);
$this->_groups[$this->id] = $groups->fetchAll(); $this->_groups[$this->id] = $groups->fetchAll();
return $this->_groups[$this->id]; return $this->_groups[$this->id];
} }
function _setGroups($groups) function _setGroups($groups)
{ {
$this->_groups[$this->id] = $groups; $this->_groups[$this->id] = $groups;
@ -2159,7 +2148,7 @@ class Notice extends Managed_DataObject
// Unfortunately this is likely to lose tags or URLs // Unfortunately this is likely to lose tags or URLs
// at the end of long notices. // at the end of long notices.
$content = mb_substr($content, 0, $maxlen - 4) . ' ...'; $content = mb_substr($content, 0, $maxlen - 4) . ' ...';
} }
// Scope is same as this one's // Scope is same as this one's
@ -2687,89 +2676,78 @@ class Notice extends Managed_DataObject
$scope = self::defaultScope(); $scope = self::defaultScope();
} }
// If there's no scope, anyone (even anon) is in scope. if ($scope == 0) { // Not scoping, so it is public.
if ($scope == 0) { // Not private
return !$this->isHiddenSpam($profile);
} else { // Private, somehow
// If there's scope, anon cannot be in scope
if (empty($profile)) {
return false;
}
// Author is always in scope
if ($this->profile_id == $profile->id) {
return true;
}
// Only for users on this site
if (($scope & Notice::SITE_SCOPE) && !$profile->isLocal()) {
return false;
}
// Only for users mentioned in the notice
if ($scope & Notice::ADDRESSEE_SCOPE) {
$reply = Reply::pkeyGet(array('notice_id' => $this->id,
'profile_id' => $profile->id));
if (!$reply instanceof Reply) {
return false;
}
}
// Only for members of the given group
if ($scope & Notice::GROUP_SCOPE) {
// XXX: just query for the single membership
$groups = $this->getGroups();
$foundOne = false;
foreach ($groups as $group) {
if ($profile->isMember($group)) {
$foundOne = true;
break;
}
}
if (!$foundOne) {
return false;
}
}
// Only for followers of the author
$author = null;
if ($scope & Notice::FOLLOWER_SCOPE) {
try {
$author = $this->getProfile();
} catch (Exception $e) {
return false;
}
if (!Subscription::exists($profile, $author)) {
return false;
}
}
return !$this->isHiddenSpam($profile); return !$this->isHiddenSpam($profile);
} }
// If there's scope, anon cannot be in scope
if (empty($profile)) {
return false;
}
// Author is always in scope
if ($this->profile_id == $profile->id) {
return true;
}
// Only for users on this site
if (($scope & Notice::SITE_SCOPE) && !$profile->isLocal()) {
return false;
}
// Only for users mentioned in the notice
if ($scope & Notice::ADDRESSEE_SCOPE) {
$reply = Reply::pkeyGet(array('notice_id' => $this->id,
'profile_id' => $profile->id));
if (!$reply instanceof Reply) {
return false;
}
}
// Only for members of the given group
if ($scope & Notice::GROUP_SCOPE) {
// XXX: just query for the single membership
$groups = $this->getGroups();
$foundOne = false;
foreach ($groups as $group) {
if ($profile->isMember($group)) {
$foundOne = true;
break;
}
}
if (!$foundOne) {
return false;
}
}
// Only for followers of the author
$author = null;
if ($scope & Notice::FOLLOWER_SCOPE) {
try {
$author = $this->getProfile();
} catch (Exception $e) {
return false;
}
if (!Subscription::exists($profile, $author)) {
return false;
}
}
return !$this->isHiddenSpam($profile);
} }
function isHiddenSpam($profile) { function isHiddenSpam($profile) {
// Hide posts by silenced users from everyone but moderators. // Hide posts by silenced users from everyone but moderators.
if (common_config('notice', 'hidespam')) { if (common_config('notice', 'hidespam')) {
@ -2819,7 +2797,7 @@ class Notice extends Managed_DataObject
$skip = array('_profile', '_groups', '_attachments', '_faves', '_replies', '_repeats'); $skip = array('_profile', '_groups', '_attachments', '_faves', '_replies', '_repeats');
return array_diff($vars, $skip); return array_diff($vars, $skip);
} }
static function defaultScope() static function defaultScope()
{ {
$scope = common_config('notice', 'defaultscope'); $scope = common_config('notice', 'defaultscope');
@ -2836,7 +2814,6 @@ class Notice extends Managed_DataObject
static function fillProfiles($notices) static function fillProfiles($notices)
{ {
$map = self::getProfiles($notices); $map = self::getProfiles($notices);
foreach ($notices as $entry=>$notice) { foreach ($notices as $entry=>$notice) {
try { try {
if (array_key_exists($notice->profile_id, $map)) { if (array_key_exists($notice->profile_id, $map)) {
@ -2847,42 +2824,35 @@ class Notice extends Managed_DataObject
unset($notices[$entry]); unset($notices[$entry]);
} }
} }
return array_values($map); return array_values($map);
} }
static function getProfiles(&$notices) static function getProfiles(&$notices)
{ {
$ids = array(); $ids = array();
foreach ($notices as $notice) { foreach ($notices as $notice) {
$ids[] = $notice->profile_id; $ids[] = $notice->profile_id;
} }
$ids = array_unique($ids); $ids = array_unique($ids);
return Profile::pivotGet('id', $ids);
return Profile::pivotGet('id', $ids);
} }
static function fillGroups(&$notices) static function fillGroups(&$notices)
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$gis = Group_inbox::listGet('notice_id', $ids); $gis = Group_inbox::listGet('notice_id', $ids);
$gids = array(); $gids = array();
foreach ($gis as $id => $gi) foreach ($gis as $id => $gi) {
{
foreach ($gi as $g) foreach ($gi as $g)
{ {
$gids[] = $g->group_id; $gids[] = $g->group_id;
} }
} }
$gids = array_unique($gids); $gids = array_unique($gids);
$group = User_group::pivotGet('id', $gids); $group = User_group::pivotGet('id', $gids);
foreach ($notices as $notice) foreach ($notices as $notice)
{ {
$grps = array(); $grps = array();
@ -2906,21 +2876,16 @@ class Notice extends Managed_DataObject
static function fillAttachments(&$notices) static function fillAttachments(&$notices)
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$f2pMap = File_to_post::listGet('post_id', $ids); $f2pMap = File_to_post::listGet('post_id', $ids);
$fileIds = array(); $fileIds = array();
foreach ($f2pMap as $noticeId => $f2ps) { foreach ($f2pMap as $noticeId => $f2ps) {
foreach ($f2ps as $f2p) { foreach ($f2ps as $f2p) {
$fileIds[] = $f2p->file_id; $fileIds[] = $f2p->file_id;
} }
} }
$fileIds = array_unique($fileIds); $fileIds = array_unique($fileIds);
$fileMap = File::pivotGet('id', $fileIds); $fileMap = File::pivotGet('id', $fileIds);
foreach ($notices as $notice) foreach ($notices as $notice)
{ {
$files = array(); $files = array();