From a199192ebf67a8c2b961bab540918d8e19e8e47e Mon Sep 17 00:00:00 2001
From: Zach Copley <zach@status.net>
Date: Wed, 16 Feb 2011 18:55:13 -0800
Subject: [PATCH] Add avatars and notice info

---
 lib/activity.php                   | 10 +++++---
 lib/activityobject.php             | 40 ++++++++++++++++++++----------
 lib/activitystreamjsondocument.php |  9 ++++---
 3 files changed, 39 insertions(+), 20 deletions(-)

diff --git a/lib/activity.php b/lib/activity.php
index 6b3b121087..b9bd8c31fe 100644
--- a/lib/activity.php
+++ b/lib/activity.php
@@ -437,10 +437,14 @@ class Activity
 
         /* Purely extensions hereafter */
 
-        if ($this->verb == ActivityVerb::POST) {
-            $activity['noticeInfo'] = $this->noticeInfo;
-        }
+        // XXX: a bit of a hack... Since JSON isn't namespaced we probably
+        // shouldn't be using 'statusnet:notice_info', but this will work
+        // for the moment.
 
+        foreach ($this->extra as $e) {
+            list($objectName, $props, $txt) = $e;
+            $activity[$objectName] = $props;
+        }
 
         return array_filter($activity);
     }
diff --git a/lib/activityobject.php b/lib/activityobject.php
index d6356ed6fb..0df9999454 100644
--- a/lib/activityobject.php
+++ b/lib/activityobject.php
@@ -663,24 +663,33 @@ class ActivityObject
             || $this->type == ActivityObject::GROUP) {
 
             // XXX: Not sure what the best avatar is to use for the
-            // author's "image". For now, I'm using the stream size
-            // one, but possibly it should be large
-            $avatarLink = null;
+            // author's "image". For now, I'm using the large size.
+
+            $avatarLarge      = null;
+            $avatarMediaLinks = array();
 
             foreach ($this->avatarLinks as $a) {
-                if ($a->height == AVATAR_STREAM_SIZE) {
-                    $avatarLink = $a;
-                    break;
+
+                // Make a MediaLink for every other Avatar
+                $avatar = new ActivityStreamsMediaLink(
+                    $a->url,
+                    $a->width,
+                    $a->height,
+                    $a->type,
+                    'avatar'
+                );
+
+                // Find the big avatar to use as the "image"
+                if ($a->height == AVATAR_PROFILE_SIZE) {
+                    $imgLink = $avatar;
                 }
+
+                $avatarMediaLinks[] = $avatar->asArray();
             }
 
-            $imgLink = new ActivityStreamsMediaLink(
-                $avatarLink->url,
-                $avatarLink->width,
-                $avatarLink->height,
-                $avatarLink->type
-            );
+            $object['avatars'] = $avatarMediaLinks; // extension
 
+            // image
             $object['image']  = $imgLink->asArray();
         }
 
@@ -698,7 +707,12 @@ class ActivityObject
         // url (XXX: need to put the right thing here...)
         $object['url'] = $this->id;
 
-        // TODO: extensions (OStatus stuff, etc.)
+        /* Extensions */
+
+        foreach ($this->extra as $e) {
+            list($objectName, $props, $txt) = $e;
+            $object[$objectName] = $props;
+        }
 
         return array_filter($object);
     }
diff --git a/lib/activitystreamjsondocument.php b/lib/activitystreamjsondocument.php
index 00029f85f9..7e06652a45 100644
--- a/lib/activitystreamjsondocument.php
+++ b/lib/activitystreamjsondocument.php
@@ -77,6 +77,7 @@ class ActivityStreamJSONDocument
      *
      * @param String $title the title
      */
+
     function setTitle($title)
     {
         $this->doc['title'] = $title;
@@ -205,10 +206,10 @@ class ActivityStreamsLink
         }
 
         $this->linkDict = array(
-            'url'        => $url,
-            'rel'        => $rel,      // extension
-            'mediaType'  => $mediaType // extension
-       );
+            'url'   => $url,
+            'rel'   => $rel,      // extension
+            'type'  => $mediaType // extension
+        );
     }
 
     function asArray()
-- 
2.39.5