0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-22 01:10:28 +01:00
Dieser Commit ist enthalten in:
Angus McLeod 2020-04-14 09:39:21 +10:00
Ursprung ab18769820
Commit 92e61f3f51
10 geänderte Dateien mit 74 neuen und 86 gelöschten Zeilen

Datei anzeigen

@ -18,7 +18,7 @@ export default DiscourseRoute.extend({
}
},
setupController(controller, model) {
setupController(controller, model) {
const parentModel = this.modelFor('adminWizardsWizard');
const wizard = CustomWizard.create((!model || model.create) ? {} : model);

Datei anzeigen

@ -6,7 +6,7 @@ import { ajax } from 'discourse/lib/ajax';
export default DiscourseRoute.extend({
model() {
return ajax(`/admin/wizards/wizard`);
return ajax("/admin/wizards/wizard");
},
afterModel(model) {
@ -52,14 +52,20 @@ export default DiscourseRoute.extend({
});
},
currentWizard() {
const params = this.paramsFor('adminWizardsWizardShow');
if (params && params.wizardId) {
return params.wizardId;
} else {
return null;
}
},
setupController(controller, model) {
let props = {
wizardList: model.wizard_list
}
const params = this.paramsFor('adminWizardsWizardShow');
if (params && params.wizardId) {
props.wizardId = params.wizardId;
wizardList: model.wizard_list,
wizardId: this.currentWizard()
}
controller.setProperties(props);

Datei anzeigen

@ -80,7 +80,7 @@
</div>
<div class="setting-value">
{{input value=field.file_types}}
{{input value=field.file_types class="medium"}}
</div>
</div>
{{/if}}
@ -156,7 +156,7 @@
{{input
name="key"
value=field.key
class="small"
class="medium"
placeholderKey="admin.wizard.translation_placeholder"}}
</div>
</div>

Datei anzeigen

@ -14,6 +14,12 @@
padding: 10px;
display: flex;
justify-content: space-between;
.wizard-message {
.d-icon {
margin-right: 4px;
}
}
}
.admin-wizard-container {
@ -178,6 +184,10 @@
margin-bottom: 0;
}
input[type="number"] {
margin-bottom: 0;
}
input[disabled] {
background-color: $primary-low;
cursor: not-allowed;

Datei anzeigen

@ -13,7 +13,7 @@ en:
name: "Name"
name_placeholder: "wizard name"
background: "Background"
background_placeholder: "color"
background_placeholder: "#hex"
save_submissions: "Save"
save_submissions_label: "Save wizard submissions."
multiple_submissions: "Multiple"
@ -105,6 +105,7 @@ en:
invalid: "{{property}} is invalid"
dependent: "{{property}} is dependent on {{dependent}}"
conflict: "{{type}} with {{property}} '{{value}}' already exists"
after_time: "After time invalid"
step:
header: "Steps"

Datei anzeigen

@ -29,16 +29,14 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
def save
opts = {}
opts[:create] = params[:create] if params[:create]
validator = CustomWizard::Validator.new(save_wizard_params.to_h, opts)
validation = validator.perform
if validation[:error]
render json: { error: validation[:error] }
else
params = validation[:wizard]
if wizard_id = CustomWizard::Wizard.save(params)
else
if wizard_id = CustomWizard::Wizard.save(validation[:wizard])
render json: success_json.merge(wizard_id: wizard_id)
else
render json: failed_json
@ -116,10 +114,9 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
:code,
:skip_redirect,
:url,
:post,
:post_template,
title: mapped_params,
post: mapped_params,
post_builder: mapped_params,
post_template: mapped_params,
category: mapped_params,
tags: mapped_params,
custom_fields: mapped_params,

Datei anzeigen

@ -69,7 +69,6 @@ class CustomWizard::Builder
if (required_data = step_template['required_data']).present?
has_required_data = true
pairs =
required_data.each do |required|
required['pairs'].each do |pair|
@ -122,7 +121,7 @@ class CustomWizard::Builder
validate_field(field, updater, step_template) if field['type'] != 'text_only'
end
end
next if updater.errors.any?
CustomWizard::Builder.step_handlers.each do |handler|
@ -274,36 +273,31 @@ class CustomWizard::Builder
def validate_field(field, updater, step_template)
value = updater.fields[field['id']]
min_length = false
label = field['label'] || I18n.t("#{field['key']}.label")
if field['required'] && !value
updater.errors.add(field['id'].to_s, I18n.t('wizard.field.required', label: label))
end
if is_text_type(field)
min_length = field['min_length']
label = field['label'] || I18n.t("#{field['key']}.label")
type = field['type']
required = field['required']
id = field['id'].to_s
min_length = field['min_length'] if is_text_type(field)
if required && !value
updater.errors.add(id, I18n.t('wizard.field.required', label: label))
end
if min_length && value.is_a?(String) && value.strip.length < min_length.to_i
updater.errors.add(
field['id'].to_s,
I18n.t('wizard.field.too_short', label: label, min: min_length.to_i)
)
updater.errors.add(id, I18n.t('wizard.field.too_short', label: label, min: min_length.to_i))
end
if is_url_type(field)
if !check_if_url(value)
updater.errors.add(field['id'].to_s, I18n.t('wizard.field.not_url', label: label))
end
if is_url_type(field) && !check_if_url(value)
updater.errors.add(id, I18n.t('wizard.field.not_url', label: label))
end
## ensure all checkboxes are booleans
if field['type'] === 'checkbox'
updater.fields[field['id']] = standardise_boolean(value)
if type === 'checkbox'
updater.fields[id] = standardise_boolean(value)
end
CustomWizard::Builder.field_validators.each do |validator|
if field['type'] === validator[:type]
if type === validator[:type]
validator[:block].call(field, updater, step_template)
end
end

Datei anzeigen

@ -18,10 +18,12 @@ class CustomWizard::StepUpdater
@step.updater.call(self) if @step.present? && @step.updater.present?
if success?
UserHistory.create(action: UserHistory.actions[:custom_wizard_step],
acting_user_id: @current_user.id,
context: @wizard.id,
subject: @step.id)
UserHistory.create(
action: UserHistory.actions[:custom_wizard_step],
acting_user_id: @current_user.id,
context: @wizard.id,
subject: @step.id
)
end
end

Datei anzeigen

@ -8,17 +8,17 @@ class CustomWizard::Validator
def perform
params = @params
check_id(params, :wizard)
check_required(params, :wizard)
check_depdendent(params, :wizard)
after_time = nil
if !@error && @params[:after_time]
after_time = validate_after_time
end
if !@error && @params[:after_time]
validate_after_time
end
if !@error
params[:steps].each do |step|
check_required(step, :step)
@ -42,13 +42,11 @@ class CustomWizard::Validator
end
end
end
if @error
{ error: @error }
else
result = { wizard: params }
result[:after_time] = after_time if after_time
result
{ wizard: params }
end
end
@ -105,39 +103,16 @@ class CustomWizard::Validator
end
end
def validate_after_time
if !@opts[:create]
wizard = CustomWizard::Wizard.create(params)
end
new = false
error = nil
scheduled = nil
if !@params[:after_time_scheduled] && !wizard[:after_time_scheduled]
error = 'after_time_need_time'
else
scheduled = Time.parse(@params[:after_time_scheduled]).utc
new = false
if wizard[:after_time_scheduled]
new = scheduled != Time.parse(wizard[:after_time_scheduled]).utc
end
def validate_after_time
wizard = CustomWizard::Wizard.create(@params[:id]) if !@opts[:create]
current_time = wizard.present? ? wizard.after_time_scheduled : nil
new_time = @params[:after_time_scheduled]
begin
error = 'after_time_invalid' if new && scheduled < Time.now.utc
rescue ArgumentError
error = 'after_time_invalid'
end
end
if error
@error = { type: error }
else
{
new: new,
scheduled: scheduled
}
if (new_time.blank? && current_time.blank?) ||
(new_time !~ /^([01]?[0-9]|2[0-3])\:[0-5][0-9]$/) ||
(Time.parse(new_time).utc < Time.now.utc)
@error = { type: 'after_time' }
end
end
end

Datei anzeigen

@ -298,7 +298,8 @@ class CustomWizard::Wizard
if wizard[:after_time]
Jobs.cancel_scheduled_job(:set_after_time_wizard, wizard_id: wizard[:id])
Jobs.enqueue_at(wizard[:after_time_scheduled], :set_after_time_wizard, wizard_id: wizard[:id])
enqueue_at = Time.parse(wizard[:after_time_scheduled]).utc
Jobs.enqueue_at(enqueue_at, :set_after_time_wizard, wizard_id: wizard[:id])
end
if existing_wizard && existing_wizard.after_time && !wizard[:after_time]
@ -330,6 +331,8 @@ class CustomWizard::Wizard
def self.create(wizard_id, user = nil)
if wizard = self.find(wizard_id)
CustomWizard::Wizard.new(wizard.to_h, user)
else
false
end
end