2019-10-03 07:17:21 +02:00
|
|
|
class CustomWizard::StepsController < ::ApplicationController
|
2017-09-29 13:27:03 +02:00
|
|
|
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
|
2017-11-03 06:56:10 +01:00
|
|
|
params.require(:step_id)
|
|
|
|
params.require(:wizard_id)
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-10-31 08:05:50 +01:00
|
|
|
wizard = @builder.build
|
|
|
|
step = wizard.steps.select { |s| s.id == update_params[:step_id] }.first
|
2017-11-03 06:56:10 +01:00
|
|
|
|
2020-11-06 06:39:26 +01:00
|
|
|
raise Discourse::InvalidParameters.new(:step_id) if !step
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-11-03 01:24:20 +01:00
|
|
|
update = update_params.to_h
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-11-06 06:39:26 +01:00
|
|
|
update[:fields] = {}
|
2017-11-03 06:56:10 +01:00
|
|
|
if params[:fields]
|
2020-11-06 06:39:26 +01:00
|
|
|
field_ids = step.fields.map(&:id)
|
2020-11-03 01:24:20 +01:00
|
|
|
params[:fields].each do |k, v|
|
|
|
|
update[:fields][k] = v if field_ids.include? k
|
|
|
|
end
|
2017-11-03 06:56:10 +01:00
|
|
|
end
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-11-03 01:24:20 +01:00
|
|
|
updater = wizard.create_updater(update[:step_id], update[:fields])
|
2017-09-25 16:47:40 +02:00
|
|
|
updater.update
|
2021-02-24 08:50:42 +01: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?
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2017-09-25 16:47:40 +02:00
|
|
|
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
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-10-31 08:05:50 +01:00
|
|
|
private
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-10-31 08:05:50 +01:00
|
|
|
def ensure_can_update
|
|
|
|
@builder = CustomWizard::Builder.new(
|
|
|
|
update_params[:wizard_id].underscore,
|
|
|
|
current_user
|
|
|
|
)
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-10-31 08:05:50 +01:00
|
|
|
if @builder.nil?
|
|
|
|
raise Discourse::InvalidParameters.new(:wizard_id)
|
|
|
|
end
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-10-31 08:05:50 +01:00
|
|
|
if !@builder.wizard || !@builder.wizard.can_access?
|
|
|
|
raise Discourse::InvalidAccess.new
|
|
|
|
end
|
|
|
|
end
|
2021-02-24 08:50:42 +01:00
|
|
|
|
2020-10-31 08:05:50 +01:00
|
|
|
def update_params
|
|
|
|
params.permit(:wizard_id, :step_id)
|
|
|
|
end
|
2017-09-25 16:47:40 +02:00
|
|
|
end
|