add namespaces to activitystreams parser

This commit is contained in:
zotlabs 2017-08-20 19:40:37 -07:00
parent 18c57eeaa0
commit f15d96bebe

View File

@ -11,6 +11,8 @@ class ActivityStreams {
public $actor = null; public $actor = null;
public $obj = null; public $obj = null;
public $tgt = null; public $tgt = null;
public $origin = null;
public $owner = null;
function __construct($string) { function __construct($string) {
@ -26,6 +28,7 @@ class ActivityStreams {
$this->obj = $this->get_compound_property('object'); $this->obj = $this->get_compound_property('object');
$this->tgt = $this->get_compound_property('target'); $this->tgt = $this->get_compound_property('target');
$this->origin = $this->get_compound_property('origin'); $this->origin = $this->get_compound_property('origin');
$this->owner = $this->get_compound_property('owner','','http://purl.org/zot/protocol');
if(($this->type === 'Note') && (! $this->obj)) { if(($this->type === 'Note') && (! $this->obj)) {
$this->obj = $this->data; $this->obj = $this->data;
@ -38,9 +41,47 @@ class ActivityStreams {
return $this->valid; return $this->valid;
} }
function get_property_obj($property,$base = '') { function get_namespace($base,$namespace) {
$key = null;
foreach( [ $this->data, $base ] as $b ) {
if(! $b)
continue;
if(array_key_exists('@context',$b)) {
if(is_array($b['@context'])) {
foreach($b['@context'] as $ns) {
if(is_array($ns)) {
foreach($ns as $k => $v) {
if($namespace === $v)
$key = $k;
}
}
else {
if($namespace === $ns) {
$key = '';
}
}
}
}
else {
if($namespace === $b['@context']) {
$key = '';
}
}
}
}
return $key;
}
function get_property_obj($property,$base = '',$namespace = 'https://www.w3.org/ns/activitystreams') {
$prefix = $this->get_namespace($base,$namespace);
if($prefix === null)
return null;
$base = (($base) ? $base : $this->data); $base = (($base) ? $base : $this->data);
return ((array_key_exists($property,$base)) ? $base[$property] : null); $propname = (($prefix) ? $prefix . ':' : '') . $property;
return ((array_key_exists($propname,$base)) ? $base[$propname] : null);
} }
function fetch_property($url) { function fetch_property($url) {
@ -57,8 +98,8 @@ class ActivityStreams {
return null; return null;
} }
function get_compound_property($property,$base = '') { function get_compound_property($property,$base = '',$namespace = 'https://www.w3.org/ns/activitystreams') {
$x = $this->get_property_obj($property,$base); $x = $this->get_property_obj($property,$base,$namespace);
if($this->is_url($x)) { if($this->is_url($x)) {
$x = $this->fetch_property($x); $x = $this->fetch_property($x);
} }
@ -72,10 +113,10 @@ class ActivityStreams {
return false; return false;
} }
function get_primary_type($base = '') { function get_primary_type($base = '',$namespace = 'https://www.w3.org/ns/activitystreams') {
if(! $base) if(! $base)
$base = $this->data; $base = $this->data;
$x = $this->get_property_obj('type',$base); $x = $this->get_property_obj('type',$base,$namespace);
if(is_array($x)) { if(is_array($x)) {
foreach($x as $y) { foreach($x as $y) {
if(strpos($y,':') === false) { if(strpos($y,':') === false) {