diff --git a/assets/javascripts/wizard/templates/custom.index.hbs b/assets/javascripts/wizard/templates/custom.index.hbs index 19b2ca4a..8c1a48ae 100644 --- a/assets/javascripts/wizard/templates/custom.index.hbs +++ b/assets/javascripts/wizard/templates/custom.index.hbs @@ -2,7 +2,7 @@ {{wizard-no-access text=(i18n 'wizard.completed') wizardId=wizardId}} {{else}} {{#if notPermitted}} - {{wizard-no-access text=(i18n 'wizard.completed' level=minTrust) wizardId=wizardId}} + {{wizard-no-access text=(i18n 'wizard.not_permitted' level=minTrust) wizardId=wizardId}} {{/if}} {{#if noWizard}} {{wizard-no-access text=(i18n 'wizard.none') wizardId=wizardId}} diff --git a/controllers/wizard.rb b/controllers/wizard.rb index 0687c312..4595fc09 100644 --- a/controllers/wizard.rb +++ b/controllers/wizard.rb @@ -41,8 +41,8 @@ class CustomWizard::WizardController < ::ApplicationController wizard_id = params[:wizard_id] user = current_user - wizard_data = PluginStore.get('custom_wizard', wizard_id.underscore) - wizard = CustomWizard::Wizard.new(user, wizard_data) + wizard_template = PluginStore.get('custom_wizard', wizard_id.underscore) + wizard = CustomWizard::Wizard.new(user, wizard_template) if wizard.required && !wizard.completed? && wizard.permitted? return render json: { error: I18n.t('wizard.no_skip') } diff --git a/jobs/set_after_time_wizard.rb b/jobs/set_after_time_wizard.rb index 5d15a831..e3ec5ee3 100644 --- a/jobs/set_after_time_wizard.rb +++ b/jobs/set_after_time_wizard.rb @@ -3,11 +3,13 @@ module Jobs def execute(args) if CustomWizard::Wizard.find(args[:wizard_id]) user_ids = [] - User.human_users.each do |u| - u.custom_fields['redirect_to_wizard'] = args[:wizard_id] - u.save_custom_fields(true) - user_ids.push(u.id) + + User.human_users.each do |user| + if CustomWizard::Wizard.set_wizard_redirect(user, args[:wizard_id]) + user_ids.push(user.id) + end end + MessageBus.publish "/redirect_to_wizard", args[:wizard_id], user_ids: user_ids end end diff --git a/lib/wizard.rb b/lib/wizard.rb index 953d9f51..948d2af2 100644 --- a/lib/wizard.rb +++ b/lib/wizard.rb @@ -168,10 +168,25 @@ class CustomWizard::Wizard end def self.find(wizard_id) - PluginStoreRow.find_by(plugin_name: 'custom_wizard', key: wizard_id) + PluginStore.get('custom_wizard', wizard_id) end - def self.set_redirect(user, wizard_id, url) + def self.create(user, wizard_id) + CustomWizard::Wizard.new(user, self.find(wizard_id).to_h) + end + + def self.set_submission_redirect(user, wizard_id, url) PluginStore.set("#{wizard_id.underscore}_submissions", user.id, [{ redirect_to: url }]) end + + def self.set_wizard_redirect(user, wizard_id) + wizard = CustomWizard::Wizard.create(user, wizard_id) + + if wizard.permitted? + user.custom_fields['redirect_to_wizard'] = wizard_id + user.save_custom_fields(true) + else + false + end + end end diff --git a/lib/wizard_edits.rb b/lib/wizard_edits.rb index 5e9f0b3e..47095925 100644 --- a/lib/wizard_edits.rb +++ b/lib/wizard_edits.rb @@ -7,27 +7,17 @@ require_dependency 'wizard/step' wizard_result = self.new(user).requires_completion? return wizard_result if wizard_result - custom_redirect = nil + custom_redirect = false if user && wizard_id = CustomWizard::Wizard.after_signup - custom_redirect = wizard_id + wizard = CustomWizard::Wizard.create(user, wizard_id) - wizard = CustomWizard::Wizard.new(user, id: wizard_id) - - data = PluginStore.get('custom_wizard', wizard_id) - - if data['required'] - user.custom_fields['redirect_to_wizard'] = wizard_id - user.save_custom_fields(true) - end - - if CustomWizard::Wizard.new(user, id: wizard_id).completed? - custom_redirect = nil + if !wizard.completed? && wizard.permitted? + custom_redirect = true + CustomWizard::Wizard.set_wizard_redirect(user, wizard_id) end end - $redis.set('custom_wizard_redirect', custom_redirect) - !!custom_redirect end end diff --git a/plugin.rb b/plugin.rb index addcc313..6dcca0b7 100644 --- a/plugin.rb +++ b/plugin.rb @@ -75,7 +75,7 @@ after_initialize do ::UsersController.class_eval do def wizard_path - if custom_wizard_redirect = $redis.get('custom_wizard_redirect') + if custom_wizard_redirect = current_user.custom_fields['redirect_to_wizard'] "#{Discourse.base_url}/w/#{custom_wizard_redirect.dasherize}" else "#{Discourse.base_url}/wizard" @@ -86,10 +86,10 @@ after_initialize do module InvitesControllerCustomWizard def path(url) if Wizard.user_requires_completion?(@user) - wizard_id = $redis.get('custom_wizard_redirect') + wizard_id = @user.custom_fields['custom_wizard_redirect'] if wizard_id && url != '/' - CustomWizard::Wizard.set_redirect(@user, wizard_id, url) + CustomWizard::Wizard.set_submission_redirect(@user, wizard_id, url) url = "/w/#{wizard_id.dasherize}" end end @@ -111,16 +111,16 @@ after_initialize do before_action :redirect_to_wizard_if_required, if: :current_user def redirect_to_wizard_if_required - @wizard_id ||= current_user.custom_fields['redirect_to_wizard'] + wizard_id = current_user.custom_fields['redirect_to_wizard'] @excluded_routes ||= SiteSetting.wizard_redirect_exclude_paths.split('|') + ['/w/'] url = request.referer || request.original_url - if request.format === 'text/html' && !@excluded_routes.any? { |str| /#{str}/ =~ url } && @wizard_id + if request.format === 'text/html' && !@excluded_routes.any? { |str| /#{str}/ =~ url } && wizard_id if request.referer !~ /\/w\// && request.referer !~ /\/invites\// - CustomWizard::Wizard.set_redirect(current_user, @wizard_id, request.referer) + CustomWizard::Wizard.set_submission_redirect(current_user, wizard_id, request.referer) end - redirect_to "/w/#{@wizard_id.dasherize}" + redirect_to "/w/#{wizard_id.dasherize}" end end end @@ -148,8 +148,7 @@ after_initialize do DiscourseEvent.on(:user_approved) do |user| if wizard_id = CustomWizard::Wizard.after_signup - user.custom_fields['redirect_to_wizard'] = wizard_id - user.save_custom_fields(true) + CustomWizard::Wizard.set_wizard_redirect(user, wizard_id) end end