X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FTag.php;h=002501aa45f91084a80015cd0315070d6ed8c87f;hb=624e4c192c7f837ac0587a50da6e1409081eb519;hp=0ea19f55d9e11f5e8bc0f11585fd5f287e6480bf;hpb=b89f727cca402dedf8b4f89f0b7a85bf224603ba;p=friendica.git diff --git a/src/Model/Tag.php b/src/Model/Tag.php index 0ea19f55d9..002501aa45 100644 --- a/src/Model/Tag.php +++ b/src/Model/Tag.php @@ -224,15 +224,18 @@ class Tag { $fields = ['name' => substr($name, 0, 96), 'url' => $url]; - if (!empty($type)) { - $fields['type'] = $type; - } - - $tag = DBA::selectFirst('tag', ['id'], $fields); + $tag = DBA::selectFirst('tag', ['id', 'type'], $fields); if (DBA::isResult($tag)) { + if (empty($tag['type']) && !empty($type)) { + DBA::update('tag', ['type' => $type], $fields); + } return $tag['id']; } + if (!empty($type)) { + $fields['type'] = $type; + } + DBA::insert('tag', $fields, Database::INSERT_IGNORE); $tid = DBA::lastInsertId(); if (!empty($tid)) { @@ -273,7 +276,7 @@ class Tag public static function getFromBody(string $body, string $tags = null) { if (is_null($tags)) { - $tags = self::TAG_CHARACTER[self::HASHTAG] . self::TAG_CHARACTER[self::MENTION] . self::TAG_CHARACTER[self::EXCLUSIVE_MENTION]; + $tags = self::TAG_CHARACTER[self::HASHTAG] . self::TAG_CHARACTER[self::MENTION] . self::TAG_CHARACTER[self::EXCLUSIVE_MENTION]; } if (!preg_match_all("/([" . $tags . "])\[url\=([^\[\]]*)\]([^\[\]]*)\[\/url\]/ism", $body, $result, PREG_SET_ORDER)) { @@ -295,16 +298,29 @@ class Tag { Logger::info('Check for tags', ['uri-id' => $uriid, 'hash' => $tags, 'callstack' => System::callstack()]); - $result = self::getFromBody($body, $tags); - if (empty($result)) { - return; + if (is_null($tags)) { + $tags = self::TAG_CHARACTER[self::HASHTAG] . self::TAG_CHARACTER[self::MENTION] . self::TAG_CHARACTER[self::EXCLUSIVE_MENTION]; } - Logger::info('Found tags', ['uri-id' => $uriid, 'hash' => $tags, 'result' => $result]); + // Only remove the shared data from "real" reshares + $shared = BBCode::fetchShareAttributes($body); + if (!empty($shared['guid'])) { + if (preg_match("/\s*\[share .*?\](.*?)\[\/share\]\s*/ism", $body, $matches)) { + $share_body = $matches[1]; + } + $body = preg_replace("/\s*\[share .*?\].*?\[\/share\]\s*/ism", '', $body); + } - foreach ($result as $tag) { + foreach (self::getFromBody($body, $tags) as $tag) { self::storeByHash($uriid, $tag[1], $tag[3], $tag[2], $probing); } + + // Search for hashtags in the shared body (but only if hashtags are wanted) + if (!empty($share_body) && (strpos($tags, self::TAG_CHARACTER[self::HASHTAG]) !== false)) { + foreach (self::getFromBody($share_body, self::TAG_CHARACTER[self::HASHTAG]) as $tag) { + self::storeByHash($uriid, $tag[1], $tag[3], $tag[2], $probing); + } + } } /**