FIX: Only send membership request to the last 5 active group owners.

This commit is contained in:
Guo Xiang Tan 2017-01-03 15:33:57 +08:00
parent 7ce4bc2e90
commit ad4a96d387
6 changed files with 46 additions and 3 deletions

View File

@ -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);
});
}
}
});

View File

@ -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({

View File

@ -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)

View File

@ -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={})

View File

@ -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'

View File

@ -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,