2014-01-30 17:10:36 -05:00
|
|
|
class GroupsController < ApplicationController
|
|
|
|
|
2016-11-29 03:25:02 -05:00
|
|
|
before_filter :ensure_logged_in, only: [
|
|
|
|
:set_notifications,
|
|
|
|
:mentionable,
|
|
|
|
:update
|
|
|
|
]
|
|
|
|
|
2016-03-18 12:19:45 -04:00
|
|
|
skip_before_filter :preload_json, :check_xhr, only: [:posts_feed, :mentions_feed]
|
2015-12-14 17:17:09 -05:00
|
|
|
|
2014-01-30 17:10:36 -05:00
|
|
|
def show
|
2016-11-25 02:26:49 -05:00
|
|
|
render_serialized(find_group(:id), GroupShowSerializer, root: 'basic_group')
|
2014-01-30 17:10:36 -05:00
|
|
|
end
|
|
|
|
|
2016-11-29 03:25:02 -05:00
|
|
|
def update
|
|
|
|
group = Group.find(params[:id])
|
|
|
|
guardian.ensure_can_edit!(group)
|
|
|
|
|
|
|
|
if group.update_attributes(group_params)
|
|
|
|
render json: success_json
|
|
|
|
else
|
|
|
|
render_json_error(group)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-02-07 10:44:03 -05:00
|
|
|
def posts
|
2014-02-18 16:43:02 -05:00
|
|
|
group = find_group(:group_id)
|
2014-02-12 14:00:45 -05:00
|
|
|
posts = group.posts_for(guardian, params[:before_post_id]).limit(20)
|
2014-02-07 10:44:03 -05:00
|
|
|
render_serialized posts.to_a, GroupPostSerializer
|
|
|
|
end
|
|
|
|
|
2016-03-18 12:19:45 -04:00
|
|
|
def posts_feed
|
|
|
|
group = find_group(:group_id)
|
|
|
|
@posts = group.posts_for(guardian).limit(50)
|
|
|
|
@title = "#{SiteSetting.title} - #{I18n.t("rss_description.group_posts", group_name: group.name)}"
|
|
|
|
@link = Discourse.base_url
|
|
|
|
@description = I18n.t("rss_description.group_posts", group_name: group.name)
|
|
|
|
render 'posts/latest', formats: [:rss]
|
|
|
|
end
|
|
|
|
|
2015-12-01 00:52:43 -05:00
|
|
|
def topics
|
|
|
|
group = find_group(:group_id)
|
|
|
|
posts = group.posts_for(guardian, params[:before_post_id]).where(post_number: 1).limit(20)
|
|
|
|
render_serialized posts.to_a, GroupPostSerializer
|
|
|
|
end
|
|
|
|
|
|
|
|
def mentions
|
|
|
|
group = find_group(:group_id)
|
|
|
|
posts = group.mentioned_posts_for(guardian, params[:before_post_id]).limit(20)
|
|
|
|
render_serialized posts.to_a, GroupPostSerializer
|
|
|
|
end
|
|
|
|
|
2016-03-18 12:19:45 -04:00
|
|
|
def mentions_feed
|
|
|
|
group = find_group(:group_id)
|
|
|
|
@posts = group.mentioned_posts_for(guardian).limit(50)
|
|
|
|
@title = "#{SiteSetting.title} - #{I18n.t("rss_description.group_mentions", group_name: group.name)}"
|
|
|
|
@link = Discourse.base_url
|
|
|
|
@description = I18n.t("rss_description.group_mentions", group_name: group.name)
|
|
|
|
render 'posts/latest', formats: [:rss]
|
|
|
|
end
|
|
|
|
|
2015-12-07 17:19:33 -05:00
|
|
|
def messages
|
|
|
|
group = find_group(:group_id)
|
|
|
|
posts = if guardian.can_see_group_messages?(group)
|
|
|
|
group.messages_for(guardian, params[:before_post_id]).where(post_number: 1).limit(20).to_a
|
|
|
|
else
|
|
|
|
[]
|
|
|
|
end
|
|
|
|
render_serialized posts, GroupPostSerializer
|
|
|
|
end
|
2015-12-01 00:52:43 -05:00
|
|
|
|
2014-02-06 13:06:19 -05:00
|
|
|
def members
|
2014-02-18 16:43:02 -05:00
|
|
|
group = find_group(:group_id)
|
2014-11-24 15:12:48 -05:00
|
|
|
|
2015-01-05 12:51:45 -05:00
|
|
|
limit = (params[:limit] || 50).to_i
|
|
|
|
offset = params[:offset].to_i
|
|
|
|
|
|
|
|
total = group.users.count
|
2015-11-09 08:52:04 -05:00
|
|
|
members = group.users.order('NOT group_users.owner').order(:username_lower).limit(limit).offset(offset)
|
|
|
|
owners = group.users.order(:username_lower).where('group_users.owner')
|
2015-01-05 12:51:45 -05:00
|
|
|
|
|
|
|
render json: {
|
|
|
|
members: serialize_data(members, GroupUserSerializer),
|
2015-11-09 08:52:04 -05:00
|
|
|
owners: serialize_data(owners, GroupUserSerializer),
|
2015-01-05 12:51:45 -05:00
|
|
|
meta: {
|
|
|
|
total: total,
|
|
|
|
limit: limit,
|
|
|
|
offset: offset
|
|
|
|
}
|
|
|
|
}
|
2014-02-06 13:06:19 -05:00
|
|
|
end
|
|
|
|
|
2015-01-08 18:35:52 -05:00
|
|
|
def add_members
|
2015-11-09 08:52:04 -05:00
|
|
|
group = Group.find(params[:id])
|
|
|
|
guardian.ensure_can_edit!(group)
|
|
|
|
|
|
|
|
if params[:usernames].present?
|
|
|
|
users = User.where(username: params[:usernames].split(","))
|
|
|
|
elsif params[:user_ids].present?
|
|
|
|
users = User.find(params[:user_ids].split(","))
|
|
|
|
elsif params[:user_emails].present?
|
|
|
|
users = User.where(email: params[:user_emails].split(","))
|
|
|
|
else
|
|
|
|
raise Discourse::InvalidParameters.new('user_ids or usernames or user_emails must be present')
|
|
|
|
end
|
|
|
|
|
|
|
|
users.each do |user|
|
|
|
|
if !group.users.include?(user)
|
|
|
|
group.add(user)
|
|
|
|
else
|
|
|
|
return render_json_error I18n.t('groups.errors.member_already_exist', username: user.username)
|
2015-01-08 18:35:52 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-11-09 08:52:04 -05:00
|
|
|
if group.save
|
|
|
|
render json: success_json
|
|
|
|
else
|
|
|
|
render_json_error(group)
|
|
|
|
end
|
2015-01-08 18:35:52 -05:00
|
|
|
end
|
|
|
|
|
2016-11-25 03:45:15 -05:00
|
|
|
def mentionable
|
|
|
|
group = find_group(:name)
|
|
|
|
|
|
|
|
if group
|
|
|
|
render json: { mentionable: Group.mentionable(current_user).where(id: group.id).present? }
|
|
|
|
else
|
|
|
|
raise Discourse::InvalidAccess.new
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-01-08 18:35:52 -05:00
|
|
|
def remove_member
|
2015-11-09 08:52:04 -05:00
|
|
|
group = Group.find(params[:id])
|
|
|
|
guardian.ensure_can_edit!(group)
|
|
|
|
|
|
|
|
if params[:user_id].present?
|
|
|
|
user = User.find(params[:user_id])
|
|
|
|
elsif params[:username].present?
|
|
|
|
user = User.find_by_username(params[:username])
|
2016-10-18 05:10:47 -04:00
|
|
|
elsif params[:user_email].present?
|
|
|
|
user = User.find_by_email(params[:user_email])
|
2015-11-09 08:52:04 -05:00
|
|
|
else
|
|
|
|
raise Discourse::InvalidParameters.new('user_id or username must be present')
|
|
|
|
end
|
|
|
|
|
|
|
|
user.primary_group_id = nil if user.primary_group_id == group.id
|
|
|
|
|
|
|
|
group.users.delete(user.id)
|
2015-01-08 18:35:52 -05:00
|
|
|
|
2015-11-09 08:52:04 -05:00
|
|
|
if group.save && user.save
|
|
|
|
render json: success_json
|
|
|
|
else
|
|
|
|
render_json_error(group)
|
2015-01-08 18:35:52 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2015-12-14 17:17:09 -05:00
|
|
|
def set_notifications
|
|
|
|
group = find_group(:id)
|
|
|
|
notification_level = params.require(:notification_level)
|
|
|
|
|
|
|
|
GroupUser.where(group_id: group.id)
|
|
|
|
.where(user_id: current_user.id)
|
|
|
|
.update_all(notification_level: notification_level)
|
|
|
|
|
|
|
|
render json: success_json
|
|
|
|
end
|
|
|
|
|
2014-02-18 16:43:02 -05:00
|
|
|
private
|
|
|
|
|
2016-11-29 03:25:02 -05:00
|
|
|
def group_params
|
2016-12-05 03:18:24 -05:00
|
|
|
params.require(:group).permit(
|
|
|
|
:flair_url,
|
|
|
|
:flair_bg_color,
|
|
|
|
:flair_color,
|
2016-12-06 21:26:28 -05:00
|
|
|
:bio_raw,
|
|
|
|
:title
|
2016-12-05 03:18:24 -05:00
|
|
|
)
|
2016-11-29 03:25:02 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
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-18 16:43:02 -05:00
|
|
|
|
2014-01-30 17:10:36 -05:00
|
|
|
end
|