X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Factivityobject.php;h=7fe5c4850ca723105e4bfb82efb56d03450699f7;hb=fb4b004435403dd0d4126a0c11c9fa5c557e9dba;hp=fe0d1ef669da048aae980dc41fa33c856a34d21c;hpb=96d7b68c50291c4768f331f6693d8afb8cbb4afa;p=quix0rs-gnu-social.git diff --git a/lib/activityobject.php b/lib/activityobject.php index fe0d1ef669..7fe5c4850c 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -32,6 +32,8 @@ if (!defined('STATUSNET')) { exit(1); } +require_once(INSTALLDIR.'/lib/activitystreamjsondocument.php'); + /** * A noun-ish thing in the activity universe * @@ -198,7 +200,7 @@ class ActivityObject $title = ActivityUtils::childHtmlContent($element, self::TITLE); if (!empty($title)) { - $this->title = html_entity_decode(strip_tags($title), ENT_QUOTES, 'UTF-8'); + $this->title = common_strip_html($title); } // fall back to @@ -249,10 +251,7 @@ class ActivityObject $this->content = ActivityUtils::getContent($element); // We don't like HTML in our titles, although it's technically allowed - - $title = ActivityUtils::childHtmlContent($element, self::TITLE); - - $this->title = html_entity_decode(strip_tags($title), ENT_QUOTES, 'UTF-8'); + $this->title = common_strip_html(ActivityUtils::childHtmlContent($element, self::TITLE)); $this->source = $this->_getSource($element); @@ -429,94 +428,7 @@ class ActivityObject } } - static function fromNotice(Notice $notice) - { - $object = new ActivityObject(); - - if (Event::handle('StartActivityObjectFromNotice', array($notice, &$object))) { - - $object->type = (empty($notice->object_type)) ? ActivityObject::NOTE : $notice->object_type; - - $object->id = $notice->uri; - $object->content = $notice->rendered; - $object->link = $notice->bestUrl(); - - $object->extra[] = array('status_net', array('notice_id' => $notice->id)); - - Event::handle('EndActivityObjectFromNotice', array($notice, &$object)); - } - - return $object; - } - - static function fromProfile(Profile $profile) - { - $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; - - $orig = $profile->getOriginalAvatar(); - - if (!empty($orig)) { - $object->avatarLinks[] = AvatarLink::fromAvatar($orig); - } - - $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); - - if ($profile->getUser()) { - $object->extra[] = array('followers', array('url' => common_local_url('subscribers', array('nickname' => $profile->nickname)))); - } - - Event::handle('EndActivityObjectFromProfile', array($profile, &$object)); - } - - return $object; - } - - static function fromGroup($group) + static function fromGroup(User_group $group) { $object = new ActivityObject(); @@ -553,7 +465,7 @@ class ActivityObject $object->title = $ptag->tag; $object->summary = $ptag->description; $object->link = $ptag->homeUrl(); - $object->owner = Profile::staticGet('id', $ptag->tagger); + $object->owner = Profile::getKV('id', $ptag->tagger); $object->poco = PoCo::fromProfile($object->owner); Event::handle('EndActivityObjectFromPeopletag', array($ptag, &$object)); } @@ -578,13 +490,16 @@ class ActivityObject $object->date = $file->date; } - $thumbnail = $file->getThumbnail(); - - if (!empty($thumbnail)) { + try { + $thumbnail = $file->getThumbnail(); $object->thumbnail = $thumbnail; + } catch (UseFileAsThumbnailException $e) { + $object->thumbnail = null; + } catch (UnsupportedMediaException $e) { + $object->thumbnail = null; } - switch (ActivityObject::canonicalType($object->type)) { + switch (self::canonicalType($object->type)) { case 'image': $object->largerImage = $file->url; break; @@ -661,7 +576,7 @@ class ActivityObject $object->extra[] = array('status_net', array('message_id' => $message->id)); - Event::handle('EndActivityObjectFromNoticeSource', array($source, &$object)); + Event::handle('EndActivityObjectFromMessage', array($message, &$object)); } return $object; @@ -733,17 +648,16 @@ class ActivityObject if ($this->type == ActivityObject::PERSON || $this->type == ActivityObject::GROUP) { - foreach ($this->avatarLinks as $avatar) { - $xo->element( - 'link', array( - 'rel' => 'avatar', - 'type' => $avatar->type, - 'media:width' => $avatar->width, - 'media:height' => $avatar->height, - 'href' => $avatar->url - ), - null - ); + foreach ($this->avatarLinks as $alink) { + $xo->element('link', + array( + 'rel' => 'avatar', + 'type' => $alink->type, + 'media:width' => $alink->width, + 'media:height' => $alink->height, + 'href' => $alink->url, + ), + null); } } @@ -762,7 +676,7 @@ class ActivityObject // @fixme there's no way here to make a tree; elements can only contain plaintext // @fixme these may collide with JSON extensions foreach ($this->extra as $el) { - list($extraTag, $attrs, $content) = $el; + list($extraTag, $attrs, $content) = array_pad($el, 3, null); $xo->element($extraTag, $attrs, $content); } @@ -803,12 +717,6 @@ class ActivityObject // content (Add rendered version of the notice?) - // displayName - - if ($this->title) { - $object['displayName'] = $this->title; - } - // downstreamDuplicates // id @@ -822,6 +730,9 @@ class ActivityObject if ($this->type == ActivityObject::PERSON || $this->type == ActivityObject::GROUP) { + // displayName + $object['displayName'] = $this->title; + // XXX: Not sure what the best avatar is to use for the // author's "image". For now, I'm using the large size. @@ -864,12 +775,12 @@ class ActivityObject // We can probably use the whole schema URL here but probably the // relative simple name is easier to parse - $object['objectType'] = ActivityObject::canonicalType($this->type); + $object['objectType'] = self::canonicalType($this->type); // summary $object['summary'] = $this->summary; - // content + // content, usually rendered HTML $object['content'] = $this->content; // published (probably don't need. Might be useful for repeats.) @@ -888,7 +799,7 @@ class ActivityObject // @fixme text content from XML extensions will be lost foreach ($this->extra as $e) { - list($objectName, $props, $txt) = $e; + list($objectName, $props, $txt) = array_pad($e, 3, null); if (!empty($objectName)) { $parts = explode(":", $objectName); if (count($parts) == 2 && $parts[0] == "statusnet") { @@ -906,25 +817,27 @@ class ActivityObject list($lat, $lon) = explode(' ', $this->geopoint); - $object['location'] = array( - 'objectType' => 'place', - 'position' => sprintf("%+02.5F%+03.5F/", $lat, $lon), - 'lat' => $lat, - 'lon' => $lon - ); + if (!empty($lat) && !empty($lon)) { + $object['location'] = array( + 'objectType' => 'place', + 'position' => sprintf("%+02.5F%+03.5F/", $lat, $lon), + 'lat' => $lat, + 'lon' => $lon + ); - $loc = Location::fromLatLon($lat, $lon); + $loc = Location::fromLatLon((float)$lat, (float)$lon); - if ($loc) { - $name = $loc->getName(); + if ($loc) { + $name = $loc->getName(); - if ($name) { - $object['location']['displayName'] = $name; - } - $url = $loc->getURL(); + if ($name) { + $object['location']['displayName'] = $name; + } + $url = $loc->getURL(); - if ($url) { - $object['location']['url'] = $url; + if ($url) { + $object['location']['url'] = $url; + } } } } @@ -947,7 +860,7 @@ class ActivityObject } } - switch (ActivityObject::canonicalType($this->type)) { + switch (self::canonicalType($this->type)) { case 'image': if (!empty($this->largerImage)) { $object['fullImage'] = array('url' => $this->largerImage); @@ -966,13 +879,18 @@ class ActivityObject return array_filter($object); } - static function canonicalType($type) { - $ns = 'http://activitystrea.ms/schema/1.0/'; - if (substr($type, 0, mb_strlen($ns)) == $ns) { - return substr($type, mb_strlen($ns)); - } else { - return $type; + public function getIdentifiers() { + $ids = array(); + foreach(array('id', 'link', 'url') as $id) { + if (isset($this->$id)) { + $ids[] = $this->$id; + } } + return array_unique($ids); + } + + static function canonicalType($type) { + return ActivityUtils::resolveUri($type, true); } static function mimeTypeToObjectType($mimeType) {