X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=inline;f=lib%2Factivityobject.php;h=7204980d40b8b505554935a2730370179eefec34;hb=9f75131082ad282a59bc9de1c8ad82f5e3c79956;hp=241f99564f214287cfd2bae9480054be916a334b;hpb=7cf12f093ed48849ec901038b4cfd44595343c06;p=quix0rs-gnu-social.git diff --git a/lib/activityobject.php b/lib/activityobject.php index 241f99564f..7204980d40 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -64,9 +64,11 @@ class ActivityObject const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark'; const PERSON = 'http://activitystrea.ms/schema/1.0/person'; const GROUP = 'http://activitystrea.ms/schema/1.0/group'; + const _LIST = 'http://activitystrea.ms/schema/1.0/list'; // LIST is reserved const PLACE = 'http://activitystrea.ms/schema/1.0/place'; const COMMENT = 'http://activitystrea.ms/schema/1.0/comment'; // ^^^^^^^^^^ tea! + const ACTIVITY = 'http://activitystrea.ms/schema/1.0/activity'; // Atom elements we snarf @@ -92,6 +94,7 @@ class ActivityObject public $title; public $summary; public $content; + public $owner; public $link; public $source; public $avatarLinks = array(); @@ -168,6 +171,10 @@ class ActivityObject Activity::MEDIA ); } + if ($this->type == self::_LIST) { + $owner = ActivityUtils::child($this->element, Activity::AUTHOR, Activity::SPEC); + $this->owner = new ActivityObject($owner); + } } private function _fromAuthor($element) @@ -420,17 +427,17 @@ class ActivityObject { $object = new ActivityObject(); - if (Event::handle('StartActivityObjectFromNotice', array($notice, &$object))) { + if (Event::handle('StartActivityObjectFromNotice', array($notice, &$object))) { - $object->type = (empty($notice->object_type)) ? ActivityObject::NOTE : $notice->object_type; + $object->type = (empty($notice->object_type)) ? ActivityObject::NOTE : $notice->object_type; - $object->id = $notice->uri; - $object->title = $notice->content; - $object->content = $notice->rendered; - $object->link = $notice->bestUrl(); + $object->id = $notice->uri; + $object->title = $notice->content; + $object->content = $notice->rendered; + $object->link = $notice->bestUrl(); - Event::handle('EndActivityObjectFromNotice', array($notice, &$object)); - } + Event::handle('EndActivityObjectFromNotice', array($notice, &$object)); + } return $object; } @@ -439,62 +446,61 @@ class ActivityObject { $object = new ActivityObject(); - if (Event::handle('StartActivityObjectFromProfile', array($profile, &$object))) { - - $object->type = ActivityObject::PERSON; - $object->id = $profile->getUri(); - $object->title = $profile->getBestName(); - $object->link = $profile->profileurl; + if (Event::handle('StartActivityObjectFromProfile', array($profile, &$object))) { + $object->type = ActivityObject::PERSON; + $object->id = $profile->getUri(); + $object->title = $profile->getBestName(); + $object->link = $profile->profileurl; - $orig = $profile->getOriginalAvatar(); + $orig = $profile->getOriginalAvatar(); - if (!empty($orig)) { - $object->avatarLinks[] = AvatarLink::fromAvatar($orig); - } + if (!empty($orig)) { + $object->avatarLinks[] = AvatarLink::fromAvatar($orig); + } - $sizes = array( + $sizes = array( AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE ); - foreach ($sizes as $size) { - $alink = null; - $avatar = $profile->getAvatar($size); - - if (!empty($avatar)) { - $alink = AvatarLink::fromAvatar($avatar); - } else { - $alink = new AvatarLink(); - $alink->type = 'image/png'; - $alink->height = $size; - $alink->width = $size; - $alink->url = Avatar::defaultImage($size); - - if ($size == AVATAR_PROFILE_SIZE) { - // Hack for Twitter import: we don't have a 96x96 image, - // but we do have a 73x73 image. For now, fake it with that. - $avatar = $profile->getAvatar(73); - if ($avatar) { - $alink = AvatarLink::fromAvatar($avatar); - $alink->height= $size; - $alink->width = $size; - } - } - } - - $object->avatarLinks[] = $alink; - } - - if (isset($profile->lat) && isset($profile->lon)) { - $object->geopoint = (float)$profile->lat - . ' ' . (float)$profile->lon; - } - - $object->poco = PoCo::fromProfile($profile); - - Event::handle('EndActivityObjectFromProfile', array($profile, &$object)); - } + foreach ($sizes as $size) { + $alink = null; + $avatar = $profile->getAvatar($size); + + if (!empty($avatar)) { + $alink = AvatarLink::fromAvatar($avatar); + } else { + $alink = new AvatarLink(); + $alink->type = 'image/png'; + $alink->height = $size; + $alink->width = $size; + $alink->url = Avatar::defaultImage($size); + + if ($size == AVATAR_PROFILE_SIZE) { + // Hack for Twitter import: we don't have a 96x96 image, + // but we do have a 73x73 image. For now, fake it with that. + $avatar = $profile->getAvatar(73); + if ($avatar) { + $alink = AvatarLink::fromAvatar($avatar); + $alink->height= $size; + $alink->width = $size; + } + } + } + + $object->avatarLinks[] = $alink; + } + + if (isset($profile->lat) && isset($profile->lon)) { + $object->geopoint = (float)$profile->lat + . ' ' . (float)$profile->lon; + } + + $object->poco = PoCo::fromProfile($profile); + + Event::handle('EndActivityObjectFromProfile', array($profile, &$object)); + } return $object; } @@ -503,35 +509,51 @@ class ActivityObject { $object = new ActivityObject(); - if (Event::handle('StartActivityObjectFromGroup', array($group, &$object))) { + if (Event::handle('StartActivityObjectFromGroup', array($group, &$object))) { - $object->type = ActivityObject::GROUP; - $object->id = $group->getUri(); - $object->title = $group->getBestName(); - $object->link = $group->getUri(); + $object->type = ActivityObject::GROUP; + $object->id = $group->getUri(); + $object->title = $group->getBestName(); + $object->link = $group->getUri(); - $object->avatarLinks[] = AvatarLink::fromFilename($group->homepage_logo, - AVATAR_PROFILE_SIZE); + $object->avatarLinks[] = AvatarLink::fromFilename($group->homepage_logo, + AVATAR_PROFILE_SIZE); - $object->avatarLinks[] = AvatarLink::fromFilename($group->stream_logo, - AVATAR_STREAM_SIZE); + $object->avatarLinks[] = AvatarLink::fromFilename($group->stream_logo, + AVATAR_STREAM_SIZE); - $object->avatarLinks[] = AvatarLink::fromFilename($group->mini_logo, - AVATAR_MINI_SIZE); + $object->avatarLinks[] = AvatarLink::fromFilename($group->mini_logo, + AVATAR_MINI_SIZE); - $object->poco = PoCo::fromGroup($group); + $object->poco = PoCo::fromGroup($group); + Event::handle('EndActivityObjectFromGroup', array($group, &$object)); + } - Event::handle('EndActivityObjectFromGroup', array($group, &$object)); - } + return $object; + } + static function fromPeopletag($ptag) + { + $object = new ActivityObject(); + if (Event::handle('StartActivityObjectFromPeopletag', array($ptag, &$object))) { + $object->type = ActivityObject::_LIST; + + $object->id = $ptag->getUri(); + $object->title = $ptag->tag; + $object->summary = $ptag->description; + $object->link = $ptag->homeUrl(); + $object->owner = Profile::staticGet('id', $ptag->tagger); + $object->poco = PoCo::fromProfile($object->owner); + Event::handle('EndActivityObjectFromPeopletag', array($ptag, &$object)); + } return $object; } - function outputTo($xo, $tag='activity:object') - { - if (!empty($tag)) { - $xo->elementStart($tag); - } + function outputTo($xo, $tag='activity:object') + { + if (!empty($tag)) { + $xo->elementStart($tag); + } if (Event::handle('StartActivityObjectOutputAtom', array($this, $xo))) { $xo->element('activity:object-type', null, $this->type); @@ -585,6 +607,11 @@ class ActivityObject ); } + if(!empty($this->owner)) { + $owner = $this->owner->asActivityNoun(self::AUTHOR); + $xo->raw($owner); + } + if ($this->type == ActivityObject::PERSON || $this->type == ActivityObject::GROUP) { @@ -624,18 +651,18 @@ class ActivityObject Event::handle('EndActivityObjectOutputAtom', array($this, $xo)); } - if (!empty($tag)) { - $xo->elementEnd($tag); - } + if (!empty($tag)) { + $xo->elementEnd($tag); + } return; - } + } function asString($tag='activity:object') { $xs = new XMLStringer(true); - $this->outputTo($xs, $tag); + $this->outputTo($xs, $tag); return $xs->getString(); } @@ -652,16 +679,19 @@ class ActivityObject $object = array(); if (Event::handle('StartActivityObjectOutputJson', array($this, &$object))) { - // XXX: attachedObjects are added by Activity + // XXX: attachments are added by Activity + + // author (Add object for author? Could be useful for repeats.) + + // content (Add rendered version of the notice?) // displayName $object['displayName'] = $this->title; - // TODO: downstreamDuplicates - - // embedCode (used for video) + // downstreamDuplicates // id + $object['id'] = $this->id; // // XXX: Should we use URL here? or a crazy tag URI? $object['id'] = $this->id; @@ -672,7 +702,7 @@ class ActivityObject // XXX: Not sure what the best avatar is to use for the // author's "image". For now, I'm using the large size. - $avatarLarge = null; + $imgLink = null; $avatarMediaLinks = array(); foreach ($this->avatarLinks as $a) { @@ -697,7 +727,9 @@ class ActivityObject $object['avatarLinks'] = $avatarMediaLinks; // extension // image - $object['image'] = $imgLink->asArray(); + if (!empty($imgLink)) { + $object['image'] = $imgLink->asArray(); + } } // objectType @@ -707,9 +739,13 @@ class ActivityObject // @fixme this breaks extension URIs $object['type'] = substr($this->type, strrpos($this->type, '/') + 1); + // published (probably don't need. Might be useful for repeats.) + // summary $object['summary'] = $this->summary; + // udpated (probably don't need this) + // TODO: upstreamDuplicates // url (XXX: need to put the right thing here...) @@ -724,8 +760,6 @@ class ActivityObject $object[$objectName] = $props; } - // GeoJSON - if (!empty($this->geopoint)) { list($lat, $long) = explode(' ', $this->geopoint); @@ -737,7 +771,7 @@ class ActivityObject } if (!empty($this->poco)) { - $object['contact'] = $this->poco->asArray(); + $object['contact'] = array_filter($this->poco->asArray()); } Event::handle('EndActivityObjectOutputJson', array($this, &$object)); }