Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-22 09:20:29 +01:00
Handle guests on wizard routes
Dieser Commit ist enthalten in:
Ursprung
92fb880502
Commit
aa7dd16827
10 geänderte Dateien mit 49 neuen und 28 gelöschten Zeilen
|
@ -1,3 +1,3 @@
|
|||
export default Ember.Controller.extend({
|
||||
queryParams: ['reset']
|
||||
})
|
||||
});
|
||||
|
|
|
@ -37,7 +37,6 @@ export function findCustomWizard(wizardId, opts = {}) {
|
|||
|
||||
return ajax({ url, cache: false, dataType: 'json' }).then(result => {
|
||||
const wizard = result.wizard;
|
||||
|
||||
if (!wizard) return null;
|
||||
|
||||
if (!wizard.completed) {
|
||||
|
|
|
@ -16,8 +16,11 @@ export default Ember.Route.extend({
|
|||
const permitted = model.get('permitted');
|
||||
const minTrust = model.get('min_trust');
|
||||
const wizardId = model.get('id');
|
||||
const user = model.get('user');
|
||||
|
||||
controller.setProperties({
|
||||
requiresLogin: !user,
|
||||
user,
|
||||
completed,
|
||||
notPermitted: !permitted,
|
||||
minTrust,
|
||||
|
|
|
@ -6,7 +6,7 @@ import { ajax } from 'wizard/lib/ajax';
|
|||
export default Ember.Route.extend({
|
||||
model(params) {
|
||||
let opts = {};
|
||||
if (params.reset == 'true') opts['reset'] = true;
|
||||
if (params.reset === 'true') opts['reset'] = true;
|
||||
return findCustomWizard(params.wizard_id, opts);
|
||||
},
|
||||
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
{{#if completed}}
|
||||
{{wizard-no-access text=(i18n 'wizard.completed') wizardId=wizardId}}
|
||||
{{#if noWizard}}
|
||||
{{wizard-no-access text=(i18n 'wizard.none') wizardId=wizardId}}
|
||||
{{else}}
|
||||
{{#if notPermitted}}
|
||||
{{wizard-no-access text=(i18n 'wizard.not_permitted' level=minTrust) wizardId=wizardId}}
|
||||
{{/if}}
|
||||
{{#if noWizard}}
|
||||
{{wizard-no-access text=(i18n 'wizard.none') wizardId=wizardId}}
|
||||
{{#if requiresLogin}}
|
||||
{{wizard-no-access text=(i18n 'wizard.requires_login' level=minTrust) wizardId=wizardId}}
|
||||
{{else}}
|
||||
{{#if notPermitted}}
|
||||
{{wizard-no-access text=(i18n 'wizard.not_permitted' level=minTrust) wizardId=wizardId}}
|
||||
{{else}}
|
||||
{{#if completed}}
|
||||
{{wizard-no-access text=(i18n 'wizard.completed') wizardId=wizardId}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
|
|
@ -181,6 +181,7 @@ en:
|
|||
not_permitted: "You need to be trust level {{level}} or higher to access this wizard."
|
||||
none: "There is no wizard here."
|
||||
return_to_site: "Return to {{siteName}}"
|
||||
requires_login: "You need to be logged in to access this wizard."
|
||||
|
||||
wizard_composer:
|
||||
show_preview: "Preview Post"
|
||||
|
|
|
@ -2,7 +2,6 @@ class CustomWizard::WizardController < ::ApplicationController
|
|||
prepend_view_path(Rails.root.join('plugins', 'discourse-custom-wizard', 'views'))
|
||||
layout 'wizard'
|
||||
|
||||
requires_login
|
||||
helper_method :wizard_page_title
|
||||
helper_method :theme_ids
|
||||
|
||||
|
@ -22,7 +21,6 @@ class CustomWizard::WizardController < ::ApplicationController
|
|||
respond_to do |format|
|
||||
format.json do
|
||||
builder = CustomWizard::Builder.new(current_user, params[:wizard_id].underscore)
|
||||
|
||||
builder_opts = {}
|
||||
builder_opts[:reset] = params[:reset] if params[:reset]
|
||||
|
||||
|
@ -52,19 +50,22 @@ class CustomWizard::WizardController < ::ApplicationController
|
|||
end
|
||||
|
||||
result = success_json
|
||||
submission = Array.wrap(PluginStore.get("#{wizard_id}_submissions", user.id)).last
|
||||
|
||||
if submission && submission['redirect_to']
|
||||
result.merge!(redirect_to: submission['redirect_to'])
|
||||
end
|
||||
if user
|
||||
submission = Array.wrap(PluginStore.get("#{wizard_id}_submissions", user.id)).last
|
||||
|
||||
if submission && !wizard.save_submissions
|
||||
PluginStore.remove("#{wizard_id}_submissions", user.id)
|
||||
end
|
||||
if submission && submission['redirect_to']
|
||||
result.merge!(redirect_to: submission['redirect_to'])
|
||||
end
|
||||
|
||||
if user.custom_fields['redirect_to_wizard'] === wizard_id
|
||||
user.custom_fields.delete('redirect_to_wizard')
|
||||
user.save_custom_fields(true)
|
||||
if submission && !wizard.save_submissions
|
||||
PluginStore.remove("#{wizard_id}_submissions", user.id)
|
||||
end
|
||||
|
||||
if user.custom_fields['redirect_to_wizard'] === wizard_id
|
||||
user.custom_fields.delete('redirect_to_wizard')
|
||||
user.save_custom_fields(true)
|
||||
end
|
||||
end
|
||||
|
||||
render json: result
|
||||
|
|
|
@ -2,14 +2,16 @@ class CustomWizard::Builder
|
|||
|
||||
attr_accessor :wizard, :updater, :submissions
|
||||
|
||||
def initialize(user, wizard_id)
|
||||
def initialize(user=nil, wizard_id)
|
||||
data = PluginStore.get('custom_wizard', wizard_id)
|
||||
|
||||
return if data.blank?
|
||||
|
||||
@steps = data['steps']
|
||||
@wizard = CustomWizard::Wizard.new(user, data)
|
||||
@submissions = Array.wrap(PluginStore.get("#{wizard_id}_submissions", user.id))
|
||||
|
||||
if user
|
||||
@submissions = Array.wrap(PluginStore.get("#{wizard_id}_submissions", user.id))
|
||||
end
|
||||
end
|
||||
|
||||
def self.sorted_handlers
|
||||
|
|
|
@ -18,7 +18,7 @@ class CustomWizard::Wizard
|
|||
:required,
|
||||
:prompt_completion
|
||||
|
||||
def initialize(user, attrs = {})
|
||||
def initialize(user=nil, attrs = {})
|
||||
@steps = []
|
||||
@user = user
|
||||
@first_step = nil
|
||||
|
@ -54,6 +54,8 @@ class CustomWizard::Wizard
|
|||
end
|
||||
|
||||
def start
|
||||
return nil if !@user
|
||||
|
||||
if unfinished? && last_completed_step = ::UserHistory.where(
|
||||
acting_user_id: @user.id,
|
||||
action: ::UserHistory.actions[:custom_wizard_step],
|
||||
|
@ -76,6 +78,8 @@ class CustomWizard::Wizard
|
|||
end
|
||||
|
||||
def unfinished?
|
||||
return nil if !@user
|
||||
|
||||
most_recent = ::UserHistory.where(
|
||||
acting_user_id: @user.id,
|
||||
action: ::UserHistory.actions[:custom_wizard_step],
|
||||
|
@ -94,6 +98,8 @@ class CustomWizard::Wizard
|
|||
end
|
||||
|
||||
def completed?
|
||||
return nil if !@user
|
||||
|
||||
steps = CustomWizard::Wizard.step_ids(@id)
|
||||
|
||||
history = ::UserHistory.where(
|
||||
|
@ -112,7 +118,7 @@ class CustomWizard::Wizard
|
|||
end
|
||||
|
||||
def permitted?
|
||||
user.staff? || user.trust_level.to_i >= min_trust.to_i
|
||||
user && (user.staff? || user.trust_level.to_i >= min_trust.to_i)
|
||||
end
|
||||
|
||||
def reset
|
||||
|
|
|
@ -64,7 +64,7 @@ class ::Wizard::Step
|
|||
end
|
||||
|
||||
::WizardSerializer.class_eval do
|
||||
attributes :id, :background, :completed, :required, :min_trust, :permitted
|
||||
attributes :id, :background, :completed, :required, :min_trust, :permitted, :user
|
||||
|
||||
def id
|
||||
object.id
|
||||
|
@ -123,6 +123,10 @@ end
|
|||
def include_required?
|
||||
object.respond_to?(:required)
|
||||
end
|
||||
|
||||
def user
|
||||
object.user
|
||||
end
|
||||
end
|
||||
|
||||
::WizardStepSerializer.class_eval do
|
||||
|
|
Laden …
In neuem Issue referenzieren