From f15d96bebe754d9cb38b1e043a30521d9fbcd668 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 20 Aug 2017 19:40:37 -0700 Subject: add namespaces to activitystreams parser --- Zotlabs/Lib/ActivityStreams.php | 65 +++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 12 deletions(-) (limited to 'Zotlabs/Lib/ActivityStreams.php') diff --git a/Zotlabs/Lib/ActivityStreams.php b/Zotlabs/Lib/ActivityStreams.php index 2b610c7a4..3bbe3b190 100644 --- a/Zotlabs/Lib/ActivityStreams.php +++ b/Zotlabs/Lib/ActivityStreams.php @@ -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) { -- cgit v1.2.3