decidim-initiatives 0.26.2 → 0.27.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/app/cells/decidim/initiatives/content_blocks/highlighted_initiatives/show.erb +2 -2
  4. data/app/commands/decidim/initiatives/admin/create_initiative_type.rb +7 -3
  5. data/app/commands/decidim/initiatives/admin/create_initiative_type_scope.rb +3 -3
  6. data/app/commands/decidim/initiatives/admin/publish_initiative.rb +1 -1
  7. data/app/commands/decidim/initiatives/admin/send_initiative_to_technical_validation.rb +2 -2
  8. data/app/commands/decidim/initiatives/admin/unpublish_initiative.rb +1 -1
  9. data/app/commands/decidim/initiatives/admin/update_initiative.rb +1 -1
  10. data/app/commands/decidim/initiatives/admin/update_initiative_answer.rb +1 -1
  11. data/app/commands/decidim/initiatives/admin/update_initiative_type.rb +19 -14
  12. data/app/commands/decidim/initiatives/admin/update_initiative_type_scope.rb +1 -1
  13. data/app/commands/decidim/initiatives/admin/update_initiatives_settings.rb +46 -0
  14. data/app/commands/decidim/initiatives/approve_membership_request.rb +1 -1
  15. data/app/commands/decidim/initiatives/create_initiative.rb +1 -1
  16. data/app/commands/decidim/initiatives/revoke_membership_request.rb +1 -1
  17. data/app/commands/decidim/initiatives/send_initiative_to_technical_validation.rb +2 -2
  18. data/app/commands/decidim/initiatives/spawn_committee_request.rb +1 -1
  19. data/app/commands/decidim/initiatives/unvote_initiative.rb +1 -1
  20. data/app/commands/decidim/initiatives/update_initiative.rb +1 -1
  21. data/app/commands/decidim/initiatives/validate_mobile_phone.rb +1 -1
  22. data/app/commands/decidim/initiatives/validate_sms_code.rb +1 -1
  23. data/app/commands/decidim/initiatives/vote_initiative.rb +2 -6
  24. data/app/controllers/concerns/decidim/initiatives/orderable.rb +8 -0
  25. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +3 -2
  26. data/app/controllers/decidim/initiatives/admin/initiatives_settings_controller.rb +49 -0
  27. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +6 -3
  28. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +1 -1
  29. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +2 -2
  30. data/app/controllers/decidim/initiatives/initiatives_controller.rb +18 -22
  31. data/app/forms/decidim/initiatives/admin/initiative_form.rb +4 -4
  32. data/app/forms/decidim/initiatives/admin/initiative_type_form.rb +2 -1
  33. data/app/forms/decidim/initiatives/admin/initiatives_settings_form.rb +14 -0
  34. data/app/forms/decidim/initiatives/vote_form.rb +0 -3
  35. data/app/helpers/decidim/initiatives/create_initiative_helper.rb +3 -3
  36. data/app/helpers/decidim/initiatives/initiative_helper.rb +6 -4
  37. data/app/mailers/decidim/initiatives/initiatives_mailer.rb +2 -2
  38. data/app/models/decidim/initiative.rb +60 -9
  39. data/app/models/decidim/initiatives_settings.rb +17 -0
  40. data/app/models/decidim/initiatives_type.rb +5 -0
  41. data/app/permissions/decidim/initiatives/admin/permissions.rb +10 -3
  42. data/app/permissions/decidim/initiatives/permissions.rb +1 -1
  43. data/app/presenters/decidim/initiatives/admin_log/initiatives_settings_presenter.rb +27 -0
  44. data/app/presenters/decidim/initiatives/admin_log/initiatives_type_presenter.rb +45 -0
  45. data/app/presenters/decidim/initiatives/initiative_stats_presenter.rb +4 -2
  46. data/app/queries/decidim/initiatives/admin/admin_users.rb +1 -1
  47. data/app/queries/decidim/initiatives/admin/manageable_initiatives.rb +1 -1
  48. data/app/queries/decidim/initiatives/freetext_initiative_types.rb +1 -1
  49. data/app/queries/decidim/initiatives/initiative_types.rb +1 -1
  50. data/app/queries/decidim/initiatives/initiatives_created.rb +1 -1
  51. data/app/queries/decidim/initiatives/initiatives_promoted.rb +1 -1
  52. data/app/queries/decidim/initiatives/organization_prioritized_initiatives.rb +1 -1
  53. data/app/queries/decidim/initiatives/outdated_validating_initiatives.rb +1 -1
  54. data/app/queries/decidim/initiatives/similar_initiatives.rb +1 -1
  55. data/app/queries/decidim/initiatives/support_period_finished_initiatives.rb +1 -1
  56. data/app/queries/decidim/initiatives/user_authorizations.rb +1 -1
  57. data/app/services/decidim/initiatives/initiative_search.rb +11 -102
  58. data/app/services/decidim/initiatives/pdf_signature_example.rb +15 -16
  59. data/app/services/decidim/initiatives/status_change_notifier.rb +1 -1
  60. data/app/views/decidim/initiatives/admin/initiatives_settings/_form.html.erb +10 -0
  61. data/app/views/decidim/initiatives/admin/initiatives_settings/edit.html.erb +6 -0
  62. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +4 -0
  63. data/app/views/decidim/initiatives/create_initiative/fill_data.html.erb +3 -1
  64. data/app/views/decidim/initiatives/initiatives/_filters.html.erb +5 -5
  65. data/app/views/decidim/initiatives/initiatives/_form.html.erb +3 -1
  66. data/app/views/decidim/initiatives/initiatives/show.html.erb +4 -2
  67. data/app/views/decidim/initiatives/initiatives_mailer/notify_creation.html.erb +2 -2
  68. data/app/views/layouts/decidim/_initiative_header.html.erb +1 -1
  69. data/app/views/layouts/decidim/_initiative_header_steps.html.erb +3 -1
  70. data/app/views/layouts/decidim/initiative_creation.html.erb +4 -1
  71. data/app/views/layouts/decidim/initiative_signature_creation.html.erb +4 -1
  72. data/config/locales/ar.yml +1 -1
  73. data/config/locales/bg.yml +1 -0
  74. data/config/locales/ca.yml +26 -1
  75. data/config/locales/cs.yml +28 -3
  76. data/config/locales/de.yml +30 -1
  77. data/config/locales/el.yml +1 -0
  78. data/config/locales/en.yml +25 -1
  79. data/config/locales/es-MX.yml +26 -1
  80. data/config/locales/es-PY.yml +26 -1
  81. data/config/locales/es.yml +26 -1
  82. data/config/locales/eu.yml +1 -0
  83. data/config/locales/fi-plain.yml +25 -0
  84. data/config/locales/fi.yml +25 -0
  85. data/config/locales/fr-CA.yml +26 -1
  86. data/config/locales/fr.yml +27 -2
  87. data/config/locales/ga-IE.yml +1 -0
  88. data/config/locales/gl.yml +1 -0
  89. data/config/locales/hu.yml +191 -0
  90. data/config/locales/id-ID.yml +1 -0
  91. data/config/locales/is-IS.yml +4 -1
  92. data/config/locales/it.yml +1 -0
  93. data/config/locales/ja.yml +26 -1
  94. data/config/locales/lb.yml +1 -0
  95. data/config/locales/lt.yml +658 -0
  96. data/config/locales/lv.yml +1 -0
  97. data/config/locales/nl.yml +1 -0
  98. data/config/locales/no.yml +18 -0
  99. data/config/locales/pl.yml +1 -0
  100. data/config/locales/pt-BR.yml +1 -0
  101. data/config/locales/pt.yml +1 -0
  102. data/config/locales/ro-RO.yml +2 -0
  103. data/config/locales/ru.yml +3 -0
  104. data/config/locales/sk.yml +1 -0
  105. data/config/locales/sl.yml +1 -0
  106. data/config/locales/sv.yml +7 -0
  107. data/config/locales/tr-TR.yml +1 -0
  108. data/config/locales/uk.yml +3 -0
  109. data/config/locales/zh-CN.yml +1 -0
  110. data/db/migrate/20220518053612_add_comments_enabled_to_initiative_types.rb +7 -0
  111. data/db/migrate/20220527130640_create_decidim_initiatives_settings.rb +10 -0
  112. data/lib/decidim/initiatives/admin_engine.rb +16 -0
  113. data/lib/decidim/initiatives/participatory_space.rb +3 -3
  114. data/lib/decidim/initiatives/test/factories.rb +34 -1
  115. data/lib/decidim/initiatives/version.rb +1 -1
  116. data/lib/gem_overrides/origami/date.rb +47 -0
  117. metadata +45 -20
@@ -19,7 +19,7 @@ module Decidim
19
19
  attribute :signature_start_date, Decidim::Attributes::LocalizedDate
20
20
  attribute :signature_end_date, Decidim::Attributes::LocalizedDate
21
21
  attribute :hashtag, String
22
- attribute :offline_votes, Hash[Symbol => Integer]
22
+ attribute :offline_votes, Hash
23
23
  attribute :state, String
24
24
  attribute :attachment, AttachmentForm
25
25
 
@@ -47,7 +47,7 @@ module Decidim
47
47
  def signature_type_updatable?
48
48
  @signature_type_updatable ||= begin
49
49
  state ||= context.initiative.state
50
- state == "validating" && context.current_user.admin? || state == "created"
50
+ (state == "validating" && context.current_user.admin?) || state == "created"
51
51
  end
52
52
  end
53
53
 
@@ -74,7 +74,7 @@ module Decidim
74
74
  # Private: set the in-person signatures to zero for every scope
75
75
  def zero_offine_votes_with_scopes_names(model)
76
76
  model.votable_initiative_type_scopes.each_with_object({}) do |initiative_scope_type, all_votes|
77
- all_votes[initiative_scope_type.decidim_scopes_id&.to_s&.to_sym || "global"] = [0, initiative_scope_type.scope_name]
77
+ all_votes[initiative_scope_type.decidim_scopes_id || "global"] = [0, initiative_scope_type.scope_name]
78
78
  end
79
79
  end
80
80
 
@@ -83,7 +83,7 @@ module Decidim
83
83
  model.offline_votes.delete("total")
84
84
  model.offline_votes.each_with_object({}) do |(decidim_scope_id, votes), all_votes|
85
85
  scope_name = model.votable_initiative_type_scopes.find do |initiative_scope_type|
86
- initiative_scope_type.global_scope? && decidim_scope_id == "global" ||
86
+ (initiative_scope_type.global_scope? && decidim_scope_id == "global") ||
87
87
  initiative_scope_type.decidim_scopes_id == decidim_scope_id.to_i
88
88
  end.scope_name
89
89
 
@@ -13,11 +13,12 @@ module Decidim
13
13
 
14
14
  translatable_attribute :title, String
15
15
  translatable_attribute :description, String
16
- attribute :banner_image, String
16
+ attribute :banner_image
17
17
  attribute :signature_type, String
18
18
  attribute :undo_online_signatures_enabled, Boolean
19
19
  attribute :attachments_enabled, Boolean
20
20
  attribute :custom_signature_end_date_enabled, Boolean
21
+ attribute :comments_enabled, Boolean
21
22
  attribute :area_enabled, Boolean
22
23
  attribute :child_scope_threshold_enabled, Boolean
23
24
  attribute :only_global_scope_enabled, Boolean
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ module Admin
6
+ # A form object used to create initiatives settings from the admin dashboard.
7
+ class InitiativesSettingsForm < Form
8
+ mimic :initiatives_settings
9
+
10
+ attribute :initiatives_order, String
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,13 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "virtus/multiparams"
4
-
5
3
  module Decidim
6
4
  module Initiatives
7
5
  # A form object used to collect the data for a new initiative.
8
6
  class VoteForm < Form
9
7
  include TranslatableAttributes
10
- include Virtus::Multiparams
11
8
 
12
9
  mimic :initiatives_vote
13
10
 
@@ -27,7 +27,7 @@ module Decidim
27
27
  [
28
28
  I18n.t(
29
29
  "online",
30
- scope: %w(activemodel attributes initiative signature_type_values)
30
+ scope: "activemodel.attributes.initiative.signature_type_values"
31
31
  ), "online"
32
32
  ]
33
33
  ]
@@ -38,7 +38,7 @@ module Decidim
38
38
  [
39
39
  I18n.t(
40
40
  "offline",
41
- scope: %w(activemodel attributes initiative signature_type_values)
41
+ scope: "activemodel.attributes.initiative.signature_type_values"
42
42
  ), "offline"
43
43
  ]
44
44
  ]
@@ -49,7 +49,7 @@ module Decidim
49
49
  [
50
50
  I18n.t(
51
51
  type,
52
- scope: %w(activemodel attributes initiative signature_type_values)
52
+ scope: "activemodel.attributes.initiative.signature_type_values"
53
53
  ), type
54
54
  ]
55
55
  end
@@ -43,7 +43,9 @@ module Decidim
43
43
  def popularity_tag(initiative)
44
44
  content_tag(:div, class: "extra__popularity popularity #{popularity_class(initiative)}".strip) do
45
45
  5.times do
46
- concat(content_tag(:span, class: "popularity__item") {})
46
+ concat(content_tag(:span, class: "popularity__item") do
47
+ # empty block
48
+ end)
47
49
  end
48
50
 
49
51
  concat(content_tag(:span, class: "popularity__desc") do
@@ -89,11 +91,11 @@ module Decidim
89
91
  tag = "button"
90
92
  html_options ||= {}
91
93
 
92
- if !current_user
93
- html_options["data-open"] = "loginModal"
94
- else
94
+ if current_user
95
95
  html_options["data-open"] = "authorizationModal"
96
96
  html_options["data-open-url"] = authorization_sign_modal_initiative_path(initiative)
97
+ else
98
+ html_options["data-open"] = "loginModal"
97
99
  end
98
100
 
99
101
  html_options["onclick"] = "event.preventDefault();"
@@ -7,8 +7,8 @@ module Decidim
7
7
  include Decidim::TranslatableAttributes
8
8
  include Decidim::SanitizeHelper
9
9
 
10
- add_template_helper Decidim::TranslatableAttributes
11
- add_template_helper Decidim::SanitizeHelper
10
+ helper Decidim::TranslatableAttributes
11
+ helper Decidim::SanitizeHelper
12
12
 
13
13
  # Notifies initiative creation
14
14
  def notify_creation(initiative)
@@ -22,6 +22,8 @@ module Decidim
22
22
  include Decidim::Initiatives::HasArea
23
23
  include Decidim::TranslatableResource
24
24
  include Decidim::HasResourcePermission
25
+ include Decidim::HasArea
26
+ include Decidim::FilterableResource
25
27
 
26
28
  translatable_fields :title, :description, :answer
27
29
 
@@ -64,9 +66,8 @@ module Decidim
64
66
 
65
67
  validates :title, :description, :state, :signature_type, presence: true
66
68
  validates :hashtag,
67
- uniqueness: true,
68
- allow_blank: true,
69
- case_sensitive: false
69
+ uniqueness: { allow_blank: true, case_sensitive: false }
70
+
70
71
  validate :signature_type_allowed
71
72
 
72
73
  scope :open, lambda {
@@ -80,6 +81,8 @@ module Decidim
80
81
  scope :published, -> { where.not(published_at: nil) }
81
82
  scope :with_state, ->(state) { where(state: state) if state.present? }
82
83
 
84
+ scope_search_multi :with_any_state, [:accepted, :rejected, :answered, :open, :closed]
85
+
83
86
  scope :currently_signable, lambda {
84
87
  where("signature_start_date <= ?", Date.current)
85
88
  .where("signature_end_date >= ?", Date.current)
@@ -106,6 +109,42 @@ module Decidim
106
109
  scope :future_spaces, -> { none }
107
110
  scope :past_spaces, -> { closed }
108
111
 
112
+ scope :with_any_type, lambda { |*original_type_ids|
113
+ type_ids = original_type_ids.flatten
114
+ return self if type_ids.include?("all")
115
+
116
+ types = InitiativesTypeScope.where(decidim_initiatives_types_id: type_ids).pluck(:id)
117
+ where(scoped_type: types)
118
+ }
119
+
120
+ # Redefine the with_any_scope method as the initiative scope is defined by
121
+ # the initiative type scope.
122
+ scope :with_any_scope, lambda { |*original_scope_ids|
123
+ scope_ids = original_scope_ids.flatten
124
+ return self if scope_ids.include?("all")
125
+
126
+ clean_scope_ids = scope_ids
127
+
128
+ conditions = []
129
+ conditions << "decidim_initiatives_type_scopes.decidim_scopes_id IS NULL" if clean_scope_ids.delete("global")
130
+ conditions.concat(["? = ANY(decidim_scopes.part_of)"] * clean_scope_ids.count) if clean_scope_ids.any?
131
+
132
+ joins(:scoped_type).references(:decidim_scopes).where(conditions.join(" OR "), *clean_scope_ids.map(&:to_i))
133
+ }
134
+
135
+ scope :authored_by, lambda { |author|
136
+ co_authoring_initiative_ids = Decidim::InitiativesCommitteeMember.where(
137
+ decidim_users_id: author
138
+ ).pluck(:decidim_initiatives_id)
139
+
140
+ where(
141
+ decidim_author_id: author,
142
+ decidim_author_type: Decidim::UserBaseEntity.name
143
+ ).or(
144
+ where(id: co_authoring_initiative_ids)
145
+ )
146
+ }
147
+
109
148
  before_update :set_offline_votes_total
110
149
  after_commit :notify_state_change
111
150
  after_create :notify_creation
@@ -124,6 +163,10 @@ module Decidim
124
163
  Decidim::Initiatives::AdminLog::InitiativePresenter
125
164
  end
126
165
 
166
+ def self.ransackable_scopes(_auth_object = nil)
167
+ [:with_any_state, :with_any_type, :with_any_scope, :with_any_area]
168
+ end
169
+
127
170
  delegate :document_number_authorization_handler, :promoting_committee_enabled?, to: :type
128
171
  delegate :type, :scope, :scope_name, to: :scoped_type, allow_nil: true
129
172
 
@@ -135,6 +178,11 @@ module Decidim
135
178
  type.attached_uploader(:banner_image)
136
179
  end
137
180
 
181
+ # Public: Whether the object's comments are visible or not.
182
+ def commentable?
183
+ type.comments_enabled?
184
+ end
185
+
138
186
  # Public: Check if an initiative has been created by an individual person.
139
187
  # If it's false, then it has been created by an authorized organization.
140
188
  #
@@ -215,7 +263,7 @@ module Decidim
215
263
  published_at: Time.current,
216
264
  state: "published",
217
265
  signature_start_date: Date.current,
218
- signature_end_date: signature_end_date || Date.current + Decidim::Initiatives.default_signature_time_period_length
266
+ signature_end_date: signature_end_date || (Date.current + Decidim::Initiatives.default_signature_time_period_length)
219
267
  )
220
268
  end
221
269
 
@@ -420,6 +468,10 @@ module Decidim
420
468
  ActionAuthorizer.new(user, "comment", self, nil).authorize.ok?
421
469
  end
422
470
 
471
+ def self.ransack(params = {}, options = {})
472
+ Initiatives::InitiativeSearch.new(self, params, options)
473
+ end
474
+
423
475
  private
424
476
 
425
477
  # Private: This is just an alias because the naming on InitiativeTypeScope
@@ -453,11 +505,10 @@ module Decidim
453
505
  end
454
506
 
455
507
  # Allow ransacker to search for a key in a hstore column (`title`.`en`)
456
- [:title, :description].each do |column|
457
- ransacker column do |parent|
458
- Arel::Nodes::InfixOperation.new("->>", parent.table[column], Arel::Nodes.build_quoted(I18n.locale.to_s))
459
- end
460
- end
508
+ [:title, :description].each { |column| ransacker_i18n(column) }
509
+
510
+ # Alias search_text as a grouped OR query with all the text searchable fields.
511
+ ransack_alias :search_text, :id_string_or_title_or_description_or_author_name_or_author_nickname
461
512
 
462
513
  # Allow ransacker to search on an Enum Field
463
514
  ransacker :state, formatter: proc { |int| states[int] }
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # Initiatives setting.
5
+ class InitiativesSettings < ApplicationRecord
6
+ include Decidim::Traceable
7
+ include Decidim::Loggable
8
+
9
+ belongs_to :organization,
10
+ foreign_key: "decidim_organization_id",
11
+ class_name: "Decidim::Organization"
12
+
13
+ def self.log_presenter_class_for(_log)
14
+ Decidim::Initiatives::AdminLog::InitiativesSettingsPresenter
15
+ end
16
+ end
17
+ end
@@ -6,6 +6,7 @@ module Decidim
6
6
  include Decidim::HasResourcePermission
7
7
  include Decidim::TranslatableResource
8
8
  include Decidim::HasUploadValidations
9
+ include Decidim::Traceable
9
10
 
10
11
  translatable_fields :title, :description, :extra_fields_legal_information
11
12
 
@@ -48,5 +49,9 @@ module Decidim
48
49
  def mounted_params
49
50
  { host: organization.host }
50
51
  end
52
+
53
+ def self.log_presenter_class_for(_log)
54
+ Decidim::Initiatives::AdminLog::InitiativesTypePresenter
55
+ end
51
56
  end
52
57
  end
@@ -19,6 +19,7 @@ module Decidim
19
19
  initiative_committee_action?
20
20
  initiative_user_action?
21
21
  attachment_action?
22
+ initiatives_settings_action?
22
23
 
23
24
  return permission_action
24
25
  end
@@ -36,6 +37,7 @@ module Decidim
36
37
  initiative_committee_action?
37
38
  initiative_admin_user_action?
38
39
  initiative_export_action?
40
+ initiatives_settings_action?
39
41
  moderator_action?
40
42
  allow! if permission_action.subject == :attachment
41
43
 
@@ -134,12 +136,10 @@ module Decidim
134
136
  case permission_action.action
135
137
  when :read
136
138
  toggle_allow(Decidim::Initiatives.print_enabled)
137
- when :publish
139
+ when :publish, :discard
138
140
  toggle_allow(initiative.validating?)
139
141
  when :unpublish
140
142
  toggle_allow(initiative.published?)
141
- when :discard
142
- toggle_allow(initiative.validating?)
143
143
  when :export_pdf_signatures
144
144
  toggle_allow(initiative.published? || initiative.accepted? || initiative.rejected?)
145
145
  when :export_votes
@@ -165,6 +165,13 @@ module Decidim
165
165
  allow! if permission_action.subject == :initiatives && permission_action.action == :export
166
166
  end
167
167
 
168
+ def initiatives_settings_action?
169
+ return unless permission_action.action == :update &&
170
+ permission_action.subject == :initiatives_settings
171
+
172
+ toggle_allow(user.admin?)
173
+ end
174
+
168
175
  def moderator_action?
169
176
  return unless permission_action.subject == :moderation
170
177
 
@@ -107,7 +107,7 @@ module Decidim
107
107
  end
108
108
 
109
109
  def access_request_without_user?
110
- !initiative.published? && initiative.promoting_committee_enabled? || Decidim::Initiatives.do_not_require_authorization
110
+ (!initiative.published? && initiative.promoting_committee_enabled?) || Decidim::Initiatives.do_not_require_authorization
111
111
  end
112
112
 
113
113
  def access_request_membership?
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::InitiativesSettings`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you shouldn't need to call this class
10
+ # directly, but here's an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # InitiativesSettingsPresenter.new(action_log, view_helpers).present
15
+ class InitiativesSettingsPresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def action_string
19
+ case action
20
+ when "update"
21
+ "decidim.initiatives.admin_log.initiatives_settings.#{action}"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::InitiativesType`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you shouldn't need to call this class
10
+ # directly, but here's an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # InitiativesTypePresenter.new(action_log, view_helpers).present
15
+ class InitiativesTypePresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def action_string
19
+ case action
20
+ when "create", "update", "delete"
21
+ "decidim.initiatives.admin_log.initiatives_type.#{action}"
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ def diff_fields_mapping
28
+ {
29
+ description: :i18n,
30
+ title: :i18n,
31
+ extra_fields_legal_information: :i18n,
32
+ minimum_committee_members: :integer,
33
+ document_number_authorization_handler: :i18n,
34
+ undo_online_signatures_enabled: :boolean,
35
+ promoting_committee_enabled: :boolean
36
+ }
37
+ end
38
+
39
+ def diff_actions
40
+ super + %w(update)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -3,8 +3,10 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # A presenter to render statistics in the homepage.
6
- class InitiativeStatsPresenter < Rectify::Presenter
7
- attribute :initiative, Decidim::Initiative
6
+ class InitiativeStatsPresenter < SimpleDelegator
7
+ def initiative
8
+ __getobj__.fetch(:initiative)
9
+ end
8
10
 
9
11
  def comments_count
10
12
  Rails.cache.fetch(
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Initiatives
5
5
  module Admin
6
6
  # A class used to find the admins for an initiative or an organization initiatives.
7
- class AdminUsers < Rectify::Query
7
+ class AdminUsers < Decidim::Query
8
8
  # Syntactic sugar to initialize the class and return the queried objects.
9
9
  #
10
10
  # initiative - Decidim::Initiative
@@ -6,7 +6,7 @@ module Decidim
6
6
  # Class that retrieves manageable initiatives for the given user.
7
7
  # Regular users will get only their initiatives. Administrators will
8
8
  # retrieve all initiatives.
9
- class ManageableInitiatives < Rectify::Query
9
+ class ManageableInitiatives < Decidim::Query
10
10
  # Syntactic sugar to initialize the class and return the queried objects
11
11
  #
12
12
  # user - Decidim::User
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # This query searches scopes by name.
6
- class FreetextInitiativeTypes < Rectify::Query
6
+ class FreetextInitiativeTypes < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # organization - an Organization context for the initiative type search
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # Class uses to retrieve the available initiative types.
6
- class InitiativeTypes < Rectify::Query
6
+ class InitiativeTypes < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # organization - Decidim::Organization
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # Class uses to retrieve the initiatives created by the given user.
6
- class InitiativesCreated < Rectify::Query
6
+ class InitiativesCreated < Decidim::Query
7
7
  attr_reader :user
8
8
 
9
9
  # Syntactic sugar to initialize the class and return the queried objects.
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # Class uses to retrieve initiatives promoted by the given user
6
- class InitiativesPromoted < Rectify::Query
6
+ class InitiativesPromoted < Decidim::Query
7
7
  attr_reader :user
8
8
 
9
9
  # Syntactic sugar to initialize the class and return the queried objects.
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # This query retrieves the organization prioritized initiatives that will appear in the homepage
6
- class OrganizationPrioritizedInitiatives < Rectify::Query
6
+ class OrganizationPrioritizedInitiatives < Decidim::Query
7
7
  attr_reader :organization, :order
8
8
 
9
9
  def initialize(organization, order)
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Initiatives
5
5
  # Class uses to retrieve initiatives that have been a long time in
6
6
  # validating state
7
- class OutdatedValidatingInitiatives < Rectify::Query
7
+ class OutdatedValidatingInitiatives < Decidim::Query
8
8
  # Syntactic sugar to initialize the class and return the queried objects.
9
9
  #
10
10
  # period_length - Maximum time in validating state
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # Class uses to retrieve similar initiatives types.
6
- class SimilarInitiatives < Rectify::Query
6
+ class SimilarInitiatives < Decidim::Query
7
7
  include Decidim::TranslationsHelper
8
8
  include CurrentLocale
9
9
 
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Initiatives
5
5
  # Class uses to retrieve initiatives that have been a long time in validating
6
6
  # state
7
- class SupportPeriodFinishedInitiatives < Rectify::Query
7
+ class SupportPeriodFinishedInitiatives < Decidim::Query
8
8
  # Retrieves the initiatives ready to be evaluated to decide if they've been
9
9
  # accepted or not.
10
10
  def query
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  # Class used the retrieve the authorizations for a user.
6
- class UserAuthorizations < Rectify::Query
6
+ class UserAuthorizations < Decidim::Query
7
7
  attr_reader :user
8
8
 
9
9
  # Syntactic sugar to initialize the class and return the queried objects.