diff --git a/assets/javascripts/wizard-custom-guest.js b/assets/javascripts/wizard-custom-guest.js new file mode 100644 index 00000000..38a526d5 --- /dev/null +++ b/assets/javascripts/wizard-custom-guest.js @@ -0,0 +1,3 @@ +(function() { + window.location.href = "/login"; +})(); diff --git a/controllers/wizard.rb b/controllers/wizard.rb index e2d5656f..2d384530 100644 --- a/controllers/wizard.rb +++ b/controllers/wizard.rb @@ -4,6 +4,12 @@ class CustomWizard::WizardController < ::ApplicationController helper_method :wizard_page_title helper_method :theme_ids + + before_action :handle_login_redirect, unless: :current_user + + def handle_login_redirect + cookies[:destination_url] = "/w/#{params[:wizard_id]}" + end def wizard CustomWizard::Template.new(PluginStore.get('custom_wizard', params[:wizard_id].underscore)) diff --git a/jobs/clear_after_time_wizard.rb b/jobs/clear_after_time_wizard.rb index 4b53e5b9..ffaa6fa9 100644 --- a/jobs/clear_after_time_wizard.rb +++ b/jobs/clear_after_time_wizard.rb @@ -1,5 +1,5 @@ module Jobs - class ClearAfterTimeWizard < Jobs::Base + class ClearAfterTimeWizard < ::Jobs::Base sidekiq_options queue: 'critical' def execute(args) diff --git a/jobs/refresh_api_access_token.rb b/jobs/refresh_api_access_token.rb index 54f6da55..114c39d1 100644 --- a/jobs/refresh_api_access_token.rb +++ b/jobs/refresh_api_access_token.rb @@ -1,5 +1,5 @@ module Jobs - class RefreshApiAccessToken < Jobs::Base + class RefreshApiAccessToken < ::Jobs::Base def execute(args) CustomWizard::Api::Authorization.get_token(args[:name], refresh: true) end diff --git a/jobs/set_after_time_wizard.rb b/jobs/set_after_time_wizard.rb index e3ec5ee3..76d408d4 100644 --- a/jobs/set_after_time_wizard.rb +++ b/jobs/set_after_time_wizard.rb @@ -1,5 +1,5 @@ module Jobs - class SetAfterTimeWizard < Jobs::Base + class SetAfterTimeWizard < ::Jobs::Base def execute(args) if CustomWizard::Wizard.find(args[:wizard_id]) user_ids = [] diff --git a/lib/builder.rb b/lib/builder.rb index 776687ec..ee29c549 100644 --- a/lib/builder.rb +++ b/lib/builder.rb @@ -53,7 +53,21 @@ class CustomWizard::Builder result end - result.gsub(/w\{(.*?)\}/) { |match| recurse(data, [*$1.split('.')]) } + result = result.gsub(/w\{(.*?)\}/) { |match| recurse(data, [*$1.split('.')]) } + + result.gsub(/v\{(.*?)\}/) do |match| + attrs = $1.split(':') + key = attrs.first + format = attrs.length > 1 ? attrs.last : nil + v = nil + + if key == 'time' + time_format = format.present? ? format : "%B %-d, %Y" + v = Time.now.strftime(time_format) + end + + v + end end def self.recurse(data, keys) @@ -90,7 +104,7 @@ class CustomWizard::Builder end if required_data = step_template['required_data'] - if !@submissions.last && required_data.length + if !@submissions.last && required_data.present? step.permitted = false next end @@ -331,7 +345,7 @@ class CustomWizard::Builder end def standardise_boolean(value) - !!HasCustomFields::Helpers::CUSTOM_FIELD_TRUE.include?(value) + ActiveRecord::Type::Boolean.new.cast(value) end def create_topic(user, action, data) @@ -354,22 +368,10 @@ class CustomWizard::Builder skip_validations: true } - if action['custom_category_enabled'] - if action['custom_category_wizard_field'] - category_id = data[action['category_id']] - elsif action['custom_category_user_field_key'] - if action['custom_category_user_field_key'].include?('custom_fields') - field = action['custom_category_user_field_key'].split('.').last - category_id = user.custom_fields[field] - else - category_id = user.send(action['custom_category_user_field_key']) - end - end - else - category_id = action['category_id'] - end - - params[:category] = category_id + params[:category] = action_category_id(action, data) + + tags = action['tags'] || [] + params[:tags] = tags topic_custom_fields = {} @@ -394,7 +396,7 @@ class CustomWizard::Builder end end else - value = [*value] if key === 'tags' + value = [*value] + tags if key === 'tags' params[key.to_sym] = value end end @@ -550,8 +552,8 @@ class CustomWizard::Builder url += "&body=#{post}" - if action['category_id'] - if category = Category.find(action['category_id']) + if category_id = action_category_id(action, data) + if category = Category.find(category_id) url += "&category=#{category.full_slug('/')}" end end @@ -597,4 +599,21 @@ class CustomWizard::Builder PluginStore.set("#{@wizard.id}_submissions", @wizard.user.id, @submissions) @wizard.reset end + + def action_category_id(action, data) + if action['custom_category_enabled'] + if action['custom_category_wizard_field'] + category_id = data[action['category_id']] + elsif action['custom_category_user_field_key'] + if action['custom_category_user_field_key'].include?('custom_fields') + field = action['custom_category_user_field_key'].split('.').last + user.custom_fields[field] + else + user.send(action['custom_category_user_field_key']) + end + end + else + action['category_id'] + end + end end diff --git a/plugin.rb b/plugin.rb index 9c8b6458..4ce2932e 100644 --- a/plugin.rb +++ b/plugin.rb @@ -15,6 +15,7 @@ config.assets.paths << Rails.root.join('plugins', 'discourse-custom-wizard', 'as if Rails.env.production? config.assets.precompile += %w{ + wizard-custom-guest.js wizard-custom-lib.js wizard-custom.js wizard-plugin.js @@ -36,7 +37,6 @@ end after_initialize do UserHistory.actions[:custom_wizard_step] = 1000 - require_dependency 'application_controller' module ::CustomWizard class Engine < ::Rails::Engine engine_name 'custom_wizard' @@ -137,11 +137,13 @@ after_initialize do @user = user end end - + + require_dependency 'invites_controller' class ::InvitesController prepend InvitesControllerCustomWizard end - + + require_dependency 'application_controller' class ::ApplicationController before_action :redirect_to_wizard_if_required, if: :current_user diff --git a/serializers/api/api_serializer.rb b/serializers/api/api_serializer.rb index 9d7fba70..1fa601a3 100644 --- a/serializers/api/api_serializer.rb +++ b/serializers/api/api_serializer.rb @@ -1,4 +1,4 @@ -class CustomWizard::ApiSerializer < ApplicationSerializer +class CustomWizard::ApiSerializer < ::ApplicationSerializer attributes :name, :title, :authorization, diff --git a/serializers/api/authorization_serializer.rb b/serializers/api/authorization_serializer.rb index 2ca347b5..fe6e7444 100644 --- a/serializers/api/authorization_serializer.rb +++ b/serializers/api/authorization_serializer.rb @@ -1,4 +1,4 @@ -class CustomWizard::Api::AuthorizationSerializer < ApplicationSerializer +class CustomWizard::Api::AuthorizationSerializer < ::ApplicationSerializer attributes :auth_type, :auth_url, :token_url, diff --git a/serializers/api/basic_api_serializer.rb b/serializers/api/basic_api_serializer.rb index d0214d65..5b037650 100644 --- a/serializers/api/basic_api_serializer.rb +++ b/serializers/api/basic_api_serializer.rb @@ -1,4 +1,4 @@ -class CustomWizard::BasicApiSerializer < ApplicationSerializer +class CustomWizard::BasicApiSerializer < ::ApplicationSerializer attributes :name, :title, :endpoints diff --git a/serializers/api/basic_endpoint_serializer.rb b/serializers/api/basic_endpoint_serializer.rb index e2cc2262..63758c48 100644 --- a/serializers/api/basic_endpoint_serializer.rb +++ b/serializers/api/basic_endpoint_serializer.rb @@ -1,4 +1,4 @@ -class CustomWizard::Api::BasicEndpointSerializer < ApplicationSerializer +class CustomWizard::Api::BasicEndpointSerializer < ::ApplicationSerializer attributes :id, :name end diff --git a/serializers/api/endpoint_serializer.rb b/serializers/api/endpoint_serializer.rb index 31d0f975..0430bea3 100644 --- a/serializers/api/endpoint_serializer.rb +++ b/serializers/api/endpoint_serializer.rb @@ -1,4 +1,4 @@ -class CustomWizard::Api::EndpointSerializer < ApplicationSerializer +class CustomWizard::Api::EndpointSerializer < ::ApplicationSerializer attributes :id, :name, :method, diff --git a/serializers/api/log_serializer.rb b/serializers/api/log_serializer.rb index 13ee1555..819185b5 100644 --- a/serializers/api/log_serializer.rb +++ b/serializers/api/log_serializer.rb @@ -1,4 +1,4 @@ -class CustomWizard::Api::LogSerializer < ApplicationSerializer +class CustomWizard::Api::LogSerializer < ::ApplicationSerializer attributes :log_id, :time, :status, diff --git a/views/layouts/wizard.html.erb b/views/layouts/wizard.html.erb index 251d13ed..db15672b 100644 --- a/views/layouts/wizard.html.erb +++ b/views/layouts/wizard.html.erb @@ -40,8 +40,12 @@ <%= raw theme_lookup("body_tag") %> <%- end %> - <%= preload_script 'wizard-custom-start' %> - <%= preload_script 'wizard-raw-templates' %> + <%- if current_user %> + <%= preload_script 'wizard-custom-start' %> + <%= preload_script 'wizard-raw-templates' %> + <%- else %> + <%= preload_script 'wizard-custom-guest' %> + <%- end %>