From 1cc096156638c64faf1d2f9cdb1e61f56f8fd634 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Thu, 22 Mar 2018 12:33:42 +0800 Subject: [PATCH] FEATURE: Allow admin to manage group owners on group page. --- .../components/group-member-dropdown.js.es6 | 34 +++++++++++++++++-- .../discourse/controllers/group-index.js.es6 | 8 +++++ .../javascripts/discourse/models/group.js.es6 | 5 ++- .../discourse/templates/group-index.hbs | 2 ++ config/locales/client.en.yml | 6 +++- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/discourse/components/group-member-dropdown.js.es6 b/app/assets/javascripts/discourse/components/group-member-dropdown.js.es6 index 27d9824faf3..92ad1966ec7 100644 --- a/app/assets/javascripts/discourse/components/group-member-dropdown.js.es6 +++ b/app/assets/javascripts/discourse/components/group-member-dropdown.js.es6 @@ -8,8 +8,8 @@ export default DropdownButton.extend({ text: iconHTML('ellipsis-h'), classNames: ['group-member-dropdown'], - @computed() - dropDownContent() { + @computed("member.owner") + dropDownContent(isOwner) { const items = [ { id: 'removeMember', @@ -22,6 +22,30 @@ export default DropdownButton.extend({ } ]; + if (this.currentUser && this.currentUser.admin) { + if (isOwner) { + items.push({ + id: 'removeOwner', + title: I18n.t('groups.members.remove_owner'), + description: I18n.t( + 'groups.members.remove_owner_description', + { username: this.get('member.username') } + ), + icon: 'shield' + }); + } else { + items.push({ + id: 'makeOwner', + title: I18n.t('groups.members.make_owner'), + description: I18n.t( + 'groups.members.make_owner_description', + { username: this.get('member.username') } + ), + icon: 'shield' + }); + } + } + return items; }, @@ -30,6 +54,12 @@ export default DropdownButton.extend({ case 'removeMember': this.sendAction('removeMember', this.get('member')); break; + case 'makeOwner': + this.sendAction('makeOwner', this.get('member.username')); + break; + case 'removeOwner': + this.sendAction('removeOwner', this.get('member')); + break; } } }); diff --git a/app/assets/javascripts/discourse/controllers/group-index.js.es6 b/app/assets/javascripts/discourse/controllers/group-index.js.es6 index b026ed34208..85155d8a318 100644 --- a/app/assets/javascripts/discourse/controllers/group-index.js.es6 +++ b/app/assets/javascripts/discourse/controllers/group-index.js.es6 @@ -41,6 +41,14 @@ export default Ember.Controller.extend({ this.get('model').removeMember(user); }, + makeOwner(username) { + this.get('model').addOwners(username); + }, + + removeOwner(user) { + this.get('model').removeOwner(user); + }, + addMembers() { const usernames = this.get('usernames'); if (usernames && usernames.length > 0) { diff --git a/app/assets/javascripts/discourse/models/group.js.es6 b/app/assets/javascripts/discourse/models/group.js.es6 index c26544e7c55..b1780826591 100644 --- a/app/assets/javascripts/discourse/models/group.js.es6 +++ b/app/assets/javascripts/discourse/models/group.js.es6 @@ -87,12 +87,11 @@ const Group = RestModel.extend({ }, addOwners(usernames) { - var self = this; return ajax(`/admin/groups/${this.get('id')}/owners.json`, { type: "PUT", data: { group: { usernames: usernames } } - }).then(function() { - self.findMembers(); + }).then(() => { + this.findMembers(); }); }, diff --git a/app/assets/javascripts/discourse/templates/group-index.hbs b/app/assets/javascripts/discourse/templates/group-index.hbs index 57f3b503a8c..59cba2ab528 100644 --- a/app/assets/javascripts/discourse/templates/group-index.hbs +++ b/app/assets/javascripts/discourse/templates/group-index.hbs @@ -27,6 +27,8 @@ {{#if canManageGroup}} {{group-member-dropdown removeMember="removeMember" + makeOwner="makeOwner" + removeOwner="removeOwner" member=m}} {{/if}} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 909a5524bff..0a60ca08d5a 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -466,8 +466,12 @@ en: activity: "Activity" members: title: "Members" - remove_member: "Remove member" + remove_member: "Remove Member" remove_member_description: "Remove %{username} from this group" + make_owner: "Make Owner" + make_owner_description: "Make %{username} an owner of this group" + remove_owner: "Remove as Owner" + remove_owner_description: "Remove %{username} as an owner of this group" topics: "Topics" posts: "Posts" mentions: "Mentions"