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({
|
export default Ember.Controller.extend({
|
||||||
queryParams: ['reset']
|
queryParams: ['reset']
|
||||||
})
|
});
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -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}}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Laden …
In neuem Issue referenzieren