discourse/app/controllers/groups_controller.rb

84 lines
2.0 KiB
Ruby
Raw Normal View History

class GroupsController < ApplicationController
def show
2014-02-19 05:43:02 +08:00
render_serialized(find_group(:id), BasicGroupSerializer)
end
2014-02-19 05:17:04 +08:00
def counts
2014-02-19 05:43:02 +08:00
group = find_group(:group_id)
2014-02-19 05:17:04 +08:00
render json: {counts: { posts: group.posts_for(guardian).count,
members: group.users.count } }
end
def posts
2014-02-19 05:43:02 +08:00
group = find_group(:group_id)
posts = group.posts_for(guardian, params[:before_post_id]).limit(20)
render_serialized posts.to_a, GroupPostSerializer
end
2014-02-07 02:06:19 +08:00
def members
2014-02-19 05:43:02 +08:00
group = find_group(:group_id)
limit = (params[:limit] || 50).to_i
offset = params[:offset].to_i
total = group.users.count
members = group.users.order(:username_lower).limit(limit).offset(offset)
render json: {
members: serialize_data(members, GroupUserSerializer),
meta: {
total: total,
limit: limit,
offset: offset
}
}
2014-02-07 02:06:19 +08:00
end
def add_members
guardian.ensure_can_edit!(the_group)
added_users = []
usernames = params.require(:usernames)
usernames.split(",").each do |username|
if user = User.find_by_username(username)
unless the_group.users.include?(user)
the_group.add(user)
added_users << user
end
end
end
# always succeeds, even if bogus usernames were provided
render_serialized(added_users, GroupUserSerializer)
end
def remove_member
guardian.ensure_can_edit!(the_group)
removed_users = []
username = params.require(:username)
if user = User.find_by_username(username)
the_group.remove(user)
removed_users << user
end
# always succeeds, even if user was not a member
render_serialized(removed_users, GroupUserSerializer)
end
2014-02-19 05:43:02 +08:00
private
def find_group(param_name)
name = params.require(param_name)
group = Group.find_by("lower(name) = ?", name.downcase)
guardian.ensure_can_see!(group)
group
end
2014-02-19 05:43:02 +08:00
def the_group
@the_group ||= find_group(:group_id)
end
end