discourse/app/controllers/admin/form_templates_controller.rb
Loïc Guitaut 2501c6cd1c
FIX: Form templates page returning 500 error (#39799)
The `enable_form_templates` site setting was recently demoted from an
upcoming change to a regular site setting, but the controllers were
still gating access through `UpcomingChanges.enabled_for_user?`. Without
the upcoming change metadata, that path crashed with `NoMethodError
(undefined method '>=' for nil)` whenever the setting sat at its default
value, taking the admin Form Templates page down with it.

Switch the two controllers to a plain
`SiteSetting.enable_form_templates` check, and drop the redundant
`before` hooks from the request specs so they actually exercise the
default-value path that broke in production.
2026-05-06 18:53:52 +02:00

78 lines
2 KiB
Ruby

# frozen_string_literal: true
class Admin::FormTemplatesController < Admin::StaffController
before_action :ensure_form_templates_enabled
def index
form_templates = FormTemplate.all.order(:id)
render_serialized(form_templates, AdminFormTemplateSerializer, root: "form_templates")
end
def new
end
def preview
params.require(:name)
params.require(:template)
if params[:id].present?
template = FormTemplate.find(params[:id])
template.assign_attributes(name: params[:name], template: params[:template])
else
template = FormTemplate.new(name: params[:name], template: params[:template])
end
begin
template.validate!
template.process!(guardian)
render_serialized(template, FormTemplateSerializer, root: "form_template")
rescue FormTemplate::NotAllowed => err
render_json_error(err.message)
end
end
def create
params.require(:name)
params.require(:template)
begin
template = FormTemplate.create!(name: params[:name], template: params[:template])
render_serialized(template, AdminFormTemplateSerializer, root: "form_template")
rescue FormTemplate::NotAllowed => err
render_json_error(err.message)
end
end
def show
template = FormTemplate.find(params[:id])
render_serialized(template, AdminFormTemplateSerializer, root: "form_template")
end
def edit
FormTemplate.find(params[:id])
end
def update
template = FormTemplate.find(params[:id])
begin
template.update!(name: params[:name], template: params[:template])
render_serialized(template, AdminFormTemplateSerializer, root: "form_template")
rescue FormTemplate::NotAllowed => err
render_json_error(err.message)
end
end
def destroy
template = FormTemplate.find(params[:id])
template.destroy!
render json: success_json
end
private
def ensure_form_templates_enabled
raise Discourse::InvalidAccess.new unless SiteSetting.enable_form_templates
end
end