From de5fe25e57ac2f03e882d3fa23c55be743010d73 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Mon, 29 May 2017 14:47:01 -0400 Subject: [PATCH] closes #5715 --- public/src/admin/manage/category.js | 8 ++- src/categories.js | 29 +++++------ src/controllers/admin/categories.js | 77 ++++++++++++++++------------- src/views/admin/manage/category.tpl | 13 +++-- 4 files changed, 75 insertions(+), 52 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 22fc5d77ec..3ed4ee8eb0 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -26,11 +26,15 @@ define('admin/manage/category', [ } } - $('.blockclass, form.category select').each(function () { + $('#category-settings select').each(function () { var $this = $(this); $this.val($this.attr('data-value')); }); + $('#category-selector').on('change', function () { + ajaxify.go('admin/manage/categories/' + $(this).val()); + }); + function enableColorPicker(idx, inputEl) { var $inputEl = $(inputEl); var previewEl = $inputEl.parents('[data-cid]').find('.category-preview'); @@ -47,7 +51,7 @@ define('admin/manage/category', [ } - $('form.category input, form.category select').not($('.privilege-table-container input')) + $('#category-settings input, #category-settings select').not($('.privilege-table-container input')) .on('change', function (ev) { modified(ev.target); }) diff --git a/src/categories.js b/src/categories.js index 3d5b012f53..787853faa7 100644 --- a/src/categories.js +++ b/src/categories.js @@ -329,22 +329,23 @@ Categories.buildForSelect = function (uid, callback) { recursive(child, categoriesData, '    ' + level); }); } - Categories.getCategoriesByPrivilege('cid:0:children', uid, 'read', function (err, categories) { - if (err) { - return callback(err); - } + async.waterfall([ + function (next) { + Categories.getCategoriesByPrivilege('cid:0:children', uid, 'read', next); + }, + function (categories, next) { + var categoriesData = []; - var categoriesData = []; + categories = categories.filter(function (category) { + return category && !category.link && !parseInt(category.parentCid, 10); + }); - categories = categories.filter(function (category) { - return category && !category.link && !parseInt(category.parentCid, 10); - }); - - categories.forEach(function (category) { - recursive(category, categoriesData, ''); - }); - callback(null, categoriesData); - }); + categories.forEach(function (category) { + recursive(category, categoriesData, ''); + }); + next(null, categoriesData); + }, + ], callback); }; Categories.getIgnorers = function (cid, start, stop, callback) { diff --git a/src/controllers/admin/categories.js b/src/controllers/admin/categories.js index 3a3b1a6fa4..af18b4eb26 100644 --- a/src/controllers/admin/categories.js +++ b/src/controllers/admin/categories.js @@ -8,34 +8,47 @@ var analytics = require('../../analytics'); var plugins = require('../../plugins'); var translator = require('../../translator'); +var categoriesController = module.exports; -var categoriesController = {}; +categoriesController.get = function (req, res, callback) { + async.waterfall([ + function (next) { + async.parallel({ + category: async.apply(categories.getCategories, [req.params.category_id], req.user.uid), + privileges: async.apply(privileges.categories.list, req.params.category_id), + allCategories: async.apply(categories.buildForSelect, req.uid), + }, next); + }, + function (data, next) { + var category = data.category[0]; -categoriesController.get = function (req, res, next) { - async.parallel({ - category: async.apply(categories.getCategories, [req.params.category_id], req.user.uid), - privileges: async.apply(privileges.categories.list, req.params.category_id), - }, function (err, data) { - if (err) { - return next(err); - } - var category = data.category[0]; - - if (!category) { - return next(); - } - - plugins.fireHook('filter:admin.category.get', { req: req, res: res, category: category, privileges: data.privileges }, function (err, data) { - if (err) { - return next(err); + if (!category) { + return callback(); } + + data.allCategories.forEach(function (category) { + if (category) { + category.selected = parseInt(category.cid, 10) === parseInt(req.params.category_id, 10); + } + }); + + plugins.fireHook('filter:admin.category.get', { + req: req, + res: res, + category: category, + privileges: data.privileges, + allCategories: data.allCategories, + }, next); + }, + function (data) { data.category.name = translator.escape(String(data.category.name)); res.render('admin/manage/category', { category: data.category, privileges: data.privileges, + allCategories: data.allCategories, }); - }); - }); + }, + ], callback); }; categoriesController.getAll = function (req, res) { @@ -44,17 +57,15 @@ categoriesController.getAll = function (req, res) { }; categoriesController.getAnalytics = function (req, res, next) { - async.parallel({ - name: async.apply(categories.getCategoryField, req.params.category_id, 'name'), - analytics: async.apply(analytics.getCategoryAnalytics, req.params.category_id), - }, function (err, data) { - if (err) { - return next(err); - } - - res.render('admin/manage/category-analytics', data); - }); + async.waterfall([ + function (next) { + async.parallel({ + name: async.apply(categories.getCategoryField, req.params.category_id, 'name'), + analytics: async.apply(analytics.getCategoryAnalytics, req.params.category_id), + }, next); + }, + function (data) { + res.render('admin/manage/category-analytics', data); + }, + ], next); }; - - -module.exports = categoriesController; diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 4d006ad191..c8be81ab8f 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -1,5 +1,12 @@
+
+ +