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

@ -5,12 +5,14 @@ namespace Zotlabs\Lib;
class ActivityStreams {
public $data;
public $valid = false;
public $id = '';
public $type = '';
public $actor = null;
public $obj = null;
public $tgt = null;
public $valid = false;
public $id = '';
public $type = '';
public $actor = null;
public $obj = null;
public $tgt = null;
public $origin = null;
public $owner = null;
function __construct($string) {
@ -26,6 +28,7 @@ class ActivityStreams {
$this->obj = $this->get_compound_property('object');
$this->tgt = $this->get_compound_property('target');
$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)) {
$this->obj = $this->data;
@ -38,9 +41,47 @@ class ActivityStreams {
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);
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) {
@ -57,8 +98,8 @@ class ActivityStreams {
return null;
}
function get_compound_property($property,$base = '') {
$x = $this->get_property_obj($property,$base);
function get_compound_property($property,$base = '',$namespace = 'https://www.w3.org/ns/activitystreams') {
$x = $this->get_property_obj($property,$base,$namespace);
if($this->is_url($x)) {
$x = $this->fetch_property($x);
}
@ -72,10 +113,10 @@ class ActivityStreams {
return false;
}
function get_primary_type($base = '') {
function get_primary_type($base = '',$namespace = 'https://www.w3.org/ns/activitystreams') {
if(! $base)
$base = $this->data;
$x = $this->get_property_obj('type',$base);
$x = $this->get_property_obj('type',$base,$namespace);
if(is_array($x)) {
foreach($x as $y) {
if(strpos($y,':') === false) {