mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-08 15:05:46 +01:00
closes #2476
This commit is contained in:
@@ -85,7 +85,9 @@ module.exports = function(db, module) {
|
|||||||
}
|
}
|
||||||
value = helpers.valueToString(value);
|
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) {
|
module.sortedSetsRemoveRangeByScore = function(keys, min, max, callback) {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ var db = require('./database'),
|
|||||||
schemaDate, thisSchemaDate,
|
schemaDate, thisSchemaDate,
|
||||||
|
|
||||||
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
||||||
latestSchema = Date.UTC(2014, 11, 12);
|
latestSchema = Date.UTC(2014, 11, 20);
|
||||||
|
|
||||||
Upgrade.check = function(callback) {
|
Upgrade.check = function(callback) {
|
||||||
db.get('schemaDate', function(err, value) {
|
db.get('schemaDate', function(err, value) {
|
||||||
@@ -412,7 +412,43 @@ Upgrade.upgrade = function(callback) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} 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();
|
next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,22 +48,7 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Digest.getSubscribers = function(interval, callback) {
|
Digest.getSubscribers = function(interval, callback) {
|
||||||
async.waterfall([
|
db.getSortedSetRange('digest:' + interval + ':uids', 0, -1, callback);
|
||||||
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);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Digest.send = function(data, callback) {
|
Digest.send = function(data, callback) {
|
||||||
|
|||||||
@@ -9,7 +9,45 @@ var async = require('async'),
|
|||||||
module.exports = function(User) {
|
module.exports = function(User) {
|
||||||
|
|
||||||
User.getSettings = function(uid, callback) {
|
User.getSettings = function(uid, callback) {
|
||||||
function onSettingsLoaded(settings) {
|
if (!parseInt(uid, 10)) {
|
||||||
|
return onSettingsLoaded(0, {}, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
db.getObject('user:' + uid + ':settings', function(err, settings) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
onSettingsLoaded(uid, settings ? settings : {}, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
User.getMultipleUserSettings = function(uids, callback) {
|
||||||
|
if (!Array.isArray(uids) || !uids.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = uids.map(function(uid) {
|
||||||
|
return 'user:' + uid + ':settings';
|
||||||
|
});
|
||||||
|
|
||||||
|
db.getObjects(keys, function(err, settings) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
plugins.fireHook('filter:user.getSettings', {uid: uid, settings: settings}, function(err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@@ -37,44 +75,6 @@ module.exports = function(User) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parseInt(uid, 10)) {
|
|
||||||
return onSettingsLoaded({});
|
|
||||||
}
|
|
||||||
|
|
||||||
db.getObject('user:' + uid + ':settings', function(err, settings) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
onSettingsLoaded(settings ? settings : {});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
User.getMultipleUserSettings = function(uids, callback) {
|
|
||||||
if (!Array.isArray(uids) || !uids.length) {
|
|
||||||
return callback(null, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
var keys = uids.map(function(uid) {
|
|
||||||
return 'user:' + uid + ':settings';
|
|
||||||
});
|
|
||||||
|
|
||||||
db.getObjects(keys, function(err, settings) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Associate uid
|
|
||||||
settings = settings.map(function(setting, idx) {
|
|
||||||
setting = setting || {};
|
|
||||||
setting.uid = uids[idx];
|
|
||||||
return setting;
|
|
||||||
});
|
|
||||||
|
|
||||||
callback(null, settings);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
User.saveSettings = function(uid, data, callback) {
|
User.saveSettings = function(uid, data, callback) {
|
||||||
if(!data.topicsPerPage || !data.postsPerPage || parseInt(data.topicsPerPage, 10) <= 0 || parseInt(data.postsPerPage, 10) <= 0) {
|
if(!data.topicsPerPage || !data.postsPerPage || parseInt(data.topicsPerPage, 10) <= 0 || parseInt(data.postsPerPage, 10) <= 0) {
|
||||||
return callback(new Error('[[error:invalid-pagination-value]]'));
|
return callback(new Error('[[error:invalid-pagination-value]]'));
|
||||||
@@ -103,12 +103,30 @@ module.exports = function(User) {
|
|||||||
topicSearchEnabled: data.topicSearchEnabled
|
topicSearchEnabled: data.topicSearchEnabled
|
||||||
}, next);
|
}, next);
|
||||||
},
|
},
|
||||||
|
function(next) {
|
||||||
|
updateDigestSetting(uid, data.dailyDigestFreq, next);
|
||||||
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
User.getSettings(uid, next);
|
User.getSettings(uid, next);
|
||||||
}
|
}
|
||||||
], callback);
|
], 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) {
|
User.setSetting = function(uid, key, value, callback) {
|
||||||
db.setObjectField('user:' + uid + ':settings', key, value, callback);
|
db.setObjectField('user:' + uid + ':settings', key, value, callback);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user