viewgit/inc/functions.php:22 Function utf8_encode() is deprecated [8192]

Rework trending code, make work up to yearly, a=chris

Chris Pollett [2020-01-02 20:Jan:nd]
Rework trending code, make work up to yearly, a=chris
Filename
src/library/media_jobs/FeedsUpdateJob.php
src/locale/ar/configure.ini
src/locale/bn/configure.ini
src/locale/de/configure.ini
src/locale/en_US/configure.ini
src/locale/es/configure.ini
src/locale/fa/configure.ini
src/locale/fr_FR/configure.ini
src/locale/he/configure.ini
src/locale/hi/configure.ini
src/locale/in_ID/configure.ini
src/locale/it/configure.ini
src/locale/ja/configure.ini
src/locale/kn/configure.ini
src/locale/ko/configure.ini
src/locale/nl/configure.ini
src/locale/pl/configure.ini
src/locale/pt/configure.ini
src/locale/ru/configure.ini
src/locale/te/configure.ini
src/locale/th/configure.ini
src/locale/tr/configure.ini
src/locale/vi_VN/configure.ini
src/locale/zh_CN/configure.ini
src/models/TrendingModel.php
src/views/elements/TrendingElement.php
diff --git a/src/library/media_jobs/FeedsUpdateJob.php b/src/library/media_jobs/FeedsUpdateJob.php
index 8e78dcaa0..d80e3f00a 100644
--- a/src/library/media_jobs/FeedsUpdateJob.php
+++ b/src/library/media_jobs/FeedsUpdateJob.php
@@ -862,18 +862,19 @@ class FeedsUpdateJob extends MediaJob
     {
         $time = time();
         $update_intervals = [
-            C\ONE_HOUR => [24, C\ONE_DAY],
-            C\ONE_DAY => [7, C\ONE_WEEK],
-            C\ONE_WEEK => [4, 4 * C\ONE_WEEK],
+            C\ONE_HOUR => C\ONE_DAY,
+            C\ONE_DAY => C\ONE_WEEK,
+            C\ONE_WEEK => C\ONE_MONTH,
+            C\ONE_MONTH => C\ONE_YEAR
         ];
-        $num_timestamp_sql =
-            "SELECT COUNT(DISTINCT TIMESTAMP) AS NUM_TIMESTAMPS " .
-            "FROM TRENDING_TERM WHERE UPDATE_PERIOD = ? AND TIMESTAMP > ? ".
-            "AND LANGUAGE = ? AND CATEGORY = ?";
-        $most_recent_sql =
-            "SELECT MAX(TIMESTAMP) AS MAX_TIMESTAMP " .
+        $recent_interval_timestamp_sql =
+            "SELECT TIMESTAMP " .
             "FROM TRENDING_TERM WHERE UPDATE_PERIOD = ? AND LANGUAGE = ? ".
-            "AND CATEGORY = ?";
+            "AND CATEGORY = ? AND TIMESTAMP > ? " .
+            $db->limitOffset(1);
+        $reset_interval_sql = "DELETE FROM TRENDING_TERM WHERE " .
+            "UPDATE_PERIOD = ? AND LANGUAGE = ? AND ".
+            "CATEGORY = ? AND TIMESTAMP > ? ";
         $interval_sql = "SELECT TERM, SUM(OCCURRENCES) AS OCCURRENCES ".
             "FROM TRENDING_TERM WHERE UPDATE_PERIOD = ? AND " .
             "TIMESTAMP > ? AND LANGUAGE = ? AND CATEGORY = ? GROUP BY TERM ".
@@ -888,47 +889,39 @@ class FeedsUpdateJob extends MediaJob
             L\crawlLog("Updating Language $lang trending terms");
             foreach ($category_term_occurrences as $category =>
                 $term_occurrences) {
-                foreach ($update_intervals as $sub_interval => $interval_info) {
-                    list($num_sub_intervals, $interval) = $interval_info;
-                    $interval_start = $time - $interval - $sub_interval;
-                    if (!($result = $db->execute($num_timestamp_sql,
-                        [$sub_interval, $interval_start, $lang, $category]))) {
-                        continue;
-                    }
-                    $row = $db->fetchArray($result);
-                    if ($row['NUM_TIMESTAMPS'] < $num_sub_intervals) {
-                        continue;
-                    }
-                    if ($result = $db->execute($most_recent_sql,
-                        [$interval, $lang, $category])) {
-                        $row = $db->fetchArray($result);
-                        if ($time - $row['MAX_TIMESTAMP'] < $interval) {
-                            continue;
-                        }
-                    }
-                    $result = $db->execute($interval_sql,
-                        [$sub_interval, $interval_start, $lang, $category]);
-                    while ($interval_info = $db->fetchArray($result)) {
-                        $db->execute($insert_sql, [$interval_info['TERM'],
-                        $interval_info['OCCURRENCES'], $interval, $time,
-                        $lang, $category]);
-                    }
-                    $db->execute($cull_sql, [$sub_interval, $interval_start,
-                        $lang, $category]);
-                }
                 /* Sort the word occurrence list by occurrence
                    and insert into database.
                  */
                 $num_inserted = 0;
                 arsort($term_occurrences);
-                foreach($term_occurrences as $term => $occurrences) {
+                foreach ($term_occurrences as $term => $occurrences) {
                     $db->execute($insert_sql, [$term, $occurrences, C\ONE_HOUR,
                         $time, $lang, $category]);
                     $num_inserted++;
-                    if($num_inserted >= C\NUM_TRENDING) {
+                    if ($num_inserted >= C\NUM_TRENDING) {
                         break;
                     }
                 }
+                foreach ($update_intervals as $sub_interval => $interval) {
+                    $interval_start = $time - $interval;
+                    $recent_timestamp = $time;
+                    if ($result = $db->execute($recent_interval_timestamp_sql,
+                        [$interval, $lang, $category, $interval_start])) {
+                        $row = $db->fetchArray($result);
+                        $recent_timestamp = $row['TIMESTAMP'];
+                    }
+                    $db->execute($reset_interval_sql,
+                        [$interval, $lang, $category, $interval_start]);
+                    $result = $db->execute($interval_sql,
+                        [$sub_interval, $interval_start, $lang, $category]);
+                    while ($interval_info = $db->fetchArray($result)) {
+                        $db->execute($insert_sql, [$interval_info['TERM'],
+                            $interval_info['OCCURRENCES'], $interval, $time,
+                            $lang, $category]);
+                    }
+                    $db->execute($cull_sql, [$sub_interval, $interval_start,
+                        $lang, $category]);
+                }
             }
             // make sure to cull for last interval
             $db->execute($cull_sql, [$interval, $time - $interval,
diff --git a/src/locale/ar/configure.ini b/src/locale/ar/configure.ini
index 103143076..db53aa0f2 100755
--- a/src/locale/ar/configure.ini
+++ b/src/locale/ar/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/bn/configure.ini b/src/locale/bn/configure.ini
index 3109455ef..206fb8b0c 100755
--- a/src/locale/bn/configure.ini
+++ b/src/locale/bn/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/de/configure.ini b/src/locale/de/configure.ini
index c34556ec9..5bb6b86e5 100755
--- a/src/locale/de/configure.ini
+++ b/src/locale/de/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/en_US/configure.ini b/src/locale/en_US/configure.ini
index 66a23f0f6..ac6c65f49 100644
--- a/src/locale/en_US/configure.ini
+++ b/src/locale/en_US/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = "Top Hourly"
 trending_element_daily = "Top Daily"
 trending_element_weekly = "Top Weekly"
 trending_element_monthly = "Top Monthly"
+trending_element_yearly = "Yearly"
 trending_element_trending = "Trending..."
 trending_element_trending_terms = "Trending %s"
 trending_element_term = "Term"
diff --git a/src/locale/es/configure.ini b/src/locale/es/configure.ini
index 1e9f2d5fe..8ae8f3e69 100755
--- a/src/locale/es/configure.ini
+++ b/src/locale/es/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/fa/configure.ini b/src/locale/fa/configure.ini
index 45b6a26fb..9846569aa 100755
--- a/src/locale/fa/configure.ini
+++ b/src/locale/fa/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/fr_FR/configure.ini b/src/locale/fr_FR/configure.ini
index 24bc60b50..e083011f7 100755
--- a/src/locale/fr_FR/configure.ini
+++ b/src/locale/fr_FR/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/he/configure.ini b/src/locale/he/configure.ini
index a34ba640e..0d7853e02 100755
--- a/src/locale/he/configure.ini
+++ b/src/locale/he/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/hi/configure.ini b/src/locale/hi/configure.ini
index 97e807742..ede96bcb8 100755
--- a/src/locale/hi/configure.ini
+++ b/src/locale/hi/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/in_ID/configure.ini b/src/locale/in_ID/configure.ini
index afeb10317..5a4b5839b 100755
--- a/src/locale/in_ID/configure.ini
+++ b/src/locale/in_ID/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/it/configure.ini b/src/locale/it/configure.ini
index 35bf8bcc9..f3eec89ac 100755
--- a/src/locale/it/configure.ini
+++ b/src/locale/it/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/ja/configure.ini b/src/locale/ja/configure.ini
index 83fbc7643..02691a34f 100755
--- a/src/locale/ja/configure.ini
+++ b/src/locale/ja/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/kn/configure.ini b/src/locale/kn/configure.ini
index c7c178ca8..cb30ad0a4 100755
--- a/src/locale/kn/configure.ini
+++ b/src/locale/kn/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/ko/configure.ini b/src/locale/ko/configure.ini
index 1505c779f..926cd7b09 100755
--- a/src/locale/ko/configure.ini
+++ b/src/locale/ko/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/nl/configure.ini b/src/locale/nl/configure.ini
index 867e030bd..eac9ed0e7 100644
--- a/src/locale/nl/configure.ini
+++ b/src/locale/nl/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/pl/configure.ini b/src/locale/pl/configure.ini
index 25450a5bf..bfee834e4 100755
--- a/src/locale/pl/configure.ini
+++ b/src/locale/pl/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/pt/configure.ini b/src/locale/pt/configure.ini
index 45fe0b397..0ad350841 100755
--- a/src/locale/pt/configure.ini
+++ b/src/locale/pt/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/ru/configure.ini b/src/locale/ru/configure.ini
index e622b3fa9..01f712fdb 100755
--- a/src/locale/ru/configure.ini
+++ b/src/locale/ru/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/te/configure.ini b/src/locale/te/configure.ini
index d2944f5d7..b8255f528 100644
--- a/src/locale/te/configure.ini
+++ b/src/locale/te/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/th/configure.ini b/src/locale/th/configure.ini
index c8fde834b..3ce8417af 100755
--- a/src/locale/th/configure.ini
+++ b/src/locale/th/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/tr/configure.ini b/src/locale/tr/configure.ini
index ede951c10..7424c770f 100755
--- a/src/locale/tr/configure.ini
+++ b/src/locale/tr/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/vi_VN/configure.ini b/src/locale/vi_VN/configure.ini
index 2cdd461ef..6b437acf3 100755
--- a/src/locale/vi_VN/configure.ini
+++ b/src/locale/vi_VN/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/locale/zh_CN/configure.ini b/src/locale/zh_CN/configure.ini
index d5840bd8d..b7ad8aecb 100755
--- a/src/locale/zh_CN/configure.ini
+++ b/src/locale/zh_CN/configure.ini
@@ -1494,6 +1494,7 @@ trending_element_hourly = ""
 trending_element_daily = ""
 trending_element_weekly = ""
 trending_element_monthly = ""
+trending_element_yearly = ""
 trending_element_trending = ""
 trending_element_trending_terms = ""
 trending_element_term = ""
diff --git a/src/models/TrendingModel.php b/src/models/TrendingModel.php
index f6737ed0d..fd2832af1 100644
--- a/src/models/TrendingModel.php
+++ b/src/models/TrendingModel.php
@@ -70,7 +70,8 @@ class TrendingModel extends Model implements MediaConstants
     {
         $db = $this->db;
         if (empty($update_periods)) {
-            $update_periods = [C\ONE_HOUR, C\ONE_DAY, C\ONE_WEEK];
+            $update_periods = [C\ONE_HOUR, C\ONE_DAY, C\ONE_WEEK,
+                C\ONE_MONTH, C\ONE_YEAR];
         }
         $sql = "SELECT TERM, OCCURRENCES FROM TRENDING_TERM ".
             "WHERE LANGUAGE= ? AND UPDATE_PERIOD = ? AND CATEGORY =? AND ".
@@ -170,8 +171,12 @@ class TrendingModel extends Model implements MediaConstants
     {
         $db = $this->db;
         $subintervals = [ C\ONE_HOUR => C\ONE_MINUTE,
-            C\ONE_DAY => C\ONE_HOUR,  C\ONE_WEEK => C\ONE_DAY];
-        $dates = [ C\ONE_HOUR => 'i', C\ONE_DAY => 'H', C\ONE_WEEK => 'D'];
+            C\ONE_DAY => C\ONE_HOUR,  C\ONE_WEEK => C\ONE_DAY,
+            C\ONE_MONTH => C\ONE_WEEK, C\ONE_YEAR => C\ONE_MONTH
+        ];
+        $dates = [ C\ONE_HOUR => 'i', C\ONE_DAY => 'H', C\ONE_WEEK => 'D',
+            C\ONE_MONTH => 'W', C\ONE_YEAR => 'm'
+        ];
         $sub_period = (empty($subintervals[$period])) ? C\ONE_HOUR :
             $subintervals[$period];
         $num_results = (empty($subintervals[$period])) ?
diff --git a/src/views/elements/TrendingElement.php b/src/views/elements/TrendingElement.php
index f2f0402fd..81f216a54 100644
--- a/src/views/elements/TrendingElement.php
+++ b/src/views/elements/TrendingElement.php
@@ -51,7 +51,7 @@ class TrendingElement extends Element
             ($data['CONTAINER_LABEL'] == 'center' &&
             empty($data['RANDOM_TRENDS']))) {
             if (empty($data['CHART_DATA'])) {
-                $this->renderHourlyDailyWeekly($data);
+                $this->renderTrendingPeriods($data);
             } else {
                 $this->renderTermChart($data);
             }
@@ -64,14 +64,15 @@ class TrendingElement extends Element
      *
      * @param array $data contains stats to draw
      */
-    public function renderHourlyDailyWeekly($data)
+    public function renderTrendingPeriods($data)
     {
         $logged_in = isset($data["ADMIN"]) && $data["ADMIN"];
         $date_map = [
             C\ONE_HOUR => tl('trending_element_hourly'),
             C\ONE_DAY => tl('trending_element_daily'),
             C\ONE_WEEK => tl('trending_element_weekly'),
-            4 * C\ONE_WEEK => tl('trending_element_monthly'),
+            C\ONE_MONTH => tl('trending_element_monthly'),
+            C\ONE_YEAR => tl('trending_element_yearly'),
         ];
         $token = ($logged_in) ? $data[C\CSRF_TOKEN] : "";
         $token_string_amp = ($logged_in) ?
ViewGit