diff --git a/app/retention-policy/server/cronPruneMessages.js b/app/retention-policy/server/cronPruneMessages.js index cb5b0fab18650..077dcc0b4365c 100644 --- a/app/retention-policy/server/cronPruneMessages.js +++ b/app/retention-policy/server/cronPruneMessages.js @@ -69,7 +69,7 @@ function getSchedule(precision) { const pruneCronName = 'Prune old messages by retention policy'; function deployCron(precision) { - const schedule = (parser) => parser.cron(getSchedule(precision), true); + const schedule = (parser) => parser.cron(precision, true); SyncedCron.remove(pruneCronName); SyncedCron.add({ @@ -101,7 +101,10 @@ function reloadPolicy() { maxTimes.p = settings.get('RetentionPolicy_MaxAge_Groups'); maxTimes.d = settings.get('RetentionPolicy_MaxAge_DMs'); - return deployCron(settings.get('RetentionPolicy_Precision')); + + const precision = (settings.get('RetentionPolicy_Advanced_Precision') && settings.get('RetentionPolicy_Advanced_Precision_Cron')) || getSchedule(settings.get('RetentionPolicy_Precision')); + + return deployCron(precision); } Meteor.startup(function() { diff --git a/app/retention-policy/server/startup/settings.js b/app/retention-policy/server/startup/settings.js index 6389cbe6b5518..358576575e225 100644 --- a/app/retention-policy/server/startup/settings.js +++ b/app/retention-policy/server/startup/settings.js @@ -1,6 +1,12 @@ import { settings } from '../../../settings'; settings.addGroup('RetentionPolicy', function() { + + const globalQuery = { + _id: 'RetentionPolicy_Enabled', + value: true, + }; + this.add('RetentionPolicy_Enabled', false, { type: 'boolean', public: true, @@ -28,18 +34,30 @@ settings.addGroup('RetentionPolicy', function() { public: true, i18nLabel: 'RetentionPolicy_Precision', i18nDescription: 'RetentionPolicy_Precision_Description', - enableQuery: { - _id: 'RetentionPolicy_Enabled', - value: true, - }, + enableQuery: [globalQuery, { + _id: 'RetentionPolicy_Advanced_Precision', + value: false, + }], }); - this.section('Global Policy', function() { - const globalQuery = { - _id: 'RetentionPolicy_Enabled', - value: true, - }; + this.add('RetentionPolicy_Advanced_Precision', false, { + type: 'boolean', + public: true, + i18nLabel: 'RetentionPolicy_Advanced_Precision', + i18nDescription: 'RetentionPolicy_Advanced_Precision_Description', + enableQuery: globalQuery, + }); + this.add('RetentionPolicy_Advanced_Precision_Cron', '*/30 * * * *', { + type: 'string', + public: true, + i18nLabel: 'RetentionPolicy_Advanced_Precision_Cron', + i18nDescription: 'RetentionPolicy_Advanced_Precision_Cron_Description', + enableQuery: [globalQuery, { _id: 'RetentionPolicy_Advanced_Precision', value: true }], + }); + + + this.section('Global Policy', function() { this.add('RetentionPolicy_AppliesToChannels', false, { type: 'boolean', public: true, @@ -80,6 +98,7 @@ settings.addGroup('RetentionPolicy', function() { i18nLabel: 'RetentionPolicy_AppliesToDMs', enableQuery: globalQuery, }); + this.add('RetentionPolicy_MaxAge_DMs', 30, { type: 'int', public: true, @@ -97,6 +116,7 @@ settings.addGroup('RetentionPolicy', function() { i18nLabel: 'RetentionPolicy_DoNotPrunePinned', enableQuery: globalQuery, }); + this.add('RetentionPolicy_FilesOnly', false, { type: 'boolean', public: true, diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index d6ac58c8af006..8202e879828c9 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -2689,7 +2689,6 @@ "Office_Hours": "Office Hours", "Office_hours_enabled": "Office Hours Enabled", "Office_hours_updated": "Office hours updated", - "RetentionPolicy_ExcludePinned": "Exclude pinned messages", "Offline": "Offline", "Offline_DM_Email": "Direct Message Email Subject", "Offline_Email_Subject_Description": "You may use the following placeholders:
", @@ -3013,8 +3012,12 @@ "Retail": "Retail", "Retention_setting_changed_successfully": "Retention policy setting changed successfully", "RetentionPolicy": "Retention Policy", + "RetentionPolicy_Advanced_Precision": "Use Advanced Retention Policy configuration", + "RetentionPolicy_Advanced_Precision_Cron": "Use Advanced Retention Policy Cron", + "RetentionPolicy_Advanced_Precision_Cron_Description": "How often the prune timer should run defined by cron job expression. Setting this to a more precise value makes channels with fast retention timers work better, but might cost extra processing power on large communities.", "RetentionPolicy_DoNotPruneDiscussion": "Do not prune discussion messages", "RetentionPolicy_DoNotPruneThreads": "Do not prune Threads", + "RetentionPolicy_ExcludePinned": "Exclude pinned messages", "RetentionPolicy_RoomWarning": "Messages older than __time__ are automatically pruned here", "RetentionPolicy_RoomWarning_Unpinned": "Unpinned messages older than __time__ are automatically pruned here", "RetentionPolicy_RoomWarning_FilesOnly": "Files older than __time__ are automatically pruned here (messages stay intact)",