decidim-core 0.25.0 → 0.26.0.rc2

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 (165) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity_cell.rb +2 -1
  3. data/app/cells/decidim/author/flag_user.erb +1 -1
  4. data/app/cells/decidim/author/profile_inline.erb +1 -1
  5. data/app/cells/decidim/author/withdraw.erb +2 -2
  6. data/app/cells/decidim/author_cell.rb +32 -0
  7. data/app/cells/decidim/card_m_cell.rb +1 -1
  8. data/app/cells/decidim/content_blocks/cta_cell.rb +1 -1
  9. data/app/cells/decidim/content_blocks/hero_cell.rb +1 -1
  10. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +1 -1
  11. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
  12. data/app/cells/decidim/content_blocks/last_activity_cell.rb +1 -1
  13. data/app/cells/decidim/content_blocks/stats_cell.rb +12 -0
  14. data/app/cells/decidim/endorsers_list_cell.rb +3 -1
  15. data/app/cells/decidim/flag_modal/flag_user.erb +2 -2
  16. data/app/cells/decidim/flag_modal/show.erb +2 -2
  17. data/app/cells/decidim/flag_modal_cell.rb +10 -0
  18. data/app/cells/decidim/following/show.erb +17 -8
  19. data/app/cells/decidim/following_cell.rb +6 -2
  20. data/app/cells/decidim/notification/show.erb +31 -0
  21. data/app/cells/decidim/notification_cell.rb +20 -0
  22. data/app/cells/decidim/notifications/show.erb +1 -24
  23. data/app/cells/decidim/notifications_cell.rb +0 -1
  24. data/app/cells/decidim/user_conversation/conversation_header.erb +1 -1
  25. data/app/cells/decidim/user_conversation/show.erb +4 -2
  26. data/app/cells/decidim/user_conversations/conversation_item.erb +1 -1
  27. data/app/commands/decidim/create_editor_image.rb +41 -0
  28. data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +15 -0
  29. data/app/controllers/concerns/decidim/safe_redirect.rb +14 -3
  30. data/app/controllers/decidim/application_controller.rb +1 -0
  31. data/app/controllers/decidim/cookie_policy_controller.rb +2 -0
  32. data/app/controllers/decidim/editor_images_controller.rb +47 -0
  33. data/app/controllers/decidim/user_activities_controller.rb +2 -1
  34. data/app/forms/decidim/editor_image_form.rb +16 -0
  35. data/app/helpers/decidim/amendments_helper.rb +1 -1
  36. data/app/helpers/decidim/application_helper.rb +2 -2
  37. data/app/helpers/decidim/messaging/conversation_helper.rb +32 -3
  38. data/app/helpers/decidim/resource_versions_helper.rb +1 -1
  39. data/app/helpers/decidim/sanitize_helper.rb +65 -0
  40. data/app/models/decidim/editor_image.rb +14 -0
  41. data/app/models/decidim/messaging/conversation.rb +9 -0
  42. data/app/models/decidim/participatory_space_private_user.rb +16 -0
  43. data/app/models/decidim/user.rb +3 -9
  44. data/app/models/decidim/user_base_entity.rb +24 -13
  45. data/app/models/decidim/user_group.rb +40 -0
  46. data/app/packs/entrypoints/decidim_core.js +1 -0
  47. data/app/packs/src/decidim/dialog_mode.js +143 -0
  48. data/app/packs/src/decidim/dialog_mode.test.js +168 -0
  49. data/app/packs/src/decidim/editor.js +56 -14
  50. data/app/packs/src/decidim/form_attachments.js +5 -0
  51. data/app/packs/src/decidim/geocoding/attach_input.js +11 -2
  52. data/app/packs/src/decidim/index.js +4 -0
  53. data/app/packs/src/decidim/input_emoji.js +10 -1
  54. data/app/packs/src/decidim/vendor/image-resize.min.js +3 -0
  55. data/app/packs/src/decidim/vendor/image-upload.min.js +8 -0
  56. data/app/packs/stylesheets/decidim/extras/_extras.scss +0 -1
  57. data/app/packs/stylesheets/decidim/extras/_quill.scss +7 -0
  58. data/app/packs/stylesheets/decidim/modules/_buttons.scss +11 -4
  59. data/app/packs/stylesheets/decidim/modules/_cards.scss +4 -0
  60. data/app/packs/stylesheets/decidim/modules/_layout.scss +1 -1
  61. data/app/packs/stylesheets/decidim/modules/_timeline.scss +1 -1
  62. data/app/presenters/decidim/nil_presenter.rb +2 -2
  63. data/app/presenters/decidim/notification_presenter.rb +25 -0
  64. data/app/presenters/decidim/official_author_presenter.rb +1 -1
  65. data/app/presenters/decidim/validation_errors_presenter.rb +27 -0
  66. data/app/queries/decidim/similar_emendations.rb +1 -1
  67. data/app/resolvers/decidim/core/metric_resolver.rb +1 -1
  68. data/app/services/decidim/activity_search.rb +2 -2
  69. data/app/services/decidim/email_notification_generator.rb +4 -1
  70. data/app/services/decidim/html_truncation.rb +130 -0
  71. data/app/services/decidim/open_data_exporter.rb +29 -5
  72. data/app/services/decidim/resource_search.rb +1 -1
  73. data/app/uploaders/decidim/editor_image_uploader.rb +6 -0
  74. data/app/validators/password_validator.rb +123 -0
  75. data/app/views/decidim/account/_password_fields.html.erb +1 -1
  76. data/app/views/decidim/devise/passwords/edit.html.erb +1 -1
  77. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  78. data/app/views/decidim/devise/shared/_omniauth_buttons_mini.html.erb +6 -4
  79. data/app/views/decidim/messaging/conversations/_conversation.html.erb +9 -3
  80. data/app/views/decidim/messaging/conversations/_messages.html.erb +8 -2
  81. data/app/views/decidim/messaging/conversations/_show.html.erb +10 -12
  82. data/app/views/decidim/messaging/conversations/show.html.erb +4 -2
  83. data/app/views/decidim/newsletters/show.html.erb +1 -1
  84. data/app/views/decidim/notification_mailer/event_received.html.erb +17 -0
  85. data/app/views/decidim/pages/_tabbed.html.erb +1 -1
  86. data/app/views/decidim/searches/_filters_small_view.html.erb +3 -3
  87. data/app/views/decidim/shared/_login_modal.html.erb +5 -5
  88. data/app/views/decidim/shared/_orders.html.erb +1 -1
  89. data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
  90. data/app/views/decidim/shared/participatory_space_filters/_filters_small_view.html.erb +3 -3
  91. data/app/views/layouts/decidim/_application.html.erb +1 -12
  92. data/app/views/layouts/decidim/_head.html.erb +4 -0
  93. data/app/views/layouts/decidim/_language_chooser.html.erb +1 -1
  94. data/app/views/layouts/decidim/_meta_tags_config.html.erb +11 -0
  95. data/app/views/layouts/decidim/_wrapper.html.erb +1 -1
  96. data/config/brakeman.ignore +149 -0
  97. data/config/initializers/devise.rb +1 -1
  98. data/config/initializers/rack_attack.rb +23 -21
  99. data/config/locales/ar.yml +8 -0
  100. data/config/locales/ca.yml +43 -0
  101. data/config/locales/cs.yml +61 -0
  102. data/config/locales/en.yml +47 -0
  103. data/config/locales/es-MX.yml +42 -0
  104. data/config/locales/es-PY.yml +42 -0
  105. data/config/locales/es.yml +42 -0
  106. data/config/locales/eu.yml +27 -12
  107. data/config/locales/fi-plain.yml +42 -0
  108. data/config/locales/fi.yml +42 -0
  109. data/config/locales/fr-CA.yml +43 -0
  110. data/config/locales/fr.yml +75 -28
  111. data/config/locales/gl.yml +6 -0
  112. data/config/locales/it.yml +11 -0
  113. data/config/locales/ja.yml +85 -49
  114. data/config/locales/lb-LU.yml +1354 -0
  115. data/config/locales/lb.yml +1 -1
  116. data/config/locales/nl.yml +51 -0
  117. data/config/locales/pl.yml +5 -5
  118. data/config/locales/pt-BR.yml +1 -1
  119. data/config/locales/ro-RO.yml +275 -252
  120. data/config/locales/sv.yml +45 -2
  121. data/config/locales/val-ES.yml +1 -0
  122. data/config/routes.rb +2 -0
  123. data/db/migrate/20210730112319_create_decidim_editor_images.rb +12 -0
  124. data/db/migrate/20211126183540_add_timestamps_to_content_blocks.rb +14 -0
  125. data/db/seeds.rb +16 -14
  126. data/lib/decidim/api/functions/user_entity_finder.rb +2 -1
  127. data/lib/decidim/api/functions/user_entity_list.rb +3 -1
  128. data/lib/decidim/api/input_sorts/component_input_sort.rb +1 -1
  129. data/lib/decidim/common_passwords.rb +56 -0
  130. data/lib/decidim/content_parsers/inline_images_parser.rb +68 -0
  131. data/lib/decidim/content_parsers.rb +1 -0
  132. data/lib/decidim/content_renderers/link_renderer.rb +85 -1
  133. data/lib/decidim/content_renderers/user_group_renderer.rb +1 -1
  134. data/lib/decidim/content_renderers/user_renderer.rb +1 -1
  135. data/lib/decidim/core/engine.rb +7 -12
  136. data/lib/decidim/core/test/factories.rb +7 -1
  137. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +131 -0
  138. data/lib/decidim/core/test.rb +1 -0
  139. data/lib/decidim/core/version.rb +1 -1
  140. data/lib/decidim/core.rb +33 -5
  141. data/lib/decidim/db/common-passwords.txt +128420 -0
  142. data/lib/decidim/etherpad/pad.rb +48 -0
  143. data/lib/decidim/etherpad.rb +7 -0
  144. data/lib/decidim/events/base_event.rb +18 -0
  145. data/lib/decidim/events/machine_translated_event.rb +36 -0
  146. data/lib/decidim/events/user_group_event.rb +1 -3
  147. data/lib/decidim/events.rb +1 -0
  148. data/lib/decidim/exporters/csv.rb +7 -7
  149. data/lib/decidim/faker/localized.rb +15 -6
  150. data/lib/decidim/form_builder.rb +14 -4
  151. data/lib/decidim/has_attachments.rb +11 -4
  152. data/lib/decidim/has_component.rb +4 -0
  153. data/lib/decidim/importers/import_manifest.rb +103 -3
  154. data/lib/decidim/organization_settings.rb +1 -1
  155. data/lib/decidim/paddable.rb +1 -9
  156. data/lib/decidim/participable.rb +5 -0
  157. data/lib/decidim/resourceable.rb +2 -9
  158. data/lib/decidim/searchable.rb +2 -2
  159. data/lib/decidim/settings_manifest.rb +2 -0
  160. data/lib/decidim/translatable_attributes.rb +6 -6
  161. data/lib/decidim/view_model.rb +10 -0
  162. data/lib/tasks/decidim_active_storage_migration_tasks.rake +68 -0
  163. data/lib/tasks/decidim_webpacker_tasks.rake +4 -10
  164. metadata +70 -78
  165. data/app/packs/stylesheets/decidim/extras/_social_icons_mini.scss +0 -11
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples_for "a translated event" do
4
+ context "when it is not machine machine translated" do
5
+ let(:organization) { create(:organization, enable_machine_translations: false, machine_translation_display_priority: "original") }
6
+
7
+ it "does not perform translation" do
8
+ expect(subject.perform_translation?).to eq(false)
9
+ end
10
+
11
+ it "does not have a missing translation" do
12
+ expect(subject.translation_missing?).to eq(false)
13
+ end
14
+
15
+ it "does have content available in multiple languages" do
16
+ expect(subject.content_in_same_language?).to eq(false)
17
+ end
18
+
19
+ it "does return the original language" do
20
+ expect(subject.safe_resource_text).to eq(en_version)
21
+ end
22
+
23
+ it "does not offer an alternate translation" do
24
+ expect(subject.safe_resource_translated_text).to eq(en_version)
25
+ end
26
+ end
27
+
28
+ context "when is machine machine translated" do
29
+ let(:user) { create :user, organization: organization, locale: "ca" }
30
+
31
+ around do |example|
32
+ I18n.with_locale(user.locale) { example.run }
33
+ end
34
+
35
+ context "when priority is original" do
36
+ let(:organization) { create(:organization, enable_machine_translations: true, machine_translation_display_priority: "original") }
37
+
38
+ it "does perform translation" do
39
+ expect(subject.perform_translation?).to eq(translatable)
40
+ end
41
+
42
+ it "does not have a missing translation" do
43
+ expect(subject.translation_missing?).to eq(false)
44
+ end
45
+
46
+ it "does have content available in multiple languages" do
47
+ expect(subject.content_in_same_language?).to eq(false)
48
+ end
49
+
50
+ it "does return the original language" do
51
+ expect(subject.safe_resource_text).to eq(en_version)
52
+ end
53
+
54
+ it "does not offer an alternate translation" do
55
+ expect(subject.safe_resource_translated_text).to eq(machine_translated)
56
+ end
57
+
58
+ context "when translation is not available" do
59
+ let(:body) { { "en": en_body } }
60
+
61
+ it "does perform translation" do
62
+ expect(subject.perform_translation?).to eq(translatable)
63
+ end
64
+
65
+ it "does have a missing translation" do
66
+ expect(subject.translation_missing?).to eq(translatable)
67
+ end
68
+
69
+ it "does have content available in multiple languages" do
70
+ expect(subject.content_in_same_language?).to eq(false)
71
+ end
72
+
73
+ it "does return the original language" do
74
+ expect(subject.safe_resource_text).to eq(en_version)
75
+ end
76
+
77
+ it "does not offer an alternate translation" do
78
+ expect(subject.safe_resource_translated_text).to eq(en_version)
79
+ end
80
+ end
81
+ end
82
+
83
+ context "when priority is translation" do
84
+ let(:organization) { create(:organization, enable_machine_translations: true, machine_translation_display_priority: "translation") }
85
+
86
+ it "does perform translation" do
87
+ expect(subject.perform_translation?).to eq(translatable)
88
+ end
89
+
90
+ it "does not have a missing translation" do
91
+ expect(subject.translation_missing?).to eq(false)
92
+ end
93
+
94
+ it "does have content available in multiple languages" do
95
+ expect(subject.content_in_same_language?).to eq(false)
96
+ end
97
+
98
+ it "does return the original language" do
99
+ expect(subject.safe_resource_text).to eq(en_version)
100
+ end
101
+
102
+ it "does not offer an alternate translation" do
103
+ expect(subject.safe_resource_translated_text).to eq(machine_translated)
104
+ end
105
+
106
+ context "when translation is not available" do
107
+ let(:body) { { "en": en_body } }
108
+
109
+ it "does perform translation" do
110
+ expect(subject.perform_translation?).to eq(translatable)
111
+ end
112
+
113
+ it "does have a missing translation" do
114
+ expect(subject.translation_missing?).to eq(translatable)
115
+ end
116
+
117
+ it "does have content available in multiple languages" do
118
+ expect(subject.content_in_same_language?).to eq(false)
119
+ end
120
+
121
+ it "does return the original language" do
122
+ expect(subject.safe_resource_text).to eq(en_version)
123
+ end
124
+
125
+ it "does not offer an alternate translation" do
126
+ expect(subject.safe_resource_translated_text).to eq(en_version)
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -68,3 +68,4 @@ require "decidim/core/test/shared_examples/controller_render_views"
68
68
  require "decidim/core/test/shared_examples/share_link_examples"
69
69
  require "decidim/core/test/shared_examples/categories_container_examples"
70
70
  require "decidim/core/test/shared_examples/assembly_announcements_examples"
71
+ require "decidim/core/test/shared_examples/translated_event_examples"
@@ -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.25.0"
7
+ "0.26.0.rc2"
8
8
  end
9
9
  end
10
10
  end
data/lib/decidim/core.rb CHANGED
@@ -77,6 +77,7 @@ module Decidim
77
77
  autoload :Amendable, "decidim/amendable"
78
78
  autoload :Gamification, "decidim/gamification"
79
79
  autoload :Hashtag, "decidim/hashtag"
80
+ autoload :Etherpad, "decidim/etherpad"
80
81
  autoload :Paddable, "decidim/paddable"
81
82
  autoload :OpenDataExporter, "decidim/open_data_exporter"
82
83
  autoload :IoEncoder, "decidim/io_encoder"
@@ -95,6 +96,7 @@ module Decidim
95
96
  autoload :RecordEncryptor, "decidim/record_encryptor"
96
97
  autoload :AttachmentAttributes, "decidim/attachment_attributes"
97
98
  autoload :CarrierWaveMigratorService, "decidim/carrier_wave_migrator_service"
99
+ autoload :CommonPasswords, "decidim/common_passwords"
98
100
 
99
101
  include ActiveSupport::Configurable
100
102
  # Loads seeds from all engines.
@@ -145,9 +147,9 @@ module Decidim
145
147
  # the mails.
146
148
  config_accessor :mailer_sender
147
149
 
148
- # Whether SSL should be enabled or not.
150
+ # Whether SSL should be forced or not.
149
151
  config_accessor :force_ssl do
150
- true
152
+ Rails.env.starts_with?("production") || Rails.env.starts_with?("staging")
151
153
  end
152
154
 
153
155
  # Having this on true will change the way the svg assets are being served.
@@ -165,6 +167,13 @@ module Decidim
165
167
  :en
166
168
  end
167
169
 
170
+ # Disable the redirection to the external host when performing redirect back
171
+ # For more details https://github.com/rails/rails/issues/39643
172
+ # Additional context: This has been revealed as an issue during a security audit on Future of Europe installation
173
+ config_accessor :allow_open_redirects do
174
+ false
175
+ end
176
+
168
177
  # Exposes a configuration option: an array of symbols representing processors
169
178
  # that will be automatically executed when a content is parsed or rendered.
170
179
  #
@@ -267,7 +276,7 @@ module Decidim
267
276
 
268
277
  # Time window were users can access the website even if their email is not confirmed.
269
278
  config_accessor :unconfirmed_access_for do
270
- 2.days
279
+ 0.days
271
280
  end
272
281
 
273
282
  # Allow machine translations
@@ -377,6 +386,18 @@ module Decidim
377
386
  "decidim-cc"
378
387
  end
379
388
 
389
+ # Blacklisted passwords. Array may contain strings and regex entries.
390
+ config_accessor :password_blacklist do
391
+ []
392
+ end
393
+
394
+ # This is an internal key that allow us to properly configure the caching key separator. This is useful for redis cache store
395
+ # as it creates some namespaces within the cached data.
396
+ # use `config.cache_key_separator = ":"` in your initializer to have namespaced data
397
+ config_accessor :cache_key_separator do
398
+ "/"
399
+ end
400
+
380
401
  # Public: Registers a global engine. This method is intended to be used
381
402
  # by component engines that also offer unscoped functionality
382
403
  #
@@ -586,8 +607,11 @@ module Decidim
586
607
  end
587
608
 
588
609
  # Defines the time after which the machine translation job should be enabled.
589
- # In some cases, it is required to have a delay, otherwise the ttanslation job will be discarded:
590
- # Discarded Decidim::MachineTranslationResourceJob due to a ActiveJob::DeserializationError.
610
+ # In some cases, like when Workers is processing faster than ActiveRecord can commit to Database,
611
+ # it is required to have a delay, to prevent any discarding with
612
+ # Decidim::MachineTranslationResourceJob due to a ActiveJob::DeserializationError.
613
+ # In some Decidim Installations, ActiveJob can be configured to discard jobs failing with
614
+ # ActiveJob::DeserializationError
591
615
  config_accessor :machine_translation_delay do
592
616
  0.seconds
593
617
  end
@@ -597,4 +621,8 @@ module Decidim
597
621
 
598
622
  Decidim.machine_translation_service.to_s.safe_constantize
599
623
  end
624
+
625
+ def self.register_assets_path(path)
626
+ Rails.autoloaders.main.ignore(path) if Rails.configuration.autoloader == :zeitwerk
627
+ end
600
628
  end