From 12940b577b1e66dc94182b3adecc86f366133d2a Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Wed, 15 Aug 2018 20:42:59 -0400 Subject: [PATCH] closes #6703 --- .../en-GB/admin/manage/categories.json | 1 + public/src/admin/manage/categories.js | 13 ++++++ src/categories/create.js | 41 +++++++++++++++++-- .../admin/partials/categories/create.tpl | 5 +++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/public/language/en-GB/admin/manage/categories.json b/public/language/en-GB/admin/manage/categories.json index 6aa607612d..758785d689 100644 --- a/public/language/en-GB/admin/manage/categories.json +++ b/public/language/en-GB/admin/manage/categories.json @@ -19,6 +19,7 @@ "parent-category-none": "(None)", "copy-settings": "Copy Settings From", "optional-clone-settings": "(Optional) Clone Settings From Category", + "clone-children": "Clone Children Categories And Settings", "purge": "Purge Category", "enable": "Enable", diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 2cd4914ce0..76504eec6f 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -78,12 +78,25 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri var formData = modal.find('form').serializeObject(); formData.description = ''; formData.icon = 'fa-comments'; + formData.uid = app.user.uid; Categories.create(formData); modal.modal('hide'); return false; } + $('#cloneChildren').on('change', function () { + var check = $(this); + var parentSelect = $('#parentCid'); + + if (check.prop('checked')) { + parentSelect.attr('disabled', 'disabled'); + parentSelect.val(''); + } else { + parentSelect.removeAttr('disabled'); + } + }); + modal.find('form').on('submit', submit); }); }); diff --git a/src/categories/create.js b/src/categories/create.js index 1d6fc6c09f..c4cf728701 100644 --- a/src/categories/create.js +++ b/src/categories/create.js @@ -84,10 +84,24 @@ module.exports = function (Categories) { ], next); }, function (results, next) { - if (data.cloneFromCid && parseInt(data.cloneFromCid, 10)) { - return Categories.copySettingsFrom(data.cloneFromCid, category.cid, !data.parentCid, next); - } - next(null, category); + async.series([ + function (next) { + if (data.cloneFromCid && parseInt(data.cloneFromCid, 10)) { + return Categories.copySettingsFrom(data.cloneFromCid, category.cid, !data.parentCid, next); + } + + next(); + }, + function (next) { + if (data.cloneChildren) { + return duplicateCategoriesChildren(category.cid, data.cloneFromCid, data.uid, next); + } + + next(); + }, + ], function (err) { + next(err, category); + }); }, function (category, next) { plugins.fireHook('action:category.create', { category: category }); @@ -96,6 +110,25 @@ module.exports = function (Categories) { ], callback); }; + function duplicateCategoriesChildren(parentCid, cid, uid, callback) { + Categories.getChildren([cid], uid, function (err, children) { + if (err || !children.length) { + return callback(err); + } + + children = children[0]; + + children.forEach(function (child) { + child.parentCid = parentCid; + child.cloneFromCid = child.cid; + child.cloneChildren = true; + child.uid = uid; + }); + + async.each(children, Categories.create, callback); + }); + } + Categories.assignColours = function () { var backgrounds = ['#AB4642', '#DC9656', '#F7CA88', '#A1B56C', '#86C1B9', '#7CAFC2', '#BA8BAF', '#A16946']; var text = ['#fff', '#fff', '#333', '#fff', '#333', '#fff', '#fff', '#fff']; diff --git a/src/views/admin/partials/categories/create.tpl b/src/views/admin/partials/categories/create.tpl index 436705b1d8..7fb0f2484b 100644 --- a/src/views/admin/partials/categories/create.tpl +++ b/src/views/admin/partials/categories/create.tpl @@ -21,5 +21,10 @@ + + \ No newline at end of file