]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Tag.php
Use rawContent for Special Options to avoid a protected options() method
[friendica.git] / src / Model / Tag.php
index 1bc700c3f14f0215643db0cb899bcdcf430d33c6..3020a2f2934839e0108779bda564314752e09bcb 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
 namespace Friendica\Model;
 
 use Friendica\Content\Text\BBCode;
-use Friendica\Core\Cache\Duration;
+use Friendica\Core\Cache\Enum\Duration;
 use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Core\System;
 use Friendica\Database\Database;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Strings;
 
 /**
@@ -545,13 +546,21 @@ class Tag
         */
        public static function setGlobalTrendingHashtags(int $period, int $limit = 10)
        {
+               // Get a uri-id that is at least X hours old.
+               // We use the uri-id in the query for the hash tags since this is much faster
+               $post = Post::selectFirstThread(['uri-id'], ["`uid` = ? AND `received` < ?", 0, DateTimeFormat::utc('now - ' . $period . ' hour')],
+                       ['order' => ['received' => true]]);
+               if (empty($post['uri-id'])) {
+                       return [];
+               }
+
                $block_sql = self::getBlockedSQL();
 
                $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`, COUNT(DISTINCT(`author-id`)) as `authors`
                        FROM `tag-search-view`
-                       WHERE `private` = ? AND `uid` = ? AND `received` > DATE_SUB(NOW(), INTERVAL ? HOUR) $block_sql
+                       WHERE `private` = ? AND `uid` = ? AND `uri-id` > ? $block_sql
                        GROUP BY `term` ORDER BY `authors` DESC, `score` DESC LIMIT ?",
-                       Item::PUBLIC, 0, $period, $limit);
+                       Item::PUBLIC, 0, $post['uri-id'], $limit);
 
                if (DBA::isResult($tagsStmt)) {
                        $tags = DBA::toArray($tagsStmt);
@@ -590,13 +599,21 @@ class Tag
         */
        public static function setLocalTrendingHashtags(int $period, int $limit = 10)
        {
+               // Get a uri-id that is at least X hours old.
+               // We use the uri-id in the query for the hash tags since this is much faster
+               $post = Post::selectFirstThread(['uri-id'], ["`uid` = ? AND `received` < ?", 0, DateTimeFormat::utc('now - ' . $period . ' hour')],
+                       ['order' => ['received' => true]]);
+               if (empty($post['uri-id'])) {
+                       return [];
+               }
+
                $block_sql = self::getBlockedSQL();
 
                $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`, COUNT(DISTINCT(`author-id`)) as `authors`
                        FROM `tag-search-view`
-                       WHERE `private` = ? AND `wall` AND `origin` AND `received` > DATE_SUB(NOW(), INTERVAL ? HOUR) $block_sql
+                       WHERE `private` = ? AND `wall` AND `origin` AND `uri-id` > ? $block_sql
                        GROUP BY `term` ORDER BY `authors` DESC, `score` DESC LIMIT ?",
-                       Item::PUBLIC, $period, $limit);
+                       Item::PUBLIC, $post['uri-id'], $limit);
 
                if (DBA::isResult($tagsStmt)) {
                        $tags = DBA::toArray($tagsStmt);