FEATURE: Add request membership button for allowed groups.

This commit is contained in:
Guo Xiang Tan
2016-12-12 22:46:45 +08:00
parent 664feca199
commit da7009a968
17 changed files with 172 additions and 16 deletions

View File

@@ -1,5 +1,6 @@
import { popupAjaxError } from 'discourse/lib/ajax-error';
import { propertyEqual } from 'discourse/lib/computed';
import computed from 'ember-addons/ember-computed-decorators';
export default Ember.Controller.extend({
adminGroupsType: Ember.inject.controller(),
@@ -35,6 +36,16 @@ export default Ember.Controller.extend({
];
}.property(),
@computed('model.visible', 'model.public', 'model.alias_level')
disableMembershipRequestSetting(visible, publicGroup) {
return !visible || publicGroup || !this.get('model.canEveryoneMention');
},
@computed('model.visible', 'model.allow_membership_requests')
disablePublicSetting(visible, allowMembershipRequests) {
return !visible || allowMembershipRequests;
},
actions: {
next() {
if (this.get("showingLast")) { return; }

View File

@@ -64,16 +64,29 @@
{{#unless model.automatic}}
<div>
<label for="primary_group">
{{input type="checkbox" checked=model.primary_group}}
{{i18n 'admin.groups.primary_group'}}
<label>
{{input type="checkbox"
checked=model.public
disabled=disablePublicSetting}}
{{i18n 'groups.public'}}
</label>
</div>
<div>
<label>
{{input type="checkbox" checked=model.public}}
{{i18n 'groups.public'}}
{{input type="checkbox"
checked=model.allow_membership_requests
disabled=disableMembershipRequestSetting}}
{{i18n 'groups.allow_membership_requests'}}
</label>
</div>
<div>
<label for="primary_group">
{{input type="checkbox" checked=model.primary_group}}
{{i18n 'admin.groups.primary_group'}}
</label>
</div>
{{/unless}}

View File

@@ -22,6 +22,11 @@ export default Ember.Controller.extend({
return !!(this.currentUser) && publicGroup;
},
@computed('model.allow_membership_requests', 'model.alias_level')
canRequestMembership(allowMembershipRequests, aliasLevel) {
return !!(this.currentUser) && allowMembershipRequests && aliasLevel === 99;
},
actions: {
removeMember(user) {
this.get('model').removeMember(user);
@@ -34,6 +39,13 @@ export default Ember.Controller.extend({
}
},
requestMembership() {
const groupName = this.get('model.name');
const title = I18n.t('groups.request_membership_pm.title');
const body = I18n.t('groups.request_membership_pm.body', { groupName });
this.transitionToRoute(`/new-message?groupname=${groupName}&title=${title}&body=${body}`);
},
joinGroup() {
this.set('updatingMembership', true);
const model = this.get('model');

View File

@@ -1,5 +1,5 @@
import { ajax } from 'discourse/lib/ajax';
import computed from "ember-addons/ember-computed-decorators";
import { default as computed, observes } from "ember-addons/ember-computed-decorators";
import GroupHistory from 'discourse/models/group-history';
const Group = Discourse.Model.extend({
@@ -101,6 +101,23 @@ const Group = Discourse.Model.extend({
return this.get('flair_color') ? this.get('flair_color').replace(new RegExp("[^0-9a-fA-F]", "g"), "") : null;
},
@computed('alias_level')
canEveryoneMention(aliasLevel) {
return aliasLevel === '99';
},
@observes("visible", "canEveryoneMention")
_updateAllowMembershipRequests() {
if (!this.get('visible') || !this.get('canEveryoneMention')) {
this.set('allow_membership_requests', false);
}
},
@observes("visible")
_updatePublic() {
if (!this.get('visible')) this.set('public', false);
},
asJSON() {
return {
name: this.get('name'),
@@ -116,7 +133,8 @@ const Group = Discourse.Model.extend({
flair_bg_color: this.get('flairBackgroundHexColor'),
flair_color: this.get('flairHexColor'),
bio_raw: this.get('bio_raw'),
public: this.get('public')
public: this.get('public'),
allow_membership_requests: this.get('allow_membership_requests')
};
},

View File

@@ -18,6 +18,11 @@
label="groups.join"
disabled=updatingMembership}}
{{/if}}
{{else if canRequestMembership}}
{{d-button action="requestMembership"
class="group-index-request"
icon="envelope"
label="groups.request"}}
{{/if}}
{{#load-more selector=".group-members tr" action="loadMore"}}

View File

@@ -9,9 +9,22 @@
{{group-flair-inputs model=model}}
<label>
{{input type='checkbox' checked=model.public class="edit-group-public"}}
{{input type='checkbox'
checked=model.public
class="edit-group-public"
disabled=model.allow_membership_requests}}
{{i18n 'groups.public'}}
</label>
<label>
{{input type='checkbox'
checked=model.allow_membership_requests
class="edit-group-allow-membership-requests"
disabled=model.public}}
{{i18n 'groups.allow_membership_requests'}}
</label>
</form>
{{/d-modal-body}}