v1.18.x
barisusakli 10 years ago
parent 4ce6341d85
commit 984b17349a

@ -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,17 +36,45 @@ 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];
}
callback(null, settings);
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) {
return callback(new Error('[[error:invalid-pagination-value]]'));
@ -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);
};

Loading…
Cancel
Save