X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FTerm.php;h=e5490fa7c6cc731a103d491e26d9bf30c4f2100a;hb=c3a532a9f682d0ceea70e65379018c59cf59efc4;hp=d950d1d5fbff9cd7693b0b0acffc701745336cff;hpb=85c8bf022841fb53a42e012d2e90dd23f56df2ab;p=friendica.git diff --git a/src/Model/Term.php b/src/Model/Term.php index d950d1d5fb..e5490fa7c6 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 @@ -28,8 +29,7 @@ class Term } // Clean up all tags - dba::e("DELETE FROM `term` WHERE `otype` = ? AND `oid` = ? AND `type` IN (?, ?)", - TERM_OBJ_POST, $itemid, TERM_HASHTAG, TERM_MENTION); + dba::delete('term', ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_HASHTAG, TERM_MENTION]]); if ($message['deleted']) { return; @@ -134,11 +134,7 @@ class Term } // Clean up all tags - q("DELETE FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", - intval(TERM_OBJ_POST), - intval($itemid), - intval(TERM_FILE), - intval(TERM_CATEGORY)); + dba::delete('term', ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_FILE, TERM_CATEGORY]]); if ($message["deleted"]) { return; @@ -168,4 +164,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; + } }