diff --git a/src/Model/Term.php b/src/Model/Term.php
index d950d1d5fb..03f19197a3 100644
--- a/src/Model/Term.php
+++ b/src/Model/Term.php
@@ -9,6 +9,7 @@ use Friendica\Database\DBM;
use dba;
require_once 'boot.php';
+require_once 'include/conversation.php';
require_once 'include/dba.php';
class Term
@@ -168,4 +169,56 @@ class Term
}
}
}
+
+ /**
+ * 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.
+ *
+ * @param array $item
+ * @return array
+ */
+ public static function populateTagsFromItem(&$item)
+ {
+ $return = [
+ 'tags' => [],
+ 'hashtags' => [],
+ 'mentions' => [],
+ ];
+
+ $searchpath = System::baseUrl() . "/search?tag=";
+
+ $taglist = dba::select(
+ 'term',
+ ['type', 'term', 'url'],
+ ["`otype` = ? AND `oid` = ? AND `type` IN (?, ?)", TERM_OBJ_POST, $item['id'], TERM_HASHTAG, TERM_MENTION],
+ ['order' => ['tid']]
+ );
+
+ while ($tag = dba::fetch($taglist)) {
+ if ($tag["url"] == "") {
+ $tag["url"] = $searchpath . strtolower($tag["term"]);
+ }
+
+ $orig_tag = $tag["url"];
+
+ $tag["url"] = best_link_url($item, $sp, $tag["url"]);
+
+ if ($tag["type"] == TERM_HASHTAG) {
+ if ($orig_tag != $tag["url"]) {
+ $item['body'] = str_replace($orig_tag, $tag["url"], $item['body']);
+ }
+
+ $return['hashtags'][] = "#" . $tag["term"] . "";
+ $prefix = "#";
+ } elseif ($tag["type"] == TERM_MENTION) {
+ $return['mentions'][] = "@" . $tag["term"] . "";
+ $prefix = "@";
+ }
+
+ $return['tags'][] = $prefix . "" . $tag["term"] . "";
+ }
+ dba::close($taglist);
+
+ return $return;
+ }
}