Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-22 09:20:29 +01:00
Merge pull request #1 from angusmcleod/master
bring my fork up to date
Dieser Commit ist enthalten in:
Commit
d607c5cd08
14 geänderte Dateien mit 81 neuen und 36 gelöschten Zeilen
|
@ -10,4 +10,4 @@ export default Ember.Component.extend({
|
|||
CustomWizard.skip(this.get('wizardId'));
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
export default Ember.Controller.extend({
|
||||
queryParams: ['reset']
|
||||
})
|
||||
});
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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,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,
|
||||
|
|
|
@ -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,6 +1,6 @@
|
|||
<div class='wizard-step-contents'>
|
||||
{{#if step.title}}
|
||||
<h1 class='wizard-step-title'>{{step.title}}</h1>
|
||||
<h1 class='wizard-step-title'>{{cookedTitle}}</h1>
|
||||
{{/if}}
|
||||
|
||||
{{#if step.description}}
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -157,7 +157,12 @@
|
|||
////
|
||||
|
||||
.d-editor {
|
||||
max-height: 250px;
|
||||
min-height: 200px;
|
||||
|
||||
.d-editor-input {
|
||||
resize: vertical;
|
||||
flex: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.d-editor-modal.hidden {
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
@ -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
|
||||
|
|
|
@ -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, :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
|
||||
|
|
Laden …
In neuem Issue referenzieren