wizard_edits.rb 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. require_dependency 'wizard'
  2. require_dependency 'wizard/field'
  3. require_dependency 'wizard/step'
  4. ::Wizard.class_eval do
  5. def self.user_requires_completion?(user)
  6. wizard_result = self.new(user).requires_completion?
  7. return wizard_result if wizard_result
  8. custom_redirect = nil
  9. if user && wizard_id = CustomWizard::Wizard.after_signup
  10. custom_redirect = wizard_id
  11. wizard = CustomWizard::Wizard.new(user, id: wizard_id)
  12. data = PluginStore.get('custom_wizard', wizard_id)
  13. if data['required']
  14. user.custom_fields['redirect_to_wizard'] = wizard_id
  15. user.save_custom_fields(true)
  16. end
  17. if CustomWizard::Wizard.new(user, id: wizard_id).completed?
  18. custom_redirect = nil
  19. end
  20. end
  21. $redis.set('custom_wizard_redirect', custom_redirect)
  22. !!custom_redirect
  23. end
  24. end
  25. ::Wizard::Field.class_eval do
  26. attr_reader :label, :description, :image, :key, :min_length
  27. attr_accessor :dropdown_none
  28. def initialize(attrs)
  29. @attrs = attrs || {}
  30. @id = attrs[:id]
  31. @type = attrs[:type]
  32. @required = !!attrs[:required]
  33. @description = attrs[:description]
  34. @image = attrs[:image]
  35. @key = attrs[:key]
  36. @min_length = attrs[:min_length]
  37. @value = attrs[:value]
  38. @choices = []
  39. @dropdown_none = attrs[:dropdown_none]
  40. end
  41. def label
  42. @label ||= PrettyText.cook(@attrs[:label])
  43. end
  44. end
  45. ::Wizard::Choice.class_eval do
  46. def initialize(id, opts)
  47. @id = id
  48. @opts = opts
  49. @data = opts[:data]
  50. @extra_label = opts[:extra_label]
  51. @icon = opts[:icon]
  52. end
  53. def label
  54. @label ||= PrettyText.cook(@opts[:label])
  55. end
  56. end
  57. class ::Wizard::Step
  58. attr_accessor :title, :description, :key
  59. end
  60. ::WizardSerializer.class_eval do
  61. attributes :id, :background, :completed, :required, :min_trust, :permitted
  62. def id
  63. object.id
  64. end
  65. def include_id?
  66. object.respond_to?(:id)
  67. end
  68. def background
  69. object.background
  70. end
  71. def include_background?
  72. object.respond_to?(:background)
  73. end
  74. def completed
  75. object.completed?
  76. end
  77. def include_completed?
  78. object.completed? &&
  79. (!object.respond_to?(:multiple_submissions) || !object.multiple_submissions) &&
  80. !scope.is_admin?
  81. end
  82. def min_trust
  83. object.min_trust
  84. end
  85. def include_min_trust?
  86. object.respond_to?(:min_trust)
  87. end
  88. def permitted
  89. object.permitted?
  90. end
  91. def include_permitted?
  92. object.respond_to?(:permitted?)
  93. end
  94. def include_start?
  95. object.start && include_steps?
  96. end
  97. def include_steps?
  98. !include_completed?
  99. end
  100. def required
  101. object.required
  102. end
  103. def include_required?
  104. object.respond_to?(:required)
  105. end
  106. end
  107. ::WizardStepSerializer.class_eval do
  108. def title
  109. return object.title if object.title
  110. I18n.t("#{object.key || i18n_key}.title", default: '')
  111. end
  112. def description
  113. return object.description if object.description
  114. PrettyText.cook(I18n.t("#{object.key || i18n_key}.description", default: '', base_url: Discourse.base_url))
  115. end
  116. end
  117. ::WizardFieldSerializer.class_eval do
  118. attributes :dropdown_none, :image
  119. def label
  120. return object.label if object.label.present?
  121. I18n.t("#{object.key || i18n_key}.label", default: '')
  122. end
  123. def description
  124. return object.description if object.description.present?
  125. I18n.t("#{object.key || i18n_key}.description", default: '', base_url: Discourse.base_url)
  126. end
  127. def image
  128. object.image
  129. end
  130. def include_image?
  131. object.image.present?
  132. end
  133. def placeholder
  134. I18n.t("#{object.key || i18n_key}.placeholder", default: '')
  135. end
  136. def dropdown_none
  137. object.dropdown_none
  138. end
  139. end