0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-08 19:38:00 +01:00
discourse-custom-wizard/plugin.rb

134 Zeilen
3,6 KiB
Ruby

2017-09-23 04:34:07 +02:00
# name: discourse-custom-wizard
2017-10-05 02:36:46 +02:00
# about: Create custom wizards
2017-09-23 04:34:07 +02:00
# version: 0.1
# authors: Angus McLeod
register_asset 'stylesheets/custom_wizard.scss'
2017-09-23 04:34:07 +02:00
2017-09-25 16:47:40 +02:00
config = Rails.application.config
config.assets.paths << Rails.root.join("plugins", "discourse-custom-wizard", "assets", "javascripts")
2017-09-23 04:34:07 +02:00
after_initialize do
require_dependency "application_controller"
module ::CustomWizard
class Engine < ::Rails::Engine
engine_name "custom_wizard"
isolate_namespace CustomWizard
end
end
2017-09-25 16:47:40 +02:00
load File.expand_path('../lib/builder.rb', __FILE__)
load File.expand_path('../lib/wizard.rb', __FILE__)
load File.expand_path('../app/controllers/wizard.rb', __FILE__)
load File.expand_path('../app/controllers/steps.rb', __FILE__)
load File.expand_path('../app/controllers/admin.rb', __FILE__)
2017-09-23 04:34:07 +02:00
CustomWizard::Engine.routes.draw do
get ':wizard_id' => 'wizard#index'
get ':wizard_id/steps' => 'steps#index'
get ':wizard_id/steps/:step_id' => 'wizard#index'
put ':wizard_id/steps/:step_id' => 'steps#update'
2017-09-23 04:34:07 +02:00
end
require_dependency 'admin_constraint'
Discourse::Application.routes.append do
2017-09-25 16:47:40 +02:00
namespace :wizard do
mount ::CustomWizard::Engine, at: 'custom'
end
2017-09-23 04:34:07 +02:00
2017-09-25 16:47:40 +02:00
scope module: 'custom_wizard', constraints: AdminConstraint.new do
2017-10-05 02:36:46 +02:00
get 'admin/wizards' => 'admin#index'
get 'admin/wizards/field-types' => 'admin#field_types'
2017-09-25 16:47:40 +02:00
get 'admin/wizards/custom' => 'admin#index'
get 'admin/wizards/custom/new' => 'admin#index'
2017-10-05 02:36:46 +02:00
get 'admin/wizards/custom/all' => 'admin#custom_wizards'
get 'admin/wizards/custom/:wizard_id' => 'admin#find_wizard'
2017-09-25 16:47:40 +02:00
put 'admin/wizards/custom/save' => 'admin#save'
delete 'admin/wizards/custom/remove' => 'admin#remove'
2017-10-05 02:36:46 +02:00
get 'admin/wizards/submissions' => 'admin#index'
get 'admin/wizards/submissions/all' => 'admin#submissions'
get 'admin/wizards/submissions/:wizard_id' => 'admin#find_submissions'
end
end
class CustomWizard::FieldTypes
def self.all
@types ||= ['dropdown', 'image', 'radio', 'text', 'textarea']
end
def self.add(type)
all.push(*type)
2017-09-23 04:34:07 +02:00
end
end
class ::Wizard
2017-10-07 04:27:38 +02:00
attr_accessor :id, :background, :save_submissions
end
class ::Wizard::Step
2017-10-07 04:27:38 +02:00
attr_accessor :title, :description, :translation_key
end
2017-10-05 02:36:46 +02:00
class ::Wizard::StepUpdater
attr_accessor :result, :step
end
require_dependency 'wizard/field'
Wizard::Field.class_eval do
2017-10-07 04:27:38 +02:00
attr_reader :label, :description, :translation_key
def initialize(attrs)
attrs = attrs || {}
@id = attrs[:id]
@type = attrs[:type]
@required = !!attrs[:required]
@label = attrs[:label]
@description = attrs[:description]
2017-10-07 04:27:38 +02:00
@translation_key = attrs[:translation_key]
@value = attrs[:value]
@choices = []
end
end
2017-10-07 04:27:38 +02:00
::WizardSerializer.class_eval do
attributes :id, :background
def id
object.id
end
def background
object.background
end
def include_start?
object.start
end
end
::WizardStepSerializer.class_eval do
def title
2017-10-07 04:27:38 +02:00
return object.title if object.title
I18n.t("#{object.translation_key || i18n_key}.title", default: '')
end
def description
return object.description if object.description
I18n.t("#{object.translation_key || i18n_key}.description", default: '')
end
end
::WizardFieldSerializer.class_eval do
def label
2017-10-07 04:27:38 +02:00
return object.label if object.label
I18n.t("#{object.translation_key || i18n_key}.label", default: '')
end
def description
2017-10-07 04:27:38 +02:00
return object.description if object.description
I18n.t("#{object.translation_key || i18n_key}.description", default: '')
end
end
2017-09-23 04:34:07 +02:00
end