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: