From ccd29bfd61a242490f8f7ba13308f5aebc735db6 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 28 Feb 2014 15:25:50 -0500 Subject: [PATCH] added callback to category update --- public/src/forum/admin/categories.js | 15 ++++++++- src/admin/categories.js | 46 +++++++++++++++++----------- src/socket.io/admin.js | 6 ++-- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/public/src/forum/admin/categories.js b/public/src/forum/admin/categories.js index f963c6918d..2bcc541cd8 100644 --- a/public/src/forum/admin/categories.js +++ b/public/src/forum/admin/categories.js @@ -14,7 +14,20 @@ define(['uploader'], function(uploader) { function save() { if(Object.keys(modified_categories).length) { - socket.emit('admin.categories.update', modified_categories); + socket.emit('admin.categories.update', modified_categories, function(err, result) { + if (err) { + return app.alertError(err.message); + } + + if (result && result.length) { + app.alert({ + title: 'Updated Categories', + message: 'Category IDs ' + result.join(', ') + ' was successfully updated.', + type: 'success', + timeout: 2000 + }); + } + }); modified_categories = {}; } return false; diff --git a/src/admin/categories.js b/src/admin/categories.js index 0522837a05..0980032734 100644 --- a/src/admin/categories.js +++ b/src/admin/categories.js @@ -1,35 +1,45 @@ -var db = require('./../database'), + +'use strict'; + +var async = require('async'), + db = require('./../database'), utils = require('./../../public/src/utils'), categories = require('./../categories'); (function(CategoriesAdmin) { - CategoriesAdmin.update = function(modified, socket) { - var updated = []; + CategoriesAdmin.update = function(modified, socket, callback) { - for (var cid in modified) { + function updateCategory(cid, next) { var category = modified[cid]; + var fields = Object.keys(category); - for (var key in category) { - db.setObjectField('category:' + cid, key, category[key]); + async.each(fields, function(key, next) { + updateCategoryField(cid, key, category[key], next); + }, next); + } + + function updateCategoryField(cid, key, value, next) { + db.setObjectField('category:' + cid, key, value, function(err) { + if(err) { + return next(err); + } if (key === 'name') { - // reset slugs if name is updated - var slug = cid + '/' + utils.slugify(category[key]); - db.setObjectField('category:' + cid, 'slug', slug); + var slug = cid + '/' + utils.slugify(value); + db.setObjectField('category:' + cid, 'slug', slug, next); } else if (key === 'order') { - db.sortedSetAdd('categories:cid', category[key], cid); + db.sortedSetAdd('categories:cid', value, cid, next); + } else { + next(); } - } - - updated.push(cid); + }); } - socket.emit('event:alert', { - title: 'Updated Categories', - message: 'Category IDs ' + updated.join(', ') + ' was successfully updated.', - type: 'success', - timeout: 2000 + var cids = Object.keys(modified); + + async.each(cids, updateCategory, function(err) { + callback(err, cids); }); }; diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index eddfd78342..3d5fd87726 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -118,12 +118,12 @@ SocketAdmin.categories.create = function(socket, data, callback) { categories.create(data, callback); }; -SocketAdmin.categories.update = function(socket, data) { +SocketAdmin.categories.update = function(socket, data, callback) { if(!data) { - throw new Error('invalid data'); + return callback(new Error('invalid data')); } - admin.categories.update(data, socket); + admin.categories.update(data, socket, callback); }; SocketAdmin.categories.search = function(socket, data, callback) {