discourse/plugins/discourse-workflows/plugin.rb
Joffrey JAFFEUX 90c5ba36fa
FEATURE: adds a modal node to discourse workflows (#40978)
This node allows to display a modal to a specific user and react to the
answer of the user. It requires the user to be actually on the discourse
site.

<img width="2089" height="876" alt="Screenshot 2026-06-17 at 11 31 28"
src="https://github.com/user-attachments/assets/abc40762-eb8e-445e-80b6-1a24bc3c54ea"
/>
<img width="281" height="237" alt="Screenshot 2026-06-17 at 11 31 21"
src="https://github.com/user-attachments/assets/481a9cfa-9d6b-40a9-a593-458a99d9f50a"
/>
2026-06-17 12:12:51 +02:00

109 lines
3.7 KiB
Ruby
Vendored

# frozen_string_literal: true
# name: discourse-workflows
# about: Workflow automation system for Discourse
# meta_topic_id: 402418
# version: 0.1
# authors: Discourse
# url: https://github.com/discourse/discourse-workflows
enabled_site_setting :discourse_workflows_enabled
module ::DiscourseWorkflows
PLUGIN_NAME = "discourse-workflows"
TEMPLATES_PATH = File.expand_path("config/templates", __dir__)
end
require_relative "lib/discourse_workflows/engine"
require_relative "lib/discourse_workflows/plugin_node_registration"
register_asset "stylesheets/common/index.scss"
register_svg_icon "bolt"
register_svg_icon "arrows-split-up-and-left"
register_svg_icon "list"
register_svg_icon "arrow-rotate-right"
register_svg_icon "arrows-turn-to-dots"
register_svg_icon "globe"
register_svg_icon "table"
register_svg_icon "table-cells"
register_svg_icon "expand"
register_svg_icon "magnifying-glass-minus"
register_svg_icon "magnifying-glass-plus"
register_svg_icon "user-check"
register_svg_icon "calendar-days"
register_svg_icon "rectangle-list"
register_svg_icon "trash-can"
register_svg_icon "broom"
register_svg_icon "arrow-pointer"
register_svg_icon "note-sticky"
register_svg_icon "palette"
register_svg_icon "reply"
register_svg_icon "triangle-exclamation"
register_svg_icon "clock"
register_svg_icon "comments"
register_svg_icon "pause"
register_svg_icon "window-maximize"
register_svg_icon "user-plus"
register_svg_icon "grip-vertical"
register_svg_icon "arrow-down-a-z"
add_admin_route "discourse_workflows.admin.title", "discourse-workflows", use_new_show_route: true
DiscoursePluginRegistry.define_filtered_register(:discourse_workflows_nodes)
DiscoursePluginRegistry.define_filtered_register(:discourse_workflows_credential_types)
after_initialize do
Rails.application.config.filter_parameters += %i[signature]
add_to_class(:guardian, :can_manage_workflows?) { is_admin? }
nodes_dir = File.join(File.dirname(__FILE__), "lib/discourse_workflows/nodes")
Dir.glob(File.join(nodes_dir, "**/*.rb")).each { |f| Rails.autoloaders.main.load_file(f) }
DiscourseWorkflows::NodeType.registered_nodes.each do |node_class|
DiscoursePluginRegistry.register_discourse_workflows_node(node_class, self)
next unless node_class.respond_to?(:event_name) && node_class.event_name
on(node_class.event_name) do |*args|
DiscourseWorkflows::EventListener.handle(node_class, *args)
end
end
DiscourseWorkflows.node_registration_ready = true
DiscourseWorkflows.flush_plugin_node_registrations!
DiscourseWorkflows::Registry.reset_indexes!
DiscoursePluginRegistry.register_discourse_workflows_credential_type(
DiscourseWorkflows::CredentialTypes::BasicAuth,
self,
)
DiscoursePluginRegistry.register_discourse_workflows_credential_type(
DiscourseWorkflows::CredentialTypes::BearerToken,
self,
)
DiscoursePluginRegistry.register_discourse_workflows_credential_type(
DiscourseWorkflows::CredentialTypes::HeaderAuth,
self,
)
add_to_serializer :site,
:topic_admin_button_workflows,
include_condition: -> { scope.is_admin? } do
DiscourseWorkflows::WorkflowDependency.cached_topic_admin_buttons
end
add_to_serializer :current_user,
:discourse_workflows_user_modal_last_id,
include_condition: -> do
DiscourseWorkflows::WorkflowDependency.cached_user_modals?
end do
MessageBus.last_id(DiscourseWorkflows::Nodes::Modal::V1.user_channel(object.id))
end
on(:site_setting_changed) do |name, old_value, new_value|
next if name != :discourse_workflows_enabled
next unless new_value && !old_value
DiscourseWorkflows::PluginEnableHandler.handle!
end
end