wizard_edits.rb 3.3 KB

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