getIdentifiers, resolveUri, findLocalObject Activity algorithms
Also modified related classes to support this feature.
This commit is contained in:
parent
38bea34562
commit
96babc59f5
@ -213,6 +213,28 @@ class Notice extends Managed_DataObject
|
|||||||
return $this->uri;
|
return $this->uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get a Notice object by URI. Will call external plugins for help
|
||||||
|
* using the event StartGetNoticeFromURI.
|
||||||
|
*
|
||||||
|
* @param string $uri A unique identifier for a resource (notice in this case)
|
||||||
|
*/
|
||||||
|
static function fromUri($uri)
|
||||||
|
{
|
||||||
|
$notice = null;
|
||||||
|
|
||||||
|
if (Event::handle('StartGetNoticeFromUri', array($uri, &$notice))) {
|
||||||
|
$notice = Notice::getKV('uri', $uri);
|
||||||
|
Event::handle('EndGetNoticeFromUri', array($uri, $notice));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$notice instanceof Notice) {
|
||||||
|
throw new UnknownUriException($uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $notice;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @param $root boolean If true, link to just the conversation root.
|
* @param $root boolean If true, link to just the conversation root.
|
||||||
*
|
*
|
||||||
|
@ -440,7 +440,7 @@ class ActivityObject
|
|||||||
$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->id = $notice->uri;
|
||||||
$object->title = 'New ' . ActivityObject::canonicalType($object->type) . ' by ';
|
$object->title = 'New ' . self::canonicalType($object->type) . ' by ';
|
||||||
try {
|
try {
|
||||||
$object->title .= $notice->getProfile()->getAcctUri();
|
$object->title .= $notice->getProfile()->getAcctUri();
|
||||||
} catch (ProfileNoAcctUriException $e) {
|
} catch (ProfileNoAcctUriException $e) {
|
||||||
@ -584,7 +584,7 @@ class ActivityObject
|
|||||||
$object->thumbnail = null;
|
$object->thumbnail = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ActivityObject::canonicalType($object->type)) {
|
switch (self::canonicalType($object->type)) {
|
||||||
case 'image':
|
case 'image':
|
||||||
$object->largerImage = $file->url;
|
$object->largerImage = $file->url;
|
||||||
break;
|
break;
|
||||||
@ -860,7 +860,7 @@ class ActivityObject
|
|||||||
// We can probably use the whole schema URL here but probably the
|
// We can probably use the whole schema URL here but probably the
|
||||||
// relative simple name is easier to parse
|
// relative simple name is easier to parse
|
||||||
|
|
||||||
$object['objectType'] = ActivityObject::canonicalType($this->type);
|
$object['objectType'] = self::canonicalType($this->type);
|
||||||
|
|
||||||
// summary
|
// summary
|
||||||
$object['summary'] = $this->summary;
|
$object['summary'] = $this->summary;
|
||||||
@ -945,7 +945,7 @@ class ActivityObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ActivityObject::canonicalType($this->type)) {
|
switch (self::canonicalType($this->type)) {
|
||||||
case 'image':
|
case 'image':
|
||||||
if (!empty($this->largerImage)) {
|
if (!empty($this->largerImage)) {
|
||||||
$object['fullImage'] = array('url' => $this->largerImage);
|
$object['fullImage'] = array('url' => $this->largerImage);
|
||||||
@ -964,14 +964,19 @@ class ActivityObject
|
|||||||
return array_filter($object);
|
return array_filter($object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function canonicalType($type) {
|
public function getIdentifiers() {
|
||||||
$ns = 'http://activitystrea.ms/schema/1.0/';
|
$ids = array();
|
||||||
if (substr($type, 0, mb_strlen($ns)) == $ns) {
|
foreach(array('id', 'link', 'url') as $id) {
|
||||||
return substr($type, mb_strlen($ns));
|
if (isset($this->$id)) {
|
||||||
} else {
|
$ids[] = $this->$id;
|
||||||
return $type;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return array_unique($ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
static function canonicalType($type) {
|
||||||
|
return ActivityUtils::resolveUri($type, true);
|
||||||
|
}
|
||||||
|
|
||||||
static function mimeTypeToObjectType($mimeType) {
|
static function mimeTypeToObjectType($mimeType) {
|
||||||
$ot = null;
|
$ot = null;
|
||||||
|
@ -349,12 +349,57 @@ class ActivityUtils
|
|||||||
|
|
||||||
static function compareTypes($type, $objects) // this does verbs too!
|
static function compareTypes($type, $objects) // this does verbs too!
|
||||||
{
|
{
|
||||||
$type = ActivityObject::canonicalType($type);
|
$type = self::resolveUri($type);
|
||||||
foreach ((array)$objects as $object) {
|
foreach ((array)$objects as $object) {
|
||||||
if ($type === ActivityObject::canonicalType($object)) {
|
if ($type === self::resolveUri($object)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function resolveUri($uri, $make_relative=false)
|
||||||
|
{
|
||||||
|
if (empty($uri)) {
|
||||||
|
throw new ServerException('No URI to resolve in ActivityUtils::resolveUri');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$make_relative && parse_url($uri, PHP_URL_SCHEME) == '') { // relative -> absolute
|
||||||
|
$uri = Activity::SCHEMA . $uri;
|
||||||
|
} elseif ($make_relative) { // absolute -> relative
|
||||||
|
$uri = basename($uri); //preg_replace('/^http:\/\/activitystrea\.ms\/schema\/1\.0\//', '', $uri);
|
||||||
|
} // absolute schemas pass through unharmed
|
||||||
|
|
||||||
|
return $uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function findLocalObject(array $uris, $type=ActivityObject::NOTE) {
|
||||||
|
$object = null;
|
||||||
|
// TODO: Extend this in plugins etc.
|
||||||
|
if (Event::handle('StartFindLocalActivityObject', array($uris, $type, &$object))) {
|
||||||
|
switch (self::resolveUri($type)) {
|
||||||
|
case ActivityObject::PERSON:
|
||||||
|
// GROUP will also be here in due time...
|
||||||
|
$object = new Profile();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$object = new Notice();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (array_unique($uris) as $uri) {
|
||||||
|
try {
|
||||||
|
// the exception thrown will cancel before reaching $object
|
||||||
|
$object = call_user_func(array($object, 'fromUri'), $uri);
|
||||||
|
break;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
common_debug('Could not find local activity object from uri: '.$uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!empty($object)) {
|
||||||
|
Event::handle('EndFindLocalActivityObject', array($object->getUri(), $type, $object));
|
||||||
|
} else {
|
||||||
|
throw new Exception('Could not find any activityobject stored locally with given URI');
|
||||||
|
}
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user