}
foreach ($ni as $id => $source) {
- $user = User::staticGet('id', $id);
- if (empty($user) || $user->hasBlocked($profile) ||
- ($originalProfile && $user->hasBlocked($originalProfile))) {
+ try {
+ $user = User::staticGet('id', $id);
+ if (empty($user) ||
+ $user->hasBlocked($profile) ||
+ ($originalProfile && $user->hasBlocked($originalProfile))) {
+ unset($ni[$id]);
+ }
+ } catch (UserNoProfileException $e) {
+ // User doesn't have a profile; invalid; skip them.
unset($ni[$id]);
}
}
* @return Activity activity object representing this Notice.
*/
- function asActivity($cur)
+ function asActivity($cur=null)
{
$act = self::cacheGet(Cache::codeKey('notice:as-activity:'.$this->id));
if ($this->repeat_of) {
$repeated = Notice::staticGet('id', $this->repeat_of);
- $act->objects[] = $repeated->asActivity($cur);
+ if (!empty($repeated)) {
+ $act->objects[] = $repeated->asActivity($cur);
+ }
} else {
$act->objects[] = ActivityObject::fromNotice($this);
}
if ($scope & Notice::FOLLOWER_SCOPE) {
- $author = $this->getProfile();
+ try {
+ $author = $this->getProfile();
+ } catch (Exception $e) {
+ return false;
+ }
if (!Subscription::exists($profile, $author)) {
return false;
if (common_config('notice', 'hidespam')) {
- $author = $this->getProfile();
+ try {
+ $author = $this->getProfile();
+ } catch(Exception $e) {
+ // If we can't get an author, keep it hidden.
+ // XXX: technically not spam, but, whatever.
+ return true;
+ }
if ($author->hasRole(Profile_role::SILENCED)) {
- if (empty($profile) || !$profile->hasRight(Right::REVIEWSPAM)) {
+ if (empty($profile) || (($profile->id !== $author->id) && (!$profile->hasRight(Right::REVIEWSPAM)))) {
return true;
}
}