diff --git a/app/controllers/custom_wizard/admin/wizard.rb b/app/controllers/custom_wizard/admin/wizard.rb
index 71a5623b..7a316c84 100644
--- a/app/controllers/custom_wizard/admin/wizard.rb
+++ b/app/controllers/custom_wizard/admin/wizard.rb
@@ -163,7 +163,8 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
mentionable_level: mapped_params,
messageable_level: mapped_params,
visibility_level: mapped_params,
- members_visibility_level: mapped_params
+ members_visibility_level: mapped_params,
+ add_event: mapped_params
]
)
end
diff --git a/assets/javascripts/discourse/components/wizard-custom-action.js.es6 b/assets/javascripts/discourse/components/wizard-custom-action.js.es6
index d51a3208..48dfef48 100644
--- a/assets/javascripts/discourse/components/wizard-custom-action.js.es6
+++ b/assets/javascripts/discourse/components/wizard-custom-action.js.es6
@@ -98,4 +98,9 @@ export default Component.extend(UndoChanges, {
actionTypes() {
return subscriptionSelectKitContent("action", "types");
},
+
+ @discourseComputed("fieldTypes")
+ hasEventsField(fieldTypes) {
+ return fieldTypes.map((ft) => ft.id).includes("event");
+ },
});
diff --git a/assets/javascripts/discourse/lib/wizard-schema.js.es6 b/assets/javascripts/discourse/lib/wizard-schema.js.es6
index 020bb51c..e9622c45 100644
--- a/assets/javascripts/discourse/lib/wizard-schema.js.es6
+++ b/assets/javascripts/discourse/lib/wizard-schema.js.es6
@@ -98,6 +98,7 @@ const action = {
custom_fields: null,
skip_redirect: null,
suppress_notifications: null,
+ add_event: null,
},
send_message: {
title: null,
@@ -194,6 +195,7 @@ const action = {
"messageable_level",
"visibility_level",
"members_visibility_level",
+ "add_event",
],
required: ["id", "type"],
dependent: {},
diff --git a/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs b/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs
index e7fd0865..96d773cf 100644
--- a/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs
+++ b/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs
@@ -176,7 +176,9 @@
currentActionId=currentAction.id
wizard=wizard
apis=apis
- wizardFields=wizardFields}}
+ removeAction="removeAction"
+ wizardFields=wizardFields
+ fieldTypes=fieldTypes}}
{{/each}}
diff --git a/assets/javascripts/discourse/templates/components/wizard-custom-action.hbs b/assets/javascripts/discourse/templates/components/wizard-custom-action.hbs
index be9c14c5..3b2222a0 100644
--- a/assets/javascripts/discourse/templates/components/wizard-custom-action.hbs
+++ b/assets/javascripts/discourse/templates/components/wizard-custom-action.hbs
@@ -160,6 +160,25 @@
)}}
+
+ {{#if hasEventsField}}
+
+
+
+
+
+
+ {{wizard-mapper
+ inputs=action.add_event
+ property="add_event"
+ onUpdate=(action "mappedFieldUpdated")
+ options=(hash
+ wizardFieldSelection=true
+ context="action"
+ )}}
+
+
+ {{/if}}
{{/if}}
{{#if sendMessage}}
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 9b6efeae..f140dea7 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -313,6 +313,7 @@ en:
date: Date
time: Time
date_time: Date & Time
+ event: Event (Events Plugin)
connector:
and: "and"
@@ -356,6 +357,7 @@ en:
category: "Category"
tags: "Tags"
visible: "Visible"
+ add_event: "Add Event (Events Plugin)"
open_composer:
label: "Open Composer"
update_profile:
diff --git a/lib/custom_wizard/action.rb b/lib/custom_wizard/action.rb
index 96f56283..5917a1bc 100644
--- a/lib/custom_wizard/action.rb
+++ b/lib/custom_wizard/action.rb
@@ -43,9 +43,17 @@ class CustomWizard::Action
@mapper ||= CustomWizard::Mapper.new(user: user, data: mapper_data)
end
+ def callbacks_for(action)
+ self.class.callbacks[action] || []
+ end
+
def create_topic
params = basic_topic_params.merge(public_topic_params)
+ callbacks_for(:before_create_topic).each do |acb|
+ params = acb.call(params, @wizard, @action, @submission)
+ end
+
if params[:title].present? && params[:raw].present?
creator = PostCreator.new(user, params)
post = creator.create
@@ -417,6 +425,15 @@ class CustomWizard::Action
end
end
+ def self.callbacks
+ @callbacks ||= {}
+ end
+
+ def self.register_callback(action, &block)
+ callbacks[action] ||= []
+ callbacks[action] << block
+ end
+
private
def action_category
diff --git a/lib/custom_wizard/field.rb b/lib/custom_wizard/field.rb
index 8e326b90..600f685e 100644
--- a/lib/custom_wizard/field.rb
+++ b/lib/custom_wizard/field.rb
@@ -130,17 +130,22 @@ class CustomWizard::Field
end
def self.require_assets
+ Rails.logger.warn("Custom Wizard field regisration no longer requires asset registration. Support will be removed in v2.1.0.")
+
@require_assets ||= {}
end
- def self.register(type, plugin = nil, asset_paths = [], opts = {})
+ def self.register(type, plugin = nil, opts = {}, legacy_opts = {})
+ if opts.is_a?(Array)
+ Rails.logger.warn("Custom Wizard field regisration no longer requires asset registration. Support will be removed in v2.1.0.")
+
+ require_assets[plugin] = opts
+ opts = legacy_opts
+ end
+
if type
types[type.to_sym] ||= {}
types[type.to_sym] = opts[:type_opts] if opts[:type_opts].present?
end
-
- if plugin && asset_paths
- require_assets[plugin] = asset_paths
- end
end
end
diff --git a/spec/components/custom_wizard/action_spec.rb b/spec/components/custom_wizard/action_spec.rb
index d13cb8ff..e5dedfa9 100644
--- a/spec/components/custom_wizard/action_spec.rb
+++ b/spec/components/custom_wizard/action_spec.rb
@@ -373,4 +373,22 @@ describe CustomWizard::Action do
expect(log_entry.status).to eq('FAIL')
end
end
+
+ it 'registers callbacks' do
+ described_class.register_callback(:before_create_topic) do |params, wizard, action, submission|
+ params[:topic_opts][:custom_fields]["topic_custom_field"] = true
+ params
+ end
+
+ wizard = CustomWizard::Builder.new(@template[:id], user).build
+ action = CustomWizard::Action.new(
+ wizard: wizard,
+ action: create_topic.with_indifferent_access,
+ submission: wizard.current_submission
+ )
+ action.perform
+
+ expect(action.result.success?).to eq(true)
+ expect(Topic.find(action.result.output).custom_fields["topic_custom_field"]).to eq("t")
+ end
end