Merge remote-tracking branch 'mike/master' into dev
This commit is contained in:
commit
ac6ebeee47
86
Zotlabs/Lib/ActivityStreams2.php
Normal file
86
Zotlabs/Lib/ActivityStreams2.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Lib;
|
||||||
|
|
||||||
|
|
||||||
|
class ActivityStreams2 {
|
||||||
|
|
||||||
|
public $data;
|
||||||
|
public $valid = false;
|
||||||
|
public $id = '';
|
||||||
|
public $type = '';
|
||||||
|
public $actor = null;
|
||||||
|
public $obj = null;
|
||||||
|
public $tgt = null;
|
||||||
|
|
||||||
|
function __construct($string) {
|
||||||
|
|
||||||
|
$this->data = json_decode($string,true);
|
||||||
|
if($this->data) {
|
||||||
|
$this->valid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->is_valid()) {
|
||||||
|
$this->id = $this->get_property_obj('id');
|
||||||
|
$this->type = $this->get_primary_type();
|
||||||
|
$this->actor = $this->get_compound_property('actor');
|
||||||
|
$this->obj = $this->get_compound_property('object');
|
||||||
|
$this->tgt = $this->get_compound_property('target');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_valid() {
|
||||||
|
return $this->valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_property_obj($property,$base = '') {
|
||||||
|
if(! $base) {
|
||||||
|
$base = $this->data;
|
||||||
|
}
|
||||||
|
return $base[$property];
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_property($url) {
|
||||||
|
$redirects = 0;
|
||||||
|
$x = z_fetch_url($url,true,$redirects,
|
||||||
|
['headers' => [ 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"']]);
|
||||||
|
if($x['success'])
|
||||||
|
return json_decode($x['body'],true);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_compound_property($property,$base = '') {
|
||||||
|
$x = $this->get_property_obj($property,$base);
|
||||||
|
if($this->is_url($x)) {
|
||||||
|
$x = $this->fetch_property($x);
|
||||||
|
}
|
||||||
|
return $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_url($url) {
|
||||||
|
if(($url) && (! is_array($url)) && (strpos($url,'http') === 0)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_primary_type($base = '') {
|
||||||
|
if(! $base)
|
||||||
|
$base = $this->data;
|
||||||
|
$x = $this->get_property_obj('type',$base);
|
||||||
|
if(is_array($x)) {
|
||||||
|
foreach($x as $y) {
|
||||||
|
if(strpos($y,':') === false) {
|
||||||
|
return $y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
function debug() {
|
||||||
|
$x = var_export($this,true);
|
||||||
|
return $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1040,6 +1040,11 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
|||||||
$datarray['comment_policy'] = 'none';
|
$datarray['comment_policy'] = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we have everything but a photo, provide the default profile photo
|
||||||
|
|
||||||
|
if($author['author_name'] && $author['author_link'] && (! $author['author_photo']))
|
||||||
|
$author['author_photo'] = z_root() . '/' . get_default_profile_photo(80);
|
||||||
|
|
||||||
if((! x($author,'author_name')) || ($author['author_is_feed']))
|
if((! x($author,'author_name')) || ($author['author_is_feed']))
|
||||||
$author['author_name'] = $contact['xchan_name'];
|
$author['author_name'] = $contact['xchan_name'];
|
||||||
if((! x($author,'author_link')) || ($author['author_is_feed']))
|
if((! x($author,'author_link')) || ($author['author_is_feed']))
|
||||||
@ -1244,6 +1249,12 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
|||||||
$datarray['comment_policy'] = 'none';
|
$datarray['comment_policy'] = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// if we have everything but a photo, provide the default profile photo
|
||||||
|
|
||||||
|
if($author['author_name'] && $author['author_link'] && (! $author['author_photo']))
|
||||||
|
$author['author_photo'] = z_root() . '/' . get_default_profile_photo(80);
|
||||||
|
|
||||||
if(is_array($contact)) {
|
if(is_array($contact)) {
|
||||||
if((! x($author,'author_name')) || ($author['author_is_feed']))
|
if((! x($author,'author_name')) || ($author['author_is_feed']))
|
||||||
$author['author_name'] = $contact['xchan_name'];
|
$author['author_name'] = $contact['xchan_name'];
|
||||||
@ -1879,17 +1890,17 @@ function i2asld($i) {
|
|||||||
|
|
||||||
$ret = array();
|
$ret = array();
|
||||||
|
|
||||||
$ret['@context'] = array( 'http://www.w3.org/ns/activitystreams', 'zot' => 'http://purl.org/zot/protocol');
|
$ret['@context'] = array( 'https://www.w3.org/ns/activitystreams', 'zot' => 'http://purl.org/zot/protocol');
|
||||||
|
|
||||||
if($i['verb']) {
|
if($i['verb']) {
|
||||||
if(strpos(dirname($i['verb'],'activitystrea.ms/schema/1.0'))) {
|
if(strpos(dirname($i['verb'],'activitystrea.ms/schema/1.0'))) {
|
||||||
$ret['@type'] = ucfirst(basename($i['verb']));
|
$ret['type'] = ucfirst(basename($i['verb']));
|
||||||
}
|
}
|
||||||
elseif(strpos(dirname($i['verb'],'purl.org/zot'))) {
|
elseif(strpos(dirname($i['verb'],'purl.org/zot'))) {
|
||||||
$ret['@type'] = 'zot:' . ucfirst(basename($i['verb']));
|
$ret['type'] = 'zot:' . ucfirst(basename($i['verb']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$ret['@id'] = $i['plink'];
|
$ret['id'] = $i['plink'];
|
||||||
|
|
||||||
$ret['published'] = datetime_convert('UTC','UTC',$i['created'],ATOM_TIME);
|
$ret['published'] = datetime_convert('UTC','UTC',$i['created'],ATOM_TIME);
|
||||||
|
|
||||||
@ -1911,7 +1922,7 @@ function asencode_note($i) {
|
|||||||
$ret = array();
|
$ret = array();
|
||||||
|
|
||||||
$ret['@type'] = 'Note';
|
$ret['@type'] = 'Note';
|
||||||
$ret['@id'] = $i['plink'];
|
$ret['id'] = $i['plink'];
|
||||||
if($i['title'])
|
if($i['title'])
|
||||||
$ret['title'] = bbcode($i['title']);
|
$ret['title'] = bbcode($i['title']);
|
||||||
|
|
||||||
@ -1927,16 +1938,18 @@ function asencode_note($i) {
|
|||||||
|
|
||||||
function asencode_person($p) {
|
function asencode_person($p) {
|
||||||
$ret = array();
|
$ret = array();
|
||||||
$ret['@type'] = 'Person';
|
$ret['type'] = 'Person';
|
||||||
$ret['@id'] = 'acct:' . $p['xchan_addr'];
|
$ret['id'] = $p['xchan_url'];
|
||||||
$ret['displayName'] = $p['xchan_name'];
|
$ret['name'] = $p['xchan_name'];
|
||||||
$ret['icon'] = array(
|
$ret['image'] = array(
|
||||||
'@type' => 'Link',
|
'type' => 'Link',
|
||||||
'mediaType' => $p['xchan_photo_mimetype'],
|
'mediaType' => $p['xchan_photo_mimetype'],
|
||||||
'href' => $p['xchan_photo_m']
|
'href' => $p['xchan_photo_l'],
|
||||||
|
'height' => 300,
|
||||||
|
'width' => 300
|
||||||
);
|
);
|
||||||
$ret['url'] = array(
|
$ret['url'] = array(
|
||||||
'@type' => 'Link',
|
'type' => 'Link',
|
||||||
'mediaType' => 'text/html',
|
'mediaType' => 'text/html',
|
||||||
'href' => $p['xchan_url']
|
'href' => $p['xchan_url']
|
||||||
);
|
);
|
||||||
|
@ -1896,3 +1896,41 @@ function service_plink($contact, $guid) {
|
|||||||
return $x['plink'];
|
return $x['plink'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getBestSupportedMimeType($mimeTypes = null, $acceptedTypes = false) {
|
||||||
|
// Values will be stored in this array
|
||||||
|
|
||||||
|
if($acceptedTypes === false)
|
||||||
|
$acceptedTypes = $_SERVER['HTTP_ACCEPT'];
|
||||||
|
|
||||||
|
$AcceptTypes = Array ();
|
||||||
|
|
||||||
|
// Accept header is case insensitive, and whitespace isn’t important
|
||||||
|
$accept = strtolower(str_replace(' ', '', $acceptedTypes));
|
||||||
|
// divide it into parts in the place of a ","
|
||||||
|
$accept = explode(',', $accept);
|
||||||
|
foreach ($accept as $a) {
|
||||||
|
// the default quality is 1.
|
||||||
|
$q = 1;
|
||||||
|
// check if there is a different quality
|
||||||
|
if (strpos($a, ';q=')) {
|
||||||
|
// divide "mime/type;q=X" into two parts: "mime/type" i "X"
|
||||||
|
list($a, $q) = explode(';q=', $a);
|
||||||
|
}
|
||||||
|
// mime-type $a is accepted with the quality $q
|
||||||
|
// WARNING: $q == 0 means, that mime-type isn’t supported!
|
||||||
|
$AcceptTypes[$a] = $q;
|
||||||
|
}
|
||||||
|
arsort($AcceptTypes);
|
||||||
|
|
||||||
|
// if no parameter was passed, just return parsed data
|
||||||
|
if (!$mimeTypes) return $AcceptTypes;
|
||||||
|
|
||||||
|
$mimeTypes = array_map('strtolower', (array)$mimeTypes);
|
||||||
|
|
||||||
|
// let’s check our supported types:
|
||||||
|
foreach ($AcceptTypes as $mime => $q) {
|
||||||
|
if ($q && in_array($mime, $mimeTypes)) return $mime;
|
||||||
|
}
|
||||||
|
// no mime-type found
|
||||||
|
return null;
|
||||||
|
}
|
Reference in New Issue
Block a user