plugin.rb 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # name: discourse-custom-wizard
  2. # about: Create custom wizards
  3. # version: 0.1
  4. # authors: Angus McLeod
  5. register_asset 'stylesheets/wizard_custom_admin.scss'
  6. register_asset 'lib/jquery.timepicker.min.js'
  7. register_asset 'lib/jquery.timepicker.scss'
  8. config = Rails.application.config
  9. config.assets.paths << Rails.root.join('plugins', 'discourse-custom-wizard', 'assets', 'javascripts')
  10. config.assets.paths << Rails.root.join('plugins', 'discourse-custom-wizard', 'assets', 'stylesheets', 'wizard')
  11. after_initialize do
  12. UserHistory.actions[:custom_wizard_step] = 1000
  13. require_dependency 'application_controller'
  14. module ::CustomWizard
  15. class Engine < ::Rails::Engine
  16. engine_name 'custom_wizard'
  17. isolate_namespace CustomWizard
  18. end
  19. end
  20. CustomWizard::Engine.routes.draw do
  21. get ':wizard_id' => 'wizard#index'
  22. put ':wizard_id/skip' => 'wizard#skip'
  23. get ':wizard_id/steps' => 'wizard#index'
  24. get ':wizard_id/steps/:step_id' => 'wizard#index'
  25. put ':wizard_id/steps/:step_id' => 'steps#update'
  26. end
  27. require_dependency 'admin_constraint'
  28. Discourse::Application.routes.append do
  29. mount ::CustomWizard::Engine, at: 'w'
  30. scope module: 'custom_wizard', constraints: AdminConstraint.new do
  31. get 'admin/wizards' => 'admin#index'
  32. get 'admin/wizards/field-types' => 'admin#field_types'
  33. get 'admin/wizards/custom' => 'admin#index'
  34. get 'admin/wizards/custom/new' => 'admin#index'
  35. get 'admin/wizards/custom/all' => 'admin#custom_wizards'
  36. get 'admin/wizards/custom/:wizard_id' => 'admin#find_wizard'
  37. put 'admin/wizards/custom/save' => 'admin#save'
  38. delete 'admin/wizards/custom/remove' => 'admin#remove'
  39. get 'admin/wizards/submissions' => 'admin#index'
  40. get 'admin/wizards/submissions/:wizard_id' => 'admin#submissions'
  41. end
  42. end
  43. load File.expand_path('../jobs/clear_after_time_wizard.rb', __FILE__)
  44. load File.expand_path('../jobs/set_after_time_wizard.rb', __FILE__)
  45. load File.expand_path('../lib/builder.rb', __FILE__)
  46. load File.expand_path('../lib/field.rb', __FILE__)
  47. load File.expand_path('../lib/step_updater.rb', __FILE__)
  48. load File.expand_path('../lib/template.rb', __FILE__)
  49. load File.expand_path('../lib/wizard.rb', __FILE__)
  50. load File.expand_path('../lib/wizard_edits.rb', __FILE__)
  51. load File.expand_path('../controllers/wizard.rb', __FILE__)
  52. load File.expand_path('../controllers/steps.rb', __FILE__)
  53. load File.expand_path('../controllers/admin.rb', __FILE__)
  54. ::UsersController.class_eval do
  55. def wizard_path
  56. if custom_wizard_redirect = $redis.get('custom_wizard_redirect')
  57. "#{Discourse.base_url}/w/#{custom_wizard_redirect}"
  58. else
  59. "#{Discourse.base_url}/wizard"
  60. end
  61. end
  62. end
  63. module InvitesControllerCustomWizard
  64. def path(url)
  65. if Wizard.user_requires_completion?(@user)
  66. wizard_path = $redis.get('custom_wizard_redirect')
  67. unless url === '/'
  68. PluginStore.set("#{wizard_path.underscore}_submissions", @user.id, [{ redirect_to: url }])
  69. end
  70. url = "/w/#{wizard_path}"
  71. end
  72. super(url)
  73. end
  74. private def post_process_invite(user)
  75. super(user)
  76. @user = user
  77. end
  78. end
  79. require_dependency 'invites_controller'
  80. class ::InvitesController
  81. prepend InvitesControllerCustomWizard
  82. end
  83. class ::ApplicationController
  84. before_action :redirect_to_wizard_if_required, if: :current_user
  85. def redirect_to_wizard_if_required
  86. @wizard_id ||= current_user.custom_fields['redirect_to_wizard']
  87. if @wizard_id && request.referer !~ /w/ && request.referer !~ /admin/
  88. redirect_to "/w/#{@wizard_id}"
  89. end
  90. end
  91. end
  92. add_to_serializer(:current_user, :redirect_to_wizard) { object.custom_fields['redirect_to_wizard'] }
  93. end