]> git.mxchange.org Git - friendica.git/commitdiff
Move trending tags queries to Model\Term
authorHypolite Petovan <hypolite@mrpetovan.com>
Tue, 6 Aug 2019 11:36:51 +0000 (07:36 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Tue, 6 Aug 2019 11:36:51 +0000 (07:36 -0400)
src/Content/Widget/TrendingTags.php
src/Model/Term.php

index 15a06e029c974b16d9305bbc25bfd3e9ba1f0768..e5dd36bb9bd18ed8e95b5621eed7ded7fd1ba87e 100644 (file)
@@ -19,9 +19,9 @@ class TrendingTags
        public static function getHTML($content = 'global', int $period = 24)
        {
                if ($content == 'local') {
-                       $tags = self::getLocalTrendingTags($period);
+                       $tags = Term::getLocalTrendingHashtags($period, 20);
                } else {
-                       $tags = self::getGlobalTrendingTags($period);
+                       $tags = Term::getGlobalTrendingHashtags($period, 20);
                }
 
                $tpl = Renderer::getMarkupTemplate('widget/trending_tags.tpl');
@@ -33,82 +33,4 @@ class TrendingTags
 
                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 ?: [];
-       }
 }
index f196974a8f66d10279c286a4be23fcf6931e2ff2..4e2b571cef21d775c163275870741a79f7ad901c 100644 (file)
@@ -4,6 +4,7 @@
  */
 namespace Friendica\Model;
 
+use Friendica\Core\Cache;
 use Friendica\Core\Logger;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
@@ -47,6 +48,94 @@ class Term
     const OBJECT_TYPE_POST  = 1;
     const OBJECT_TYPE_PHOTO = 2;
 
+       /**
+        * Returns a list of the most frequent global hashtags over the given period
+        *
+        * @param int $period Period in hours to consider posts
+        * @return array
+        * @throws \Exception
+        */
+       public static function getGlobalTrendingHashtags(int $period, $limit = 10)
+       {
+               $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 ?",
+                               Term::OBJECT_TYPE_POST,
+                               Term::HASHTAG,
+                               $period,
+                               $limit
+                       );
+
+                       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 hashtags over the given period
+        *
+        * @param int $period Period in hours to consider posts
+        * @return array
+        * @throws \Exception
+        */
+       public static function getLocalTrendingHashtags(int $period, $limit = 10)
+       {
+               $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 ?",
+                               Term::OBJECT_TYPE_POST,
+                               Term::HASHTAG,
+                               $period,
+                               $limit
+                       );
+
+                       if (DBA::isResult($tags)) {
+                               $tags = DBA::toArray($tagsStmt);
+                               Cache::set('local_trending_tags', $tags, Cache::HOUR);
+                       }
+               }
+
+               return $tags ?: [];
+       }
+
        /**
         * Generates the legacy item.tag field comma-separated BBCode string from an item ID.
         * Includes only hashtags, implicit and explicit mentions.