/**
* Store tag/mention elements
*
- * @param integer $uriid
- * @param integer $type
- * @param string $name
- * @param string $url
- * @param integer $target
+ * @param integer $uriid URI id
+ * @param integer $type Tag type
+ * @param string $name Tag name
+ * @param string $url Contact URL (optional)
+ * @param integer $target Target (default: null)
+ * @return void
*/
public static function store(int $uriid, int $type, string $name, string $url = '', int $target = null)
{
{
$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)) {
/**
* Store tag/mention elements
*
- * @param integer $uriid
- * @param string $hash
- * @param string $name
- * @param string $url
- * @param boolean $probing
+ * @param integer $uriid URI id
+ * @param string $hash Hash
+ * @param string $name Name
+ * @param string $url URL
+ * @param boolean $probing Whether probing is active
+ * @return void
*/
- public static function storeByHash(int $uriid, string $hash, string $name, string $url = '', $probing = true)
+ public static function storeByHash(int $uriid, string $hash, string $name, string $url = '', bool $probing = true)
{
$type = self::getTypeForHash($hash);
if ($type == self::UNKNOWN) {
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)) {
* @param string $body Body of the post
* @param string $tags Accepted tags
* @param boolean $probing Perform a probing for contacts, adding them if needed
+ * @return void
*/
- public static function storeFromBody(int $uriid, string $body, string $tags = null, $probing = true)
+ public static function storeFromBody(int $uriid, string $body, string $tags = null, bool $probing = true)
{
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);
+ }
+ }
}
/**
*
* @param integer $uriid URI-Id
* @param string $body Body of the post
+ * @return void
*/
public static function storeRawTagsFromBody(int $uriid, string $body)
{
/**
* Remove tag/mention
*
- * @param integer $uriid
- * @param integer $type
- * @param string $name
- * @param string $url
+ * @param integer $uriid URI id
+ * @param integer $type Type
+ * @param string $name Name
+ * @param string $url URL
+ * @return void
*/
public static function remove(int $uriid, int $type, string $name, string $url = '')
{