X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FActivityPub%2FProcessor.php;h=c38cba28f187419258727c62693323538b5edc03;hb=f78c1480135b9445d94a815fbfcc138f1a4dea58;hp=2661444e0c56e34ac94ecd1df2351d5c64a9626d;hpb=8adc761da0e6012aa0176047812df15adb15c33a;p=friendica.git diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 2661444e0c..c38cba28f1 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -137,28 +137,12 @@ class Processor $item['changed'] = DateTimeFormat::utcNow(); $item['edited'] = $activity['updated']; - $item['title'] = HTML::toBBCode($activity['name']); - $item['content-warning'] = HTML::toBBCode($activity['summary']); - - $content = HTML::toBBCode($activity['content']); - $content = self::replaceEmojis($content, $activity['emojis']); - $content = self::convertMentions($content); - if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { - $parent = Item::selectFirst(['id', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); - if (!DBA::isResult($parent)) { - Logger::warning('Unknown parent item.', ['uri' => $item['thr-parent']]); - return; - } - - $potential_implicit_mentions = self::getImplicitMentionList($parent); - $content = self::removeImplicitMentionsFromBody($content, $potential_implicit_mentions); - $activity['tags'] = self::convertImplicitMentionsInTags($activity['tags'], $potential_implicit_mentions); + $item = self::processContent($activity, $item); + if (empty($item)) { + return; } - $item['body'] = $content; - $item['tag'] = self::constructTagString($activity['tags'], $activity['sensitive']); - Item::update($item, ['uri' => $activity['id']]); } @@ -263,6 +247,62 @@ class Processor Logger::log('Event '.$event_id.' was stored', Logger::DEBUG); } + /** + * Process the content + * + * @param array $activity Activity array + * @param array $item + * @return array|bool Returns the item array or false if there was an unexpected occurrence + * @throws \Exception + */ + private static function processContent($activity, $item) + { + $item['title'] = HTML::toBBCode($activity['name']); + + if (!empty($activity['source'])) { + $item['body'] = $activity['source']; + } else { + $content = HTML::toBBCode($activity['content']); + $content = self::replaceEmojis($content, $activity['emojis']); + $content = self::convertMentions($content); + + if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { + $item_private = !in_array(0, $activity['item_receiver']); + $parent = Item::selectFirst(['id', 'private', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); + if (!DBA::isResult($parent)) { + Logger::warning('Unknown parent item.', ['uri' => $item['thr-parent']]); + return false; + } + if ($item_private && !$parent['private']) { + Logger::warning('Item is private but the parent is not. Dropping.', ['item-uri' => $item['uri'], 'thr-parent' => $item['thr-parent']]); + return false; + } + + $potential_implicit_mentions = self::getImplicitMentionList($parent); + $content = self::removeImplicitMentionsFromBody($content, $potential_implicit_mentions); + $activity['tags'] = self::convertImplicitMentionsInTags($activity['tags'], $potential_implicit_mentions); + } + $item['content-warning'] = HTML::toBBCode($activity['summary']); + $item['body'] = $content; + + if (($activity['object_type'] == 'as:Video') && !empty($activity['alternate-url'])) { + $item['body'] .= "\n[video]" . $activity['alternate-url'] . '[/video]'; + } + } + + $item['tag'] = self::constructTagString($activity['tags'], $activity['sensitive']); + + $item['location'] = $activity['location']; + + if (!empty($item['latitude']) && !empty($item['longitude'])) { + $item['coord'] = $item['latitude'] . ' ' . $item['longitude']; + } + + $item['app'] = $activity['generator']; + + return $item; + } + /** * Creates an item post * @@ -295,53 +335,20 @@ class Processor } $item['uri'] = $activity['id']; - $content = HTML::toBBCode($activity['content']); - $content = self::replaceEmojis($content, $activity['emojis']); - $content = self::convertMentions($content); - - if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { - $item_private = !in_array(0, $activity['item_receiver']); - $parent = Item::selectFirst(['id', 'private', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); - if (!DBA::isResult($parent)) { - return; - } - if ($item_private && !$parent['private']) { - Logger::warning('Item is private but the parent is not. Dropping.', ['item-uri' => $item['uri'], 'thr-parent' => $item['thr-parent']]); - return; - } - - $potential_implicit_mentions = self::getImplicitMentionList($parent); - $content = self::removeImplicitMentionsFromBody($content, $potential_implicit_mentions); - $activity['tags'] = self::convertImplicitMentionsInTags($activity['tags'], $potential_implicit_mentions); - } $item['created'] = $activity['published']; $item['edited'] = $activity['updated']; $item['guid'] = $activity['diaspora:guid']; - $item['title'] = HTML::toBBCode($activity['name']); - $item['content-warning'] = HTML::toBBCode($activity['summary']); - $item['body'] = $content; - - if (($activity['object_type'] == 'as:Video') && !empty($activity['alternate-url'])) { - $item['body'] .= "\n[video]" . $activity['alternate-url'] . '[/video]'; - } - - $item['location'] = $activity['location']; - if (!empty($item['latitude']) && !empty($item['longitude'])) { - $item['coord'] = $item['latitude'] . ' ' . $item['longitude']; + $item = self::processContent($activity, $item); + if (empty($item)) { + return; } - $item['tag'] = self::constructTagString($activity['tags'], $activity['sensitive']); - $item['app'] = $activity['generator']; $item['plink'] = defaults($activity, 'alternate-url', $item['uri']); $item = self::constructAttachList($activity['attachments'], $item); - if (!empty($activity['source'])) { - $item['body'] = $activity['source']; - } - $stored = false; foreach ($activity['receiver'] as $receiver) { @@ -669,13 +676,16 @@ class Processor $parent_author = Contact::getDetailsByURL($parent['author-link'], 0); - $implicit_mentions = [ - $parent_author['url'], - $parent_author['nurl'], - $parent_author['alias'], - ]; + $implicit_mentions = []; + if (empty($parent_author)) { + Logger::notice('Author public contact unknown.', ['author-link' => $parent['author-link'], 'item-id' => $parent['id']]); + } else { + $implicit_mentions[] = $parent_author['url']; + $implicit_mentions[] = $parent_author['nurl']; + $implicit_mentions[] = $parent_author['alias']; + } - if ($parent['alias']) { + if (!empty($parent['alias'])) { $implicit_mentions[] = $parent['alias']; } @@ -707,7 +717,7 @@ class Processor $kept_mentions = []; // Extract one prepended mention at a time from the body - while(preg_match('#^(@\[url=([^\]]+)].*?\[\/url]\s)(.*)#mis', $body, $matches)) { + while(preg_match('#^(@\[url=([^\]]+)].*?\[\/url]\s)(.*)#is', $body, $matches)) { if (!in_array($matches[2], $potential_mentions) ) { $kept_mentions[] = $matches[1]; } @@ -740,30 +750,4 @@ class Processor return $activity_tags; } - - public static function testImplicitMentions($item, $source) - { - $parent = Item::selectFirst(['id', 'guid', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); - - $implicit_mentions = self::getImplicitMentionList($parent); - var_dump($implicit_mentions); - - $object = json_decode($source, true)['object']; - var_dump($object); - - $content = HTML::toBBCode($object['content']); - $content = self::convertMentions($content); - - $activity = [ - 'tags' => $object['tag'], - 'content' => $content - ]; - - var_dump($activity); - - $activity['content'] = Processor::removeImplicitMentionsFromBody($activity['content'], $implicit_mentions); - $activity['tags'] = Processor::convertImplicitMentionsInTags($activity['tags'], $implicit_mentions); - - return $activity; - } }