mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-08 06:55:46 +01:00
closes #2476
This commit is contained in:
@@ -85,7 +85,9 @@ module.exports = function(db, module) {
|
||||
}
|
||||
value = helpers.valueToString(value);
|
||||
|
||||
db.collection('objects').remove({_key: {$in: keys}, value: value}, callback);
|
||||
db.collection('objects').remove({_key: {$in: keys}, value: value}, function(err, res) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetsRemoveRangeByScore = function(keys, min, max, callback) {
|
||||
|
||||
@@ -21,7 +21,7 @@ var db = require('./database'),
|
||||
schemaDate, thisSchemaDate,
|
||||
|
||||
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
||||
latestSchema = Date.UTC(2014, 11, 12);
|
||||
latestSchema = Date.UTC(2014, 11, 20);
|
||||
|
||||
Upgrade.check = function(callback) {
|
||||
db.get('schemaDate', function(err, value) {
|
||||
@@ -412,7 +412,43 @@ Upgrade.upgrade = function(callback) {
|
||||
});
|
||||
});
|
||||
} else {
|
||||
winston.info('[2014/12/12] Updating teasers skipped skipped');
|
||||
winston.info('[2014/12/12] Updating teasers skipped');
|
||||
next();
|
||||
}
|
||||
},
|
||||
function(next) {
|
||||
thisSchemaDate = Date.UTC(2014, 11, 20);
|
||||
if (schemaDate < thisSchemaDate) {
|
||||
winston.info('[2014/12/20] Updating digest settings');
|
||||
|
||||
async.waterfall([
|
||||
async.apply(db.getSortedSetRange, 'users:joindate', 0, -1),
|
||||
async.apply(User.getMultipleUserSettings)
|
||||
], function(err, userSettings) {
|
||||
if (err) {
|
||||
winston.error('[2014/12/20] Error encountered while updating digest settings');
|
||||
return next(err);
|
||||
}
|
||||
|
||||
var now = Date.now();
|
||||
|
||||
async.eachLimit(userSettings, 50, function(setting, next) {
|
||||
if (setting.dailyDigestFreq !== 'off') {
|
||||
db.sortedSetAdd('digest:' + setting.dailyDigestFreq + ':uids', now, setting.uid, next);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
winston.error('[2014/12/20] Error encountered while updating digest settings');
|
||||
return next(err);
|
||||
}
|
||||
winston.info('[2014/12/20] Updating digest settings done');
|
||||
Upgrade.update(thisSchemaDate, next);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
winston.info('[2014/12/20] Updating digest settings skipped');
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,22 +48,7 @@ var async = require('async'),
|
||||
};
|
||||
|
||||
Digest.getSubscribers = function(interval, callback) {
|
||||
async.waterfall([
|
||||
async.apply(db.getSortedSetRange, 'users:joindate', 0, -1),
|
||||
async.apply(user.getMultipleUserSettings)
|
||||
], function(err, userSettings) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var subscribed = userSettings.filter(function(setting) {
|
||||
return setting.dailyDigestFreq === interval;
|
||||
}).map(function(setting) {
|
||||
return setting.uid;
|
||||
});
|
||||
|
||||
callback(null, subscribed);
|
||||
});
|
||||
db.getSortedSetRange('digest:' + interval + ':uids', 0, -1, callback);
|
||||
};
|
||||
|
||||
Digest.send = function(data, callback) {
|
||||
|
||||
@@ -9,36 +9,8 @@ var async = require('async'),
|
||||
module.exports = function(User) {
|
||||
|
||||
User.getSettings = function(uid, callback) {
|
||||
function onSettingsLoaded(settings) {
|
||||
plugins.fireHook('filter:user.getSettings', {uid: uid, settings: settings}, function(err, data) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
settings = data.settings;
|
||||
|
||||
settings.showemail = parseInt(settings.showemail, 10) === 1;
|
||||
settings.showfullname = parseInt(settings.showfullname, 10) === 1;
|
||||
settings.openOutgoingLinksInNewTab = parseInt(settings.openOutgoingLinksInNewTab, 10) === 1;
|
||||
settings.dailyDigestFreq = settings.dailyDigestFreq || 'off';
|
||||
settings.usePagination = (settings.usePagination === null || settings.usePagination === undefined) ? parseInt(meta.config.usePagination, 10) === 1 : parseInt(settings.usePagination, 10) === 1;
|
||||
settings.topicsPerPage = Math.min(settings.topicsPerPage ? parseInt(settings.topicsPerPage, 10) : parseInt(meta.config.topicsPerPage, 10) || 20, 20);
|
||||
settings.postsPerPage = Math.min(settings.postsPerPage ? parseInt(settings.postsPerPage, 10) : parseInt(meta.config.postsPerPage, 10) || 10, 20);
|
||||
settings.notificationSounds = parseInt(settings.notificationSounds, 10) === 1;
|
||||
settings.language = settings.language || meta.config.defaultLang || 'en_GB';
|
||||
settings.topicPostSort = settings.topicPostSort || meta.config.topicPostSort || 'oldest_to_newest';
|
||||
settings.followTopicsOnCreate = (settings.followTopicsOnCreate === null || settings.followTopicsOnCreate === undefined) ? true : parseInt(settings.followTopicsOnCreate, 10) === 1;
|
||||
settings.followTopicsOnReply = parseInt(settings.followTopicsOnReply, 10) === 1;
|
||||
settings.sendChatNotifications = parseInt(settings.sendChatNotifications, 10) === 1;
|
||||
settings.restrictChat = parseInt(settings.restrictChat, 10) === 1;
|
||||
settings.topicSearchEnabled = parseInt(settings.topicSearchEnabled, 10) === 1;
|
||||
|
||||
callback(null, settings);
|
||||
});
|
||||
}
|
||||
|
||||
if (!parseInt(uid, 10)) {
|
||||
return onSettingsLoaded({});
|
||||
return onSettingsLoaded(0, {}, callback);
|
||||
}
|
||||
|
||||
db.getObject('user:' + uid + ':settings', function(err, settings) {
|
||||
@@ -46,7 +18,7 @@ module.exports = function(User) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
onSettingsLoaded(settings ? settings : {});
|
||||
onSettingsLoaded(uid, settings ? settings : {}, callback);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -64,16 +36,44 @@ module.exports = function(User) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
// Associate uid
|
||||
settings = settings.map(function(setting, idx) {
|
||||
setting = setting || {};
|
||||
setting.uid = uids[idx];
|
||||
return setting;
|
||||
});
|
||||
for (var i=0; i<settings.length; ++i) {
|
||||
settings[i] = settings[i] || {};
|
||||
settings[i].uid = uids[i];
|
||||
}
|
||||
|
||||
async.map(settings, function(setting, next) {
|
||||
onSettingsLoaded(setting.uid, setting, next);
|
||||
}, callback);
|
||||
});
|
||||
};
|
||||
|
||||
function onSettingsLoaded(uid, settings, callback) {
|
||||
plugins.fireHook('filter:user.getSettings', {uid: uid, settings: settings}, function(err, data) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
settings = data.settings;
|
||||
|
||||
settings.showemail = parseInt(settings.showemail, 10) === 1;
|
||||
settings.showfullname = parseInt(settings.showfullname, 10) === 1;
|
||||
settings.openOutgoingLinksInNewTab = parseInt(settings.openOutgoingLinksInNewTab, 10) === 1;
|
||||
settings.dailyDigestFreq = settings.dailyDigestFreq || 'off';
|
||||
settings.usePagination = (settings.usePagination === null || settings.usePagination === undefined) ? parseInt(meta.config.usePagination, 10) === 1 : parseInt(settings.usePagination, 10) === 1;
|
||||
settings.topicsPerPage = Math.min(settings.topicsPerPage ? parseInt(settings.topicsPerPage, 10) : parseInt(meta.config.topicsPerPage, 10) || 20, 20);
|
||||
settings.postsPerPage = Math.min(settings.postsPerPage ? parseInt(settings.postsPerPage, 10) : parseInt(meta.config.postsPerPage, 10) || 10, 20);
|
||||
settings.notificationSounds = parseInt(settings.notificationSounds, 10) === 1;
|
||||
settings.language = settings.language || meta.config.defaultLang || 'en_GB';
|
||||
settings.topicPostSort = settings.topicPostSort || meta.config.topicPostSort || 'oldest_to_newest';
|
||||
settings.followTopicsOnCreate = (settings.followTopicsOnCreate === null || settings.followTopicsOnCreate === undefined) ? true : parseInt(settings.followTopicsOnCreate, 10) === 1;
|
||||
settings.followTopicsOnReply = parseInt(settings.followTopicsOnReply, 10) === 1;
|
||||
settings.sendChatNotifications = parseInt(settings.sendChatNotifications, 10) === 1;
|
||||
settings.restrictChat = parseInt(settings.restrictChat, 10) === 1;
|
||||
settings.topicSearchEnabled = parseInt(settings.topicSearchEnabled, 10) === 1;
|
||||
|
||||
callback(null, settings);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
User.saveSettings = function(uid, data, callback) {
|
||||
if(!data.topicsPerPage || !data.postsPerPage || parseInt(data.topicsPerPage, 10) <= 0 || parseInt(data.postsPerPage, 10) <= 0) {
|
||||
@@ -103,12 +103,30 @@ module.exports = function(User) {
|
||||
topicSearchEnabled: data.topicSearchEnabled
|
||||
}, next);
|
||||
},
|
||||
function(next) {
|
||||
updateDigestSetting(uid, data.dailyDigestFreq, next);
|
||||
},
|
||||
function(next) {
|
||||
User.getSettings(uid, next);
|
||||
}
|
||||
], callback);
|
||||
};
|
||||
|
||||
function updateDigestSetting(uid, dailyDigestFreq, callback) {
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
db.sortedSetsRemove(['digest:day:uids', 'digest:week:uids', 'digest:month:uids'], uid, next);
|
||||
},
|
||||
function(next) {
|
||||
if (['day', 'week', 'month'].indexOf(dailyDigestFreq) !== -1) {
|
||||
db.sortedSetAdd('digest:' + dailyDigestFreq + ':uids', Date.now(), uid, next);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
], callback);
|
||||
}
|
||||
|
||||
User.setSetting = function(uid, key, value, callback) {
|
||||
db.setObjectField('user:' + uid + ':settings', key, value, callback);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user