decidim-core 0.28.3 → 0.28.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity_cell.rb +1 -4
  3. data/app/cells/decidim/author/show.erb +5 -4
  4. data/app/cells/decidim/author_cell.rb +26 -0
  5. data/app/cells/decidim/card_s/show.erb +5 -3
  6. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -1
  7. data/app/cells/decidim/diff_cell.rb +4 -0
  8. data/app/cells/decidim/endorsement_buttons_cell.rb +1 -1
  9. data/app/cells/decidim/nav_links/show.erb +3 -3
  10. data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +1 -1
  11. data/app/cells/decidim/resource_types_filter/show.erb +11 -12
  12. data/app/cells/decidim/translation_bar/show.erb +3 -3
  13. data/app/cells/decidim/translation_bar_cell.rb +1 -1
  14. data/app/commands/decidim/amendable/create_draft.rb +1 -0
  15. data/app/commands/decidim/destroy_account.rb +3 -0
  16. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +1 -1
  17. data/app/controllers/concerns/decidim/direct_upload.rb +82 -0
  18. data/app/controllers/decidim/doorkeeper/credentials_controller.rb +1 -1
  19. data/app/controllers/decidim/links_controller.rb +1 -1
  20. data/app/controllers/decidim/profiles_controller.rb +4 -0
  21. data/app/forms/decidim/upload_validation_form.rb +1 -1
  22. data/app/helpers/concerns/decidim/user_role_checker.rb +46 -0
  23. data/app/helpers/decidim/cta_button_helper.rb +1 -1
  24. data/app/helpers/decidim/layout_helper.rb +28 -0
  25. data/app/helpers/decidim/map_helper.rb +6 -1
  26. data/app/helpers/decidim/menu_helper.rb +1 -1
  27. data/app/helpers/decidim/sanitize_helper.rb +11 -2
  28. data/app/helpers/decidim/scopes_helper.rb +5 -2
  29. data/app/models/decidim/action_log.rb +11 -1
  30. data/app/models/decidim/attachment.rb +1 -1
  31. data/app/packs/src/decidim/a11y.js +11 -15
  32. data/app/packs/src/decidim/append_redirect_url_to_modals.js +24 -14
  33. data/app/packs/src/decidim/direct_uploads/upload_field.js +21 -8
  34. data/app/packs/src/decidim/direct_uploads/upload_modal.js +3 -0
  35. data/app/packs/src/decidim/index.js +3 -0
  36. data/app/packs/src/decidim/remote_tooltips.js +38 -0
  37. data/app/packs/src/decidim/toggle.js +1 -1
  38. data/app/packs/src/decidim/tooltips.js +42 -22
  39. data/app/packs/stylesheets/decidim/_buttons.scss +1 -1
  40. data/app/packs/stylesheets/decidim/_modal_update.scss +4 -0
  41. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  42. data/app/packs/stylesheets/decidim/_progress-bar.scss +1 -1
  43. data/app/packs/stylesheets/decidim/legacy/conference-diploma.scss +2 -1
  44. data/app/presenters/decidim/attachment_presenter.rb +1 -1
  45. data/app/presenters/decidim/menu_item_presenter.rb +1 -1
  46. data/app/queries/decidim/last_activity.rb +16 -5
  47. data/app/services/decidim/base_diff_renderer.rb +26 -2
  48. data/app/services/decidim/email_notification_generator.rb +14 -5
  49. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +1 -1
  50. data/app/views/decidim/offline/show.html.erb +1 -1
  51. data/app/views/decidim/pages/_tabbed.html.erb +5 -5
  52. data/app/views/decidim/shared/_filters.html.erb +5 -5
  53. data/app/views/decidim/shared/_orders.html.erb +3 -2
  54. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
  55. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  56. data/app/views/layouts/decidim/_head.html.erb +1 -1
  57. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  58. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +2 -2
  59. data/config/locales/ar.yml +12 -1
  60. data/config/locales/bg.yml +0 -1
  61. data/config/locales/bn-BD.yml +1 -0
  62. data/config/locales/bs-BA.yml +98 -0
  63. data/config/locales/ca.yml +14 -10
  64. data/config/locales/cs.yml +6 -1
  65. data/config/locales/de.yml +18 -14
  66. data/config/locales/el.yml +3 -1
  67. data/config/locales/en.yml +5 -1
  68. data/config/locales/es-MX.yml +6 -2
  69. data/config/locales/es-PY.yml +6 -2
  70. data/config/locales/es.yml +12 -8
  71. data/config/locales/eu.yml +202 -185
  72. data/config/locales/fi-plain.yml +5 -1
  73. data/config/locales/fi.yml +40 -36
  74. data/config/locales/fr-CA.yml +6 -2
  75. data/config/locales/fr.yml +5 -1
  76. data/config/locales/ga-IE.yml +5 -0
  77. data/config/locales/gl.yml +4 -1
  78. data/config/locales/hu.yml +1 -2
  79. data/config/locales/id-ID.yml +4 -0
  80. data/config/locales/is-IS.yml +4 -1
  81. data/config/locales/it.yml +40 -0
  82. data/config/locales/ja.yml +18 -16
  83. data/config/locales/lb.yml +5 -0
  84. data/config/locales/lt.yml +1 -2
  85. data/config/locales/lv.yml +4 -0
  86. data/config/locales/nl.yml +6 -1
  87. data/config/locales/no.yml +5 -0
  88. data/config/locales/pl.yml +1 -2
  89. data/config/locales/pt-BR.yml +199 -1
  90. data/config/locales/pt.yml +11 -0
  91. data/config/locales/ro-RO.yml +302 -180
  92. data/config/locales/ru.yml +4 -0
  93. data/config/locales/sk.yml +5 -1
  94. data/config/locales/sv.yml +452 -81
  95. data/config/locales/tr-TR.yml +6 -1
  96. data/config/locales/uk.yml +4 -1
  97. data/config/locales/zh-CN.yml +5 -0
  98. data/config/locales/zh-TW.yml +4 -1
  99. data/config/routes.rb +1 -0
  100. data/decidim-core.gemspec +4 -1
  101. data/lib/decidim/api/functions/component_list.rb +1 -1
  102. data/lib/decidim/api/functions/participatory_space_finder_base.rb +11 -1
  103. data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -1
  104. data/lib/decidim/api/types/component_type.rb +7 -0
  105. data/lib/decidim/api/types/user_group_type.rb +4 -0
  106. data/lib/decidim/api/types/user_type.rb +4 -0
  107. data/lib/decidim/attributes/rich_text.rb +38 -0
  108. data/lib/decidim/attributes/time_with_zone.rb +11 -1
  109. data/lib/decidim/attributes.rb +2 -0
  110. data/lib/decidim/content_parsers/blob_parser.rb +93 -0
  111. data/lib/decidim/content_parsers.rb +1 -0
  112. data/lib/decidim/content_renderers/blob_renderer.rb +90 -0
  113. data/lib/decidim/content_renderers.rb +1 -0
  114. data/lib/decidim/core/engine.rb +35 -1
  115. data/lib/decidim/core/test/factories.rb +28 -0
  116. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +1 -1
  117. data/lib/decidim/core/test/shared_examples/comments_examples.rb +25 -2
  118. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +112 -14
  119. data/lib/decidim/core/version.rb +1 -1
  120. data/lib/decidim/core.rb +11 -0
  121. data/lib/decidim/diffy_extension.rb +18 -0
  122. data/lib/decidim/form_builder.rb +1 -1
  123. data/lib/decidim/map/autocomplete.rb +1 -0
  124. data/lib/decidim/organization_settings.rb +4 -1
  125. data/lib/decidim/participatory_space_user.rb +4 -0
  126. data/lib/decidim/query_extensions.rb +0 -26
  127. data/lib/decidim/settings_manifest.rb +2 -0
  128. data/lib/decidim/translatable_attributes.rb +6 -1
  129. data/lib/decidim/view_model.rb +1 -1
  130. data/lib/tasks/upgrade/decidim_attachments.rake +14 -0
  131. data/lib/tasks/upgrade/decidim_fix_categorization.rake +34 -8
  132. metadata +30 -7
@@ -25,7 +25,7 @@ shared_examples "Endorse resource system specs" do
25
25
  end
26
26
 
27
27
  context "when endorsements are not enabled" do
28
- let(:component_traits) { [:with_votes_enabled, :with_endorsements_disabled] }
28
+ let(:component_traits) { [:with_endorsements_disabled] }
29
29
 
30
30
  context "when the user is not logged in" do
31
31
  it "does not show the endorse resource button and counts" do
@@ -51,18 +51,18 @@ shared_examples "Endorse resource system specs" do
51
51
 
52
52
  it "shows the endorsements count and the endorse button is disabled" do
53
53
  visit_resource
54
- expect(page).to have_css("[data-buttons] button[disabled='true']")
54
+ expect(page).to have_css("#resource-#{resource.id}-endorsement-block button[disabled='true']")
55
55
  end
56
56
  end
57
57
 
58
58
  context "when endorsements are enabled" do
59
- let(:component_traits) { [:with_votes_enabled, :with_endorsements_enabled] }
59
+ let(:component_traits) { [:with_endorsements_enabled] }
60
60
 
61
61
  context "when the user is not logged in" do
62
62
  it "is given the option to sign in" do
63
63
  visit_resource
64
- within "[data-buttons]", match: :first do
65
- click_button "Like"
64
+ within "#resource-#{resource.id}-endorsement-block" do
65
+ click_on "Like"
66
66
  end
67
67
 
68
68
  expect(page).to have_css("#loginModal", visible: :visible)
@@ -77,8 +77,8 @@ shared_examples "Endorse resource system specs" do
77
77
  context "when the resource is not endorsed yet" do
78
78
  it "is able to endorse the resource" do
79
79
  visit_resource
80
- within "[data-buttons]" do
81
- click_button "Like"
80
+ within "#resource-#{resource.id}-endorsement-block" do
81
+ click_on "Like"
82
82
  expect(page).to have_button("Dislike")
83
83
  end
84
84
  end
@@ -89,7 +89,7 @@ shared_examples "Endorse resource system specs" do
89
89
 
90
90
  it "is not able to endorse it again" do
91
91
  visit_resource
92
- within "[data-buttons]" do
92
+ within "#resource-#{resource.id}-endorsement-block" do
93
93
  expect(page).to have_button("Dislike")
94
94
  expect(page).not_to have_button("Like")
95
95
  end
@@ -97,8 +97,8 @@ shared_examples "Endorse resource system specs" do
97
97
 
98
98
  it "is able to undo the endorsement" do
99
99
  visit_resource
100
- within "[data-buttons]" do
101
- click_button "Dislike"
100
+ within "#resource-#{resource.id}-endorsement-block" do
101
+ click_on "Dislike"
102
102
  expect(page).to have_button("Like")
103
103
  end
104
104
  end
@@ -124,8 +124,8 @@ shared_examples "Endorse resource system specs" do
124
124
  context "when user is NOT verified" do
125
125
  it "is NOT able to endorse" do
126
126
  visit_resource
127
- within "[data-buttons]", match: :first do
128
- click_button "Like"
127
+ within "#resource-#{resource.id}-endorsement-block" do
128
+ click_on "Like"
129
129
  end
130
130
  expect(page).to have_css("#authorizationModal", visible: :visible)
131
131
  end
@@ -142,13 +142,111 @@ shared_examples "Endorse resource system specs" do
142
142
 
143
143
  it "IS able to endorse", :slow do
144
144
  visit_resource
145
- within "[data-buttons]", match: :first do
146
- click_button "Like"
145
+ within "#resource-#{resource.id}-endorsement-block" do
146
+ click_on "Like"
147
147
  end
148
148
  expect(page).to have_button("Dislike")
149
149
  end
150
150
  end
151
151
  end
152
+
153
+ context "when user being a part of a group" do
154
+ let(:component_traits) { [:with_endorsements_enabled] }
155
+ let!(:user_group) do
156
+ create(
157
+ :user_group,
158
+ :verified,
159
+ name: "Tester's Organization",
160
+ nickname: "test_org",
161
+ email: "t.mail.org@example.org",
162
+ users: [user],
163
+ organization:
164
+ )
165
+ end
166
+
167
+ before do
168
+ organization.update(user_groups_enabled:)
169
+ login_as user, scope: :user
170
+ visit_resource
171
+ end
172
+
173
+ context "when organization is not allowing user groups" do
174
+ let(:user_groups_enabled) { false }
175
+
176
+ it "is able to endorse the resource" do
177
+ within "#resource-#{resource.id}-endorsement-block" do
178
+ click_on "Like"
179
+ expect(page).to have_button("Dislike")
180
+ end
181
+ end
182
+ end
183
+
184
+ context "when organization allows user groups" do
185
+ let(:user_groups_enabled) { true }
186
+
187
+ it "opens a modal where you select identity as a user or a group" do
188
+ click_on "Like"
189
+ expect(page).to have_content("Select identity")
190
+ expect(page).to have_content("Tester's Organization")
191
+ expect(page).to have_content(user.name)
192
+ end
193
+
194
+ def add_likes
195
+ click_on "Like"
196
+ within "#user-identities" do
197
+ click_on "Tester's Organization"
198
+ click_on user.name
199
+ click_on "Done"
200
+ end
201
+ visit_resource
202
+ click_on "Dislike"
203
+ end
204
+
205
+ context "when both identities picked" do
206
+ it "likes the post as a group and a user" do
207
+ add_likes
208
+
209
+ within ".identities-modal__list" do
210
+ expect(page).to have_css(".is-selected", count: 2)
211
+ end
212
+ end
213
+ end
214
+
215
+ context "when like cancelled as a user" do
216
+ it "does not cancel group like" do
217
+ add_likes
218
+ find(".is-selected", match: :first).click
219
+ click_on "Done"
220
+ visit current_path
221
+ click_on "Like"
222
+
223
+ within ".identities-modal__list" do
224
+ expect(page).to have_css(".is-selected", count: 1)
225
+ within ".is-selected" do
226
+ expect(page).to have_content("Tester's Organization")
227
+ end
228
+ end
229
+ end
230
+ end
231
+
232
+ context "when like cancelled as a group" do
233
+ it "does not cancel user like" do
234
+ add_likes
235
+ page.all(".is-selected")[1].click
236
+ click_on "Done"
237
+ visit current_path
238
+ click_on "Dislike"
239
+
240
+ within ".identities-modal__list" do
241
+ expect(page).to have_css(".is-selected", count: 1)
242
+ within ".is-selected" do
243
+ expect(page).to have_text(user.name, exact: true)
244
+ end
245
+ end
246
+ end
247
+ end
248
+ end
249
+ end
152
250
  end
153
251
  end
154
252
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-core version.
5
5
  module Core
6
6
  def self.version
7
- "0.28.3"
7
+ "0.28.5"
8
8
  end
9
9
  end
10
10
  end
data/lib/decidim/core.rb CHANGED
@@ -542,6 +542,17 @@ module Decidim
542
542
  "/"
543
543
  end
544
544
 
545
+ # This is the maximum time that the cache will be stored. If nil, the cache will be stored indefinitely.
546
+ # Currently, cache is applied in the Cells where the method `cache_hash` is defined.
547
+ config_accessor :cache_expiry_time do
548
+ 24.hours
549
+ end
550
+
551
+ # Same as before, but specifically for cell displaying stats
552
+ config_accessor :stats_cache_expiry_time do
553
+ 10.minutes
554
+ end
555
+
545
556
  # Enable/Disable the service worker
546
557
  config_accessor :service_worker_enabled do
547
558
  Rails.env.exclude?("development")
@@ -13,6 +13,24 @@ module Decidim
13
13
  str = wrap_lines(@diff.map { |line| wrap_line(line) })
14
14
  ActionView::Base.new(ActionView::LookupContext.new(nil), {}, nil).sanitize(str, tags: TAGS)
15
15
  end
16
+
17
+ private
18
+
19
+ def wrap_line(line)
20
+ cleaned = clean_line(line)
21
+ case line
22
+ when /^(---|\+\+\+|\\\\)/
23
+ " <li class=\"diff-comment\"><div>#{line.chomp}</div></li>"
24
+ when /^\+/
25
+ " <li class=\"ins\"><ins>#{cleaned}</ins></li>"
26
+ when /^-/
27
+ " <li class=\"del\"><del>#{cleaned}</del></li>"
28
+ when /^ /
29
+ " <li class=\"unchanged\"><div>#{cleaned}</div></li>"
30
+ when /^@@/
31
+ " <li class=\"diff-block-info\"><div>#{line.chomp}</div></li>"
32
+ end
33
+ end
16
34
  end
17
35
 
18
36
  # Adding a new method to Diffy::Format so we can pass the
@@ -390,7 +390,7 @@ module Decidim
390
390
  # options - A Hash with options to build the field. See upload method for
391
391
  # more detailed information.
392
392
  def attachment(attribute, options = {})
393
- object_attachment = object.attachment.present?
393
+ object_attachment = object.respond_to?(:attachment) && object.attachment.present?
394
394
  record = object_attachment ? object.attachment : object
395
395
  options = {
396
396
  titled: options[:multiple],
@@ -42,6 +42,7 @@ module Decidim
42
42
  @autocomplete_utility ||= Decidim::Map.autocomplete(
43
43
  organization: @template.current_organization
44
44
  )
45
+
45
46
  return text_field(attribute, options) unless @autocomplete_utility
46
47
 
47
48
  # Decidim::Map::Autocomplete::Builder
@@ -105,7 +105,7 @@ module Decidim
105
105
  "upload" => {
106
106
  "allowed_file_extensions" => {
107
107
  "default" => %w(jpg jpeg png pdf rtf txt),
108
- "admin" => %w(jpg jpeg png pdf doc docx xls xlsx ppt pptx ppx rtf txt odt ott odf otg ods ots),
108
+ "admin" => %w(jpg jpeg png pdf doc docx xls xlsx ppt pptx ppx rtf txt odt ott odf otg ods ots csv json md),
109
109
  "image" => %w(jpg jpeg png)
110
110
  },
111
111
  "allowed_content_types" => {
@@ -125,7 +125,10 @@ module Decidim
125
125
  application/vnd.oasis.opendocument
126
126
  application/pdf
127
127
  application/rtf
128
+ application/json
129
+ text/markdown
128
130
  text/plain
131
+ text/csv
129
132
  )
130
133
  },
131
134
  "maximum_file_size" => {
@@ -37,6 +37,10 @@ module Decidim
37
37
  raise "Not implemented"
38
38
  end
39
39
 
40
+ def self.order_by_name
41
+ includes(:user).order("decidim_users.name ASC")
42
+ end
43
+
40
44
  private
41
45
 
42
46
  # Private: check if the process and the user have the same organization
@@ -10,22 +10,6 @@ module Decidim
10
10
  #
11
11
  # Returns nothing.
12
12
  def self.included(type)
13
- type.field :participatory_processes,
14
- [Decidim::ParticipatoryProcesses::ParticipatoryProcessType],
15
- null: true,
16
- description: "Lists all participatory_processes" do
17
- argument :filter, Decidim::ParticipatoryProcesses::ParticipatoryProcessInputFilter, "This argument lets you filter the results", required: false
18
- argument :order, Decidim::ParticipatoryProcesses::ParticipatoryProcessInputSort, "This argument lets you order the results", required: false
19
- end
20
-
21
- type.field :participatory_process,
22
- Decidim::ParticipatoryProcesses::ParticipatoryProcessType,
23
- null: true,
24
- description: "Finds a participatory_process" do
25
- argument :id, GraphQL::Types::ID, "The ID of the participatory space", required: false
26
- argument :slug, String, "The slug of the participatory process", required: false
27
- end
28
-
29
13
  type.field :component, Decidim::Core::ComponentInterface, null: true do
30
14
  description "Lists the components this space contains."
31
15
  argument :id, GraphQL::Types::ID, required: true, description: "The ID of the component to be found"
@@ -62,16 +46,6 @@ module Decidim
62
46
  end
63
47
  end
64
48
 
65
- def participatory_processes(filter: {}, order: {})
66
- manifest = Decidim.participatory_space_manifests.select { |m| m.name == :participatory_processes }.first
67
- Decidim::Core::ParticipatorySpaceListBase.new(manifest:).call(object, { filter:, order: }, context)
68
- end
69
-
70
- def participatory_process(id: nil, slug: nil)
71
- manifest = Decidim.participatory_space_manifests.select { |m| m.name == :participatory_processes }.first
72
- Decidim::Core::ParticipatorySpaceFinderBase.new(manifest:).call(object, { id:, slug: }, context)
73
- end
74
-
75
49
  def component(id: {})
76
50
  component = Decidim::Component.published.find_by(id:)
77
51
  component&.organization == context[:current_organization] ? component : nil
@@ -116,6 +116,8 @@ module Decidim
116
116
  validates :type, inclusion: { in: TYPES.keys }
117
117
 
118
118
  def type_class
119
+ return Decidim::Attributes::RichText if type == :text && editor == true
120
+
119
121
  TYPES[type][:klass]
120
122
  end
121
123
 
@@ -34,6 +34,7 @@ module Decidim
34
34
  # end
35
35
  #
36
36
  # Returns nothing.
37
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
37
38
  def translatable_attribute(name, type, **options)
38
39
  attribute(name, { String => Object }, default: {})
39
40
 
@@ -41,6 +42,8 @@ module Decidim
41
42
  attribute_name = "#{name}_#{locale}".gsub("-", "__")
42
43
  attribute attribute_name, type, **options
43
44
 
45
+ value_type = attribute_types[attribute_name.to_s]
46
+
44
47
  define_method attribute_name do
45
48
  field = public_send(name) || {}
46
49
  value =
@@ -51,7 +54,6 @@ module Decidim
51
54
  # changed and the old value is still stored against the record.
52
55
  field
53
56
  end
54
- value_type = self.class.attribute_types[attribute_name.to_s]
55
57
  value_type ? value_type.cast(value) : value
56
58
  end
57
59
 
@@ -60,12 +62,15 @@ module Decidim
60
62
  final = super(value)
61
63
  return unless final # Do not set the `nil` values for the parent hash
62
64
 
65
+ final = value_type.serialize(final) if value_type
66
+
63
67
  public_send("#{name}=", field.merge(locale => final))
64
68
  end
65
69
 
66
70
  yield(attribute_name, locale) if block_given?
67
71
  end
68
72
  end
73
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
69
74
 
70
75
  def locales
71
76
  Decidim.available_locales
@@ -87,7 +87,7 @@ module Decidim
87
87
  end
88
88
 
89
89
  def cache_expiry_time
90
- nil
90
+ Decidim.cache_expiry_time
91
91
  end
92
92
 
93
93
  def decidim
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :decidim do
4
+ namespace :upgrade do
5
+ desc "Cleanup the orphaned blobs attachments"
6
+ task :attachments_cleanup, [:clean_up_unattached_blobs_after_in_minutes] => :environment do |_task, args|
7
+ args.with_defaults(clean_up_unattached_blobs_after_in_minutes: 60)
8
+
9
+ clean_up_unattached_blobs_after_in_minutes = args[:clean_up_unattached_blobs_after_in_minutes].to_i
10
+
11
+ ActiveStorage::Blob.unattached.where(created_at: ..clean_up_unattached_blobs_after_in_minutes.minutes.ago).find_each(batch_size: 100, &:purge_later)
12
+ end
13
+ end
14
+ end
@@ -8,9 +8,18 @@ namespace :decidim do
8
8
  :"decidim:upgrade:clean:searchable_resources",
9
9
  :"decidim:upgrade:clean:notifications",
10
10
  :"decidim:upgrade:clean:follows",
11
- :"decidim:upgrade:clean:action_logs"
11
+ :"decidim:upgrade:clean:action_logs",
12
+ :"decidim:upgrade:clean:clean_deleted_users",
13
+ :"decidim:upgrade:clean:fix_blocked_user_notification"
12
14
  ]
13
15
 
16
+ desc "Remove data from deleted users"
17
+ task clean_deleted_users: :environment do
18
+ logger = Logger.new($stdout)
19
+ logger.info("=== Removing extra data from deleted users")
20
+ Decidim::User.where.not(deleted_at: nil).update_all(personal_url: "", about: "", notifications_sending_frequency: "none") # rubocop:disable Rails/SkipsModelValidations
21
+ end
22
+
14
23
  desc "Removes any action logs belonging to invalid resources"
15
24
  task :action_logs, [] => :environment do
16
25
  puts "=== Deleting Action logs\n"
@@ -100,15 +109,32 @@ namespace :decidim do
100
109
  end
101
110
  puts "===== Deleted #{invalid} invalid resources\n"
102
111
  end
103
- end
104
112
 
105
- desc "Removes orphan categorizations"
106
- task fix_orphan_categorizations: :environment do
107
- logger = Logger.new($stdout)
108
- logger.info("Removing orphan categorizations...")
113
+ desc "Removes orphan categorizations"
114
+ task fix_orphan_categorizations: :environment do
115
+ logger = Logger.new($stdout)
116
+ logger.info("Removing orphan categorizations...")
117
+
118
+ Decidim::Categorization.find_each do |categorization|
119
+ categorization.destroy if categorization.categorizable.nil?
120
+ end
121
+ end
122
+
123
+ desc "Update all blocked users notifications_sending_frequency setting"
124
+ task fix_blocked_user_notification: :environment do
125
+ logger.info("=== Updating all blocked users notifications_sending_frequency ...")
126
+ blocked_users = 0
127
+ Decidim::User.blocked.where.not("notifications_sending_frequency = ?", "none").find_each do |blocked_user|
128
+ unless blocked_user.notifications_sending_frequency == "none"
129
+ blocked_user.update(notifications_sending_frequency: "none")
130
+ blocked_users += 1
131
+ end
132
+ end
133
+ logger.info("===== Updated #{blocked_users} blocked users")
134
+ end
109
135
 
110
- Decidim::Categorization.find_each do |categorization|
111
- categorization.destroy if categorization.categorizable.nil?
136
+ def logger
137
+ @logger ||= Logger.new($stdout)
112
138
  end
113
139
  end
114
140
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.3
4
+ version: 0.28.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,8 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-09-10 00:00:00.000000000 Z
13
+ date: 2025-02-12 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: concurrent-ruby
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.2.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '='
27
+ - !ruby/object:Gem::Version
28
+ version: 1.2.2
15
29
  - !ruby/object:Gem::Dependency
16
30
  name: active_link_to
17
31
  requirement: !ruby/object:Gem::Requirement
@@ -750,28 +764,28 @@ dependencies:
750
764
  requirements:
751
765
  - - '='
752
766
  - !ruby/object:Gem::Version
753
- version: 0.28.3
767
+ version: 0.28.5
754
768
  type: :development
755
769
  prerelease: false
756
770
  version_requirements: !ruby/object:Gem::Requirement
757
771
  requirements:
758
772
  - - '='
759
773
  - !ruby/object:Gem::Version
760
- version: 0.28.3
774
+ version: 0.28.5
761
775
  - !ruby/object:Gem::Dependency
762
776
  name: decidim-dev
763
777
  requirement: !ruby/object:Gem::Requirement
764
778
  requirements:
765
779
  - - '='
766
780
  - !ruby/object:Gem::Version
767
- version: 0.28.3
781
+ version: 0.28.5
768
782
  type: :development
769
783
  prerelease: false
770
784
  version_requirements: !ruby/object:Gem::Requirement
771
785
  requirements:
772
786
  - - '='
773
787
  - !ruby/object:Gem::Version
774
- version: 0.28.3
788
+ version: 0.28.5
775
789
  description: Adds core features so other engines can hook into the framework.
776
790
  email:
777
791
  - josepjaume@gmail.com
@@ -1162,6 +1176,7 @@ files:
1162
1176
  - app/controllers/concerns/decidim/amendments_controller.rb
1163
1177
  - app/controllers/concerns/decidim/devise_authentication_methods.rb
1164
1178
  - app/controllers/concerns/decidim/devise_controllers.rb
1179
+ - app/controllers/concerns/decidim/direct_upload.rb
1165
1180
  - app/controllers/concerns/decidim/disable_redirection_to_external_host.rb
1166
1181
  - app/controllers/concerns/decidim/filter_resource.rb
1167
1182
  - app/controllers/concerns/decidim/flaggable.rb
@@ -1299,6 +1314,7 @@ files:
1299
1314
  - app/forms/decidim/user_interest_scope_form.rb
1300
1315
  - app/forms/decidim/user_interests_form.rb
1301
1316
  - app/helpers/concerns/decidim/flash_helper_extensions.rb
1317
+ - app/helpers/concerns/decidim/user_role_checker.rb
1302
1318
  - app/helpers/decidim/account_helper.rb
1303
1319
  - app/helpers/decidim/action_authorization_helper.rb
1304
1320
  - app/helpers/decidim/amendments_helper.rb
@@ -1649,6 +1665,7 @@ files:
1649
1665
  - app/packs/src/decidim/notifications.js
1650
1666
  - app/packs/src/decidim/password_toggler.js
1651
1667
  - app/packs/src/decidim/remote_modal.js
1668
+ - app/packs/src/decidim/remote_tooltips.js
1652
1669
  - app/packs/src/decidim/responsive_horizontal_tabs.js
1653
1670
  - app/packs/src/decidim/results_listing.js
1654
1671
  - app/packs/src/decidim/scroll_to_last_child.js
@@ -2123,6 +2140,8 @@ files:
2123
2140
  - config/locales/ar.yml
2124
2141
  - config/locales/bg-BG.yml
2125
2142
  - config/locales/bg.yml
2143
+ - config/locales/bn-BD.yml
2144
+ - config/locales/bs-BA.yml
2126
2145
  - config/locales/ca.yml
2127
2146
  - config/locales/cs-CZ.yml
2128
2147
  - config/locales/cs.yml
@@ -2519,6 +2538,7 @@ files:
2519
2538
  - lib/decidim/attributes/localized_date.rb
2520
2539
  - lib/decidim/attributes/model.rb
2521
2540
  - lib/decidim/attributes/object.rb
2541
+ - lib/decidim/attributes/rich_text.rb
2522
2542
  - lib/decidim/attributes/symbol.rb
2523
2543
  - lib/decidim/attributes/time_with_zone.rb
2524
2544
  - lib/decidim/authorable.rb
@@ -2538,6 +2558,7 @@ files:
2538
2558
  - lib/decidim/content_blocks/has_related_components.rb
2539
2559
  - lib/decidim/content_parsers.rb
2540
2560
  - lib/decidim/content_parsers/base_parser.rb
2561
+ - lib/decidim/content_parsers/blob_parser.rb
2541
2562
  - lib/decidim/content_parsers/hashtag_parser.rb
2542
2563
  - lib/decidim/content_parsers/inline_images_parser.rb
2543
2564
  - lib/decidim/content_parsers/link_parser.rb
@@ -2549,6 +2570,7 @@ files:
2549
2570
  - lib/decidim/content_processor.rb
2550
2571
  - lib/decidim/content_renderers.rb
2551
2572
  - lib/decidim/content_renderers/base_renderer.rb
2573
+ - lib/decidim/content_renderers/blob_renderer.rb
2552
2574
  - lib/decidim/content_renderers/hashtag_renderer.rb
2553
2575
  - lib/decidim/content_renderers/link_renderer.rb
2554
2576
  - lib/decidim/content_renderers/resource_renderer.rb
@@ -2840,6 +2862,7 @@ files:
2840
2862
  - lib/tasks/decidim_robots.rake
2841
2863
  - lib/tasks/decidim_tasks.rake
2842
2864
  - lib/tasks/decidim_webpacker_tasks.rake
2865
+ - lib/tasks/upgrade/decidim_attachments.rake
2843
2866
  - lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
2844
2867
  - lib/tasks/upgrade/decidim_fix_categorization.rake
2845
2868
  - lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake
@@ -2849,7 +2872,7 @@ files:
2849
2872
  - lib/tasks/upgrade/decidim_user_moderation.rake
2850
2873
  homepage: https://decidim.org
2851
2874
  licenses:
2852
- - AGPL-3.0
2875
+ - AGPL-3.0-or-later
2853
2876
  metadata:
2854
2877
  bug_tracker_uri: https://github.com/decidim/decidim/issues
2855
2878
  documentation_uri: https://docs.decidim.org/