decidim-debates 0.27.10 → 0.28.0.rc4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/debates/debate_activity_cell.rb +1 -12
  3. data/app/cells/decidim/debates/debate_card_metadata_cell.rb +43 -0
  4. data/app/cells/decidim/debates/debate_cell.rb +6 -1
  5. data/app/cells/decidim/debates/debate_l_cell.rb +49 -0
  6. data/app/cells/decidim/debates/debate_s_cell.rb +21 -0
  7. data/app/commands/decidim/debates/admin/close_debate.rb +1 -1
  8. data/app/commands/decidim/debates/close_debate.rb +1 -1
  9. data/app/commands/decidim/debates/create_debate.rb +13 -4
  10. data/app/commands/decidim/debates/update_debate.rb +15 -2
  11. data/app/controllers/decidim/debates/admin/debate_closes_controller.rb +2 -2
  12. data/app/controllers/decidim/debates/admin/debates_controller.rb +5 -5
  13. data/app/controllers/decidim/debates/debates_controller.rb +7 -9
  14. data/app/events/decidim/debates/close_debate_event.rb +1 -1
  15. data/app/events/decidim/debates/create_debate_event.rb +15 -1
  16. data/app/forms/decidim/debates/admin/close_debate_form.rb +1 -1
  17. data/app/forms/decidim/debates/close_debate_form.rb +2 -2
  18. data/app/forms/decidim/debates/debate_form.rb +2 -2
  19. data/app/helpers/decidim/debates/application_helper.rb +42 -17
  20. data/app/jobs/decidim/debates/hide_all_created_by_author_job.rb +13 -0
  21. data/app/jobs/decidim/debates/settings_change_job.rb +2 -2
  22. data/app/models/decidim/debates/debate.rb +4 -10
  23. data/app/packs/entrypoints/decidim_debates.js +2 -0
  24. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_commented_debates.svg +42 -1
  25. data/app/permissions/decidim/debates/permissions.rb +0 -6
  26. data/app/presenters/decidim/debates/admin_log/debate_presenter.rb +6 -2
  27. data/app/presenters/decidim/debates/admin_log/value_types/debate_title_description_presenter.rb +1 -1
  28. data/app/presenters/decidim/debates/log/resource_presenter.rb +18 -0
  29. data/app/views/decidim/debates/admin/debate_closes/edit.html.erb +26 -14
  30. data/app/views/decidim/debates/admin/debates/_form.html.erb +40 -39
  31. data/app/views/decidim/debates/admin/debates/edit.html.erb +16 -6
  32. data/app/views/decidim/debates/admin/debates/index.html.erb +60 -58
  33. data/app/views/decidim/debates/admin/debates/new.html.erb +16 -6
  34. data/app/views/decidim/debates/debates/_close_debate_modal.html.erb +22 -11
  35. data/app/views/decidim/debates/debates/_debates.html.erb +5 -6
  36. data/app/views/decidim/debates/debates/_form.html.erb +10 -19
  37. data/app/views/decidim/debates/debates/edit.html.erb +16 -20
  38. data/app/views/decidim/debates/debates/index.html.erb +19 -23
  39. data/app/views/decidim/debates/debates/index.js.erb +3 -4
  40. data/app/views/decidim/debates/debates/new.html.erb +16 -20
  41. data/app/views/decidim/debates/debates/show.html.erb +106 -109
  42. data/app/views/decidim/debates/versions/show.html.erb +15 -6
  43. data/config/locales/ar.yml +7 -17
  44. data/config/locales/bg.yml +0 -231
  45. data/config/locales/ca.yml +14 -35
  46. data/config/locales/cs.yml +13 -34
  47. data/config/locales/de.yml +14 -35
  48. data/config/locales/el.yml +10 -28
  49. data/config/locales/en.yml +13 -34
  50. data/config/locales/es-MX.yml +12 -33
  51. data/config/locales/es-PY.yml +13 -34
  52. data/config/locales/es.yml +15 -36
  53. data/config/locales/eu.yml +16 -37
  54. data/config/locales/fi-plain.yml +12 -33
  55. data/config/locales/fi.yml +14 -35
  56. data/config/locales/fr-CA.yml +14 -35
  57. data/config/locales/fr.yml +14 -35
  58. data/config/locales/ga-IE.yml +0 -15
  59. data/config/locales/gl.yml +7 -16
  60. data/config/locales/hu.yml +13 -32
  61. data/config/locales/id-ID.yml +7 -15
  62. data/config/locales/is-IS.yml +3 -9
  63. data/config/locales/it.yml +7 -31
  64. data/config/locales/ja.yml +13 -37
  65. data/config/locales/lb.yml +7 -25
  66. data/config/locales/lt.yml +14 -29
  67. data/config/locales/lv.yml +6 -17
  68. data/config/locales/nl.yml +7 -28
  69. data/config/locales/no.yml +7 -31
  70. data/config/locales/pl.yml +12 -38
  71. data/config/locales/pt-BR.yml +7 -39
  72. data/config/locales/pt.yml +7 -31
  73. data/config/locales/ro-RO.yml +10 -29
  74. data/config/locales/ru.yml +3 -12
  75. data/config/locales/sk.yml +6 -17
  76. data/config/locales/sl.yml +0 -3
  77. data/config/locales/sr-CS.yml +0 -6
  78. data/config/locales/sv.yml +34 -54
  79. data/config/locales/tr-TR.yml +6 -38
  80. data/config/locales/uk.yml +3 -12
  81. data/config/locales/zh-CN.yml +7 -29
  82. data/config/locales/zh-TW.yml +9 -28
  83. data/lib/decidim/debates/component.rb +4 -88
  84. data/lib/decidim/debates/engine.rb +29 -7
  85. data/lib/decidim/debates/seeds.rb +104 -0
  86. data/lib/decidim/debates/test/factories.rb +19 -14
  87. data/lib/decidim/debates/version.rb +1 -1
  88. metadata +29 -30
  89. data/app/cells/decidim/debates/debate_m/data.erb +0 -10
  90. data/app/cells/decidim/debates/debate_m/footer.erb +0 -10
  91. data/app/cells/decidim/debates/debate_m/multiple_dates.erb +0 -17
  92. data/app/cells/decidim/debates/debate_m/open_date.erb +0 -7
  93. data/app/cells/decidim/debates/debate_m/single_date.erb +0 -9
  94. data/app/cells/decidim/debates/debate_m/tags.erb +0 -1
  95. data/app/cells/decidim/debates/debate_m_cell.rb +0 -86
  96. data/app/controllers/decidim/debates/widgets_controller.rb +0 -29
  97. data/app/views/decidim/debates/debates/_count.html.erb +0 -1
  98. data/app/views/decidim/debates/debates/_filters.html.erb +0 -34
  99. data/app/views/decidim/debates/debates/_filters_small_view.html.erb +0 -18
  100. data/config/locales/he-IL.yml +0 -1
  101. data/decidim-debates.gemspec +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9a6177f5068bd464da935117a32bc8f96a836df33e7a0b2aa9d71b55598cc0d
4
- data.tar.gz: 611eb217ca7c7a40df88cb30c050e6ef7f0d1d6b5479f4ae4f1844dbf079d899
3
+ metadata.gz: fbbd97fad2e27ad5112a8fc5c9e87e8a43917e56345f0f0dfa08a78458c23ac9
4
+ data.tar.gz: e7f57d48e3331d15831289deae2655bb21abee8e069cc5fdfb0f3db9100b147a
5
5
  SHA512:
6
- metadata.gz: aa658f438eb43b21d901995f70f8d94d81df304b7276ee24d697441773737c3f2ab14cee1d76309235175f34ddb576c5d4244d36d57dc4a8f1bc0a273070189a
7
- data.tar.gz: 96a0c6cc64cbdc5f60f436fe35efa3cff7ebbc96ed00c5984fda0c1ec21dcbeb0f4bb31dc9f9b688bd284bfaec69522f7015fc85f69506156fec3553bae38b66
6
+ metadata.gz: af588e7c7dfa666a243493f50a6594f87c7d14225ae142c20d520c05747968dfc9aceecb241b458ca78f75afb2033d3556b67df44dcd00977c76881880d06af7
7
+ data.tar.gz: a0281466ecd1c7c00484840c4ba0ae6a97ed0827e7333359a131cda5b19bacc41dcd0ff77ab17b25c4b28060bfe71f86f206719ea15adc0492f73ae3084cbdfb
@@ -5,18 +5,7 @@ module Decidim
5
5
  # A cell to display when actions happen on a debate.
6
6
  class DebateActivityCell < ActivityCell
7
7
  def title
8
- case action
9
- when "update"
10
- I18n.t(
11
- "decidim.debates.last_activity.debate_updated_at_html",
12
- link: participatory_space_link
13
- )
14
- else
15
- I18n.t(
16
- "decidim.debates.last_activity.new_debate_at_html",
17
- link: participatory_space_link
18
- )
19
- end
8
+ action == "update" ? I18n.t("decidim.debates.last_activity.debate_updated") : I18n.t("decidim.debates.last_activity.new_debate")
20
9
  end
21
10
 
22
11
  def resource_link_text
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Debates
5
+ # This cell renders metadata for an instance of a Meeting
6
+ class DebateCardMetadataCell < Decidim::CardMetadataCell
7
+ include Decidim::LayoutHelper
8
+ include ActionView::Helpers::DateHelper
9
+
10
+ alias debate model
11
+
12
+ delegate :type_of_meeting, :start_time, :end_time, :category, :withdrawn?, to: :debate
13
+
14
+ def initialize(*)
15
+ super
16
+
17
+ @items.prepend(*debate_items)
18
+ end
19
+
20
+ def category_item
21
+ return if category.blank?
22
+
23
+ {
24
+ text: category.translated_name,
25
+ icon: resource_type_icon_key("Decidim::Category")
26
+ }
27
+ end
28
+
29
+ def debate_items
30
+ [duration, comments_count_item, endorsements_count_item, category_item, coauthors_item]
31
+ end
32
+
33
+ def duration
34
+ text = format_date_range(debate.start_time, debate.end_time) || t("open", scope: "decidim.debates.debates.show")
35
+
36
+ {
37
+ text:,
38
+ icon: "time-line"
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -15,7 +15,12 @@ module Decidim
15
15
  private
16
16
 
17
17
  def card_size
18
- "decidim/debates/debate_m"
18
+ case @options[:size]
19
+ when :s
20
+ "decidim/debates/debate_s"
21
+ else
22
+ "decidim/debates/debate_l"
23
+ end
19
24
  end
20
25
  end
21
26
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module Debates
7
+ # This cell renders the List (:l) debate card
8
+ # for a given instance of a Debate
9
+ class DebateLCell < Decidim::CardLCell
10
+ include Decidim::SanitizeHelper
11
+ delegate :component_settings, to: :controller
12
+
13
+ alias debate model
14
+
15
+ def has_description?
16
+ true
17
+ end
18
+
19
+ def author_presenter
20
+ if model.official?
21
+ Decidim::Core::OfficialAuthorPresenter.new
22
+ else
23
+ model.normalized_author.presenter
24
+ end
25
+ end
26
+
27
+ def title
28
+ presenter.title(html_escape: true)
29
+ end
30
+
31
+ def description
32
+ attribute = model.try(:short_description) || model.try(:body) || model.description
33
+ text = translated_attribute(attribute)
34
+
35
+ decidim_sanitize(html_truncate(text, length: 240))
36
+ end
37
+
38
+ private
39
+
40
+ def presenter
41
+ present(model)
42
+ end
43
+
44
+ def metadata_cell
45
+ "decidim/debates/debate_card_metadata"
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module Debates
7
+ # This cell renders the Search (:s) debate card
8
+ # for a given instance of a Debate
9
+ class DebateSCell < Decidim::CardSCell
10
+ private
11
+
12
+ def title
13
+ present(model).title(html_escape: true)
14
+ end
15
+
16
+ def metadata_cell
17
+ "decidim/debates/debate_card_metadata"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -15,7 +15,7 @@ module Decidim
15
15
  # Executes the command. Broadcasts these events:
16
16
  #
17
17
  # - :ok when everything is valid, together with the debate.
18
- # - :invalid if the form wasn't valid and we couldn't proceed.
18
+ # - :invalid if the form was not valid and we could not proceed.
19
19
  #
20
20
  # Returns nothing.
21
21
  def call
@@ -14,7 +14,7 @@ module Decidim
14
14
  # Executes the command. Broadcasts these events:
15
15
  #
16
16
  # - :ok when everything is valid, together with the debate.
17
- # - :invalid if the form wasn't valid and we couldn't proceed.
17
+ # - :invalid if the form was not valid and we could not proceed.
18
18
  #
19
19
  # Returns nothing.
20
20
  def call
@@ -15,12 +15,11 @@ module Decidim
15
15
  def call
16
16
  return broadcast(:invalid) if form.invalid?
17
17
 
18
- transaction do
18
+ with_events(with_transaction: true) do
19
19
  create_debate
20
- send_notification_to_author_followers
21
- send_notification_to_space_followers
22
20
  end
23
-
21
+ send_notification_to_author_followers
22
+ send_notification_to_space_followers
24
23
  follow_debate
25
24
  broadcast(:ok, debate)
26
25
  end
@@ -29,6 +28,16 @@ module Decidim
29
28
 
30
29
  attr_reader :debate, :form
31
30
 
31
+ def event_arguments
32
+ {
33
+ resource: debate,
34
+ extra: {
35
+ event_author: form.current_user,
36
+ locale:
37
+ }
38
+ }
39
+ end
40
+
32
41
  def create_debate
33
42
  parsed_title = Decidim::ContentProcessor.parse_with_processor(:hashtag, form.title, current_organization: form.current_organization).rewrite
34
43
  parsed_description = Decidim::ContentProcessor.parse_with_processor(:hashtag, form.description, current_organization: form.current_organization).rewrite
@@ -14,14 +14,17 @@ module Decidim
14
14
  # Executes the command. Broadcasts these events:
15
15
  #
16
16
  # - :ok when everything is valid, together with the debate.
17
- # - :invalid if the form wasn't valid and we couldn't proceed.
17
+ # - :invalid if the form was not valid and we could not proceed.
18
18
  #
19
19
  # Returns nothing.
20
20
  def call
21
21
  return broadcast(:invalid) if form.invalid?
22
22
  return broadcast(:invalid) unless form.debate.editable_by?(form.current_user)
23
23
 
24
- update_debate
24
+ with_events(with_transaction: true) do
25
+ update_debate
26
+ end
27
+
25
28
  broadcast(:ok, @debate)
26
29
  end
27
30
 
@@ -29,6 +32,16 @@ module Decidim
29
32
 
30
33
  attr_reader :form
31
34
 
35
+ def event_arguments
36
+ {
37
+ resource: @debate,
38
+ extra: {
39
+ event_author: form.current_user,
40
+ locale:
41
+ }
42
+ }
43
+ end
44
+
32
45
  def update_debate
33
46
  @debate = Decidim.traceability.update!(
34
47
  @form.debate,
@@ -8,13 +8,13 @@ module Decidim
8
8
  helper_method :debate
9
9
 
10
10
  def edit
11
- enforce_permission_to :close, :debate, debate: debate
11
+ enforce_permission_to(:close, :debate, debate:)
12
12
 
13
13
  @form = form(Admin::CloseDebateForm).from_model(debate)
14
14
  end
15
15
 
16
16
  def update
17
- enforce_permission_to :close, :debate, debate: debate
17
+ enforce_permission_to(:close, :debate, debate:)
18
18
 
19
19
  @form = form(Admin::CloseDebateForm).from_params(params)
20
20
 
@@ -22,7 +22,7 @@ module Decidim
22
22
  def create
23
23
  enforce_permission_to :create, :debate
24
24
 
25
- @form = form(Decidim::Debates::Admin::DebateForm).from_params(params, current_component: current_component)
25
+ @form = form(Decidim::Debates::Admin::DebateForm).from_params(params, current_component:)
26
26
 
27
27
  CreateDebate.call(@form) do
28
28
  on(:ok) do
@@ -38,15 +38,15 @@ module Decidim
38
38
  end
39
39
 
40
40
  def edit
41
- enforce_permission_to :update, :debate, debate: debate
41
+ enforce_permission_to(:update, :debate, debate:)
42
42
 
43
43
  @form = form(Decidim::Debates::Admin::DebateForm).from_model(debate)
44
44
  end
45
45
 
46
46
  def update
47
- enforce_permission_to :update, :debate, debate: debate
47
+ enforce_permission_to(:update, :debate, debate:)
48
48
 
49
- @form = form(Decidim::Debates::Admin::DebateForm).from_params(params, current_component: current_component)
49
+ @form = form(Decidim::Debates::Admin::DebateForm).from_params(params, current_component:)
50
50
 
51
51
  UpdateDebate.call(@form, debate) do
52
52
  on(:ok) do
@@ -62,7 +62,7 @@ module Decidim
62
62
  end
63
63
 
64
64
  def destroy
65
- enforce_permission_to :delete, :debate, debate: debate
65
+ enforce_permission_to(:delete, :debate, debate:)
66
66
 
67
67
  debate.destroy!
68
68
 
@@ -6,7 +6,6 @@ module Decidim
6
6
  class DebatesController < Decidim::Debates::ApplicationController
7
7
  helper Decidim::ApplicationHelper
8
8
  helper Decidim::Messaging::ConversationHelper
9
- helper Decidim::WidgetUrlsHelper
10
9
  include FormFactory
11
10
  include FilterResource
12
11
  include Paginable
@@ -14,7 +13,6 @@ module Decidim
14
13
  include Decidim::Debates::Orderable
15
14
 
16
15
  helper_method :debates, :debate, :form_presenter, :paginated_debates, :close_debate_form
17
- before_action :authenticate_user!, only: [:new, :create]
18
16
 
19
17
  def new
20
18
  enforce_permission_to :create, :debate
@@ -45,13 +43,13 @@ module Decidim
45
43
  end
46
44
 
47
45
  def edit
48
- enforce_permission_to :edit, :debate, debate: debate
46
+ enforce_permission_to(:edit, :debate, debate:)
49
47
 
50
48
  @form = form(DebateForm).from_model(debate)
51
49
  end
52
50
 
53
51
  def update
54
- enforce_permission_to :edit, :debate, debate: debate
52
+ enforce_permission_to(:edit, :debate, debate:)
55
53
 
56
54
  @form = form(DebateForm).from_params(params)
57
55
 
@@ -69,7 +67,7 @@ module Decidim
69
67
  end
70
68
 
71
69
  def close
72
- enforce_permission_to :close, :debate, debate: debate
70
+ enforce_permission_to(:close, :debate, debate:)
73
71
 
74
72
  @form = form(CloseDebateForm).from_params(params)
75
73
 
@@ -115,10 +113,10 @@ module Decidim
115
113
  def default_filter_params
116
114
  {
117
115
  search_text_cont: "",
118
- with_any_origin: %w(official participants user_group),
119
- activity: "all",
120
- with_any_category: default_filter_category_params,
121
- with_any_scope: default_filter_scope_params,
116
+ with_any_origin: nil,
117
+ activity: %w(all),
118
+ with_any_category: nil,
119
+ with_any_scope: nil,
122
120
  with_any_state: %w(open closed)
123
121
  }
124
122
  end
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Debates
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Debates
@@ -12,12 +12,26 @@ module Decidim
12
12
  class CreateDebateEvent < Decidim::Events::SimpleEvent
13
13
  include Decidim::Events::AuthorEvent
14
14
 
15
+ i18n_attributes :space_title, :space_path
16
+
15
17
  def resource_text
16
18
  translated_attribute(resource.description)
17
19
  end
18
20
 
19
21
  private
20
22
 
23
+ def space
24
+ @space ||= resource.participatory_space
25
+ end
26
+
27
+ def space_path
28
+ Decidim::ResourceLocatorPresenter.new(space).path
29
+ end
30
+
31
+ def space_title
32
+ space.title.is_a?(Hash) ? space.title[I18n.locale.to_s] : space.title
33
+ end
34
+
21
35
  def i18n_scope
22
36
  @i18n_scope ||= if extra[:type].to_s == "user"
23
37
  "decidim.events.debates.create_debate_event.user_followers"
@@ -22,7 +22,7 @@ module Decidim
22
22
  end
23
23
 
24
24
  def debate
25
- @debate ||= Debate.find_by(id: id)
25
+ @debate ||= Debate.find_by(id:)
26
26
  end
27
27
 
28
28
  private
@@ -20,13 +20,13 @@ module Decidim
20
20
  super
21
21
 
22
22
  # Debates can be translated in different languages from the admin but
23
- # the public form doesn't allow it. When a user closes a debate the
23
+ # the public form does not allow it. When a user closes a debate the
24
24
  # user locale is taken as the text locale.
25
25
  self.conclusions = debate.conclusions&.values&.first
26
26
  end
27
27
 
28
28
  def debate
29
- @debate ||= Debate.find_by(id: id)
29
+ @debate ||= Debate.find_by(id:)
30
30
  end
31
31
 
32
32
  private
@@ -22,7 +22,7 @@ module Decidim
22
22
  def map_model(debate)
23
23
  super
24
24
  # Debates can be translated in different languages from the admin but
25
- # the public form doesn't allow it. When a user creates a debate the
25
+ # the public form does not allow it. When a user creates a debate the
26
26
  # user locale is taken as the text locale.
27
27
  self.title = debate.title.values.first
28
28
  self.description = debate.description.values.first
@@ -53,7 +53,7 @@ module Decidim
53
53
  end
54
54
 
55
55
  def debate
56
- @debate ||= Debate.find_by(id: id)
56
+ @debate ||= Debate.find_by(id:)
57
57
  end
58
58
 
59
59
  private
@@ -11,6 +11,7 @@ module Decidim
11
11
  include Decidim::EndorsableHelper
12
12
  include Decidim::FollowableHelper
13
13
  include Decidim::CheckBoxesTreeHelper
14
+ include Decidim::DateRangeHelper
14
15
 
15
16
  # If the debate is official or the rich text editor is enabled on the
16
17
  # frontend, the debate description is considered as safe content.
@@ -42,35 +43,59 @@ module Decidim
42
43
  # Returns a TreeNode to be used in the list filters to filter debates by
43
44
  # its origin.
44
45
  def filter_origin_values
45
- origin_values = []
46
- origin_values << TreePoint.new("official", t("decidim.debates.debates.filters.official"))
47
- origin_values << TreePoint.new("participants", t("decidim.debates.debates.filters.participants"))
48
- origin_values << TreePoint.new("user_group", t("decidim.debates.debates.filters.user_groups")) if current_organization.user_groups_enabled?
46
+ origin_keys = %w(official participants)
47
+ origin_keys << "user_group" if current_organization.user_groups_enabled?
49
48
 
50
- TreeNode.new(TreePoint.new("", t("decidim.debates.debates.filters.all")), origin_values)
49
+ origin_values = origin_keys.map { |key| [key, t(key, scope: "decidim.debates.debates.filters")] }
50
+ origin_values.prepend(["", all_filter_text])
51
+
52
+ filter_tree_from_array(origin_values)
51
53
  end
52
54
 
53
55
  # Options to filter Debates by activity.
54
56
  def activity_filter_values
55
- base = [
56
- ["all", t("decidim.debates.debates.filters.all")],
57
- ["my_debates", t("decidim.debates.debates.filters.my_debates")]
58
- ]
59
- base += [["commented", t("decidim.debates.debates.filters.commented")]]
60
- base
57
+ %w(all my_debates commented).map { |k| [k, t(k, scope: "decidim.debates.debates.filters")] }
61
58
  end
62
59
 
63
60
  # Returns a TreeNode to be used in the list filters to filter debates by
64
61
  # its state.
65
62
  def filter_debates_state_values
66
- Decidim::CheckBoxesTreeHelper::TreeNode.new(
67
- Decidim::CheckBoxesTreeHelper::TreePoint.new("", t("decidim.debates.debates.filters.all")),
68
- [
69
- Decidim::CheckBoxesTreeHelper::TreePoint.new("open", t("decidim.debates.debates.filters.state_values.open")),
70
- Decidim::CheckBoxesTreeHelper::TreePoint.new("closed", t("decidim.debates.debates.filters.state_values.closed"))
71
- ]
63
+ %w(open closed).map { |k| [k, t(k, scope: "decidim.debates.debates.filters.state_values")] }.prepend(
64
+ ["all", all_filter_text]
72
65
  )
73
66
  end
67
+
68
+ def all_filter_text
69
+ t("all", scope: "decidim.debates.debates.filters")
70
+ end
71
+
72
+ def filter_sections
73
+ @filter_sections ||= begin
74
+ items = [{
75
+ method: :with_any_state,
76
+ collection: filter_debates_state_values,
77
+ label_scope: "decidim.meetings.meetings.filters",
78
+ id: "date",
79
+ type: :radio_buttons
80
+ }]
81
+ if current_component.has_subscopes?
82
+ items.append(method: :with_any_scope, collection: filter_scopes_values, label_scope: "decidim.shared.participatory_space_filters.filters", id: "scope")
83
+ end
84
+ if current_participatory_space.categories.any?
85
+ items.append(method: :with_any_category, collection: filter_categories_values, label_scope: "decidim.debates.debates.filters", id: "category")
86
+ end
87
+ items.append(method: :with_any_origin, collection: filter_origin_values, label_scope: "decidim.debates.debates.filters", id: "origin")
88
+ items.append(method: :activity, collection: activity_filter_values, label_scope: "decidim.debates.debates.filters", id: "activity") if current_user
89
+
90
+ items.reject { |item| item[:collection].blank? }
91
+ end
92
+ end
93
+
94
+ def search_variable = :search_text_cont
95
+
96
+ def component_name
97
+ (defined?(current_component) && translated_attribute(current_component&.name).presence) || t("decidim.components.debates.name")
98
+ end
74
99
  end
75
100
  end
76
101
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Debates
5
+ class HideAllCreatedByAuthorJob < ::Decidim::HideAllCreatedByAuthorJob
6
+ protected
7
+
8
+ def base_query
9
+ Decidim::Debates::Debate.not_hidden.where(author:)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -19,8 +19,8 @@ module Decidim
19
19
  return unless event && event_class
20
20
 
21
21
  Decidim::EventsManager.publish(
22
- event: event,
23
- event_class: event_class,
22
+ event:,
23
+ event_class:,
24
24
  resource: component,
25
25
  followers: component.participatory_space.followers
26
26
  )
@@ -44,7 +44,7 @@ module Decidim
44
44
 
45
45
  scope :open, -> { where(closed_at: nil) }
46
46
  scope :closed, -> { where.not(closed_at: nil) }
47
- scope :authored_by, ->(author) { where(author: author) }
47
+ scope :authored_by, ->(author) { where(author:) }
48
48
  scope :commented_by, lambda { |author|
49
49
  joins(:comments).where(
50
50
  decidim_comments_comments:
@@ -56,12 +56,6 @@ module Decidim
56
56
  }
57
57
  scope_search_multi :with_any_state, [:open, :closed]
58
58
 
59
- # Returns the presenter for this debate, to be used in the views.
60
- # Required by ResourceRenderer.
61
- def presenter
62
- Decidim::Debates::DebatePresenter.new(self)
63
- end
64
-
65
59
  def self.log_presenter_class_for(_log)
66
60
  Decidim::Debates::AdminLog::DebatePresenter
67
61
  end
@@ -153,12 +147,12 @@ module Decidim
153
147
  end
154
148
 
155
149
  def self.newsletter_participant_ids(component)
156
- authors_ids = Decidim::Debates::Debate.where(component: component)
150
+ authors_ids = Decidim::Debates::Debate.where(component:)
157
151
  .where(decidim_author_type: Decidim::UserBaseEntity.name)
158
152
  .where.not(author: nil)
159
153
  .group(:decidim_author_id)
160
154
  .pluck(:decidim_author_id).flatten.compact
161
- commentators_ids = Decidim::Comments::Comment.user_commentators_ids_in(Decidim::Debates::Debate.where(component: component))
155
+ commentators_ids = Decidim::Comments::Comment.user_commentators_ids_in(Decidim::Debates::Debate.where(component:))
162
156
  (authors_ids + commentators_ids).flatten.compact.uniq
163
157
  end
164
158
 
@@ -195,7 +189,7 @@ module Decidim
195
189
  last_comment_at: last_comment&.created_at,
196
190
  last_comment_by_id: last_comment&.decidim_user_group_id || last_comment&.decidim_author_id,
197
191
  last_comment_by_type: last_comment&.decidim_author_type,
198
- comments_count: comments_count,
192
+ comments_count:,
199
193
  updated_at: Time.current
200
194
  )
201
195
  end
@@ -0,0 +1,2 @@
1
+ // Images
2
+ require.context("../images", true)