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