1
0
Fork 0
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 parentModel = this.modelFor('adminWizardsWizard');
const wizard = CustomWizard.create((!model || model.create) ? {} : model); const wizard = CustomWizard.create((!model || model.create) ? {} : model);

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

@ -298,7 +298,8 @@ class CustomWizard::Wizard
if wizard[:after_time] if wizard[:after_time]
Jobs.cancel_scheduled_job(:set_after_time_wizard, wizard_id: wizard[:id]) 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 end
if existing_wizard && existing_wizard.after_time && !wizard[:after_time] if existing_wizard && existing_wizard.after_time && !wizard[:after_time]
@ -330,6 +331,8 @@ class CustomWizard::Wizard
def self.create(wizard_id, user = nil) def self.create(wizard_id, user = nil)
if wizard = self.find(wizard_id) if wizard = self.find(wizard_id)
CustomWizard::Wizard.new(wizard.to_h, user) CustomWizard::Wizard.new(wizard.to_h, user)
else
false
end end
end end