diff --git a/packages/rocketchat-lib/settings/lib/rocketchat.coffee b/packages/rocketchat-lib/settings/lib/rocketchat.coffee index 797b70cd4d2..3bde2ac5d7f 100644 --- a/packages/rocketchat-lib/settings/lib/rocketchat.coffee +++ b/packages/rocketchat-lib/settings/lib/rocketchat.coffee @@ -4,6 +4,8 @@ ### RocketChat.settings = {} +RocketChat.settings.ts = new Date + RocketChat.settings.get = (_id) -> return Meteor.settings?[_id] @@ -20,4 +22,4 @@ RocketChat.settings.batchSet = (settings, callback) -> Meteor.call 'saveSetting', setting._id, setting.value, callback actions = _.map settings, (setting) -> save(setting) - _(actions).reduceRight(_.wrap, (err, success) -> return callback err, success)() \ No newline at end of file + _(actions).reduceRight(_.wrap, (err, success) -> return callback err, success)() diff --git a/packages/rocketchat-lib/settings/server/methods.coffee b/packages/rocketchat-lib/settings/server/methods.coffee index deac2a9bac5..35ee3c35c7a 100644 --- a/packages/rocketchat-lib/settings/server/methods.coffee +++ b/packages/rocketchat-lib/settings/server/methods.coffee @@ -16,15 +16,22 @@ RocketChat.settings.add = (_id, value, options = {}) -> updateSettings = i18nLabel: options.i18nLabel or _id - i18nDescription: options.i18nDescription if options.i18nDescription? + updateSettings.i18nDescription = options.i18nDescription if options.i18nDescription? updateSettings.type = options.type if options.type updateSettings.multiline = options.multiline if options.multiline updateSettings.group = options.group if options.group updateSettings.section = options.section if options.section updateSettings.public = options.public if options.public - return RocketChat.models.Settings.upsert { _id: _id }, { $setOnInsert: { value: value }, $set: updateSettings } + upsertChanges = { $setOnInsert: { value: value }, $set: updateSettings } + + if options.persistent is true + upsertChanges.$unset = { ts: true } + else + upsertChanges.$set.ts = new Date + + return RocketChat.models.Settings.upsert { _id: _id }, upsertChanges ### # Add a setting group @@ -38,12 +45,18 @@ RocketChat.settings.addGroup = (_id, options = {}) -> # console.log '[functions] RocketChat.settings.addGroup -> '.green, 'arguments:', arguments updateSettings = - i18nLabel: options.i18nLabel or _id - i18nDescription: options.i18nDescription if options.i18nDescription? type: 'group' + i18nLabel: options.i18nLabel or _id + + updateSettings.i18nDescription = options.i18nDescription if options.i18nDescription? - return RocketChat.models.Settings.upsert { _id: _id }, { $set: updateSettings } + upsertChanges = { $set: updateSettings } + if options.persistent is true + upsertChanges.$unset = { ts: true } + else + upsertChanges.$set.ts = new Date + return RocketChat.models.Settings.upsert { _id: _id }, upsertChanges ### # Remove a setting by id diff --git a/server/startup/settings.coffee b/server/startup/settings.coffee index e69de29bb2d..c7a0e66ccda 100644 --- a/server/startup/settings.coffee +++ b/server/startup/settings.coffee @@ -0,0 +1,4 @@ +# Remove runtime settings (non-persistent) +Meteor.startup -> + RocketChat.models.Settings.remove({ ts: { $lt: RocketChat.settings.ts } }) +