1
0
Fork 0
discourse-custom-wizard-unl.../controllers/custom_wizard/steps.rb

65 Zeilen
1,6 KiB
Ruby

2019-10-03 07:17:21 +02:00
class CustomWizard::StepsController < ::ApplicationController
before_action :ensure_logged_in
2020-10-31 08:05:50 +01:00
before_action :ensure_can_update
2017-09-25 16:47:40 +02:00
def update
params.require(:step_id)
params.require(:wizard_id)
2020-10-31 08:05:50 +01:00
wizard = @builder.build
step = wizard.steps.select { |s| s.id == update_params[:step_id] }.first
2020-10-31 08:05:50 +01:00
if !step || step.fields.blank?
raise Discourse::InvalidParameters.new(:step_id)
end
field_ids = step.fields.map(&:id)
if params[:fields]
2020-10-31 08:05:50 +01:00
permitted_fields = params[:fields].select { |k, v| field_ids.include? k }
update_params[:fields] = permitted_fields
update_params.permit!
end
2020-10-20 01:15:03 +02:00
2020-10-31 08:05:50 +01:00
updater = wizard.create_updater(
update_params[:step_id],
update_params[:fields]
)
2017-09-25 16:47:40 +02:00
updater.update
2020-10-20 01:15:03 +02:00
2017-09-25 16:47:40 +02:00
if updater.success?
2017-10-05 02:36:46 +02:00
result = success_json
result.merge!(updater.result) if updater.result
2017-09-25 16:47:40 +02:00
result[:refresh_required] = true if updater.refresh_required?
render json: result
else
errors = []
updater.errors.messages.each do |field, msg|
2020-04-14 16:10:26 +02:00
errors << { field: field, description: msg.join(',') }
2017-09-25 16:47:40 +02:00
end
render json: { errors: errors }, status: 422
end
end
2020-10-31 08:05:50 +01:00
private
def ensure_can_update
@builder = CustomWizard::Builder.new(
update_params[:wizard_id].underscore,
current_user
)
if @builder.nil?
raise Discourse::InvalidParameters.new(:wizard_id)
end
if !@builder.wizard || !@builder.wizard.can_access?
raise Discourse::InvalidAccess.new
end
end
def update_params
params.permit(:wizard_id, :step_id)
end
2017-09-25 16:47:40 +02:00
end