X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Factivityobject.php;h=597792ffdeb2528852dd7a8e76b21c6928b01e51;hb=586fb5a5175d7a10f5f78dd026434e48202e5451;hp=5a20ab2c18d35965d9d307f1b21ce2d3137b79a3;hpb=9ea57e5cb2622a8fc86c0cdd2cb6e73c0219fa51;p=quix0rs-gnu-social.git diff --git a/lib/activityobject.php b/lib/activityobject.php index 5a20ab2c18..597792ffde 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -28,9 +28,9 @@ * @link http://status.net/ */ -if (!defined('STATUSNET')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } + +require_once(INSTALLDIR.'/lib/activitystreamjsondocument.php'); /** * A noun-ish thing in the activity universe @@ -100,6 +100,7 @@ class ActivityObject public $content; public $owner; public $link; + public $selfLink; // think APP (Atom Publishing Protocol) public $source; public $avatarLinks = array(); public $geopoint; @@ -193,15 +194,22 @@ class ActivityObject $this->type = self::PERSON; // XXX: is this fair? } - // start with - $title = ActivityUtils::childHtmlContent($element, self::TITLE); + // Start with + + $this->title = ActivityUtils::childContent($element, PoCo::DISPLAYNAME, PoCo::NS); - if (!empty($title)) { - $this->title = html_entity_decode(strip_tags($title), ENT_QUOTES, 'UTF-8'); + // try falling back to + + if (empty($this->title)) { + $title = ActivityUtils::childHtmlContent($element, self::TITLE); + + if (!empty($title)) { + $this->title = common_strip_html($title); + } } - // fall back to + // fall back to as a last resort if (empty($this->title)) { $this->title = $this->_childContent($element, self::NAME); @@ -249,25 +257,43 @@ 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); $this->link = ActivityUtils::getPermalink($element); + $this->selfLink = ActivityUtils::getSelfLink($element); $this->id = $this->_childContent($element, self::ID); if (empty($this->id) && !empty($this->link)) { // fallback if there's no ID $this->id = $this->link; } + + $els = $element->childNodes; + $out = array(); + + for ($i = 0; $i < $els->length; $i++) { + $link = $els->item($i); + if ($link->localName == ActivityUtils::LINK && $link->namespaceURI == ActivityUtils::ATOM) { + $attrs = array(); + foreach ($link->attributes as $attrName=>$attrNode) { + $attrs[$attrName] = $attrNode->nodeValue; + } + $this->extra[] = [$link->localName, + $attrs, + $link->nodeValue]; + } + } } // @todo FIXME: rationalize with Activity::_fromRssItem() private function _fromRssItem($item) { + if (empty($this->type)) { + $this->type = ActivityObject::NOTE; + } + $this->title = ActivityUtils::childContent($item, ActivityObject::TITLE, Activity::RSS); $contentEl = ActivityUtils::child($item, ActivityUtils::CONTENT, Activity::CONTENTNS); @@ -288,7 +314,7 @@ class ActivityObject if (!empty($guidEl)) { $this->id = $guidEl->textContent; - if ($guidEl->hasAttribute('isPermaLink')) { + if ($guidEl->hasAttribute('isPermaLink') && $guidEl->getAttribute('isPermaLink') != 'false') { // overwrites $this->link = $this->id; } @@ -429,88 +455,6 @@ 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->title = 'New ' . ActivityObject::canonicalType($object->type) . ' by '; - try { - $object->title .= $notice->getProfile()->getAcctUri(); - } catch (ProfileNoAcctUriException $e) { - $object->title .= $e->profile->nickname; - } - $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; - - try { - $avatar = Avatar::getUploaded($profile); - $object->avatarLinks[] = AvatarLink::fromAvatar($avatar); - } catch (NoAvatarException $e) { - // Could not find an original avatar to link - } - - $sizes = array( - AVATAR_PROFILE_SIZE, - AVATAR_STREAM_SIZE, - AVATAR_MINI_SIZE - ); - - foreach ($sizes as $size) { - $alink = null; - try { - $avatar = Avatar::byProfile($profile, $size); - $alink = AvatarLink::fromAvatar($avatar); - } catch (NoAvatarException $e) { - $alink = new AvatarLink(); - $alink->type = 'image/png'; - $alink->height = $size; - $alink->width = $size; - $alink->url = Avatar::defaultImage($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->isLocal()) { - $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(User_group $group) { $object = new ActivityObject(); @@ -563,7 +507,7 @@ class ActivityObject $object->type = self::mimeTypeToObjectType($file->mimetype); $object->id = TagURI::mint(sprintf("file:%d", $file->id)); - $object->link = common_local_url('attachment', array('attachment' => $file->id)); + $object->link = $file->getAttachmentUrl(); if ($file->title) { $object->title = $file->title; @@ -573,19 +517,22 @@ 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; + $object->largerImage = $file->getUrl(); break; case 'video': case 'audio': - $object->stream = $file->url; + $object->stream = $file->getUrl(); break; } @@ -720,6 +667,18 @@ class ActivityObject ); } + if (!empty($this->selfLink)) { + $xo->element( + 'link', + array( + 'rel' => 'self', + 'type' => 'application/atom+xml', + 'href' => $this->selfLink + ), + null + ); + } + if(!empty($this->owner)) { $owner = $this->owner->asActivityNoun(self::AUTHOR); $xo->raw($owner); @@ -855,7 +814,7 @@ 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; @@ -930,7 +889,7 @@ class ActivityObject if (is_string($this->thumbnail)) { $object['image'] = array('url' => $this->thumbnail); } else { - $object['image'] = array('url' => $this->thumbnail->url); + $object['image'] = array('url' => $this->thumbnail->getUrl()); if ($this->thumbnail->width) { $object['image']['width'] = $this->thumbnail->width; } @@ -940,7 +899,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); @@ -959,13 +918,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) {