Issue 8610: Implicit mentions work again
This commit is contained in:
parent
e53e471b6b
commit
d5f64e1156
3 changed files with 36 additions and 28 deletions
31
mod/item.php
31
mod/item.php
|
@ -747,6 +747,7 @@ function item_post(App $a) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Tag::storeFromBody($datarray['uri-id'], $datarray['body']);
|
Tag::storeFromBody($datarray['uri-id'], $datarray['body']);
|
||||||
|
Tag::createImplicitMentions($datarray['uri-id'], $datarray['thr-parent-id']);
|
||||||
|
|
||||||
// update filetags in pconfig
|
// update filetags in pconfig
|
||||||
FileTag::updatePconfig($uid, $categories_old, $categories_new, 'category');
|
FileTag::updatePconfig($uid, $categories_old, $categories_new, 'category');
|
||||||
|
@ -1002,29 +1003,15 @@ function handle_tag(&$body, &$inform, $profile_uid, $tag, $network = "")
|
||||||
|
|
||||||
function item_add_implicit_mentions(array $tags, array $thread_parent_contact, $thread_parent_uriid)
|
function item_add_implicit_mentions(array $tags, array $thread_parent_contact, $thread_parent_uriid)
|
||||||
{
|
{
|
||||||
if (DI::config()->get('system', 'disable_implicit_mentions')) {
|
if (!DI::config()->get('system', 'disable_implicit_mentions')) {
|
||||||
// Add a tag if the parent contact is from ActivityPub or OStatus (This will notify them)
|
return $tags;
|
||||||
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]);
|
// 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])) {
|
||||||
foreach ($parent_terms as $parent_term) {
|
$contact = Tag::TAG_CHARACTER[Tag::MENTION] . '[url=' . $thread_parent_contact['url'] . ']' . $thread_parent_contact['nick'] . '[/url]';
|
||||||
$implicit_mentions[$parent_term['url']] = $parent_term['name'];
|
if (!stripos(implode($tags), '[url=' . $thread_parent_contact['url'] . ']')) {
|
||||||
}
|
$tags[] = $contact;
|
||||||
|
|
||||||
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]';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -325,6 +325,27 @@ class Tag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Retrieves the terms from the provided type(s) associated with the provided item ID.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1294,7 +1294,7 @@ class Transmitter
|
||||||
$body = $item['body'];
|
$body = $item['body'];
|
||||||
|
|
||||||
if (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) {
|
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') {
|
if ($type == 'Note') {
|
||||||
|
@ -1843,7 +1843,7 @@ class Transmitter
|
||||||
HTTPSignature::transmit($signed, $profile['inbox'], $uid);
|
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')) {
|
if (DI::config()->get('system', 'disable_implicit_mentions')) {
|
||||||
return $body;
|
return $body;
|
||||||
|
@ -1851,14 +1851,14 @@ class Transmitter
|
||||||
|
|
||||||
$mentions = [];
|
$mentions = [];
|
||||||
|
|
||||||
foreach ($permission_block['to'] as $profile_url) {
|
foreach (Tag::getByURIId($uriid, [Tag::IMPLICIT_MENTION]) as $tag) {
|
||||||
$profile = Contact::getDetailsByURL($profile_url);
|
$profile = Contact::getDetailsByURL($tag['url']);
|
||||||
if (!empty($profile['addr'])
|
if (!empty($profile['addr'])
|
||||||
&& $profile['contact-type'] != Contact::TYPE_COMMUNITY
|
&& $profile['contact-type'] != Contact::TYPE_COMMUNITY
|
||||||
&& !strstr($body, $profile['addr'])
|
&& !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]';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue