|
|
|
|
@ -9,7 +9,45 @@ var async = require('async'),
|
|
|
|
|
module.exports = function(User) {
|
|
|
|
|
|
|
|
|
|
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) {
|
|
|
|
|
if (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) {
|
|
|
|
|
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);
|
|
|
|
|
};
|
|
|
|
|
|