mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: Add request membership button for allowed groups.
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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}}
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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')
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
@@ -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"}}
|
||||
|
||||
@@ -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}}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user