mirror of
https://github.com/discourse/discourse.git
synced 2025-02-21 11:25:24 +00:00
FIX: Only send membership request to the last 5 active group owners.
This commit is contained in:
parent
7ce4bc2e90
commit
ad4a96d387
@ -1,5 +1,6 @@
|
||||
import { default as computed } from 'ember-addons/ember-computed-decorators';
|
||||
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||
import Group from 'discourse/models/group';
|
||||
|
||||
export default Ember.Component.extend({
|
||||
@computed("model.public")
|
||||
@ -64,9 +65,13 @@ export default Ember.Component.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.sendAction("createNewMessageViaParams", groupName, title, body);
|
||||
|
||||
Group.loadOwners(groupName).then(result => {
|
||||
const names = result.map(owner => owner.username).join(",");
|
||||
const title = I18n.t('groups.request_membership_pm.title');
|
||||
const body = I18n.t('groups.request_membership_pm.body', { groupName });
|
||||
this.sendAction("createNewMessageViaParams", names, title, body);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -2,6 +2,7 @@ import { ajax } from 'discourse/lib/ajax';
|
||||
import { default as computed, observes } from "ember-addons/ember-computed-decorators";
|
||||
import GroupHistory from 'discourse/models/group-history';
|
||||
import RestModel from 'discourse/models/rest';
|
||||
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||
|
||||
const Group = RestModel.extend({
|
||||
limit: 50,
|
||||
@ -208,6 +209,10 @@ Group.reopenClass({
|
||||
return ajax("/groups/" + name + ".json").then(result => Group.create(result.basic_group));
|
||||
},
|
||||
|
||||
loadOwners(name) {
|
||||
return ajax('/groups/' + name + '/owners.json').catch(popupAjaxError);
|
||||
},
|
||||
|
||||
loadMembers(name, offset, limit, params) {
|
||||
return ajax('/groups/' + name + '/members.json', {
|
||||
data: _.extend({
|
||||
|
@ -141,6 +141,16 @@ class GroupsController < ApplicationController
|
||||
}
|
||||
end
|
||||
|
||||
def owners
|
||||
group = find_group(:group_id)
|
||||
|
||||
owners = group.users.where('group_users.owner')
|
||||
.order("users.last_seen_at DESC")
|
||||
.limit(5)
|
||||
|
||||
render_serialized(owners, GroupUserSerializer)
|
||||
end
|
||||
|
||||
def add_members
|
||||
group = Group.find(params[:id])
|
||||
group.public ? ensure_logged_in : guardian.ensure_can_edit!(group)
|
||||
|
@ -1,4 +1,6 @@
|
||||
# Searches for a user by username or full text or name (if enabled in SiteSettings)
|
||||
require_dependency 'search'
|
||||
|
||||
class UserSearch
|
||||
|
||||
def initialize(term, opts={})
|
||||
|
@ -404,6 +404,7 @@ Discourse::Application.routes.draw do
|
||||
get 'activity' => "groups#show"
|
||||
get 'activity/:filter' => "groups#show"
|
||||
get 'members'
|
||||
get 'owners'
|
||||
get 'posts'
|
||||
get 'topics'
|
||||
get 'mentions'
|
||||
|
@ -151,6 +151,26 @@ describe "Groups" do
|
||||
end
|
||||
end
|
||||
|
||||
describe 'owners' do
|
||||
let(:user1) { Fabricate(:user, last_seen_at: Time.zone.now) }
|
||||
let(:user2) { Fabricate(:user, last_seen_at: Time.zone.now - 1 .day) }
|
||||
let(:group) { Fabricate(:group, users: [user1, user2]) }
|
||||
|
||||
it 'should return the right list of owners' do
|
||||
group.add_owner(user1)
|
||||
group.add_owner(user2)
|
||||
|
||||
xhr :get, "/groups/#{group.name}/owners"
|
||||
|
||||
expect(response).to be_success
|
||||
|
||||
owners = JSON.parse(response.body)
|
||||
|
||||
expect(owners.count).to eq(2)
|
||||
expect(owners.map { |o| o["id"] }.sort).to eq([user1.id, user2.id])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'members' do
|
||||
let(:user1) do
|
||||
Fabricate(:user,
|
||||
|
Loading…
x
Reference in New Issue
Block a user