1
0
Fork 0

Handle guests on wizard routes

Dieser Commit ist enthalten in:
Angus McLeod 2019-06-19 13:23:10 +08:00
Ursprung 92fb880502
Commit aa7dd16827
10 geänderte Dateien mit 49 neuen und 28 gelöschten Zeilen

Datei anzeigen

@ -1,3 +1,3 @@
export default Ember.Controller.extend({ export default Ember.Controller.extend({
queryParams: ['reset'] queryParams: ['reset']
}) });

Datei anzeigen

@ -37,7 +37,6 @@ export function findCustomWizard(wizardId, opts = {}) {
return ajax({ url, cache: false, dataType: 'json' }).then(result => { return ajax({ url, cache: false, dataType: 'json' }).then(result => {
const wizard = result.wizard; const wizard = result.wizard;
if (!wizard) return null; if (!wizard) return null;
if (!wizard.completed) { if (!wizard.completed) {

Datei anzeigen

@ -16,8 +16,11 @@ export default Ember.Route.extend({
const permitted = model.get('permitted'); const permitted = model.get('permitted');
const minTrust = model.get('min_trust'); const minTrust = model.get('min_trust');
const wizardId = model.get('id'); const wizardId = model.get('id');
const user = model.get('user');
controller.setProperties({ controller.setProperties({
requiresLogin: !user,
user,
completed, completed,
notPermitted: !permitted, notPermitted: !permitted,
minTrust, minTrust,

Datei anzeigen

@ -6,7 +6,7 @@ import { ajax } from 'wizard/lib/ajax';
export default Ember.Route.extend({ export default Ember.Route.extend({
model(params) { model(params) {
let opts = {}; let opts = {};
if (params.reset == 'true') opts['reset'] = true; if (params.reset === 'true') opts['reset'] = true;
return findCustomWizard(params.wizard_id, opts); return findCustomWizard(params.wizard_id, opts);
}, },

Datei anzeigen

@ -1,10 +1,15 @@
{{#if completed}} {{#if noWizard}}
{{wizard-no-access text=(i18n 'wizard.completed') wizardId=wizardId}} {{wizard-no-access text=(i18n 'wizard.none') wizardId=wizardId}}
{{else}} {{else}}
{{#if notPermitted}} {{#if requiresLogin}}
{{wizard-no-access text=(i18n 'wizard.not_permitted' level=minTrust) wizardId=wizardId}} {{wizard-no-access text=(i18n 'wizard.requires_login' level=minTrust) wizardId=wizardId}}
{{/if}} {{else}}
{{#if noWizard}} {{#if notPermitted}}
{{wizard-no-access text=(i18n 'wizard.none') wizardId=wizardId}} {{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}}
{{/if}} {{/if}}

Datei anzeigen

@ -181,6 +181,7 @@ en:
not_permitted: "You need to be trust level {{level}} or higher to access this wizard." not_permitted: "You need to be trust level {{level}} or higher to access this wizard."
none: "There is no wizard here." none: "There is no wizard here."
return_to_site: "Return to {{siteName}}" return_to_site: "Return to {{siteName}}"
requires_login: "You need to be logged in to access this wizard."
wizard_composer: wizard_composer:
show_preview: "Preview Post" show_preview: "Preview Post"

Datei anzeigen

@ -2,7 +2,6 @@ class CustomWizard::WizardController < ::ApplicationController
prepend_view_path(Rails.root.join('plugins', 'discourse-custom-wizard', 'views')) prepend_view_path(Rails.root.join('plugins', 'discourse-custom-wizard', 'views'))
layout 'wizard' layout 'wizard'
requires_login
helper_method :wizard_page_title helper_method :wizard_page_title
helper_method :theme_ids helper_method :theme_ids
@ -22,7 +21,6 @@ class CustomWizard::WizardController < ::ApplicationController
respond_to do |format| respond_to do |format|
format.json do format.json do
builder = CustomWizard::Builder.new(current_user, params[:wizard_id].underscore) builder = CustomWizard::Builder.new(current_user, params[:wizard_id].underscore)
builder_opts = {} builder_opts = {}
builder_opts[:reset] = params[:reset] if params[:reset] builder_opts[:reset] = params[:reset] if params[:reset]
@ -52,19 +50,22 @@ class CustomWizard::WizardController < ::ApplicationController
end end
result = success_json result = success_json
submission = Array.wrap(PluginStore.get("#{wizard_id}_submissions", user.id)).last
if submission && submission['redirect_to'] if user
result.merge!(redirect_to: submission['redirect_to']) submission = Array.wrap(PluginStore.get("#{wizard_id}_submissions", user.id)).last
end
if submission && !wizard.save_submissions if submission && submission['redirect_to']
PluginStore.remove("#{wizard_id}_submissions", user.id) result.merge!(redirect_to: submission['redirect_to'])
end end
if user.custom_fields['redirect_to_wizard'] === wizard_id if submission && !wizard.save_submissions
user.custom_fields.delete('redirect_to_wizard') PluginStore.remove("#{wizard_id}_submissions", user.id)
user.save_custom_fields(true) end
if user.custom_fields['redirect_to_wizard'] === wizard_id
user.custom_fields.delete('redirect_to_wizard')
user.save_custom_fields(true)
end
end end
render json: result render json: result

Datei anzeigen

@ -2,14 +2,16 @@ class CustomWizard::Builder
attr_accessor :wizard, :updater, :submissions attr_accessor :wizard, :updater, :submissions
def initialize(user, wizard_id) def initialize(user=nil, wizard_id)
data = PluginStore.get('custom_wizard', wizard_id) data = PluginStore.get('custom_wizard', wizard_id)
return if data.blank? return if data.blank?
@steps = data['steps'] @steps = data['steps']
@wizard = CustomWizard::Wizard.new(user, data) @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 end
def self.sorted_handlers def self.sorted_handlers

Datei anzeigen

@ -18,7 +18,7 @@ class CustomWizard::Wizard
:required, :required,
:prompt_completion :prompt_completion
def initialize(user, attrs = {}) def initialize(user=nil, attrs = {})
@steps = [] @steps = []
@user = user @user = user
@first_step = nil @first_step = nil
@ -54,6 +54,8 @@ class CustomWizard::Wizard
end end
def start def start
return nil if !@user
if unfinished? && last_completed_step = ::UserHistory.where( if unfinished? && last_completed_step = ::UserHistory.where(
acting_user_id: @user.id, acting_user_id: @user.id,
action: ::UserHistory.actions[:custom_wizard_step], action: ::UserHistory.actions[:custom_wizard_step],
@ -76,6 +78,8 @@ class CustomWizard::Wizard
end end
def unfinished? def unfinished?
return nil if !@user
most_recent = ::UserHistory.where( most_recent = ::UserHistory.where(
acting_user_id: @user.id, acting_user_id: @user.id,
action: ::UserHistory.actions[:custom_wizard_step], action: ::UserHistory.actions[:custom_wizard_step],
@ -94,6 +98,8 @@ class CustomWizard::Wizard
end end
def completed? def completed?
return nil if !@user
steps = CustomWizard::Wizard.step_ids(@id) steps = CustomWizard::Wizard.step_ids(@id)
history = ::UserHistory.where( history = ::UserHistory.where(
@ -112,7 +118,7 @@ class CustomWizard::Wizard
end end
def permitted? 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 end
def reset def reset

Datei anzeigen

@ -64,7 +64,7 @@ class ::Wizard::Step
end end
::WizardSerializer.class_eval do ::WizardSerializer.class_eval do
attributes :id, :background, :completed, :required, :min_trust, :permitted attributes :id, :background, :completed, :required, :min_trust, :permitted, :user
def id def id
object.id object.id
@ -123,6 +123,10 @@ end
def include_required? def include_required?
object.respond_to?(:required) object.respond_to?(:required)
end end
def user
object.user
end
end end
::WizardStepSerializer.class_eval do ::WizardStepSerializer.class_eval do