}
Tag::storeFromBody($datarray['uri-id'], $datarray['body']);
+ Tag::createImplicitMentions($datarray['uri-id'], $datarray['thr-parent-id']);
// update filetags in pconfig
FileTag::updatePconfig($uid, $categories_old, $categories_new, 'category');
function item_add_implicit_mentions(array $tags, array $thread_parent_contact, $thread_parent_uriid)
{
- if (DI::config()->get('system', 'disable_implicit_mentions')) {
- // Add a tag if the parent contact is from ActivityPub or OStatus (This will notify them)
- if (in_array($thread_parent_contact['network'], [Protocol::OSTATUS, Protocol::ACTIVITYPUB])) {
- $contact = Tag::TAG_CHARACTER[Tag::MENTION] . '[url=' . $thread_parent_contact['url'] . ']' . $thread_parent_contact['nick'] . '[/url]';
- if (!stripos(implode($tags), '[url=' . $thread_parent_contact['url'] . ']')) {
- $tags[] = $contact;
- }
- }
- } else {
- $implicit_mentions = [
- $thread_parent_contact['url'] => $thread_parent_contact['nick']
- ];
-
- $parent_terms = Tag::getByURIId($thread_parent_uriid, [Tag::MENTION, Tag::IMPLICIT_MENTION]);
-
- foreach ($parent_terms as $parent_term) {
- $implicit_mentions[$parent_term['url']] = $parent_term['name'];
- }
+ if (!DI::config()->get('system', 'disable_implicit_mentions')) {
+ return $tags;
+ }
- foreach ($implicit_mentions as $url => $label) {
- if ($url != \Friendica\Model\Profile::getMyURL() && !stripos(implode($tags), '[url=' . $url . ']')) {
- $tags[] = Tag::TAG_CHARACTER[Tag::IMPLICIT_MENTION] . '[url=' . $url . ']' . $label . '[/url]';
- }
+ // Add a tag if the parent contact is from ActivityPub or OStatus (This will notify them)
+ if (in_array($thread_parent_contact['network'], [Protocol::OSTATUS, Protocol::ACTIVITYPUB])) {
+ $contact = Tag::TAG_CHARACTER[Tag::MENTION] . '[url=' . $thread_parent_contact['url'] . ']' . $thread_parent_contact['nick'] . '[/url]';
+ if (!stripos(implode($tags), '[url=' . $thread_parent_contact['url'] . ']')) {
+ $tags[] = $contact;
}
}
}
}
+ /**
+ * Create implicit mentions for a given post
+ *
+ * @param integer $uri_id
+ * @param integer $parent_uri_id
+ */
+ public static function createImplicitMentions(int $uri_id, int $parent_uri_id)
+ {
+ if (DI::config()->get('system', 'disable_implicit_mentions')) {
+ return;
+ }
+
+ $tags = DBA::select('tag-view', ['name', 'url'], ['uri-id' => $parent_uri_id]);
+ while ($tag = DBA::fetch($tags)) {
+ self::store($uri_id, self::IMPLICIT_MENTION, $tag['name'], $tag['url']);
+ }
+
+ $parent = Item::selectFirst(['author-link', 'author-name'], ['uri-id' => $parent_uri_id]);
+ self::store($uri_id, self::IMPLICIT_MENTION, $parent['author-name'], $parent['author-link']);
+ }
+
/**
* Retrieves the terms from the provided type(s) associated with the provided item ID.
*
$body = $item['body'];
if (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) {
- $body = self::prependMentions($body, $permission_block);
+ $body = self::prependMentions($body, $item['uri-id']);
}
if ($type == 'Note') {
HTTPSignature::transmit($signed, $profile['inbox'], $uid);
}
- private static function prependMentions($body, array $permission_block)
+ private static function prependMentions($body, int $uriid)
{
if (DI::config()->get('system', 'disable_implicit_mentions')) {
return $body;
$mentions = [];
- foreach ($permission_block['to'] as $profile_url) {
- $profile = Contact::getDetailsByURL($profile_url);
+ foreach (Tag::getByURIId($uriid, [Tag::IMPLICIT_MENTION]) as $tag) {
+ $profile = Contact::getDetailsByURL($tag['url']);
if (!empty($profile['addr'])
&& $profile['contact-type'] != Contact::TYPE_COMMUNITY
&& !strstr($body, $profile['addr'])
- && !strstr($body, $profile_url)
+ && !strstr($body, $tag['url'])
) {
- $mentions[] = '@[url=' . $profile_url . ']' . $profile['nick'] . '[/url]';
+ $mentions[] = '@[url=' . $tag['url'] . ']' . $profile['nick'] . '[/url]';
}
}