From 08eca420ca11badcb166961c1f37896ce2c9571c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 7 Jun 2013 11:34:54 -0400 Subject: [PATCH] Add generator to JSON output --- classes/Notice.php | 6 ++++++ lib/activity.php | 9 ++++++--- lib/activityobject.php | 43 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index abec8b7af4..9a4b6db7ff 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1614,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(); diff --git a/lib/activity.php b/lib/activity.php index ecae96b50a..779be2a9ad 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -106,7 +106,7 @@ class Activity public $source; // ActivitySource object representing 'home feed' public $selfLink; // public $editLink; // - + public $generator; // ActivityObject representing the generating application /** * Turns a regular old Atom into a magical activity * @@ -366,8 +366,11 @@ class Activity // content $activity['content'] = $this->content; - // generator <-- We could use this when we know a notice is created - // locally. Or if we know the upstream Generator. + // generator + + if (!empty($this->generator)) { + $activity['generator'] = $this->generator->asArray(); + } // icon <-- possibly a mini object representing verb? diff --git a/lib/activityobject.php b/lib/activityobject.php index 1352b5bda8..31cdb06af7 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -72,6 +72,7 @@ class ActivityObject const SERVICE = 'http://activitystrea.ms/schema/1.0/service'; const IMAGE = 'http://activitystrea.ms/schema/1.0/image'; const COLLECTION = 'http://activitystrea.ms/schema/1.0/collection'; + const APPLICATION = 'http://activitystrea.ms/schema/1.0/application'; // Atom elements we snarf @@ -597,6 +598,46 @@ class ActivityObject return $object; } + static function fromNoticeSource(Notice_source $source) + { + $object = new ActivityObject(); + + if (Event::handle('StartActivityObjectFromNoticeSource', array($source, &$object))) { + $object->type = ActivityObject::APPLICATION; + + if (in_array($source->code, array('web', 'xmpp', 'mail', 'omb', 'system', 'api'))) { + // We use one ID for all well-known StatusNet sources + $object->id = "tag:status.net,2009:notice-source:".$source->code; + } else if ($source->url) { + // They registered with an URL + $object->id = $source->url; + } else { + // Locally-registered, no URL + $object->id = TagURI::mint("notice-source:".$source->code); + } + + if ($source->url) { + $object->link = $source->url; + } + + if ($source->name) { + $object->title = $source->name; + } else { + $object->title = $source->code; + } + + if ($source->created) { + $object->date = $source->created; + } + + $object->extras[] = array('status_net', array('source_code' => $source->code)); + + Event::handle('EndActivityObjectFromNoticeSource', array($source, &$object)); + } + + return $object; + } + function outputTo($xo, $tag='activity:object') { if (!empty($tag)) { @@ -799,7 +840,7 @@ class ActivityObject // summary $object['summary'] = $this->summary; - // summary + // content $object['content'] = $this->content; // published (probably don't need. Might be useful for repeats.)