more work on z6 commenting
This commit is contained in:
parent
7a693500c4
commit
7d694dca07
@ -1233,19 +1233,20 @@ class Activity {
|
||||
|
||||
static function decode_note($act) {
|
||||
|
||||
$response_activity = false;
|
||||
|
||||
$s = [];
|
||||
|
||||
|
||||
|
||||
$content = self::get_content($act->obj);
|
||||
|
||||
if(is_array($act->obj)) {
|
||||
$content = self::get_content($act->obj);
|
||||
}
|
||||
|
||||
$s['owner_xchan'] = $act->actor['id'];
|
||||
$s['author_xchan'] = $act->actor['id'];
|
||||
|
||||
$s['mid'] = $act->id;
|
||||
$s['mid'] = $act->obj['id'];
|
||||
$s['parent_mid'] = $act->parent_id;
|
||||
|
||||
|
||||
if($act->data['published']) {
|
||||
$s['created'] = datetime_convert('UTC','UTC',$act->data['published']);
|
||||
}
|
||||
@ -1259,42 +1260,59 @@ class Activity {
|
||||
$s['edited'] = datetime_convert('UTC','UTC',$act->obj['updated']);
|
||||
}
|
||||
|
||||
|
||||
if(in_array($act->type, [ 'Like', 'Dislike', 'Flag', 'Block', 'Announce', 'Accept', 'Reject', 'TentativeAccept' ])) {
|
||||
|
||||
$response_activity = true;
|
||||
|
||||
$s['mid'] = $act->id;
|
||||
$s['parent_mid'] = $act->obj['id'];
|
||||
|
||||
// over-ride the object timestamp with the activity
|
||||
|
||||
if($act->data['published']) {
|
||||
$s['created'] = datetime_convert('UTC','UTC',$act->data['published']);
|
||||
}
|
||||
|
||||
if($act->data['updated']) {
|
||||
$s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']);
|
||||
}
|
||||
|
||||
$obj_actor = ((isset($act->obj['actor'])) ? $act->obj['actor'] : $act->get_actor('attributedTo', $act->obj));
|
||||
// ensure we store the original actor
|
||||
self::actor_store($obj_actor['id'],$obj_actor);
|
||||
|
||||
$mention = self::get_actor_bbmention($obj_actor['id']);
|
||||
|
||||
if($act->type === 'Like') {
|
||||
$content['content'] = sprintf( t('Likes %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content'];
|
||||
}
|
||||
if($act->type === 'Dislike') {
|
||||
$content['content'] = sprintf( t('Doesn\'t like %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content'];
|
||||
}
|
||||
if($act->type === 'Accept' && $act->obj['type'] === 'Event' ) {
|
||||
$content['content'] = sprintf( t('Will attend %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content'];
|
||||
}
|
||||
if($act->type === 'Reject' && $act->obj['type'] === 'Event' ) {
|
||||
$content['content'] = sprintf( t('Will not attend %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content'];
|
||||
}
|
||||
if($act->type === 'TentativeAccept' && $act->obj['type'] === 'Event' ) {
|
||||
$content['content'] = sprintf( t('May attend %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content'];
|
||||
}
|
||||
if($act->type === 'Announce') {
|
||||
$content['content'] = sprintf( t('🔁 Repeated %1$s\'s %2$s'), $mention, $act->obj['type']);
|
||||
}
|
||||
}
|
||||
|
||||
if(! $s['created'])
|
||||
$s['created'] = datetime_convert();
|
||||
|
||||
if(! $s['edited'])
|
||||
$s['edited'] = $s['created'];
|
||||
|
||||
if(in_array($act->type,['Announce'])) {
|
||||
$root_content = self::get_content($act->raw);
|
||||
|
||||
$s['title'] = self::bb_content($root_content,'name');
|
||||
$s['summary'] = self::bb_content($root_content,'summary');
|
||||
$s['body'] = (self::bb_content($root_content,'bbcode') ? : self::bb_content($root_content,'content'));
|
||||
|
||||
if(strpos($s['body'],'[share') === false) {
|
||||
|
||||
// @fixme - error check and set defaults
|
||||
|
||||
$name = urlencode($act->obj['actor']['name']);
|
||||
$profile = $act->obj['actor']['id'];
|
||||
$photo = $act->obj['icon']['url'];
|
||||
|
||||
$s['body'] .= "\r\n[share author='" . $name .
|
||||
"' profile='" . $profile .
|
||||
"' avatar='" . $photo .
|
||||
"' link='" . $act->obj['id'] .
|
||||
"' auth='" . ((is_matrix_url($act->obj['id'])) ? 'true' : 'false' ) .
|
||||
"' posted='" . $act->obj['published'] .
|
||||
"' message_id='" . $act->obj['id'] .
|
||||
"']";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$s['title'] = self::bb_content($content,'name');
|
||||
$s['summary'] = self::bb_content($content,'summary');
|
||||
$s['body'] = (self::bb_content($content,'bbcode') ? : self::bb_content($content,'content'));
|
||||
}
|
||||
$s['title'] = self::bb_content($content,'name');
|
||||
$s['summary'] = self::bb_content($content,'summary');
|
||||
$s['body'] = ((self::bb_content($content,'bbcode') && (! $response_activity)) ? self::bb_content($content,'bbcode') : self::bb_content($content,'content'));
|
||||
|
||||
$s['verb'] = self::activity_mapper($act->type);
|
||||
|
||||
@ -1306,56 +1324,227 @@ class Activity {
|
||||
$s['obj'] = $act->obj;
|
||||
|
||||
$instrument = $act->get_property_obj('instrument');
|
||||
if(! $instrument)
|
||||
if((! $instrument) && (! $response_activity)) {
|
||||
$instrument = $act->get_property_obj('instrument',$act->obj);
|
||||
}
|
||||
|
||||
if($instrument && array_key_exists('type',$instrument)
|
||||
&& $instrument['type'] === 'Service' && array_key_exists('name',$instrument)) {
|
||||
$s['app'] = escape_tags($instrument['name']);
|
||||
}
|
||||
|
||||
$a = self::decode_taxonomy($act->obj);
|
||||
if($a) {
|
||||
$s['term'] = $a;
|
||||
|
||||
if(! $response_activity) {
|
||||
$a = self::decode_taxonomy($act->obj);
|
||||
if($a) {
|
||||
$s['term'] = $a;
|
||||
foreach($a as $b) {
|
||||
if($b['ttype'] === TERM_EMOJI) {
|
||||
$s['title'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['title']);
|
||||
$s['summary'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['summary']);
|
||||
$s['body'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['body']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$a = self::decode_attachment($act->obj);
|
||||
if($a) {
|
||||
$s['attach'] = $a;
|
||||
}
|
||||
}
|
||||
|
||||
$a = self::decode_attachment($act->obj);
|
||||
if($a) {
|
||||
$s['attach'] = $a;
|
||||
if($act->obj['type'] === 'Note' && $s['attach']) {
|
||||
$s['body'] .= self::bb_attach($s['attach'],$s['body']);
|
||||
}
|
||||
|
||||
|
||||
// we will need a hook here to extract magnet links e.g. peertube
|
||||
// right now just link to the largest mp4 we find that will fit in our
|
||||
// standard content region
|
||||
|
||||
if($act->obj['type'] === 'Video') {
|
||||
if(! $response_activity) {
|
||||
if($act->obj['type'] === 'Video') {
|
||||
|
||||
$vtypes = [
|
||||
'video/mp4',
|
||||
'video/ogg',
|
||||
'video/webm'
|
||||
];
|
||||
$vtypes = [
|
||||
'video/mp4',
|
||||
'video/ogg',
|
||||
'video/webm'
|
||||
];
|
||||
|
||||
$mps = [];
|
||||
if(array_key_exists('url',$act->obj) && is_array($act->obj['url'])) {
|
||||
foreach($act->obj['url'] as $vurl) {
|
||||
if(in_array($vurl['mimeType'], $vtypes)) {
|
||||
if(! array_key_exists('width',$vurl)) {
|
||||
$vurl['width'] = 0;
|
||||
$mps = [];
|
||||
$ptr = null;
|
||||
|
||||
if(array_key_exists('url',$act->obj)) {
|
||||
if(is_array($act->obj['url'])) {
|
||||
if(array_key_exists(0,$act->obj['url'])) {
|
||||
$ptr = $act->obj['url'];
|
||||
}
|
||||
$mps[] = $vurl;
|
||||
else {
|
||||
$ptr = [ $act->obj['url'] ];
|
||||
}
|
||||
foreach($ptr as $vurl) {
|
||||
// peertube uses the non-standard element name 'mimeType' here
|
||||
if(array_key_exists('mimeType',$vurl)) {
|
||||
if(in_array($vurl['mimeType'], $vtypes)) {
|
||||
if(! array_key_exists('width',$vurl)) {
|
||||
$vurl['width'] = 0;
|
||||
}
|
||||
$mps[] = $vurl;
|
||||
}
|
||||
}
|
||||
elseif(array_key_exists('mediaType',$vurl)) {
|
||||
if(in_array($vurl['mediaType'], $vtypes)) {
|
||||
if(! array_key_exists('width',$vurl)) {
|
||||
$vurl['width'] = 0;
|
||||
}
|
||||
$mps[] = $vurl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if($mps) {
|
||||
usort($mps,[ __CLASS__, 'vid_sort' ]);
|
||||
foreach($mps as $m) {
|
||||
if(intval($m['width']) < 500 && self::media_not_in_body($m['href'],$s['body'])) {
|
||||
$s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif(is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) {
|
||||
$s['body'] .= "\n\n" . '[video]' . $act->obj['url'] . '[/video]';
|
||||
}
|
||||
}
|
||||
}
|
||||
if($mps) {
|
||||
usort($mps,'as_vid_sort');
|
||||
foreach($mps as $m) {
|
||||
if(intval($m['width']) < 500) {
|
||||
$s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]';
|
||||
break;
|
||||
|
||||
if($act->obj['type'] === 'Audio') {
|
||||
|
||||
$atypes = [
|
||||
'audio/mpeg',
|
||||
'audio/ogg',
|
||||
'audio/wav'
|
||||
];
|
||||
|
||||
$ptr = null;
|
||||
|
||||
if(array_key_exists('url',$act->obj)) {
|
||||
if(is_array($act->obj['url'])) {
|
||||
if(array_key_exists(0,$act->obj['url'])) {
|
||||
$ptr = $act->obj['url'];
|
||||
}
|
||||
else {
|
||||
$ptr = [ $act->obj['url'] ];
|
||||
}
|
||||
foreach($ptr as $vurl) {
|
||||
if(in_array($vurl['mediaType'], $atypes) && self::media_not_in_body($vurl['href'],$s['body'])) {
|
||||
$s['body'] .= "\n\n" . '[audio]' . $vurl['href'] . '[/audio]';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif(is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) {
|
||||
$s['body'] .= "\n\n" . '[audio]' . $act->obj['url'] . '[/audio]';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($act->obj['type'] === 'Image') {
|
||||
|
||||
$ptr = null;
|
||||
|
||||
if(array_key_exists('url',$act->obj)) {
|
||||
if(is_array($act->obj['url'])) {
|
||||
if(array_key_exists(0,$act->obj['url'])) {
|
||||
$ptr = $act->obj['url'];
|
||||
}
|
||||
else {
|
||||
$ptr = [ $act->obj['url'] ];
|
||||
}
|
||||
foreach($ptr as $vurl) {
|
||||
if(strpos($s['body'],$vurl['href']) === false) {
|
||||
$s['body'] .= "\n\n" . '[zmg]' . $vurl['href'] . '[/zmg]';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif(is_string($act->obj['url'])) {
|
||||
if(strpos($s['body'],$act->obj['url']) === false) {
|
||||
$s['body'] .= "\n\n" . '[zmg]' . $act->obj['url'] . '[/zmg]';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($act->obj['type'] === 'Page' && ! $s['body']) {
|
||||
|
||||
$ptr = null;
|
||||
$purl = EMPTY_STR;
|
||||
|
||||
if(array_key_exists('url',$act->obj)) {
|
||||
if(is_array($act->obj['url'])) {
|
||||
if(array_key_exists(0,$act->obj['url'])) {
|
||||
$ptr = $act->obj['url'];
|
||||
}
|
||||
else {
|
||||
$ptr = [ $act->obj['url'] ];
|
||||
}
|
||||
foreach($ptr as $vurl) {
|
||||
if(array_key_exists('mediaType',$vurl) && $vurl['mediaType'] === 'text/html') {
|
||||
$purl = $vurl['href'];
|
||||
break;
|
||||
}
|
||||
elseif(array_key_exists('mimeType',$vurl) && $vurl['mimeType'] === 'text/html') {
|
||||
$purl = $vurl['href'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif(is_string($act->obj['url'])) {
|
||||
$purl = $act->obj['url'];
|
||||
}
|
||||
if($purl) {
|
||||
$li = z_fetch_url(z_root() . '/linkinfo?binurl=' . bin2hex($purl));
|
||||
if($li['success'] && $li['body']) {
|
||||
$s['body'] .= "\n" . $li['body'];
|
||||
}
|
||||
else {
|
||||
$s['body'] .= "\n\n" . $purl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(in_array($act->obj['type'],[ 'Note','Article','Page' ])) {
|
||||
$ptr = null;
|
||||
|
||||
if(array_key_exists('url',$act->obj)) {
|
||||
if(is_array($act->obj['url'])) {
|
||||
if(array_key_exists(0,$act->obj['url'])) {
|
||||
$ptr = $act->obj['url'];
|
||||
}
|
||||
else {
|
||||
$ptr = [ $act->obj['url'] ];
|
||||
}
|
||||
foreach($ptr as $vurl) {
|
||||
if(array_key_exists('mediaType',$vurl) && $vurl['mediaType'] === 'text/html') {
|
||||
$s['plink'] = $vurl['href'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif(is_string($act->obj['url'])) {
|
||||
$s['plink'] = $act->obj['url'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! $s['plink']) {
|
||||
$s['plink'] = $s['mid'];
|
||||
}
|
||||
|
||||
if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips)))
|
||||
@ -1371,8 +1560,6 @@ class Activity {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static function announce_note($channel,$observer_hash,$act) {
|
||||
|
||||
$s = [];
|
||||
|
@ -1418,7 +1418,7 @@ logger('4');
|
||||
|
||||
$DR = new DReport(z_root(),$sender,$d,$arr['mid']);
|
||||
|
||||
$channel = channelx_by_hash($d);
|
||||
$channel = channelx_by_portid($d);
|
||||
|
||||
if (! $channel) {
|
||||
$DR->update('recipient not found');
|
||||
@ -1505,8 +1505,10 @@ logger('4');
|
||||
}
|
||||
}
|
||||
|
||||
if($arr['mid'] != $arr['parent_mid']) {
|
||||
logger('item: ' . print_r($arr,true), LOGGER_DATA);
|
||||
|
||||
if($arr['mid'] !== $arr['parent_mid']) {
|
||||
logger('checking source: "' . $arr['mid'] . '" != "' . $arr['parent_mid'] . '"');
|
||||
// check source route.
|
||||
// We are only going to accept comments from this sender if the comment has the same route as the top-level-post,
|
||||
// this is so that permissions mismatches between senders apply to the entire conversation
|
||||
@ -1591,7 +1593,7 @@ logger('4');
|
||||
$arr['route'] = $last_prior_route;
|
||||
}
|
||||
}
|
||||
|
||||
logger('hey');
|
||||
$ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'",
|
||||
intval($channel['channel_id']),
|
||||
dbesc($arr['owner_xchan'])
|
||||
|
@ -2333,6 +2333,21 @@ function channelx_by_hash($hash) {
|
||||
return(($r) ? $r[0] : false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get a channel array by a channel_hash.
|
||||
*
|
||||
* @param string $hash
|
||||
* @return array|boolean false if channel ID not found, otherwise the channel array
|
||||
*/
|
||||
function channelx_by_portid($hash) {
|
||||
$r = q("SELECT * FROM channel left join xchan on channel_portable_id = xchan_hash WHERE channel_portable_id = '%s' and channel_removed = 0 LIMIT 1",
|
||||
dbesc($hash)
|
||||
);
|
||||
|
||||
return(($r) ? $r[0] : false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get a channel array by a channel ID.
|
||||
*
|
||||
|
Reference in New Issue
Block a user