X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FTag.php;h=a48f2cb92b6dc71308576e274d78d1fb45667dc1;hb=701dbdf7fc4979f05fde1c655b17ca3aff0a59e0;hp=9b4b1eb41b806d127eb0b85c9653c56e2ba88cc0;hpb=f7a45e41534c392b51fd07bd7cd4d3c969d75228;p=friendica.git diff --git a/src/Model/Tag.php b/src/Model/Tag.php index 9b4b1eb41b..a48f2cb92b 100644 --- a/src/Model/Tag.php +++ b/src/Model/Tag.php @@ -111,7 +111,7 @@ class Tag } } } else { - $cid = Contact::getIdForURL($url, 0, true); + $cid = Contact::getIdForURL($url, 0, false); Logger::info('Got id by probing', ['cid' => $cid, 'url' => $url]); } @@ -325,6 +325,29 @@ 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) + { + // Always mention the direct parent author + $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']); + + 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']); + } + DBA::close($tags); + } + /** * Retrieves the terms from the provided type(s) associated with the provided item ID. * @@ -339,6 +362,25 @@ class Tag return DBA::selectToArray('tag-view', ['type', 'name', 'url'], $condition); } + /** + * Return a string with all tags and mentions + * + * @param integer $uri_id + * @param array $type + * @return string tags and mentions + * @throws \Exception + */ + public static function getCSVByURIId(int $uri_id, array $type = [self::HASHTAG, self::MENTION, self::IMPLICIT_MENTION, self::EXCLUSIVE_MENTION]) + { + $tag_list = []; + $tags = self::getByURIId($uri_id, $type); + foreach ($tags as $tag) { + $tag_list[] = self::TAG_CHARACTER[$tag['type']] . '[url=' . $tag['url'] . ']' . $tag['name'] . '[/url]'; + } + + return implode(',', $tag_list); + } + /** * Sorts an item's tags into mentions, hashtags and other tags. Generate personalized URLs by user and modify the * provided item's body with them. @@ -493,6 +535,42 @@ class Tag } } - return Strings::startsWith($tag, $tag_chars); - } + return Strings::startsWithChars($tag, $tag_chars); + } + + /** + * Fetch user who subscribed to the given tag + * + * @param string $tag + * @return array User list + */ + private static function getUIDListByTag(string $tag) + { + $uids = []; + $searches = DBA::select('search', ['uid'], ['term' => $tag]); + while ($search = DBA::fetch($searches)) { + $uids[] = $search['uid']; + } + DBA::close($searches); + + return $uids; + } + + /** + * Fetch user who subscribed to the tags of the given item + * + * @param integer $uri_id + * @return array User list + */ + public static function getUIDListByURIId(int $uri_id) + { + $uids = []; + $tags = self::getByURIId($uri_id, [self::HASHTAG]); + + foreach ($tags as $tag) { + $uids = array_merge($uids, self::getUIDListByTag(self::TAG_CHARACTER[self::HASHTAG] . $tag['name'])); + } + + return array_unique($uids); + } }