From 60f62199a1f65ba0192430034980d5ca49a7da1f Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 18 Feb 2011 00:51:08 -0800 Subject: [PATCH] Add context to Activity Streams JSON --- lib/activity.php | 6 ++++++ lib/activitycontext.php | 46 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/lib/activity.php b/lib/activity.php index e2699ebadc..218c965c4d 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -450,6 +450,9 @@ class Activity /* more extensions */ + // Context stuff. For now I'm just sticking most of it + // in a property called "context" + if (!empty($this->context)) { if (!empty($this->context->location)) { @@ -461,8 +464,11 @@ class Activity 'type' => 'Point', 'coordinates' => array($loc->lat, $loc->lon) ); + } + $activity['to'] = $this->context->getToArray(); + $activity['context'] = $this->context->asArray(); } return array_filter($activity); diff --git a/lib/activitycontext.php b/lib/activitycontext.php index fd0dfe06c1..3dc53d869d 100644 --- a/lib/activitycontext.php +++ b/lib/activitycontext.php @@ -130,4 +130,50 @@ class ActivityContext common_log(LOG_ERR, "Ignoring bogus georss:point value $point"); return null; } + + /** + * Returns context (StatusNet stuff) as an array suitable for serializing + * in JSON. Right now context stuff is an extension to Activity. + * + * @return array the context + */ + function asArray() + { + $context = array(); + + $context['replyToId'] = $this->replyToID; + $context['replyToUrl'] = $this->replyToUrl; + $context['conversation'] = $this->conversation; + $context['forwardId'] = $this->forwardID; + $context['forwardUrl'] = $this->forwardUrl; + + // XXX: We might want to have the attention to stuff + // in here like we do with Atom + + return array_filter($context); + } + + /** + * Returns an array of arrays representing Activity Objects (intended to be + * serialized in JSON) that represent WHO the Activity is supposed to + * be received by. This is not really specified but appears in an example + * of the current spec as an extension. We might want to figure out a JSON + * serialization for OStatus and use that to express mentions instead. + * + * XXX: People's ideas on how to do this are all over the place + * + * @return array the array of recipients + */ + function getToArray() + { + $tos = array(); + + foreach ($this->attention as $attnUrl) { + $to = array('id' => $attnUrl, 'url' => $attnUrl); + $tos[] = $to; + } + + return $tos; + } + }