0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-09 20:02:54 +01:00

Merge pull request #1 from angusmcleod/master

bring my fork up to date
Dieser Commit ist enthalten in:
Sadie Parker 2019-06-25 10:34:12 +09:30 committet von GitHub
Commit d607c5cd08
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
14 geänderte Dateien mit 81 neuen und 36 gelöschten Zeilen

Datei anzeigen

@ -10,4 +10,4 @@ export default Ember.Component.extend({
CustomWizard.skip(this.get('wizardId'));
}
}
})
});

Datei anzeigen

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

Datei anzeigen

@ -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'),

Datei anzeigen

@ -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) {

Datei anzeigen

@ -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,

Datei anzeigen

@ -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);
},

Datei anzeigen

@ -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}}

Datei anzeigen

@ -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}}

Datei anzeigen

@ -157,7 +157,12 @@
////
.d-editor {
max-height: 250px;
min-height: 200px;
.d-editor-input {
resize: vertical;
flex: initial;
}
}
.d-editor-modal.hidden {

Datei anzeigen

@ -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"

Datei anzeigen

@ -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

Datei anzeigen

@ -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

Datei anzeigen

@ -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

Datei anzeigen

@ -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