X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Factivity.php;h=e352baf63956880d7e8fc21c1b58736ffaaec42b;hb=0b53b6768e03932f4beec6b6655763e6ecedc36d;hp=f5590047d46733f84278978d13cbc3e0586c0c99;hpb=22b565a9372b3456ff360ed9d9fcfa2c47156530;p=quix0rs-gnu-social.git diff --git a/lib/activity.php b/lib/activity.php index f5590047d4..e352baf639 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -171,11 +171,12 @@ class Activity // XXX: do other implied stuff here } - $objectEls = $entry->getElementsByTagNameNS(self::SPEC, self::OBJECT); + // get immediate object children - if ($objectEls->length > 0) { - for ($i = 0; $i < $objectEls->length; $i++) { - $objectEl = $objectEls->item($i); + $objectEls = ActivityUtils::children($entry, self::OBJECT, self::SPEC); + + if (count($objectEls) > 0) { + foreach ($objectEls as $objectEl) { // Special case for embedded activities $objectType = ActivityUtils::childContent($objectEl, self::OBJECTTYPE, self::SPEC); if (!empty($objectType) && $objectType == ActivityObject::ACTIVITY) { @@ -361,15 +362,16 @@ class Activity // 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) { @@ -387,9 +389,28 @@ class Activity $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(); @@ -398,9 +419,9 @@ class Activity // 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 @@ -412,11 +433,11 @@ class Activity if (is_string($enclosure)) { - $attachedObjects[]['id'] = $enclosure; + $attachments[]['id'] = $enclosure; } else { - $attachedObjects[]['id'] = $enclosure->url; + $attachments[]['id'] = $enclosure->url; $mediaLink = new ActivityStreamsMediaLink( $enclosure->url, @@ -426,16 +447,16 @@ class Activity // 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 { @@ -451,7 +472,8 @@ class Activity } } - $activity['postedTime'] = self::iso8601Date($this->time); // Change to exactly be RFC3339? + // published + $activity['published'] = self::iso8601Date($this->time); // provider $provider = array( @@ -470,8 +492,8 @@ class Activity // 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 // @@ -479,17 +501,25 @@ class Activity // 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. @@ -564,18 +594,6 @@ class Activity if ($author) { $this->actor->outputTo($xs, 'author'); - - // XXX: Remove 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') {