X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FContent%2FWidget%2FTrendingTags.php;h=b6b38006bf5bc3b80f205dcae9cf72e220ab884c;hb=7e618856ab09ac74a3760e238c73ecb9515f6701;hp=15a06e029c974b16d9305bbc25bfd3e9ba1f0768;hpb=a947bd0889cfb2eb58692f92ab19a875019d3b79;p=friendica.git diff --git a/src/Content/Widget/TrendingTags.php b/src/Content/Widget/TrendingTags.php index 15a06e029c..b6b38006bf 100644 --- a/src/Content/Widget/TrendingTags.php +++ b/src/Content/Widget/TrendingTags.php @@ -1,114 +1,59 @@ . + * + */ namespace Friendica\Content\Widget; -use Friendica\Core\Cache; -use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\Database\DBA; -use Friendica\Model\Term; - +use Friendica\DI; +use Friendica\Model\Tag; + +/** + * Trending tags aside widget for the community pages, handles both local and global scopes + * + * @package Friendica\Content\Widget + */ class TrendingTags { /** * @param string $content 'global' (all posts) or 'local' (this node's posts only) * @param int $period Period in hours to consider posts - * @return string + * + * @return string Formatted HTML code * @throws \Exception */ - public static function getHTML($content = 'global', int $period = 24) + public static function getHTML(string $content = 'global', int $period = 24): string { if ($content == 'local') { - $tags = self::getLocalTrendingTags($period); + $tags = Tag::getLocalTrendingHashtags($period, 20); } else { - $tags = self::getGlobalTrendingTags($period); + $tags = Tag::getGlobalTrendingHashtags($period, 20); } $tpl = Renderer::getMarkupTemplate('widget/trending_tags.tpl'); $o = Renderer::replaceMacros($tpl, [ - '$title' => L10n::tt('Trending Tags (last %d hour)', 'Trending Tags (last %d hours)', $period), - '$more' => L10n::t('More Trending Tags'), - '$tags' => $tags, + '$title' => DI::l10n()->tt('Trending Tags (last %d hour)', 'Trending Tags (last %d hours)', $period), + '$more' => DI::l10n()->t('More Trending Tags'), + '$tags' => $tags, ]); return $o; } - - /** - * Returns a list of the most frequent global tags over the given period - * - * @param int $period Period in hours to consider posts - * @return array - * @throws \Exception - */ - private static function getGlobalTrendingTags(int $period) - { - $tags = Cache::get('global_trending_tags'); - - if (!$tags) { - $tagsStmt = DBA::p("SELECT t.`term`, COUNT(*) AS `score` -FROM `term` t - JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid` - JOIN `thread` ON `thread`.`iid` = i.`id` -WHERE `thread`.`visible` - AND NOT `thread`.`deleted` - AND NOT `thread`.`moderated` - AND NOT `thread`.`private` - AND t.`uid` = 0 - AND t.`otype` = ? - AND t.`type` = ? - AND t.`term` != '' - AND i.`received` > DATE_SUB(NOW(), INTERVAL ? HOUR) -GROUP BY `term` -ORDER BY `score` DESC -LIMIT 20", Term::OBJECT_TYPE_POST, Term::HASHTAG, $period); - - if (DBA::isResult($tags)) { - $tags = DBA::toArray($tagsStmt); - Cache::set('global_trending_tags', $tags, Cache::HOUR); - } - } - - return $tags ?: []; - } - - /** - * Returns a list of the most frequent local tags over the given period - * - * @param int $period Period in hours to consider posts - * @return array - * @throws \Exception - */ - private static function getLocalTrendingTags(int $period) - { - $tags = Cache::get('local_trending_tags'); - - if (!$tags) { - $tagsStmt = DBA::p("SELECT t.`term`, COUNT(*) AS `score` -FROM `term` t -JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid` -JOIN `thread` ON `thread`.`iid` = i.`id` -JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall` -WHERE `thread`.`visible` - AND NOT `thread`.`deleted` - AND NOT `thread`.`moderated` - AND NOT `thread`.`private` - AND `thread`.`wall` - AND `thread`.`origin` - AND t.`otype` = ? - AND t.`type` = ? - AND t.`term` != '' - AND i.`received` > DATE_SUB(NOW(), INTERVAL ? HOUR) -GROUP BY `term` -ORDER BY `score` DESC -LIMIT 20", Term::OBJECT_TYPE_POST, Term::HASHTAG, $period); - - if (DBA::isResult($tags)) { - $tags = DBA::toArray($tagsStmt); - Cache::set('local_trending_tags', $tags, Cache::HOUR); - } - } - - return $tags ?: []; - } }