From b1675ff175cf54e4d9b97f24608d341551469ca8 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Feb 2011 18:14:58 -0800 Subject: [PATCH] Rudimentary support for enclosures and some fiddling --- lib/activity.php | 62 +++++++++++++++++++++++++++--- lib/activityobject.php | 8 ++-- lib/activitystreamjsondocument.php | 2 +- 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/lib/activity.php b/lib/activity.php index e1d5e25e5e..6b3b121087 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -354,13 +354,58 @@ class Activity // body $activity['body'] = $this->content; - // generator <--- might be useful; might be too much junk + // generator <-- We should use this when we know a notice is created + // locally - // icon <-- should we use this? + // icon <-- Should we use this? Maybe a little bubble like we have + // on Facebook posts? // object if ($this->verb == ActivityVerb::POST && count($this->objects) == 1) { $activity['object'] = $this->objects[0]->asArray(); + + // Instead of adding enclosures as an extension to JSON + // Activities, it seems like we should be using the + // attachedObjects property of ActivityObject + + $attachedObjects = array(); + + // XXX: OK, this is kinda cheating. We should probably figure out + // what kind of objects these are based on mime-type and then + // create specific object types. Right now this rely on + // duck-typing. Also, we should include an embed code for + // video attachments. + + foreach ($this->enclosures as $enclosure) { + + if (is_string($enclosure)) { + + $attachedObjects[]['id'] = $enclosure; + + } else { + + $attachedObjects[]['id'] = $enclosure->url; + + $mediaLink = new ActivityStreamsMediaLink( + $enclosure->url, + null, + null, + $enclosure->mimetype + // XXX: Add 'size' as an extension to MediaLink? + ); + + $attachedObjects[]['mediaLink'] = $mediaLink->asArray(); // extension + + if ($enclosure->title) { + $attachedObjects[]['displayName'] = $enclosure->title; + } + } + } + + if (!empty($attachedObjects)) { + $activity['object']['attachedObjects'] = $attachedObjects; + } + } else { $activity['object'] = array(); foreach($this->objects as $object) { @@ -370,7 +415,8 @@ class Activity $activity['postedTime'] = self::iso8601Date($this->time); // Change to exactly be RFC3339? - // provider <--- again not sure we should use this + // provider <-- We should probably use this for showing the the source + // of remote notices, if known // target if (!empty($this->target)) { @@ -380,7 +426,8 @@ class Activity // title $activity['title'] = $this->title; - // updatedTime <-- should we use? spec says activity MAY have this + // updatedTime <-- Should we use this to indicate the time we received + // a remote notice? Probably not. // verb // @@ -388,7 +435,12 @@ class Activity // relative simple name is easier to parse $activity['verb'] = substr($this->verb, strrpos($this->verb, '/') + 1); - // TODO: extensions (ActivityContext, OStatus stuff, etc.) + /* Purely extensions hereafter */ + + if ($this->verb == ActivityVerb::POST) { + $activity['noticeInfo'] = $this->noticeInfo; + } + return array_filter($activity); } diff --git a/lib/activityobject.php b/lib/activityobject.php index 7847a5d640..d6356ed6fb 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -645,16 +645,18 @@ class ActivityObject { $object = array(); - // TODO: attachedObjects + // XXX: attachedObjects are added by Activity // displayName $object['displayName'] = $this->title; - // TODO: downstreamDuplicates - // TODO: embedCode (video) + + // embedCode (used for video) // id + // + // XXX: Should we use URL here? or a crazy tag URI? $object['id'] = $this->id; if ($this->type == ActivityObject::PERSON diff --git a/lib/activitystreamjsondocument.php b/lib/activitystreamjsondocument.php index 4fa456470e..00029f85f9 100644 --- a/lib/activitystreamjsondocument.php +++ b/lib/activitystreamjsondocument.php @@ -207,7 +207,7 @@ class ActivityStreamsLink $this->linkDict = array( 'url' => $url, 'rel' => $rel, // extension - 'media_type' => $mediaType // extension + 'mediaType' => $mediaType // extension ); }