Issue 9799: Ensure that the first post date is after the registration date
authorMichael <heluecht@pirati.ca>
Sun, 7 Mar 2021 10:46:46 +0000 (10:46 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 7 Mar 2021 10:46:46 +0000 (10:46 +0000)
src/Content/Widget.php
src/Model/Item.php
src/Model/Post.php

index 032b9e7..f3e82b0 100644 (file)
@@ -463,7 +463,7 @@ class Widget
 
                $cachekey = 'Widget::postedByYear' . $uid . '-' . (int)$wall;
                $dthen = DI::cache()->get($cachekey);
-               if (!empty($dthen)) {
+               if (empty($dthen)) {
                        $dthen = Item::firstPostDate($uid, $wall);
                        DI::cache()->set($cachekey, $dthen, Duration::HOUR);
                }
index 31571e6..d303938 100644 (file)
@@ -2177,9 +2177,15 @@ class Item
 
        public static function firstPostDate($uid, $wall = false)
        {
-               $condition = ['gravity' => GRAVITY_PARENT, 'uid' => $uid, 'wall' => $wall, 'deleted' => false, 'visible' => true];
+               $user = User::getById($uid, ['register_date']);
+               if (empty($user)) {
+                       return false;
+               }
+
+               $condition = ["`uid` = ? AND `wall` = ? AND NOT `deleted` AND `visible` AND `received` >= ?",
+                       $uid, $wall, $user['register_date']];
                $params = ['order' => ['received' => false]];
-               $thread = Post::selectFirst(['received'], $condition, $params);
+               $thread = Post::selectFirstThread(['received'], $condition, $params);
                if (DBA::isResult($thread)) {
                        $postdate = substr(DateTimeFormat::local($thread['received']), 0, 10);
                        return $postdate;
index bb35f12..3727d29 100644 (file)
@@ -181,6 +181,31 @@ class Post
                }
        }
 
+       /**
+        * Retrieve a single record from the post-thread table and returns it in an associative array
+        *
+        * @param array $fields
+        * @param array $condition
+        * @param array $params
+        * @return bool|array
+        * @throws \Exception
+        * @see   DBA::select
+        */
+       public static function selectFirstThread(array $fields = [], array $condition = [], $params = [])
+       {
+               $params['limit'] = 1;
+
+               $result = self::selectThread($fields, $condition, $params);
+
+               if (is_bool($result)) {
+                       return $result;
+               } else {
+                       $row = self::fetch($result);
+                       DBA::close($result);
+                       return $row;
+               }
+       }
+
        /**
         * Select rows from the post table and returns them as an array
         *