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 34e48043..83baafc7 100644 --- a/assets/javascripts/discourse/components/wizard-custom-action.js.es6 +++ b/assets/javascripts/discourse/components/wizard-custom-action.js.es6 @@ -101,4 +101,9 @@ export default Component.extend(UndoChanges, { } return apis.find((a) => a.name === api).endpoints; }, + + @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 f5a62c87..4953e59c 100644 --- a/assets/javascripts/discourse/lib/wizard-schema.js.es6 +++ b/assets/javascripts/discourse/lib/wizard-schema.js.es6 @@ -102,6 +102,7 @@ const action = { custom_fields: null, skip_redirect: null, suppress_notifications: null, + add_event: null, }, send_message: { title: null, @@ -198,6 +199,7 @@ const action = { "messageable_level", "visibility_level", "members_visibility_level", + "add_event", ], advanced: [ "code", diff --git a/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs b/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs index c5ed70a7..b1281a6a 100644 --- a/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs +++ b/assets/javascripts/discourse/templates/admin-wizards-wizard-show.hbs @@ -192,7 +192,8 @@ wizard=wizard apis=apis removeAction="removeAction" - wizardFields=wizardFields}} + 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 4c645cf7..03aee3f4 100644 --- a/assets/javascripts/discourse/templates/components/wizard-custom-action.hbs +++ b/assets/javascripts/discourse/templates/components/wizard-custom-action.hbs @@ -158,6 +158,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 d3d938dc..ba6d4f17 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -293,6 +293,7 @@ en: date: Date time: Time date_time: Date & Time + event: Event (Events Plugin) connector: and: "and" @@ -336,6 +337,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 6de7d3f7..8eed64b2 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 12c46623..c39c2753 100644 --- a/lib/custom_wizard/field.rb +++ b/lib/custom_wizard/field.rb @@ -132,17 +132,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/plugin.rb b/plugin.rb index b6d82102..49dcb105 100644 --- a/plugin.rb +++ b/plugin.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # name: discourse-custom-wizard # about: Forms for Discourse. Better onboarding, structured posting, data enrichment, automated actions and much more. -# version: 1.22.9 +# version: 1.22.10 # authors: Angus McLeod, Faizaan Gagan, Robert Barrow, Keegan George # url: https://github.com/paviliondev/discourse-custom-wizard # contact_emails: development@pavilion.tech diff --git a/spec/components/custom_wizard/action_spec.rb b/spec/components/custom_wizard/action_spec.rb index a9d8b0a8..3c693c22 100644 --- a/spec/components/custom_wizard/action_spec.rb +++ b/spec/components/custom_wizard/action_spec.rb @@ -298,4 +298,22 @@ describe CustomWizard::Action do updater.update expect(updater.result[:redirect_on_next]).to eq("https://google.com") 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