+ /**
+ * Store tags and mentions into the tag table
+ *
+ * @param integer $uriid
+ * @param array $tags
+ */
+ private static function storeTags(int $uriid, array $tags = null)
+ {
+ foreach ($tags as $tag) {
+ if (empty($tag['name']) || empty($tag['type']) || !in_array($tag['type'], ['Mention', 'Hashtag'])) {
+ continue;
+ }
+
+ $hash = substr($tag['name'], 0, 1);
+
+ if ($tag['type'] == 'Mention') {
+ if (in_array($hash, [Tag::TAG_CHARACTER[Tag::MENTION],
+ Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION],
+ Tag::TAG_CHARACTER[Tag::IMPLICIT_MENTION]])) {
+ $tag['name'] = substr($tag['name'], 1);
+ }
+ $type = Tag::IMPLICIT_MENTION;
+
+ if (!empty($tag['href'])) {
+ $apcontact = APContact::getByURL($tag['href']);
+ if (!empty($apcontact['name']) || !empty($apcontact['nick'])) {
+ $tag['name'] = $apcontact['name'] ?: $apcontact['nick'];
+ }
+ }
+ } elseif ($tag['type'] == 'Hashtag') {
+ if ($hash == Tag::TAG_CHARACTER[Tag::HASHTAG]) {
+ $tag['name'] = substr($tag['name'], 1);
+ }
+ $type = Tag::HASHTAG;
+ }
+
+ if (empty($tag['name'])) {
+ continue;
+ }
+
+ Tag::store($uriid, $type, $tag['name'], $tag['href']);
+ }
+ }
+