mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: flag dispositions normalization
All flags should end up in one of the three dispositions - Agree - Disagree - Defer In the administration area, the *active* flags section displays 4 buttons - Agree (hide post + send PM) - Disagree - Defer - Delete Clicking "Delete" will open a modal that offer to - Delete Post & Defer Flags - Delete Post & Agree with Flags - Delete Spammer (if available) When the flag has a list associated, the list will now display 1 response and 1 reply and a "show more..." link if there are more in the conversation. Replying to the conversation will NOT give a disposition. Moderators must click the buttons that does that. If someone clicks one buttons, this will add a default moderator message from that moderator saying what happened. The *old* flags section now displays the proper dispositions and is super duper fast (no more N+9999 queries). FIX: the old list includes deleted topics FIX: the lists now properly display the topic states (deleted, closed, archived, hidden, PM) FIX: flagging a topic that you've already flagged the first post
This commit is contained in:
@@ -1,37 +1,50 @@
|
||||
require 'flag_query'
|
||||
|
||||
class Admin::FlagsController < Admin::AdminController
|
||||
|
||||
def index
|
||||
# we may get out of sync, fix it here
|
||||
PostAction.update_flagged_posts_count
|
||||
posts, users = FlagQuery.flagged_posts_report(current_user, params[:filter], params[:offset].to_i, 10)
|
||||
posts, topics, users = FlagQuery.flagged_posts_report(current_user, params[:filter], params[:offset].to_i, 10)
|
||||
|
||||
if posts.blank?
|
||||
render json: {users: [], posts: []}
|
||||
render json: { posts: [], topics: [], users: [] }
|
||||
else
|
||||
render json: MultiJson.dump({users: serialize_data(users, AdminDetailedUserSerializer), posts: posts})
|
||||
render json: MultiJson.dump({
|
||||
posts: posts,
|
||||
topics: serialize_data(topics, FlaggedTopicSerializer),
|
||||
users: serialize_data(users, FlaggedUserSerializer)
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
def disagree
|
||||
p = Post.find(params[:id])
|
||||
PostAction.clear_flags!(p, current_user.id)
|
||||
p.reload
|
||||
p.unhide!
|
||||
def agree
|
||||
params.permit(:id, :delete_post)
|
||||
post = Post.find(params[:id])
|
||||
post_action_type = PostAction.post_action_type_for_post(post.id)
|
||||
PostAction.agree_flags!(post, current_user, params[:delete_post])
|
||||
if params[:delete_post]
|
||||
PostDestroyer.new(current_user, post).destroy
|
||||
else
|
||||
PostAction.hide_post!(post, post_action_type)
|
||||
end
|
||||
render nothing: true
|
||||
end
|
||||
|
||||
def agree
|
||||
p = Post.find(params[:id])
|
||||
post_action_type = PostAction.post_action_type_for_post(p.id)
|
||||
PostAction.defer_flags!(p, current_user.id)
|
||||
PostAction.hide_post!(p, post_action_type)
|
||||
def disagree
|
||||
params.permit(:id)
|
||||
post = Post.find(params[:id])
|
||||
PostAction.clear_flags!(post, current_user)
|
||||
post.reload
|
||||
post.unhide!
|
||||
render nothing: true
|
||||
end
|
||||
|
||||
def defer
|
||||
p = Post.find(params[:id])
|
||||
PostAction.defer_flags!(p, current_user.id)
|
||||
params.permit(:id, :delete_post)
|
||||
post = Post.find(params[:id])
|
||||
PostAction.defer_flags!(post, current_user, params[:delete_post])
|
||||
PostDestroyer.new(current_user, post).destroy if params[:delete_post]
|
||||
render nothing: true
|
||||
end
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ class Admin::UsersController < Admin::AdminController
|
||||
end
|
||||
|
||||
def destroy
|
||||
user = User.find_by(id: params[:id])
|
||||
user = User.find_by(id: params[:id].to_i)
|
||||
guardian.ensure_can_delete_user!(user)
|
||||
begin
|
||||
if UserDestroyer.new(current_user).destroy(user, params.slice(:delete_posts, :block_email, :block_urls, :block_ip, :context))
|
||||
|
||||
@@ -11,7 +11,7 @@ class PostActionsController < ApplicationController
|
||||
|
||||
args = {}
|
||||
args[:message] = params[:message] if params[:message].present?
|
||||
args[:take_action] = true if guardian.is_staff? and params[:take_action] == 'true'
|
||||
args[:take_action] = true if guardian.is_staff? && params[:take_action] == 'true'
|
||||
args[:flag_topic] = true if params[:flag_topic] == 'true'
|
||||
|
||||
post_action = PostAction.act(current_user, @post, @post_action_type_id, args)
|
||||
@@ -46,17 +46,17 @@ class PostActionsController < ApplicationController
|
||||
render nothing: true
|
||||
end
|
||||
|
||||
def clear_flags
|
||||
guardian.ensure_can_clear_flags!(@post)
|
||||
def defer_flags
|
||||
guardian.ensure_can_defer_flags!(@post)
|
||||
|
||||
PostAction.clear_flags!(@post, current_user.id, @post_action_type_id)
|
||||
PostAction.defer_flags!(@post, current_user)
|
||||
@post.reload
|
||||
|
||||
if @post.is_flagged?
|
||||
render json: {success: true, hidden: true}
|
||||
render json: { success: true, hidden: true }
|
||||
else
|
||||
@post.unhide!
|
||||
render json: {success: true, hidden: false}
|
||||
render json: { success: true, hidden: false }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user