]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Notice.php
Add generator to JSON output
[quix0rs-gnu-social.git] / classes / Notice.php
index fc1a941679481e5ba2bef9c5a24e5e01a87544bf..9a4b6db7fffadf8d5b62ee573f5b32bc003e99aa 100644 (file)
@@ -645,7 +645,7 @@ class Notice extends Managed_DataObject
         }
 
         self::blow('notice:list-ids:conversation:%s', $this->conversation);
-        self::blow('conversation::notice_count:%d', $this->conversation);
+        self::blow('conversation:notice_count:%d', $this->conversation);
 
         if (!empty($this->repeat_of)) {
             // XXX: we should probably only use one of these
@@ -1031,9 +1031,15 @@ class Notice extends Managed_DataObject
             }
 
             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]);
                 }
             }
@@ -1487,7 +1493,7 @@ class Notice extends Managed_DataObject
      * @return Activity activity object representing this Notice.
      */
 
-    function asActivity($cur)
+    function asActivity($cur=null)
     {
         $act = self::cacheGet(Cache::codeKey('notice:as-activity:'.$this->id));
 
@@ -1502,7 +1508,6 @@ class Notice extends Managed_DataObject
             $act->time    = strtotime($this->created);
             $act->link    = $this->bestUrl();
             $act->content = common_xml_safe_str($this->rendered);
-            $act->title   = common_xml_safe_str($this->content);
 
             $profile = $this->getProfile();
 
@@ -1513,7 +1518,9 @@ class Notice extends Managed_DataObject
 
             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);
             }
@@ -1537,9 +1544,9 @@ class Notice extends Managed_DataObject
             $attachments = $this->attachments();
 
             foreach ($attachments as $attachment) {
-                $enclosure = $attachment->getEnclosure();
-                if ($enclosure) {
-                    $act->enclosures[] = $enclosure;
+                // Save local attachments
+                if (!empty($attachment->filename)) {
+                    $act->attachments[] = ActivityObject::fromFile($attachment);
                 }
             }
 
@@ -1570,6 +1577,7 @@ class Notice extends Managed_DataObject
                 $rprofile = Profile::staticGet('id', $id);
                 if (!empty($rprofile)) {
                     $ctx->attention[] = $rprofile->getUri();
+                    $ctx->attentionType[$rprofile->getUri()] = ActivityObject::PERSON;
                 }
             }
 
@@ -1577,6 +1585,19 @@ class Notice extends Managed_DataObject
 
             foreach ($groups as $group) {
                 $ctx->attention[] = $group->getUri();
+                $ctx->attentionType[$group->getUri()] = ActivityObject::GROUP;
+            }
+
+            switch ($this->scope) {
+            case Notice::PUBLIC_SCOPE:
+                $ctx->attention[] = "http://activityschema.org/collection/public";
+                $ctx->attentionType["http://activityschema.org/collection/public"] = ActivityObject::COLLECTION;
+                break;
+            case Notice::FOLLOWER_SCOPE:
+                $surl = common_local_url("subscribers", array('nickname' => $profile->nickname));
+                $ctx->attention[] = $surl;
+                $ctx->attentionType[$surl] = ActivityObject::COLLECTION;
+                break;
             }
 
             // XXX: deprecated; use ActivityVerb::SHARE instead
@@ -1593,6 +1614,12 @@ class Notice extends Managed_DataObject
 
             $act->context = $ctx;
 
+            $source = $this->getSource();
+
+            if ($source) {
+                $act->generator = ActivityObject::fromNoticeSource($source);
+            }
+
             // Source
 
             $atom_feed = $profile->getAtomFeed();
@@ -2452,7 +2479,11 @@ class Notice extends Managed_DataObject
 
             if ($scope & Notice::FOLLOWER_SCOPE) {
 
-                $author = $this->getProfile();
+                try {
+                    $author = $this->getProfile();
+                } catch (Exception $e) {
+                    return false;
+                }
         
                 if (!Subscription::exists($profile, $author)) {
                     return false;
@@ -2469,10 +2500,16 @@ class Notice extends Managed_DataObject
 
         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;
                 }
             }