From 91411cc47cf4a07d4ae30e079cd38f7414e8ae7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 30 Jul 2020 12:26:37 -0400 Subject: [PATCH] feat: add privileges shortcut to groups list fix issues with escape group names --- .../language/en-GB/admin/manage/groups.json | 3 +- public/less/admin/manage/groups.less | 4 +++ public/openapi/read.yaml | 32 +++++++++++++++++++ public/src/admin/manage/group.js | 13 ++++---- public/src/admin/manage/groups.js | 11 ++++++- public/src/admin/manage/privileges.js | 26 +++++++++------ src/controllers/admin/groups.js | 4 ++- src/controllers/admin/privileges.js | 3 +- src/views/admin/manage/groups.tpl | 23 ++++++------- .../groups/privileges-select-category.tpl | 18 +++++++++++ 10 files changed, 104 insertions(+), 33 deletions(-) create mode 100644 src/views/admin/partials/groups/privileges-select-category.tpl diff --git a/public/language/en-GB/admin/manage/groups.json b/public/language/en-GB/admin/manage/groups.json index c61a539a7d79..911fcce01096 100644 --- a/public/language/en-GB/admin/manage/groups.json +++ b/public/language/en-GB/admin/manage/groups.json @@ -9,7 +9,8 @@ "private": "Private", "edit": "Edit", "delete": "Delete", - "download-csv": "Download CSV", + "privileges": "Privileges", + "download-csv": "CSV", "search-placeholder": "Search", "create": "Create Group", "description-placeholder": "A short description about your group", diff --git a/public/less/admin/manage/groups.less b/public/less/admin/manage/groups.less index 8edc958412d0..3393108e7638 100644 --- a/public/less/admin/manage/groups.less +++ b/public/less/admin/manage/groups.less @@ -26,6 +26,10 @@ margin: 0; } } + + [component="category-selector"] { + max-width: 110px; + } } .page-admin-groups { diff --git a/public/openapi/read.yaml b/public/openapi/read.yaml index fa49dd643710..c9ee7a4390b0 100644 --- a/public/openapi/read.yaml +++ b/public/openapi/read.yaml @@ -900,6 +900,8 @@ paths: cid: type: number description: A category identifier + group: + type: string - $ref: components/schemas/CommonProps.yaml#/CommonProps /api/admin/manage/tags: get: @@ -1314,6 +1316,36 @@ paths: - textColor - createtimeISO - cover:thumb:url + categories: + type: array + items: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + icon: + type: string + selected: + type: boolean + level: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + color: + type: string + bgColor: + type: string + imageClass: + type: string + required: + - cid + - name + - icon yourid: type: number - $ref: components/schemas/Pagination.yaml#/Pagination diff --git a/public/src/admin/manage/group.js b/public/src/admin/manage/group.js index 6744e19ca0a0..b0f28a81e97c 100644 --- a/public/src/admin/manage/group.js +++ b/public/src/admin/manage/group.js @@ -6,7 +6,8 @@ define('admin/manage/group', [ 'iconSelect', 'admin/modules/colorpicker', 'translator', -], function (memberList, iconSelect, colorpicker, translator) { + 'categorySelector', +], function (memberList, iconSelect, colorpicker, translator, categorySelector) { var Groups = {}; Groups.init = function () { @@ -49,7 +50,9 @@ define('admin/manage/group', [ }); }); - $('[component="category/list"] [data-cid]').on('click', navigateToCategory); + categorySelector.init($('[component="category-selector"]'), function (selectedCategory) { + navigateToCategory(selectedCategory.cid); + }); colorpicker.enable(changeGroupLabelColor, function (hsb, hex) { groupLabelPreview.css('background-color', '#' + hex); @@ -142,11 +145,9 @@ define('admin/manage/group', [ }); } - function navigateToCategory() { - var cid = $(this).attr('data-cid'); - + function navigateToCategory(cid) { if (cid) { - var url = 'admin/manage/privileges/' + cid + '?group=' + ajaxify.data.group.name; + var url = 'admin/manage/privileges/' + cid + '?group=' + ajaxify.data.group.nameEncoded; if (app.flags && app.flags._unsaved === true) { translator.translate('[[global:unsaved-changes]]', function (text) { bootbox.confirm(text, function (navigate) { diff --git a/public/src/admin/manage/groups.js b/public/src/admin/manage/groups.js index 1d52341df5cc..e87b0e0ce600 100644 --- a/public/src/admin/manage/groups.js +++ b/public/src/admin/manage/groups.js @@ -1,7 +1,9 @@ 'use strict'; -define('admin/manage/groups', ['translator', 'benchpress'], function (translator, Benchpress) { +define('admin/manage/groups', [ + 'translator', 'benchpress', 'categorySelector', +], function (translator, Benchpress, categorySelector) { var Groups = {}; var intervalId = 0; @@ -75,6 +77,13 @@ define('admin/manage/groups', ['translator', 'benchpress'], function (translator break; } }); + + $('.groups-list [component="category-selector"]').each(function () { + var nameEncoded = $(this).parents('[data-name-encoded]').attr('data-name-encoded'); + categorySelector.init($(this), function (selectedCategory) { + ajaxify.go('admin/manage/privileges/' + selectedCategory.cid + '?group=' + nameEncoded); + }); + }); }; function handleSearch() { diff --git a/public/src/admin/manage/privileges.js b/public/src/admin/manage/privileges.js index 703c8f5b137d..8ce0030285fc 100644 --- a/public/src/admin/manage/privileges.js +++ b/public/src/admin/manage/privileges.js @@ -95,9 +95,7 @@ define('admin/manage/privileges', [ $('.privilege-table-container').html(html); Privileges.exposeAssumedPrivileges(); - if (groupToHighlight) { - $('[data-group-name="' + groupToHighlight + '"]').addClass('selected'); - } + hightlightRowByGroupName(groupToHighlight); }); }); }); @@ -224,15 +222,25 @@ define('admin/manage/privileges', [ }); }; - function highlightRow() { - var params = utils.params(); - if (params.group) { - var el = $('[data-group-name="' + params.group + '"]'); + function hightlightRowByGroupName(groupName) { + if (groupName) { + var el = $('[data-group-name]').filter(function () { + return $(this).attr('data-group-name') === groupName; + }); if (el.length) { - return el.addClass('selected'); + el.addClass('selected'); + return true; } + } + return false; + } - addGroupToCategory(params.group); + function highlightRow() { + if (ajaxify.data.group) { + if (hightlightRowByGroupName(ajaxify.data.group)) { + return; + } + addGroupToCategory(ajaxify.data.group); } } diff --git a/src/controllers/admin/groups.js b/src/controllers/admin/groups.js index fee25662b494..51614c7a7fe0 100644 --- a/src/controllers/admin/groups.js +++ b/src/controllers/admin/groups.js @@ -21,13 +21,15 @@ groupsController.list = async function (req, res) { const pageCount = Math.ceil(groupNames.length / groupsPerPage); const start = (page - 1) * groupsPerPage; const stop = start + groupsPerPage - 1; - groupNames = groupNames.slice(start, stop + 1); + + const allCategories = await categories.buildForSelectAll(); const groupData = await groups.getGroupsData(groupNames); res.render('admin/manage/groups', { groups: groupData, pagination: pagination.create(page, pageCount), yourid: req.uid, + categories: allCategories, }); }; diff --git a/src/controllers/admin/privileges.js b/src/controllers/admin/privileges.js index d15a0400edf8..24df0a1a443b 100644 --- a/src/controllers/admin/privileges.js +++ b/src/controllers/admin/privileges.js @@ -41,11 +41,12 @@ privilegesController.get = async function (req, res) { } } }); - + const group = req.query.group ? req.query.group : ''; res.render('admin/manage/privileges', { privileges: privilegesData, categories: categoriesData, selectedCategory: selectedCategory, cid: cid, + group: group, }); }; diff --git a/src/views/admin/manage/groups.tpl b/src/views/admin/manage/groups.tpl index 14b281b19add..92e949ad47c4 100644 --- a/src/views/admin/manage/groups.tpl +++ b/src/views/admin/manage/groups.tpl @@ -15,15 +15,14 @@ [[admin/manage/groups:badge]] [[admin/manage/groups:properties]] [[admin/manage/groups:description]] - [[admin/manage/groups:member-count]] - + - {groups.displayName} + {groups.displayName} ({groups.memberCount}) {groups.userTitle} @@ -42,19 +41,15 @@

{groups.description}

- - {groups.memberCount} -
- - + [[admin/manage/groups:download-csv]] + + + + + +
diff --git a/src/views/admin/partials/groups/privileges-select-category.tpl b/src/views/admin/partials/groups/privileges-select-category.tpl new file mode 100644 index 000000000000..10570034a123 --- /dev/null +++ b/src/views/admin/partials/groups/privileges-select-category.tpl @@ -0,0 +1,18 @@ +
+ + + +
\ No newline at end of file