// actor
$activity['actor'] = $this->actor->asArray();
- // body
- $activity['body'] = $this->content;
+ // 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.
- // icon <-- I've decided to use the posting user's stream avatar here
- // for now (also included in the avatarLinks extension)
+ // icon <-- possibly a mini object representing verb?
+ // id
+ $activity['id'] = $this->id;
// object
if ($this->verb == ActivityVerb::POST && count($this->objects) == 1) {
$activity['geopoint'] = array(
'type' => 'Point',
- 'coordinates' => array($loc->lat, $loc->lon)
+ 'coordinates' => array($loc->lat, $loc->lon),
+ 'deprecated' => true,
);
+ $activity['location'] = array(
+ 'objectType' => 'place',
+ 'position' => sprintf("%+02.5F%+03.5F/", $loc->lat, $loc->lon),
+ 'lat' => $loc->lat,
+ 'lon' => $loc->lon
+ );
+
+ $name = $loc->getName();
+
+ if ($name) {
+ $activity['location']['displayName'] = $name;
+ }
+
+ $url = $loc->getURL();
+
+ if ($url) {
+ $activity['location']['url'] = $url;
+ }
}
$activity['to'] = $this->context->getToArray();
// Instead of adding enclosures as an extension to JSON
// Activities, it seems like we should be using the
- // attachedObjects property of ActivityObject
+ // attachements property of ActivityObject
- $attachedObjects = array();
+ $attachments = array();
// XXX: OK, this is kinda cheating. We should probably figure out
// what kind of objects these are based on mime-type and then
if (is_string($enclosure)) {
- $attachedObjects[]['id'] = $enclosure;
+ $attachments[]['id'] = $enclosure;
} else {
- $attachedObjects[]['id'] = $enclosure->url;
+ $attachments[]['id'] = $enclosure->url;
$mediaLink = new ActivityStreamsMediaLink(
$enclosure->url,
// XXX: Add 'size' as an extension to MediaLink?
);
- $attachedObjects[]['mediaLink'] = $mediaLink->asArray(); // extension
+ $attachments[]['mediaLink'] = $mediaLink->asArray(); // extension
if ($enclosure->title) {
- $attachedObjects[]['displayName'] = $enclosure->title;
+ $attachments[]['displayName'] = $enclosure->title;
}
}
}
- if (!empty($attachedObjects)) {
- $activity['object']['attachedObjects'] = $attachedObjects;
+ if (!empty($attachments)) {
+ $activity['object']['attachments'] = $attachments;
}
} else {
}
}
- $activity['postedTime'] = self::iso8601Date($this->time); // Change to exactly be RFC3339?
+ // published
+ $activity['published'] = self::iso8601Date($this->time);
// provider
$provider = array(
// title
$activity['title'] = $this->title;
- // updatedTime <-- Should we use this to indicate the time we received
- // a remote notice? Probably not.
+ // updated <-- Optional. Should we use this to indicate the time we r
+ // eceived a remote notice? Probably not.
// verb
//
// relative simple name is easier to parse
$activity['verb'] = substr($this->verb, strrpos($this->verb, '/') + 1);
- /* Purely extensions hereafter */
+ // url
+ $activity['url'] = $this->id;
- $tags = array();
+ /* Purely extensions hereafter */
- // Use an Activity Object for term? Which object? Note?
- foreach ($this->categories as $cat) {
- $tags[] = $cat->term;
+ if ($activity['verb'] == 'post') {
+ $tags = array();
+ foreach ($this->categories as $cat) {
+ if (mb_strlen($cat->term) > 0) {
+ // Couldn't figure out which object type to use, so...
+ $tags[] = array('objectType' => 'http://activityschema.org/object/hashtag',
+ 'displayName' => $cat->term);
+ }
+ }
+ if (count($tags) > 0) {
+ $activity['object']['tags'] = $tags;
+ }
}
- $activity['tags'] = $tags;
-
// 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.
if ($author) {
$this->actor->outputTo($xs, 'author');
-
- // XXX: Remove <activity:actor> ASAP! Author information
- // has been moved to the author element in the Activity
- // Streams spec. We're outputting actor only for backward
- // compatibility with clients that can only parse
- // activities based on older versions of the spec.
-
- $depMsg = 'Deprecation warning: activity:actor is present '
- . 'only for backward compatibility. It will be '
- . 'removed in the next version of StatusNet.';
- $xs->comment($depMsg);
- $this->actor->outputTo($xs, 'activity:actor');
}
if ($this->verb != ActivityVerb::POST || count($this->objects) != 1 || $tag != 'entry') {