Retrospring/app/controllers/ajax/question_controller.rb

97 lines
2.8 KiB
Ruby
Raw Normal View History

2022-06-12 04:46:48 -07:00
# frozen_string_literal: true
require "digest"
2022-06-12 04:46:48 -07:00
require "errors"
class Ajax::QuestionController < AjaxController
2015-04-25 18:36:25 -07:00
def destroy
params.require :question
question = Question.find params[:question]
if question.nil?
@response[:status] = :not_found
@response[:message] = t(".notfound")
2015-04-25 18:36:25 -07:00
return
end
2015-04-25 18:39:51 -07:00
if not (current_user.mod? or question.user == current_user)
@response[:status] = :not_authorized
@response[:message] = t(".noauth")
2015-04-25 18:39:51 -07:00
return
end
2015-04-25 18:36:25 -07:00
question.destroy!
@response[:status] = :okay
@response[:message] = t(".success")
@response[:success] = true
2015-04-25 18:36:25 -07:00
end
def create
params.require :question
params.require :anonymousQuestion
params.require :rcpt
2020-05-25 09:33:09 -07:00
is_never_anonymous = user_signed_in? && params[:rcpt] == 'followers'
author_is_anonymous = is_never_anonymous ? false : params[:anonymousQuestion]
2014-12-08 06:34:37 -08:00
begin
question = Question.create!(content: params[:question],
author_is_anonymous: author_is_anonymous,
author_identifier: AnonymousBlock.get_identifier(request.ip),
user: current_user,
2022-06-14 15:17:02 -07:00
direct: params[:rcpt] != "followers")
rescue ActiveRecord::RecordInvalid => e
2021-12-28 09:32:03 -08:00
Sentry.capture_exception(e)
@response[:status] = :rec_inv
@response[:message] = t(".invalid")
2014-12-08 06:34:37 -08:00
return
end
if !user_signed_in? && !question.author_is_anonymous
question.delete
return
end
2014-11-10 22:18:34 -08:00
unless current_user.nil?
current_user.increment! :asked_count unless params[:anonymousQuestion] == 'true'
end
2014-12-07 11:13:45 -08:00
if params[:rcpt] == 'followers'
2020-05-25 09:33:09 -07:00
QuestionWorker.perform_async(current_user.id, question.id) unless current_user.nil?
2014-12-07 11:13:45 -08:00
else
target_user = User.find_by(id: params[:rcpt])
if target_user.nil?
@response[:status] = :not_found
@response[:message] = t(".notfound")
question.delete
return
end
if target_user.blocking?(current_user)
question.delete
raise Errors::AskingOtherBlockedSelf
end
if current_user&.blocking?(target_user)
question.delete
raise Errors::AskingSelfBlockedOther
end
if !target_user.privacy_allow_anonymous_questions && question.author_is_anonymous
question.delete
return
end
unless target_user.mute_rules.any? { |rule| rule.applies_to? question } ||
(author_is_anonymous && target_user.anonymous_blocks.where(identifier: AnonymousBlock.get_identifier(request.ip)).any?)
Inbox.create!(user_id: target_user.id, question_id: question.id, new: true)
end
2014-12-07 11:13:45 -08:00
end
@response[:status] = :okay
@response[:message] = t(".success")
@response[:success] = true
end
end