11# frozen_string_literal: true
2- class CustomWizard ::WizardController < ::ApplicationController
3- include ApplicationHelper
4- prepend_view_path ( Rails . root . join ( 'plugins' , 'discourse-custom-wizard' , 'app' , 'views' ) )
5- layout 'wizard'
2+ class CustomWizard ::WizardController < ::ActionController ::Base
3+ helper ApplicationHelper
64
5+ include CurrentUser
6+ include CanonicalURL ::ControllerExtensions
7+ include GlobalPath
8+
9+ prepend_view_path ( Rails . root . join ( 'plugins' , 'discourse-custom-wizard' , 'views' ) )
10+ layout :set_wizard_layout
11+
12+ before_action :preload_wizard_json
713 before_action :ensure_plugin_enabled
814 before_action :ensure_logged_in , only : [ :skip ]
15+
916 helper_method :wizard_page_title
1017 helper_method :wizard_theme_id
1118 helper_method :wizard_theme_lookup
1219 helper_method :wizard_theme_translations_lookup
1320
14- def wizard
15- @builder = CustomWizard ::Builder . new ( params [ :wizard_id ] . underscore , current_user )
16- @wizard ||= @builder . build
17- @wizard
18- end
19-
20- def wizard_page_title
21- wizard ? ( wizard . name || wizard . id ) : I18n . t ( 'wizard.custom_title' )
22- end
23-
24- def wizard_theme_id
25- wizard ? wizard . theme_id : nil
26- end
27-
28- def wizard_theme_lookup ( name )
29- Theme . lookup_field ( wizard_theme_id , mobile_view? ? :mobile : :desktop , name )
30- end
31-
32- def wizard_theme_translations_lookup
33- Theme . lookup_field ( wizard_theme_id , :translations , I18n . locale )
21+ def set_wizard_layout
22+ action_name === 'qunit' ? 'qunit' : 'wizard'
3423 end
3524
3625 def index
3726 respond_to do |format |
3827 format . json do
39- builder = CustomWizard ::Builder . new ( params [ :wizard_id ] . underscore , current_user )
40-
41- if builder . wizard . present?
42- builder_opts = { }
43- builder_opts [ :reset ] = params [ :reset ]
44- built_wizard = builder . build ( builder_opts , params )
45-
46- render_serialized ( built_wizard , ::CustomWizard ::WizardSerializer , root : false )
28+ if wizard . present?
29+ render json : CustomWizard ::WizardSerializer . new ( wizard , scope : guardian , root : false ) . as_json , status : 200
4730 else
4831 render json : { error : I18n . t ( 'wizard.none' ) }
4932 end
5033 end
51- format . html { }
34+ format . html do
35+ render "default/empty"
36+ end
5237 end
5338 end
5439
@@ -62,8 +47,10 @@ def skip
6247 result = success_json
6348
6449 if current_user && wizard . can_access?
65- if redirect_to = wizard . current_submission &.redirect_to
66- result . merge! ( redirect_to : redirect_to )
50+ submission = wizard . current_submission
51+
52+ if submission . present? && submission . redirect_to
53+ result . merge! ( redirect_to : submission . redirect_to )
6754 end
6855
6956 wizard . cleanup_on_skip!
@@ -72,6 +59,64 @@ def skip
7259 render json : result
7360 end
7461
62+ def qunit
63+ raise Discourse ::InvalidAccess . new if Rails . env . production?
64+
65+ respond_to do |format |
66+ format . html do
67+ render "default/empty"
68+ end
69+ end
70+ end
71+
72+ protected
73+
74+ def ensure_logged_in
75+ raise Discourse ::NotLoggedIn . new unless current_user . present?
76+ end
77+
78+ def guardian
79+ @guardian ||= Guardian . new ( current_user , request )
80+ end
81+
82+ def wizard
83+ @wizard ||= begin
84+ builder = CustomWizard ::Builder . new ( params [ :wizard_id ] . underscore , current_user )
85+ return nil unless builder . present?
86+ opts = { }
87+ opts [ :reset ] = params [ :reset ]
88+ builder . build ( opts , params )
89+ end
90+ end
91+
92+ def wizard_page_title
93+ wizard ? ( wizard . name || wizard . id ) : I18n . t ( 'wizard.custom_title' )
94+ end
95+
96+ def wizard_theme_id
97+ wizard ? wizard . theme_id : nil
98+ end
99+
100+ def wizard_theme_lookup ( name )
101+ Theme . lookup_field ( wizard_theme_id , view_context . mobile_view? ? :mobile : :desktop , name )
102+ end
103+
104+ def wizard_theme_translations_lookup
105+ Theme . lookup_field ( wizard_theme_id , :translations , I18n . locale )
106+ end
107+
108+ def preload_wizard_json
109+ return if request . xhr? || request . format . json?
110+ return if request . method != "GET"
111+
112+ store_preloaded ( "siteSettings" , SiteSetting . client_settings_json )
113+ end
114+
115+ def store_preloaded ( key , json )
116+ @preloaded ||= { }
117+ @preloaded [ key ] = json . gsub ( "</" , "<\\ /" )
118+ end
119+
75120 private
76121
77122 def ensure_plugin_enabled
0 commit comments