From 8034a48ffe6deef939172c8e659cbd3e0d497464 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 30 Jan 2022 10:56:13 +0000 Subject: [PATCH] "inform" functionality moved / unified functionality --- mod/item.php | 72 ++++++++++++++----------------------- src/Content/Item.php | 13 +------ src/Content/Text/BBCode.php | 5 ++- 3 files changed, 29 insertions(+), 61 deletions(-) diff --git a/mod/item.php b/mod/item.php index fd284fa2d..d47a78053 100644 --- a/mod/item.php +++ b/mod/item.php @@ -394,57 +394,37 @@ function item_post(App $a) { // Personal notes must never be altered to a forum post. if ($posttype != Item::PT_PERSONAL_NOTE) { // Convert mentions in the body to a unified format - $body = BBCode::performWithEscapedTags($body, ['noparse', 'pre', 'code', 'img'], function ($body) use ($profile_uid, $network, &$inform) { - $tags = BBCode::getTags($body); - - $tagged = []; - - foreach ($tags as $tag) { - $tag_type = substr($tag, 0, 1); - - if ($tag_type == Tag::TAG_CHARACTER[Tag::HASHTAG]) { - continue; - } - - // If we already tagged 'Robert Johnson', don't try and tag 'Robert'. - // Robert Johnson should be first in the $tags array - foreach ($tagged as $nextTag) { - if (stristr($nextTag, $tag . ' ')) { - continue 2; - } - } - - ItemHelper::replaceTag($body, $inform, local_user() ? local_user() : $profile_uid, $tag, $network); - } - - return $body; - }); + $body = BBCode::setMentions($body, local_user() ? local_user() : $profile_uid, $network); // Search for forum mentions - if (!$toplevel_item_id) { - foreach (Tag::getFromBody($body, Tag::TAG_CHARACTER[Tag::MENTION] . Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]) as $tag) { - $contact = Contact::getByURL($tag[2], false, [], $profile_uid); - if ($contact['contact-type'] != Contact::TYPE_COMMUNITY) { - continue; - } + foreach (Tag::getFromBody($body, Tag::TAG_CHARACTER[Tag::MENTION] . Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]) as $tag) { + $contact = Contact::getByURL($tag[2], false, [], $profile_uid); + if (!empty($inform)) { + $inform .= ','; + } + $inform .= 'cid:' . $contact['id']; - if (!empty($contact['prv']) || ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION])) { - $private_forum = $contact['prv']; - $only_to_forum = ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]); - $private_id = $contact['id']; - $forum_contact = $contact; - Logger::info('Private forum or exclusive mention', ['url' => $tag[2], 'mention' => $tag[1]]); - } elseif ($str_contact_allow == '<' . $contact['id'] . '>') { - $private_forum = false; - $only_to_forum = true; - $private_id = $contact['id']; - $forum_contact = $contact; - Logger::info('Public forum', ['url' => $tag[2], 'mention' => $tag[1]]); - } else { - Logger::info('Post with forum mention will not be converted to a forum post', ['url' => $tag[2], 'mention' => $tag[1]]); - } + if (!$toplevel_item_id || ($contact['contact-type'] != Contact::TYPE_COMMUNITY)) { + continue; + } + + if (!empty($contact['prv']) || ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION])) { + $private_forum = $contact['prv']; + $only_to_forum = ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]); + $private_id = $contact['id']; + $forum_contact = $contact; + Logger::info('Private forum or exclusive mention', ['url' => $tag[2], 'mention' => $tag[1]]); + } elseif ($str_contact_allow == '<' . $contact['id'] . '>') { + $private_forum = false; + $only_to_forum = true; + $private_id = $contact['id']; + $forum_contact = $contact; + Logger::info('Public forum', ['url' => $tag[2], 'mention' => $tag[1]]); + } else { + Logger::info('Post with forum mention will not be converted to a forum post', ['url' => $tag[2], 'mention' => $tag[1]]); } } + Logger::info('Got inform', ['inform' => $inform]); } $original_contact_id = $contact_id; diff --git a/src/Content/Item.php b/src/Content/Item.php index 694ef52d9..5037be80e 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -135,7 +135,6 @@ class Item * the appropriate link. * * @param string $body the text to replace the tag in - * @param string $inform a comma-seperated string containing everybody to inform * @param integer $profile_uid the user id to replace the tag for (0 = anyone) * @param string $tag the tag to replace * @param string $network The network of the post @@ -144,7 +143,7 @@ class Item * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function replaceTag(&$body, &$inform, $profile_uid, $tag, $network = '') + public static function replaceTag(&$body, $profile_uid, $tag, $network = '') { $replaced = false; @@ -218,16 +217,6 @@ class Item // Check if $contact has been successfully loaded if (DBA::isResult($contact)) { - if (strlen($inform) && (isset($contact['notify']) || isset($contact['id']))) { - $inform .= ','; - } - - if (isset($contact['id'])) { - $inform .= 'cid:' . $contact['id']; - } elseif (isset($contact['notify'])) { - $inform .= $contact['notify']; - } - $profile = $contact['url']; $newname = ($contact['name'] ?? '') ?: $contact['nick']; } diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 4c895f533..0bb55215e 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -2358,11 +2358,10 @@ class BBCode public static function setMentions($body, $profile_uid = 0, $network = '') { DI::profiler()->startRecording('rendering'); - self::performWithEscapedTags($body, ['noparse', 'pre', 'code', 'img'], function ($body) use ($profile_uid, $network) { + $body = self::performWithEscapedTags($body, ['noparse', 'pre', 'code', 'img'], function ($body) use ($profile_uid, $network) { $tags = self::getTags($body); $tagged = []; - $inform = ''; foreach ($tags as $tag) { $tag_type = substr($tag, 0, 1); @@ -2381,7 +2380,7 @@ class BBCode } } - if (($success = Item::replaceTag($body, $inform, $profile_uid, $tag, $network)) && $success['replaced']) { + if (($success = Item::replaceTag($body, $profile_uid, $tag, $network)) && $success['replaced']) { $tagged[] = $tag; } }