decidim-core 0.29.0 → 0.29.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -1
  3. data/app/cells/decidim/endorsement_buttons_cell.rb +1 -1
  4. data/app/commands/decidim/amendable/create_draft.rb +1 -0
  5. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +1 -1
  6. data/app/controllers/concerns/decidim/direct_upload.rb +82 -0
  7. data/app/forms/decidim/upload_validation_form.rb +1 -1
  8. data/app/helpers/decidim/layout_helper.rb +28 -0
  9. data/app/helpers/decidim/scopes_helper.rb +3 -2
  10. data/app/models/decidim/action_log.rb +11 -1
  11. data/app/packs/src/decidim/append_redirect_url_to_modals.js +14 -12
  12. data/app/packs/src/decidim/direct_uploads/upload_modal.js +3 -0
  13. data/app/packs/stylesheets/decidim/_buttons.scss +1 -1
  14. data/app/packs/stylesheets/decidim/_modal_update.scss +4 -0
  15. data/app/queries/decidim/last_activity.rb +16 -5
  16. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +1 -1
  17. data/app/views/decidim/offline/show.html.erb +1 -1
  18. data/app/views/layouts/decidim/_head.html.erb +1 -1
  19. data/config/locales/ar.yml +0 -1
  20. data/config/locales/bg.yml +0 -1
  21. data/config/locales/ca.yml +1 -1
  22. data/config/locales/cs.yml +2 -1
  23. data/config/locales/de.yml +2 -2
  24. data/config/locales/el.yml +0 -1
  25. data/config/locales/en.yml +1 -1
  26. data/config/locales/es-MX.yml +1 -1
  27. data/config/locales/es-PY.yml +1 -1
  28. data/config/locales/es.yml +1 -1
  29. data/config/locales/eu.yml +4 -4
  30. data/config/locales/fi-plain.yml +1 -1
  31. data/config/locales/fi.yml +1 -1
  32. data/config/locales/fr-CA.yml +1 -1
  33. data/config/locales/fr.yml +1 -1
  34. data/config/locales/gl.yml +0 -1
  35. data/config/locales/hu.yml +0 -1
  36. data/config/locales/ja.yml +3 -3
  37. data/config/locales/lt.yml +0 -1
  38. data/config/locales/pl.yml +0 -1
  39. data/config/locales/pt-BR.yml +243 -1
  40. data/config/locales/ro-RO.yml +64 -48
  41. data/config/locales/sv.yml +536 -91
  42. data/config/locales/zh-TW.yml +0 -1
  43. data/lib/decidim/core/engine.rb +6 -0
  44. data/lib/decidim/core/test/shared_examples/comments_examples.rb +10 -0
  45. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +107 -9
  46. data/lib/decidim/core/version.rb +1 -1
  47. data/lib/decidim/core.rb +11 -0
  48. data/lib/decidim/organization_settings.rb +4 -1
  49. data/lib/decidim/view_model.rb +1 -1
  50. data/lib/tasks/upgrade/decidim_attachments.rake +14 -0
  51. metadata +8 -6
@@ -803,7 +803,6 @@ zh-TW:
803
803
  title_required: 標題為必填欄位!
804
804
  uploaded: 已上傳
805
805
  validating: 驗證中...
806
- validation_error: 驗證錯誤!
807
806
  select_file: 選擇檔案
808
807
  upload_help:
809
808
  dropzone: 將檔案拖曳到此處或點擊按鈕上傳。
@@ -277,6 +277,12 @@ module Decidim
277
277
  app.config.exceptions_app = Decidim::Core::Engine.routes
278
278
  end
279
279
 
280
+ initializer "decidim_core.direct_uploader_paths", after: "decidim_core.exceptions_app" do |_app|
281
+ config.to_prepare do
282
+ ActiveStorage::DirectUploadsController.include Decidim::DirectUpload
283
+ end
284
+ end
285
+
280
286
  initializer "decidim_core.locales" do |app|
281
287
  app.config.i18n.fallbacks = true
282
288
  end
@@ -500,6 +500,16 @@ shared_examples "comments" do
500
500
  expect(page).to have_css("span.comments-count", text: "#{commentable.comments.count} comments")
501
501
  expect(page.find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}").value).to be_empty
502
502
  end
503
+
504
+ it "shows the entry in last activities" do
505
+ visit decidim.last_activities_path
506
+ expect(page).to have_content("New comment: #{content}")
507
+
508
+ within "#filters" do
509
+ find("a", class: "filter", text: "Comment", match: :first).click
510
+ end
511
+ expect(page).to have_content("New comment: #{content}")
512
+ end
503
513
  end
504
514
 
505
515
  context "when user adds a new comment with a link" do
@@ -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,17 +51,17 @@ 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
64
+ within "#resource-#{resource.id}-endorsement-block" do
65
65
  click_on "Like"
66
66
  end
67
67
 
@@ -77,7 +77,7 @@ 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
80
+ within "#resource-#{resource.id}-endorsement-block" do
81
81
  click_on "Like"
82
82
  expect(page).to have_button("Dislike")
83
83
  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).to have_no_button("Like")
95
95
  end
@@ -97,7 +97,7 @@ 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
100
+ within "#resource-#{resource.id}-endorsement-block" do
101
101
  click_on "Dislike"
102
102
  expect(page).to have_button("Like")
103
103
  end
@@ -124,7 +124,7 @@ 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
127
+ within "#resource-#{resource.id}-endorsement-block" do
128
128
  click_on "Like"
129
129
  end
130
130
  expect(page).to have_css("#authorizationModal", visible: :visible)
@@ -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
145
+ within "#resource-#{resource.id}-endorsement-block" do
146
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.29.0"
7
+ "0.29.1"
8
8
  end
9
9
  end
10
10
  end
data/lib/decidim/core.rb CHANGED
@@ -551,6 +551,17 @@ module Decidim
551
551
  "/"
552
552
  end
553
553
 
554
+ # This is the maximum time that the cache will be stored. If nil, the cache will be stored indefinitely.
555
+ # Currently, cache is applied in the Cells where the method `cache_hash` is defined.
556
+ config_accessor :cache_expiry_time do
557
+ 24.hours
558
+ end
559
+
560
+ # Same as before, but specifically for cell displaying stats
561
+ config_accessor :stats_cache_expiry_time do
562
+ 10.minutes
563
+ end
564
+
554
565
  # Enable/Disable the service worker
555
566
  config_accessor :service_worker_enabled do
556
567
  Rails.env.exclude?("development")
@@ -105,7 +105,7 @@ module Decidim
105
105
  "upload" => {
106
106
  "allowed_file_extensions" => {
107
107
  "default" => %w(jpg jpeg png webp pdf rtf txt),
108
- "admin" => %w(jpg jpeg png webp pdf doc docx xls xlsx ppt pptx ppx rtf txt odt ott odf otg ods ots),
108
+ "admin" => %w(jpg jpeg png webp 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 webp)
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" => {
@@ -91,7 +91,7 @@ module Decidim
91
91
  end
92
92
 
93
93
  def cache_expiry_time
94
- nil
94
+ Decidim.cache_expiry_time
95
95
  end
96
96
 
97
97
  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
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.29.0
4
+ version: 0.29.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-09-10 00:00:00.000000000 Z
13
+ date: 2024-10-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: active_link_to
@@ -758,28 +758,28 @@ dependencies:
758
758
  requirements:
759
759
  - - '='
760
760
  - !ruby/object:Gem::Version
761
- version: 0.29.0
761
+ version: 0.29.1
762
762
  type: :development
763
763
  prerelease: false
764
764
  version_requirements: !ruby/object:Gem::Requirement
765
765
  requirements:
766
766
  - - '='
767
767
  - !ruby/object:Gem::Version
768
- version: 0.29.0
768
+ version: 0.29.1
769
769
  - !ruby/object:Gem::Dependency
770
770
  name: decidim-dev
771
771
  requirement: !ruby/object:Gem::Requirement
772
772
  requirements:
773
773
  - - '='
774
774
  - !ruby/object:Gem::Version
775
- version: 0.29.0
775
+ version: 0.29.1
776
776
  type: :development
777
777
  prerelease: false
778
778
  version_requirements: !ruby/object:Gem::Requirement
779
779
  requirements:
780
780
  - - '='
781
781
  - !ruby/object:Gem::Version
782
- version: 0.29.0
782
+ version: 0.29.1
783
783
  description: Adds core features so other engines can hook into the framework.
784
784
  email:
785
785
  - josepjaume@gmail.com
@@ -1173,6 +1173,7 @@ files:
1173
1173
  - app/constraints/decidim/current_component.rb
1174
1174
  - app/controllers/concerns/decidim/devise_authentication_methods.rb
1175
1175
  - app/controllers/concerns/decidim/devise_controllers.rb
1176
+ - app/controllers/concerns/decidim/direct_upload.rb
1176
1177
  - app/controllers/concerns/decidim/disable_redirection_to_external_host.rb
1177
1178
  - app/controllers/concerns/decidim/filter_resource.rb
1178
1179
  - app/controllers/concerns/decidim/flaggable.rb
@@ -2966,6 +2967,7 @@ files:
2966
2967
  - lib/tasks/decidim_tasks.rake
2967
2968
  - lib/tasks/decidim_webpacker_tasks.rake
2968
2969
  - lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake
2970
+ - lib/tasks/upgrade/decidim_attachments.rake
2969
2971
  - lib/tasks/upgrade/decidim_content_blocks_tasks.rake
2970
2972
  - lib/tasks/upgrade/decidim_deduplicate_endorsements.rake
2971
2973
  - lib/tasks/upgrade/decidim_fix_categorization.rake