diff --git a/assets/javascripts/wizard/components/wizard-no-access.js.es6 b/assets/javascripts/wizard/components/wizard-no-access.js.es6
index 83fcc7da..0b222ec1 100644
--- a/assets/javascripts/wizard/components/wizard-no-access.js.es6
+++ b/assets/javascripts/wizard/components/wizard-no-access.js.es6
@@ -10,4 +10,4 @@ export default Ember.Component.extend({
CustomWizard.skip(this.get('wizardId'));
}
}
-})
+});
diff --git a/assets/javascripts/wizard/controllers/custom.js.es6 b/assets/javascripts/wizard/controllers/custom.js.es6
index 9e89a0b0..fc2eb947 100644
--- a/assets/javascripts/wizard/controllers/custom.js.es6
+++ b/assets/javascripts/wizard/controllers/custom.js.es6
@@ -1,3 +1,3 @@
export default Ember.Controller.extend({
queryParams: ['reset']
-})
+});
diff --git a/assets/javascripts/wizard/initializers/custom.js.es6 b/assets/javascripts/wizard/initializers/custom.js.es6
index c426514e..225f1f0f 100644
--- a/assets/javascripts/wizard/initializers/custom.js.es6
+++ b/assets/javascripts/wizard/initializers/custom.js.es6
@@ -71,6 +71,10 @@ export default {
return index === 0 && !required;
}.property('step.index', 'wizard.required'),
+ cookedTitle: function() {
+ return cook(this.get('step.title'));
+ }.property('step.title'),
+
cookedDescription: function() {
return cook(this.get('step.description'));
}.property('step.description'),
diff --git a/assets/javascripts/wizard/models/custom.js.es6 b/assets/javascripts/wizard/models/custom.js.es6
index 90bd8985..089d12c8 100644
--- a/assets/javascripts/wizard/models/custom.js.es6
+++ b/assets/javascripts/wizard/models/custom.js.es6
@@ -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) {
diff --git a/assets/javascripts/wizard/routes/custom-index.js.es6 b/assets/javascripts/wizard/routes/custom-index.js.es6
index 5e7a2914..c857753d 100644
--- a/assets/javascripts/wizard/routes/custom-index.js.es6
+++ b/assets/javascripts/wizard/routes/custom-index.js.es6
@@ -16,8 +16,13 @@ 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');
+ const name = model.get('name');
controller.setProperties({
+ requiresLogin: !user,
+ user,
+ name,
completed,
notPermitted: !permitted,
minTrust,
diff --git a/assets/javascripts/wizard/routes/custom.js.es6 b/assets/javascripts/wizard/routes/custom.js.es6
index dcdfbcb7..0fd8e627 100644
--- a/assets/javascripts/wizard/routes/custom.js.es6
+++ b/assets/javascripts/wizard/routes/custom.js.es6
@@ -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);
},
diff --git a/assets/javascripts/wizard/templates/components/wizard-step.hbs b/assets/javascripts/wizard/templates/components/wizard-step.hbs
index 41cc336a..ae793060 100644
--- a/assets/javascripts/wizard/templates/components/wizard-step.hbs
+++ b/assets/javascripts/wizard/templates/components/wizard-step.hbs
@@ -1,6 +1,6 @@
{{#if step.title}}
-
{{step.title}}
+ {{cookedTitle}}
{{/if}}
{{#if step.description}}
diff --git a/assets/javascripts/wizard/templates/custom.index.hbs b/assets/javascripts/wizard/templates/custom.index.hbs
index 8c1a48ae..f6ac1df5 100644
--- a/assets/javascripts/wizard/templates/custom.index.hbs
+++ b/assets/javascripts/wizard/templates/custom.index.hbs
@@ -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' name=name) wizardId=wizardId}}
+ {{else}}
+ {{#if notPermitted}}
+ {{wizard-no-access text=(i18n 'wizard.not_permitted' name=name level=minTrust) wizardId=wizardId}}
+ {{else}}
+ {{#if completed}}
+ {{wizard-no-access text=(i18n 'wizard.completed' name=name) wizardId=wizardId}}
+ {{/if}}
+ {{/if}}
{{/if}}
{{/if}}
diff --git a/assets/stylesheets/wizard/wizard_composer.scss b/assets/stylesheets/wizard/wizard_composer.scss
index 14b115ce..fa8c8a62 100644
--- a/assets/stylesheets/wizard/wizard_composer.scss
+++ b/assets/stylesheets/wizard/wizard_composer.scss
@@ -157,7 +157,12 @@
////
.d-editor {
- max-height: 250px;
+ min-height: 200px;
+
+ .d-editor-input {
+ resize: vertical;
+ flex: initial;
+ }
}
.d-editor-modal.hidden {
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 653be688..84e5bd06 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -177,10 +177,11 @@ en:
filter_placeholder: "Search..."
wizard:
- completed: "You have completed this wizard."
- not_permitted: "You need to be trust level {{level}} or higher to access this wizard."
+ completed: "You have completed the {{name}} wizard."
+ not_permitted: "You need to be trust level {{level}} or higher to access the {{name}} wizard."
none: "There is no wizard here."
return_to_site: "Return to {{siteName}}"
+ requires_login: "You need to be logged in to access the {{name}} wizard."
wizard_composer:
show_preview: "Preview Post"
diff --git a/controllers/wizard.rb b/controllers/wizard.rb
index 3235209c..e9e08637 100644
--- a/controllers/wizard.rb
+++ b/controllers/wizard.rb
@@ -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
diff --git a/lib/builder.rb b/lib/builder.rb
index ad4ef53a..0e5c4fb1 100644
--- a/lib/builder.rb
+++ b/lib/builder.rb
@@ -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
@@ -227,7 +229,11 @@ class CustomWizard::Builder
def validate_field(field, updater, step_template)
value = updater.fields[field['id']]
- min_length = field['min_length']
+ min_length = false
+
+ if is_text_type(field)
+ min_length = field['min_length']
+ end
if min_length && value.is_a?(String) && value.strip.length < min_length.to_i
label = field['label'] || I18n.t("#{field['key']}.label")
@@ -246,6 +252,10 @@ class CustomWizard::Builder
end
end
+ def is_text_type(field)
+ ['text', 'textarea'].include? field['type']
+ end
+
def standardise_boolean(value)
!!HasCustomFields::Helpers::CUSTOM_FIELD_TRUE.include?(value)
end
@@ -309,6 +319,7 @@ class CustomWizard::Builder
end
end
else
+ value = [value] if key === 'tags'
params[key.to_sym] = value
end
end
diff --git a/lib/wizard.rb b/lib/wizard.rb
index e98b933a..b47d68f1 100644
--- a/lib/wizard.rb
+++ b/lib/wizard.rb
@@ -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
diff --git a/lib/wizard_edits.rb b/lib/wizard_edits.rb
index 4a24afd3..ad4f8ef7 100644
--- a/lib/wizard_edits.rb
+++ b/lib/wizard_edits.rb
@@ -64,7 +64,7 @@ class ::Wizard::Step
end
::WizardSerializer.class_eval do
- attributes :id, :background, :completed, :required, :min_trust, :permitted
+ attributes :id, :name, :background, :completed, :required, :min_trust, :permitted, :user
def id
object.id
@@ -74,6 +74,10 @@ end
object.respond_to?(:id)
end
+ def name
+ object.name
+ end
+
def background
object.background
end
@@ -123,12 +127,16 @@ end
def include_required?
object.respond_to?(:required)
end
+
+ def user
+ object.user
+ end
end
::WizardStepSerializer.class_eval do
def title
- return object.title if object.title
- I18n.t("#{object.key || i18n_key}.title", default: '')
+ return PrettyText.cook(object.title) if object.title
+ PrettyText.cook(I18n.t("#{object.key || i18n_key}.title", default: ''))
end
def description