]> git.mxchange.org Git - friendica.git/commitdiff
Configuration for the maximum number of post engagement entries
authorMichael <heluecht@pirati.ca>
Tue, 26 Sep 2023 16:00:06 +0000 (16:00 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 26 Sep 2023 16:00:06 +0000 (16:00 +0000)
src/Model/Post/Engagement.php
static/defaults.config.php

index ca6ef8d9fc02adebcb7f35b5ac4e21b40f7e5701..9ffd48aa004250693db3785c066d3570b9724c86 100644 (file)
@@ -58,7 +58,7 @@ class Engagement
                        'title', 'content-warning', 'body', 'author-contact-type', 'author-nick', 'author-addr', 'owner-contact-type', 'owner-nick', 'owner-addr'],
                        ['uri-id' => $item['parent-uri-id']]);
 
-               if ($parent['created'] < DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour')) {
+               if ($parent['created'] < self::getCreationDateLimit(false)) {
                        Logger::debug('Post is too old', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'created' => $parent['created']]);
                        return;
                }
@@ -195,7 +195,27 @@ class Engagement
         */
        public static function expire()
        {
-               DBA::delete('post-engagement', ["`created` < ?", DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour')]);
-               Logger::notice('Cleared expired engagements', ['rows' => DBA::affectedRows()]);
+               $limit = self::getCreationDateLimit(true);
+               if (empty($limit)) {
+                       Logger::notice('Expiration limit not reached');
+                       return;
+               }
+               DBA::delete('post-engagement', ["`created` < ?", $limit]);
+               Logger::notice('Cleared expired engagements', ['limit' => $limit, 'rows' => DBA::affectedRows()]);
+       }
+
+       private static function getCreationDateLimit(bool $forDeletion): string
+       {
+               $posts = DI::config()->get('channel', 'engagement_post_limit');
+               if (!empty($posts)) {
+                       $limit = DBA::selectToArray('post-engagement', ['created'], [], ['limit' => [$posts, 1], 'order' => ['created' => true]]);
+                       if (!empty($limit)) {
+                               return $limit[0]['created'];
+                       } elseif ($forDeletion) {
+                               return '';
+                       }
+               }
+
+               return DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour');
        }
 }
index ceb60c41519b1957af7dd415c4e02c38e8ff17c4..b639e19166d43906f332bd63a642e5654d6cb4c8 100644 (file)
@@ -798,9 +798,13 @@ return [
        ],
        'channel' => [
                // engagement_hours (Integer)
-               // Number of hours posts are held in the engagement table
+               // Maximum age of incoming posts for the engagement table, when the engagement post limit is 0 or hasn't been reached yet.
                'engagement_hours' => 24,
 
+               // engagement_post_limit (Integer)
+               // NUmber of posts that are held in the engagement table
+               'engagement_post_limit' => 20000,
+
                // interaction_score_days (Integer)
                // Number of days that are used to calculate the interaction score.
                'interaction_score_days' => 30,