Generate ActivityPub content warnings from [spoiler] elements
This commit is contained in:
parent
f826ce70ce
commit
836ec2f20d
5 changed files with 42 additions and 2 deletions
|
@ -2211,6 +2211,30 @@ class BBCode
|
||||||
DI::profiler()->stopRecording();
|
DI::profiler()->stopRecording();
|
||||||
return $abstract;
|
return $abstract;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of the headings of "spoiler" elements
|
||||||
|
*
|
||||||
|
* @param string $text The text containing spoiler elements
|
||||||
|
* @return string The list of spoiler headings
|
||||||
|
*/
|
||||||
|
public static function getSpoilerHeadings(string $text): string
|
||||||
|
{
|
||||||
|
DI::profiler()->startRecording('rendering');
|
||||||
|
|
||||||
|
$headings = BBCode::performWithEscapedTags($text, ['code', 'noparse', 'nobb', 'pre'], function ($text) {
|
||||||
|
$headings = [];
|
||||||
|
if (preg_match_all('/\[spoiler=[\"\']*(.*?)[\"\']*\]/ism', $text, $matches)) {
|
||||||
|
foreach ($matches[1] as $item) {
|
||||||
|
$headings[] = BBCode::toPlaintext($item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return implode(', ', $headings);
|
||||||
|
});
|
||||||
|
|
||||||
|
DI::profiler()->stopRecording();
|
||||||
|
return $headings;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback function to replace a Friendica style mention in a mention for Diaspora
|
* Callback function to replace a Friendica style mention in a mention for Diaspora
|
||||||
|
|
|
@ -78,6 +78,7 @@ class ActivityPub
|
||||||
'discoverable' => 'toot:discoverable',
|
'discoverable' => 'toot:discoverable',
|
||||||
'PropertyValue' => 'schema:PropertyValue',
|
'PropertyValue' => 'schema:PropertyValue',
|
||||||
'value' => 'schema:value',
|
'value' => 'schema:value',
|
||||||
|
'keithext' => 'http://bytes.keithhacks.cyou/keith/friendica/',
|
||||||
]];
|
]];
|
||||||
const ACCOUNT_TYPES = ['Person', 'Organization', 'Service', 'Group', 'Application', 'Tombstone'];
|
const ACCOUNT_TYPES = ['Person', 'Organization', 'Service', 'Group', 'Application', 'Tombstone'];
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1894,6 +1894,12 @@ class Receiver
|
||||||
$object_data['sensitive'] = JsonLD::fetchElement($object, 'as:sensitive');
|
$object_data['sensitive'] = JsonLD::fetchElement($object, 'as:sensitive');
|
||||||
$object_data['name'] = JsonLD::fetchElement($object, 'as:name', '@value');
|
$object_data['name'] = JsonLD::fetchElement($object, 'as:name', '@value');
|
||||||
$object_data['summary'] = JsonLD::fetchElement($object, 'as:summary', '@value');
|
$object_data['summary'] = JsonLD::fetchElement($object, 'as:summary', '@value');
|
||||||
|
// HACK Don't know exactly where I should be checking keithext:summaryFromSpoilers to prevent
|
||||||
|
// auto-generated spoiler CWs from showing up on Friendica, but it's definitely not here.
|
||||||
|
// However, this should work for now.
|
||||||
|
// TODO @keith clean this up or else
|
||||||
|
if (JsonLD::fetchElement($object, 'keithext:summaryFromSpoilers', '@value'))
|
||||||
|
$object_data['summary'] = null;
|
||||||
$object_data['content'] = JsonLD::fetchElement($object, 'as:content', '@value');
|
$object_data['content'] = JsonLD::fetchElement($object, 'as:content', '@value');
|
||||||
$object_data['mediatype'] = JsonLD::fetchElement($object, 'as:mediaType', '@value');
|
$object_data['mediatype'] = JsonLD::fetchElement($object, 'as:mediaType', '@value');
|
||||||
$object_data = self::getSource($object, $object_data);
|
$object_data = self::getSource($object, $object_data);
|
||||||
|
|
|
@ -1594,7 +1594,16 @@ class Transmitter
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data['summary'] = BBCode::toPlaintext(BBCode::getAbstract($item['body'], Protocol::ACTIVITYPUB));
|
$abstract = BBCode::getAbstract($item['body'], Protocol::ACTIVITYPUB);
|
||||||
|
if (!empty($abstract)) {
|
||||||
|
$data['summary'] = BBCode::toPlaintext($abstract);
|
||||||
|
} else {
|
||||||
|
$warnings = BBCode::getSpoilerHeadings($item['body']);
|
||||||
|
if ($warnings) {
|
||||||
|
$data['summary'] = $warnings;
|
||||||
|
$data['keithext:summaryFromSpoilers'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($item['uri'] != $item['thr-parent']) {
|
if ($item['uri'] != $item['thr-parent']) {
|
||||||
$data['inReplyTo'] = $item['thr-parent'];
|
$data['inReplyTo'] = $item['thr-parent'];
|
||||||
|
|
|
@ -781,7 +781,7 @@ class DFRN
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the abstract element. It is only locally important.
|
// Remove the abstract element. It is only locally important.
|
||||||
$body = BBCode::stripAbstract($body);
|
// $body = BBCode::stripAbstract($body);
|
||||||
|
|
||||||
$htmlbody = '';
|
$htmlbody = '';
|
||||||
if ($type == 'html') {
|
if ($type == 'html') {
|
||||||
|
|
Loading…
Reference in a new issue