decidim-core 0.27.5 → 0.27.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity_cell.rb +2 -2
  3. data/app/cells/decidim/card_cell.rb +2 -2
  4. data/app/cells/decidim/card_m/top.erb +1 -1
  5. data/app/cells/decidim/card_m_cell.rb +1 -1
  6. data/app/cells/decidim/follow_button_cell.rb +1 -1
  7. data/app/cells/decidim/notification/moderated.erb +24 -0
  8. data/app/cells/decidim/notification_cell.rb +5 -1
  9. data/app/cells/decidim/scopes_picker/scope_picker_values.erb +1 -1
  10. data/app/cells/decidim/tags_cell.rb +3 -1
  11. data/app/cells/decidim/user_profile_cell.rb +1 -1
  12. data/app/commands/decidim/create_omniauth_registration.rb +2 -4
  13. data/app/commands/decidim/messaging/reply_to_conversation.rb +3 -0
  14. data/app/commands/decidim/messaging/start_conversation.rb +3 -0
  15. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +36 -0
  16. data/app/controllers/concerns/decidim/force_authentication.rb +1 -1
  17. data/app/controllers/concerns/decidim/paginable.rb +1 -1
  18. data/app/controllers/concerns/decidim/use_organization_time_zone.rb +1 -1
  19. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +1 -22
  20. data/app/controllers/decidim/devise/sessions_controller.rb +1 -24
  21. data/app/controllers/decidim/links_controller.rb +13 -1
  22. data/app/controllers/decidim/widgets_controller.rb +6 -0
  23. data/app/events/decidim/welcome_notification_event.rb +6 -9
  24. data/app/helpers/decidim/cells_paginate_helper.rb +1 -1
  25. data/app/helpers/decidim/check_boxes_tree_helper.rb +4 -4
  26. data/app/helpers/decidim/newsletters_helper.rb +83 -16
  27. data/app/helpers/decidim/resource_helper.rb +1 -1
  28. data/app/helpers/decidim/sanitize_helper.rb +9 -0
  29. data/app/helpers/decidim/user_profile_helper.rb +7 -2
  30. data/app/mailers/decidim/application_mailer.rb +40 -6
  31. data/app/mailers/decidim/messaging/conversation_mailer.rb +3 -72
  32. data/app/models/decidim/push_notification_message.rb +39 -0
  33. data/app/packs/images/decidim/.keep +0 -0
  34. data/app/packs/src/decidim/input_hashtags.js +1 -1
  35. data/app/packs/src/decidim/input_mentions.js +1 -1
  36. data/app/packs/src/decidim/input_multiple_mentions.js +1 -1
  37. data/app/packs/src/decidim/vizzs/index.js +1 -1
  38. data/app/packs/stylesheets/decidim/plugins/leaflet.scss +118 -114
  39. data/app/presenters/decidim/admin_log/oauth_application_resource_presenter.rb +1 -1
  40. data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -1
  41. data/app/presenters/decidim/log/resource_presenter.rb +7 -1
  42. data/app/presenters/decidim/notification_to_mailer_presenter.rb +9 -0
  43. data/app/services/decidim/events_manager.rb +6 -0
  44. data/app/services/decidim/log/diff_changeset_calculator.rb +1 -1
  45. data/app/services/decidim/push_notification_message_sender.rb +36 -0
  46. data/app/services/decidim/send_push_notification.rb +22 -8
  47. data/app/views/decidim/devise/registrations/new.html.erb +2 -2
  48. data/app/views/decidim/links/new.html.erb +2 -0
  49. data/app/views/decidim/notifications_digest_mailer/_email_content.html.erb +7 -0
  50. data/app/views/decidim/shared/_address_details.html.erb +2 -2
  51. data/app/views/layouts/decidim/_js_configuration.html.erb +1 -0
  52. data/config/locales/ar.yml +4 -3
  53. data/config/locales/bg.yml +484 -1
  54. data/config/locales/ca.yml +23 -22
  55. data/config/locales/cs.yml +0 -1
  56. data/config/locales/de.yml +28 -27
  57. data/config/locales/el.yml +5 -4
  58. data/config/locales/en.yml +1 -0
  59. data/config/locales/eo.yml +3 -0
  60. data/config/locales/es-MX.yml +6 -5
  61. data/config/locales/es-PY.yml +6 -5
  62. data/config/locales/es.yml +25 -24
  63. data/config/locales/eu.yml +12 -2
  64. data/config/locales/fi-plain.yml +1 -0
  65. data/config/locales/fi.yml +4 -3
  66. data/config/locales/fr-CA.yml +5 -4
  67. data/config/locales/fr.yml +3 -2
  68. data/config/locales/ga-IE.yml +5 -0
  69. data/config/locales/gl.yml +3 -0
  70. data/config/locales/he-IL.yml +1 -0
  71. data/config/locales/hu.yml +41 -9
  72. data/config/locales/it.yml +5 -4
  73. data/config/locales/ja.yml +5 -3
  74. data/config/locales/lb.yml +5 -4
  75. data/config/locales/lt.yml +4 -4
  76. data/config/locales/lv.yml +4 -1
  77. data/config/locales/nl.yml +4 -1
  78. data/config/locales/no.yml +5 -4
  79. data/config/locales/pl.yml +168 -1
  80. data/config/locales/pt-BR.yml +113 -22
  81. data/config/locales/pt.yml +5 -4
  82. data/config/locales/ro-RO.yml +1 -3
  83. data/config/locales/ru.yml +13 -0
  84. data/config/locales/sk.yml +6 -1
  85. data/config/locales/sl.yml +5 -0
  86. data/config/locales/sv.yml +26 -3
  87. data/config/locales/tr-TR.yml +3 -3
  88. data/config/locales/uk.yml +15 -0
  89. data/config/locales/zh-CN.yml +0 -4
  90. data/config/locales/zh-TW.yml +4 -4
  91. data/decidim-core.gemspec +78 -0
  92. data/lib/decidim/acts_as_tree.rb +14 -1
  93. data/lib/decidim/asset_router/storage.rb +4 -0
  94. data/lib/decidim/attribute_encryptor.rb +6 -4
  95. data/lib/decidim/core/engine.rb +7 -3
  96. data/lib/decidim/core/test/factories.rb +314 -95
  97. data/lib/decidim/core/test/shared_examples/amendable/amendment_created_event_examples.rb +6 -26
  98. data/lib/decidim/core/test/shared_examples/amendable/amendment_promoted_event_examples.rb +8 -26
  99. data/lib/decidim/core/test/shared_examples/comments_examples.rb +32 -0
  100. data/lib/decidim/core/test/shared_examples/embed_resource_examples.rb +187 -11
  101. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +8 -6
  102. data/lib/decidim/core/test/shared_examples/has_attachments.rb +4 -4
  103. data/lib/decidim/core/test/shared_examples/has_category.rb +27 -0
  104. data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
  105. data/lib/decidim/core/test/shared_examples/has_space_in_mcell_examples.rb +1 -2
  106. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +6 -3
  107. data/lib/decidim/core/test/shared_examples/resource_locator_presenter_examples.rb +134 -0
  108. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +1 -1
  109. data/lib/decidim/core/test/shared_examples/simple_event.rb +50 -2
  110. data/lib/decidim/core/test.rb +1 -0
  111. data/lib/decidim/core/version.rb +1 -1
  112. data/lib/decidim/core.rb +1 -0
  113. data/lib/decidim/engine_router.rb +17 -4
  114. data/lib/decidim/events/base_event.rb +9 -2
  115. data/lib/decidim/events/simple_event.rb +3 -17
  116. data/lib/decidim/form_builder.rb +13 -1
  117. data/lib/decidim/has_category.rb +1 -1
  118. data/lib/decidim/has_conversations.rb +91 -0
  119. data/lib/decidim/organization_settings.rb +10 -2
  120. data/lib/decidim/participable.rb +17 -0
  121. data/lib/decidim/view_model.rb +1 -0
  122. data/lib/decidim/webpacker/webpack/.modernizrrc +9 -0
  123. data/lib/premailer/adapter/decidim.rb +5 -4
  124. data/lib/tasks/decidim_reminders_tasks.rake +1 -0
  125. data/lib/tasks/upgrade/decidim_fix_categorization.rake +15 -0
  126. metadata +29 -27
  127. data/config/environment.rb +0 -3
@@ -172,6 +172,11 @@ uk:
172
172
  ok: Гаразд
173
173
  title: Недостатньо прав через відсутність підтвердження особи
174
174
  collapsible_list:
175
+ hidden_elements_count:
176
+ one: і ще %{count}
177
+ few: і ще %{count}
178
+ many: і ще %{count}
179
+ other: і ще %{count}
175
180
  see_less: "(читати менше)"
176
181
  see_more: "(читати далі)"
177
182
  components:
@@ -221,6 +226,7 @@ uk:
221
226
  already_have_an_account?: Вже маєте обліковий запис?
222
227
  newsletter: Отримувати іноді розсилання зі свіжими новинами
223
228
  newsletter_title: Дозвіл на зв'язок
229
+ sign_in: Увійти
224
230
  sign_up: Зареєструватися
225
231
  sign_up_as:
226
232
  legend: Зареєструватися як
@@ -377,11 +383,17 @@ uk:
377
383
  create:
378
384
  error: Бесіда не розпочата. Спробуйте ще раз пізніше
379
385
  index:
386
+ from: Від
380
387
  no_conversations: У вас ще немає бесід
388
+ title: Бесіди
381
389
  reply:
382
390
  send: Надіслати
391
+ title: Відповісти
392
+ show:
393
+ title: Бесіда з %{usernames}
383
394
  start:
384
395
  send: Надіслати
396
+ title: Почати бесіду
385
397
  newsletter_mailer:
386
398
  newsletter:
387
399
  note: Ви отримали цього електронного листа, оскільки ви підписалися на новини щодо %{organization_name}. Ви можете змінити свої налаштування на <a href="%{link}">сторінці сповіщень</a>.
@@ -462,6 +474,7 @@ uk:
462
474
  profiles:
463
475
  default_officialization_text_for_users: Особу цього учасника прилюдно підтверджено, його ім'я чи роль перевірено на відповідність його справжньому імені та ролі
464
476
  show:
477
+ conversations: Бесіди
465
478
  followers: Ті, хто стежить
466
479
  following: 'Стежить за:'
467
480
  user:
@@ -527,6 +540,8 @@ uk:
527
540
  user_conversations:
528
541
  index:
529
542
  close: Закрити
543
+ show:
544
+ title: Бесіда з %{usernames}
530
545
  update:
531
546
  error: Повідомлення не надіслано. Спробуйте ще раз пізніше
532
547
  version_author:
@@ -57,9 +57,6 @@ zh-CN:
57
57
  booleans:
58
58
  'false': '否'
59
59
  'true': '否'
60
- carrierwave:
61
- errors:
62
- not_inside_organization: 该文件没有附加到任何组织
63
60
  date:
64
61
  formats:
65
62
  decidim_short: "%d/%m/%Y"
@@ -215,7 +212,6 @@ zh-CN:
215
212
  '1': 创建您的修改
216
213
  '2': 比较您的修改
217
214
  '3': 完成您的修改
218
- '4': 发布您的修改
219
215
  anonymous_user: 匿名的
220
216
  application:
221
217
  collection:
@@ -71,10 +71,7 @@ zh-TW:
71
71
  'true': '是'
72
72
  carrierwave:
73
73
  errors:
74
- file_cannot_be_processed: 無法處理檔案
75
- file_resolution_too_large: 檔案解析度過大
76
74
  file_size_too_large: 檔案太大。
77
- not_inside_organization: 該文件未附加到任何組織
78
75
  date:
79
76
  formats:
80
77
  decidim_short: "%d/%m/%Y"
@@ -317,7 +314,6 @@ zh-TW:
317
314
  '1': 創建您的修正案
318
315
  '2': 比較您的修正案
319
316
  '3': 完成您的修正案
320
- '4': 發佈您的修正案
321
317
  anonymous_user: 匿名
322
318
  application:
323
319
  collection:
@@ -519,6 +515,7 @@ zh-TW:
519
515
  newsletter: 偶爾收到包含相關信息的時事通訊。
520
516
  newsletter_title: 聯絡人權限
521
517
  nickname_help: 在 %{organization} 中的別名。只能包含字母、數字、'-' 和 '_'。
518
+ sign_in: 登入
522
519
  sign_up: 註冊登記
523
520
  sign_up_as:
524
521
  legend: 註冊登記為
@@ -1636,6 +1633,8 @@ zh-TW:
1636
1633
  updated: 您的帳號已成功升級。
1637
1634
  sessions:
1638
1635
  already_signed_out: 已成功登出。
1636
+ new:
1637
+ sign_in: 登入
1639
1638
  signed_in: 已成功登入。
1640
1639
  signed_out: 已成功登出。
1641
1640
  shared:
@@ -1644,6 +1643,7 @@ zh-TW:
1644
1643
  didn_t_receive_confirmation_instructions: 沒有收到確認的說明嗎?
1645
1644
  didn_t_receive_unlock_instructions: 沒有收到解鎖說明?
1646
1645
  forgot_your_password: 忘記密碼了嗎?
1646
+ sign_in: 登入
1647
1647
  sign_in_with_provider: 用%{provider} 登錄
1648
1648
  sign_up: 註冊登記
1649
1649
  minimum_password_length:
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path("lib", __dir__)
4
+
5
+ # Maintain your gem's version:
6
+ require "decidim/core/version"
7
+
8
+ # Describe your gem and declare its dependencies:
9
+ Gem::Specification.new do |s|
10
+ s.name = "decidim-core"
11
+ s.version = Decidim::Core.version
12
+ s.authors = ["Josep Jaume Rey Peroy", "Marc Riera Casals", "Oriol Gual Oliva"]
13
+ s.email = ["josepjaume@gmail.com", "mrc2407@gmail.com", "oriolgual@gmail.com"]
14
+ s.homepage = "https://github.com/decidim/decidim"
15
+ s.summary = "The core of the Decidim framework."
16
+ s.description = "Adds core features so other engines can hook into the framework."
17
+ s.license = "AGPL-3.0"
18
+ s.required_ruby_version = "~> 3.0.0"
19
+
20
+ s.files = Dir.chdir(__dir__) do
21
+ `git ls-files -z`.split("\x0").select do |f|
22
+ (File.expand_path(f) == __FILE__) ||
23
+ f.start_with?(*%w(app/ config/ db/ lib/ Rakefile README.md))
24
+ end
25
+ end
26
+
27
+ s.add_dependency "active_link_to", "~> 1.0"
28
+ s.add_dependency "acts_as_list", "~> 0.9"
29
+ s.add_dependency "batch-loader", "~> 1.2"
30
+ s.add_dependency "browser", "~> 2.7"
31
+ s.add_dependency "carrierwave", "~> 2.2.5", ">= 2.2.5"
32
+ s.add_dependency "cells-erb", "~> 0.1.0"
33
+ s.add_dependency "cells-rails", "~> 0.1.3"
34
+ s.add_dependency "charlock_holmes", "~> 0.7"
35
+ s.add_dependency "date_validator", "~> 0.12.0"
36
+ s.add_dependency "devise", "~> 4.7"
37
+ s.add_dependency "devise-i18n", "~> 1.2"
38
+ s.add_dependency "diffy", "~> 3.3"
39
+ s.add_dependency "doorkeeper", "~> 5.1"
40
+ s.add_dependency "doorkeeper-i18n", "~> 4.0"
41
+ s.add_dependency "file_validators", "~> 3.0"
42
+ s.add_dependency "fog-local", "~> 0.6"
43
+ s.add_dependency "foundation_rails_helper", "~> 4.0"
44
+ s.add_dependency "geocoder", "~> 1.8"
45
+ s.add_dependency "hashdiff", ">= 0.4.0", "< 2.0.0"
46
+ s.add_dependency "invisible_captcha", "~> 0.12"
47
+ s.add_dependency "kaminari", "~> 1.2", ">= 1.2.1"
48
+ s.add_dependency "loofah", "~> 2.19.0"
49
+ s.add_dependency "mime-types", ">= 1.16", "< 4.0"
50
+ s.add_dependency "mini_magick", "~> 4.9"
51
+ s.add_dependency "omniauth", "~> 2.0"
52
+ s.add_dependency "omniauth-facebook", "~> 5.0"
53
+ s.add_dependency "omniauth-google-oauth2", "~> 1.0"
54
+ s.add_dependency "omniauth-rails_csrf_protection", "~> 1.0"
55
+ s.add_dependency "omniauth-twitter", "~> 1.4"
56
+ s.add_dependency "paper_trail", "~> 12.0"
57
+ s.add_dependency "pg", "~> 1.1.4", "< 2"
58
+ s.add_dependency "pg_search", "~> 2.2"
59
+ s.add_dependency "premailer-rails", "~> 1.10"
60
+ s.add_dependency "rack", "~> 2.2", ">= 2.2.3"
61
+ s.add_dependency "rack-attack", "~> 6.0"
62
+ s.add_dependency "rails", "~> 6.1.0"
63
+ s.add_dependency "rails-i18n", "~> 6.0"
64
+ s.add_dependency "ransack", "~> 2.4.1"
65
+ s.add_dependency "redis", "~> 4.1"
66
+ s.add_dependency "request_store", "~> 1.5.0"
67
+ s.add_dependency "rubyXL", "~> 3.4"
68
+ s.add_dependency "rubyzip", "~> 2.0"
69
+ s.add_dependency "seven_zip_ruby", "~> 1.3"
70
+ s.add_dependency "social-share-button", "~> 1.2", ">= 1.2.1"
71
+ s.add_dependency "valid_email2", "~> 2.1"
72
+ s.add_dependency "webpacker", "= 6.0.0.rc.5"
73
+ s.add_dependency "webpush", "~> 1.1"
74
+ s.add_dependency "wisper", "~> 2.0"
75
+
76
+ s.add_development_dependency "decidim-api", Decidim::Core.version
77
+ s.add_development_dependency "decidim-dev", Decidim::Core.version
78
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
+ # Adapted from https://hashrocket.com/blog/posts/recursive-sql-in-activerecord
4
5
  module ActsAsTree
5
6
  extend ActiveSupport::Concern
6
7
 
@@ -15,10 +16,22 @@ module Decidim
15
16
  @parent_item_foreign_key = name
16
17
  end
17
18
 
19
+ def parent_item_polymorphic_type_key(name = nil)
20
+ return @parent_item_polymorphic_type_key unless name
21
+
22
+ @parent_item_polymorphic_type_key = name
23
+ end
24
+
18
25
  def tree_for(item)
19
26
  where(Arel.sql("#{table_name}.id IN (#{tree_sql_for(item)})")).order("#{table_name}.id")
20
27
  end
21
28
 
29
+ def polymorphic_condition(item)
30
+ return "" if parent_item_polymorphic_type_key.blank?
31
+
32
+ "AND #{table_name}.#{parent_item_polymorphic_type_key} = '#{item.class.name}'"
33
+ end
34
+
22
35
  def tree_sql_for(item)
23
36
  <<-SQL.squish
24
37
  WITH RECURSIVE search_tree(id, path) AS (
@@ -28,7 +41,7 @@ module Decidim
28
41
  UNION ALL
29
42
  SELECT #{table_name}.id, path || #{table_name}.id
30
43
  FROM search_tree
31
- JOIN #{table_name} ON #{table_name}.#{parent_item_foreign_key} = search_tree.id
44
+ JOIN #{table_name} ON #{table_name}.#{parent_item_foreign_key} = search_tree.id #{polymorphic_condition(item)}
32
45
  WHERE NOT #{table_name}.id = ANY(path)
33
46
  )
34
47
  SELECT id FROM search_tree ORDER BY path
@@ -19,13 +19,17 @@ module Decidim
19
19
  #
20
20
  # @param options The options for the URL that are the normal route options
21
21
  # Rails route helpers accept
22
+ # rubocop:disable Style/CaseLikeIf
22
23
  def url(**options)
23
24
  if asset.is_a? ActiveStorage::Attached
24
25
  routes.rails_blob_url(asset.blob, **default_options.merge(options))
26
+ elsif asset.is_a? ActiveStorage::Blob
27
+ routes.rails_blob_url(asset, **default_options.merge(options))
25
28
  else
26
29
  routes.rails_representation_url(asset, **default_options.merge(options))
27
30
  end
28
31
  end
32
+ # rubocop:enable Style/CaseLikeIf
29
33
 
30
34
  private
31
35
 
@@ -19,10 +19,12 @@ module Decidim
19
19
  end
20
20
 
21
21
  def self.cryptor
22
- key = ActiveSupport::KeyGenerator.new("attribute").generate_key(
23
- Rails.application.secrets.secret_key_base, ActiveSupport::MessageEncryptor.key_len
24
- )
25
- ActiveSupport::MessageEncryptor.new(key)
22
+ @cryptor ||= begin
23
+ key = ActiveSupport::KeyGenerator.new("attribute").generate_key(
24
+ Rails.application.secrets.secret_key_base, ActiveSupport::MessageEncryptor.key_len
25
+ )
26
+ ActiveSupport::MessageEncryptor.new(key)
27
+ end
26
28
  end
27
29
  end
28
30
  end
@@ -246,9 +246,13 @@ module Decidim
246
246
  end
247
247
 
248
248
  initializer "decidim.notifications" do
249
- config.to_prepare do
250
- Decidim::EventsManager.subscribe(/^decidim\.events\./) do |event_name, data|
251
- EventPublisherJob.perform_later(event_name, data)
249
+ if Rails.autoloaders.zeitwerk_enabled?
250
+ config.after_initialize do
251
+ Decidim::EventsManager.subscribe_events!
252
+ end
253
+ else
254
+ config.to_prepare do
255
+ Decidim::EventsManager.subscribe_events!
252
256
  end
253
257
  end
254
258
  end