return $tag_text;
}
+ public static function tagArrayFromItemId($itemid, $type = [TERM_HASHTAG, TERM_MENTION])
+ {
+ $condition = ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => $type];
+ $tags = DBA::select('term', ['type', 'term', 'url'], $condition);
+ if (!DBA::isResult($tags)) {
+ return [];
+ }
+
+ return DBA::toArray($tags);
+ }
+
public static function fileTextFromItemId($itemid)
{
$file_text = '';
$message['tag'] = $tags;
// Clean up all tags
- DBA::delete('term', ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_HASHTAG, TERM_MENTION]]);
+ self::deleteByItemId($itemid);
if ($message['deleted']) {
return;
$tags_string = '';
foreach ($taglist as $tag) {
- if ((substr(trim($tag), 0, 1) == '#') || (substr(trim($tag), 0, 1) == '@')) {
+ if ((substr(trim($tag), 0, 1) == '#') || (substr(trim($tag), 0, 1) == '@') || (substr(trim($tag), 0, 1) == '!')) {
$tags_string .= ' ' . trim($tag);
} else {
$tags_string .= ' #' . trim($tag);
}
}
- $pattern = '/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism';
+ $pattern = '/\W([\#@!])\[url\=(.*?)\](.*?)\[\/url\]/ism';
if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
+
+ if (($match[1] == '@') || ($match[1] == '!')) {
+ $contact = Contact::getDetailsByURL($match[2], 0);
+ if (!empty($contact['addr'])) {
+ $match[3] = $contact['addr'];
+ }
+
+ if (!empty($contact['url'])) {
+ $match[2] = $contact['url'];
+ }
+ }
+
$tags[$match[1] . trim($match[3], ',.:;[]/\"?!')] = $match[2];
}
}
$type = TERM_HASHTAG;
$term = substr($tag, 1);
- } elseif (substr(trim($tag), 0, 1) == '@') {
+ } elseif ((substr(trim($tag), 0, 1) == '@') || (substr(trim($tag), 0, 1) == '!')) {
$type = TERM_MENTION;
- $term = substr($tag, 1);
+
+ $contact = Contact::getDetailsByURL($link, 0);
+ if (!empty($contact['name'])) {
+ $term = $contact['name'];
+ } else {
+ $term = substr($tag, 1);
+ }
} else { // This shouldn't happen
$type = TERM_HASHTAG;
$term = $tag;
}
+ if (DBA::exists('term', ['uid' => $message['uid'], 'otype' => TERM_OBJ_POST, 'oid' => $itemid, 'url' => $link])) {
+ continue;
+ }
+
if ($message['uid'] == 0) {
$global = true;
DBA::update('term', ['global' => true], ['otype' => TERM_OBJ_POST, 'guid' => $message['guid']]);
]);
// Search for mentions
- if ((substr($tag, 0, 1) == '@') && (strpos($link, $profile_base_friendica) || strpos($link, $profile_base_diaspora))) {
+ if (((substr($tag, 0, 1) == '@') || (substr($tag, 0, 1) == '!')) && (strpos($link, $profile_base_friendica) || strpos($link, $profile_base_diaspora))) {
$users = q("SELECT `uid` FROM `contact` WHERE self AND (`url` = '%s' OR `nurl` = '%s')", $link, $link);
foreach ($users AS $user) {
if ($user['uid'] == $message['uid']) {
return $return;
}
+
+ /**
+ * Delete all tags from an item
+ * @param int itemid - choose from which item the tags will be removed
+ * @param array type - items type. default is [TERM_HASHTAG, TERM_MENTION]
+ */
+ public static function deleteByItemId($itemid, $type = [TERM_HASHTAG, TERM_MENTION])
+ {
+ if (empty($itemid)) {
+ return;
+ }
+
+ // Clean up all tags
+ DBA::delete('term', ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => $type]);
+
+ }
}