decidim-admin 0.31.8 → 0.32.0.rc1

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 (248) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -12
  3. data/app/cells/decidim/admin/attachments_privacy_warning/show.erb +1 -1
  4. data/app/cells/decidim/admin/attachments_privacy_warning_cell.rb +2 -6
  5. data/app/commands/decidim/admin/content_blocks/reorder_content_blocks.rb +1 -1
  6. data/app/commands/decidim/admin/create_newsletter.rb +1 -1
  7. data/app/commands/decidim/admin/create_taxonomy_filter.rb +2 -16
  8. data/app/commands/decidim/admin/participatory_space/create_member.rb +99 -0
  9. data/app/commands/decidim/admin/participatory_space/destroy_member.rb +30 -0
  10. data/app/commands/decidim/admin/participatory_space/import_member_csv.rb +46 -0
  11. data/app/commands/decidim/admin/participatory_space/publish_all_members.rb +52 -0
  12. data/app/commands/decidim/admin/participatory_space/unpublish_all_members.rb +52 -0
  13. data/app/commands/decidim/admin/participatory_space/update_member.rb +13 -0
  14. data/app/commands/decidim/admin/reorder_components.rb +1 -1
  15. data/app/commands/decidim/admin/reorder_taxonomies.rb +1 -1
  16. data/app/commands/decidim/admin/update_organization.rb +1 -1
  17. data/app/commands/decidim/admin/update_taxonomy_filter.rb +6 -24
  18. data/app/controllers/concerns/decidim/admin/component_taxonomies_helper.rb +1 -1
  19. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page.rb +6 -5
  20. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page_content_blocks.rb +3 -2
  21. data/app/controllers/concerns/decidim/admin/filterable.rb +4 -4
  22. data/app/controllers/concerns/decidim/admin/global_moderation_context.rb +0 -2
  23. data/app/controllers/concerns/decidim/admin/participatory_space_admin_context.rb +1 -2
  24. data/app/controllers/concerns/decidim/admin/participatory_space_export.rb +1 -3
  25. data/app/controllers/decidim/admin/admin_terms_controller.rb +0 -1
  26. data/app/controllers/decidim/admin/application_controller.rb +0 -2
  27. data/app/controllers/decidim/admin/area_types_controller.rb +2 -2
  28. data/app/controllers/decidim/admin/areas_controller.rb +3 -2
  29. data/app/controllers/decidim/admin/block_user_controller.rb +2 -6
  30. data/app/controllers/decidim/admin/component_permissions_controller.rb +1 -1
  31. data/app/controllers/decidim/admin/components/base_controller.rb +3 -4
  32. data/app/controllers/decidim/admin/components_controller.rb +5 -4
  33. data/app/controllers/decidim/admin/concerns/has_attachment_collections.rb +2 -4
  34. data/app/controllers/decidim/admin/concerns/has_attachments.rb +2 -4
  35. data/app/controllers/decidim/admin/concerns/has_breadcrumb_items.rb +0 -4
  36. data/app/controllers/decidim/admin/conflicts_controller.rb +6 -6
  37. data/app/controllers/decidim/admin/exports_controller.rb +1 -1
  38. data/app/controllers/decidim/admin/global_moderations/reports_controller.rb +0 -2
  39. data/app/controllers/decidim/admin/global_moderations_controller.rb +0 -2
  40. data/app/controllers/decidim/admin/help_sections_controller.rb +3 -3
  41. data/app/controllers/decidim/admin/impersonations_controller.rb +2 -3
  42. data/app/controllers/decidim/admin/imports_controller.rb +2 -1
  43. data/app/controllers/decidim/admin/managed_users/impersonation_logs_controller.rb +1 -1
  44. data/app/controllers/decidim/admin/managed_users/promotions_controller.rb +1 -1
  45. data/app/controllers/decidim/admin/moderated_users_controller.rb +0 -3
  46. data/app/controllers/decidim/admin/moderations_controller.rb +0 -4
  47. data/app/controllers/decidim/admin/newsletter_templates_controller.rb +1 -4
  48. data/app/controllers/decidim/admin/newsletters_controller.rb +9 -12
  49. data/app/controllers/decidim/admin/officializations_controller.rb +0 -2
  50. data/app/controllers/decidim/admin/organization_appearance_controller.rb +1 -1
  51. data/app/controllers/decidim/admin/organization_controller.rb +30 -1
  52. data/app/controllers/decidim/admin/organization_external_domain_allowlist_controller.rb +1 -1
  53. data/app/controllers/decidim/admin/organization_homepage_controller.rb +3 -7
  54. data/app/controllers/decidim/admin/participatory_space/concerns/has_members.rb +166 -0
  55. data/app/controllers/decidim/admin/participatory_space/concerns/has_members_csv_import.rb +67 -0
  56. data/app/controllers/decidim/admin/participatory_space/concerns/members_filterable.rb +36 -0
  57. data/app/controllers/decidim/admin/participatory_space/user_role_controller.rb +2 -2
  58. data/app/controllers/decidim/admin/reminders_controller.rb +1 -1
  59. data/app/controllers/decidim/admin/resource_permissions_controller.rb +1 -5
  60. data/app/controllers/decidim/admin/scope_types_controller.rb +2 -2
  61. data/app/controllers/decidim/admin/scopes_controller.rb +3 -2
  62. data/app/controllers/decidim/admin/share_tokens_controller.rb +2 -2
  63. data/app/controllers/decidim/admin/space_publications_controller.rb +2 -2
  64. data/app/controllers/decidim/admin/static_page_topics_controller.rb +2 -2
  65. data/app/controllers/decidim/admin/static_pages_controller.rb +27 -29
  66. data/app/controllers/decidim/admin/taxonomies_controller.rb +3 -3
  67. data/app/controllers/decidim/admin/taxonomy_filters_controller.rb +5 -5
  68. data/app/controllers/decidim/admin/taxonomy_filters_selector_controller.rb +1 -1
  69. data/app/controllers/decidim/admin/taxonomy_items_controller.rb +3 -3
  70. data/app/controllers/decidim/admin/users_controller.rb +1 -1
  71. data/app/forms/decidim/admin/content_block_form.rb +28 -1
  72. data/app/forms/decidim/admin/organization_form.rb +0 -1
  73. data/app/forms/decidim/admin/participatory_space/member_csv_import_form.rb +33 -0
  74. data/app/forms/decidim/admin/participatory_space/member_form.rb +26 -0
  75. data/app/forms/decidim/admin/participatory_space_admin_user_form.rb +1 -1
  76. data/app/forms/decidim/admin/selective_newsletter_form.rb +7 -7
  77. data/app/forms/decidim/admin/taxonomy_filter_form.rb +10 -11
  78. data/app/helpers/decidim/admin/newsletters_helper.rb +8 -5
  79. data/app/helpers/decidim/admin/search_form_helper.rb +17 -0
  80. data/app/helpers/decidim/admin/settings_helper.rb +2 -0
  81. data/app/jobs/decidim/admin/newsletter_job.rb +2 -1
  82. data/app/jobs/decidim/admin/participatory_space/destroy_members_follows_job.rb +36 -0
  83. data/app/jobs/decidim/admin/participatory_space/import_member_csv_job.rb +29 -0
  84. data/app/packs/src/decidim/admin/admin_autocomplete.js +10 -16
  85. data/app/packs/src/decidim/admin/controllers/access_mode/access_mode.test.js +68 -0
  86. data/app/packs/src/decidim/admin/controllers/access_mode/controller.js +52 -0
  87. data/app/packs/src/decidim/admin/newsletters.js +2 -2
  88. data/app/packs/stylesheets/decidim/admin/_datepicker.scss +0 -4
  89. data/app/packs/stylesheets/decidim/admin/_sidebar-menu.scss +1 -3
  90. data/app/packs/stylesheets/decidim/admin/application.scss +1 -1
  91. data/app/permissions/decidim/admin/permissions.rb +0 -16
  92. data/app/queries/decidim/admin/newsletter_recipients.rb +8 -8
  93. data/app/views/decidim/admin/admin_terms/show.html.erb +3 -1
  94. data/app/views/decidim/admin/area_types/index.html.erb +3 -2
  95. data/app/views/decidim/admin/areas/index.html.erb +3 -2
  96. data/app/views/decidim/admin/attachment_collections/edit.html.erb +2 -2
  97. data/app/views/decidim/admin/attachment_collections/index.html.erb +3 -3
  98. data/app/views/decidim/admin/attachment_collections/new.html.erb +2 -2
  99. data/app/views/decidim/admin/attachments/index.html.erb +3 -2
  100. data/app/views/decidim/admin/authorization_workflows/index.html.erb +2 -2
  101. data/app/views/decidim/admin/block_user/new.html.erb +1 -0
  102. data/app/views/decidim/admin/components/_actions.html.erb +1 -1
  103. data/app/views/decidim/admin/components/index.html.erb +2 -2
  104. data/app/views/decidim/admin/components/manage_trash.html.erb +2 -2
  105. data/app/views/decidim/admin/conflicts/edit.html.erb +3 -1
  106. data/app/views/decidim/admin/conflicts/index.html.erb +3 -2
  107. data/app/views/decidim/admin/dashboard/show.html.erb +4 -4
  108. data/app/views/decidim/admin/help_sections/update.html.erb +2 -0
  109. data/app/views/decidim/admin/impersonatable_users/index.html.erb +3 -2
  110. data/app/views/decidim/admin/impersonations/_form.html.erb +2 -2
  111. data/app/views/decidim/admin/impersonations/new.html.erb +3 -2
  112. data/app/views/decidim/admin/imports/new.html.erb +1 -0
  113. data/app/views/decidim/admin/logs/_logs_list.html.erb +1 -1
  114. data/app/views/decidim/admin/logs/index.html.erb +1 -1
  115. data/app/views/decidim/admin/managed_users/impersonation_logs/index.html.erb +6 -5
  116. data/app/views/decidim/admin/managed_users/promotions/new.html.erb +3 -2
  117. data/app/views/decidim/admin/{participatory_space_private_users → members}/edit.html.erb +2 -2
  118. data/app/views/decidim/admin/{participatory_space_private_users → members}/index.html.erb +25 -25
  119. data/app/views/decidim/admin/{participatory_space_private_users → members}/new.html.erb +2 -2
  120. data/app/views/decidim/admin/{participatory_space_private_users_csv_imports → members_csv_imports}/new.html.erb +2 -2
  121. data/app/views/decidim/admin/moderations/_moderation-tr.html.erb +3 -7
  122. data/app/views/decidim/admin/moderations/_moderations-thead.html.erb +0 -1
  123. data/app/views/decidim/admin/moderations/reports/index.html.erb +1 -1
  124. data/app/views/decidim/admin/newsletter_templates/show.html.erb +3 -2
  125. data/app/views/decidim/admin/newsletters/confirm_recipients.html.erb +4 -6
  126. data/app/views/decidim/admin/newsletters/index.html.erb +2 -2
  127. data/app/views/decidim/admin/newsletters/select_recipients_to_deliver.html.erb +2 -2
  128. data/app/views/decidim/admin/newsletters/show.html.erb +3 -2
  129. data/app/views/decidim/admin/officializations/index.html.erb +6 -4
  130. data/app/views/decidim/admin/officializations/show_email.html.erb +3 -7
  131. data/app/views/decidim/admin/organization/form/_extra_features.html.erb +2 -22
  132. data/app/views/decidim/admin/organization_external_domain_allowlist/_form.html.erb +2 -2
  133. data/app/views/decidim/admin/organization_external_domain_allowlist/edit.html.erb +2 -2
  134. data/app/views/decidim/admin/reminders/new.html.erb +8 -1
  135. data/app/views/decidim/admin/resource_permissions/edit.html.erb +2 -2
  136. data/app/views/decidim/admin/scope_types/index.html.erb +3 -2
  137. data/app/views/decidim/admin/scopes/index.html.erb +2 -2
  138. data/app/views/decidim/admin/share_tokens/index.html.erb +2 -0
  139. data/app/views/decidim/admin/shared/_gallery.html.erb +15 -0
  140. data/app/views/decidim/admin/shared/landing_page/_content_blocks.html.erb +0 -2
  141. data/app/views/decidim/admin/shared/landing_page/edit.html.erb +2 -0
  142. data/app/views/decidim/admin/shared/landing_page_content_blocks/edit.html.erb +1 -0
  143. data/app/views/decidim/admin/static_page_topics/index.html.erb +2 -2
  144. data/app/views/decidim/admin/static_pages/edit.html.erb +2 -1
  145. data/app/views/decidim/admin/static_pages/index.html.erb +2 -2
  146. data/app/views/decidim/admin/statistics/_statistics.html.erb +1 -1
  147. data/app/views/decidim/admin/statistics/index.html.erb +2 -0
  148. data/app/views/decidim/admin/taxonomies/_row.html.erb +1 -1
  149. data/app/views/decidim/admin/taxonomies/_row_children.html.erb +1 -1
  150. data/app/views/decidim/admin/taxonomies/_table.html.erb +1 -1
  151. data/app/views/decidim/admin/taxonomies/edit.html.erb +2 -2
  152. data/app/views/decidim/admin/taxonomies/index.html.erb +4 -4
  153. data/app/views/decidim/admin/taxonomy_filters/_table.html.erb +2 -2
  154. data/app/views/decidim/admin/taxonomy_filters/index.html.erb +2 -2
  155. data/app/views/decidim/admin/taxonomy_filters_selector/index.html.erb +2 -0
  156. data/app/views/decidim/admin/taxonomy_filters_selector/new.html.erb +2 -0
  157. data/app/views/decidim/admin/taxonomy_filters_selector/show.html.erb +2 -0
  158. data/app/views/decidim/admin/taxonomy_items/edit.html.erb +2 -0
  159. data/app/views/decidim/admin/taxonomy_items/new.html.erb +2 -0
  160. data/app/views/decidim/admin/users/index.html.erb +3 -2
  161. data/app/views/layouts/decidim/admin/_application.html.erb +1 -1
  162. data/config/locales/ar.yml +9 -49
  163. data/config/locales/bg.yml +9 -57
  164. data/config/locales/bs-BA.yml +4 -24
  165. data/config/locales/ca-IT.yml +130 -117
  166. data/config/locales/ca.yml +130 -117
  167. data/config/locales/cs.yml +126 -116
  168. data/config/locales/de.yml +114 -123
  169. data/config/locales/el.yml +17 -45
  170. data/config/locales/en.yml +130 -116
  171. data/config/locales/eo.yml +0 -7
  172. data/config/locales/es-MX.yml +130 -117
  173. data/config/locales/es-PY.yml +130 -117
  174. data/config/locales/es.yml +130 -117
  175. data/config/locales/eu.yml +189 -176
  176. data/config/locales/fi-plain.yml +129 -116
  177. data/config/locales/fi.yml +129 -116
  178. data/config/locales/fr-CA.yml +91 -149
  179. data/config/locales/fr.yml +91 -149
  180. data/config/locales/ga-IE.yml +0 -13
  181. data/config/locales/gl.yml +57 -649
  182. data/config/locales/he-IL.yml +1 -5
  183. data/config/locales/hu.yml +10 -52
  184. data/config/locales/id-ID.yml +4 -34
  185. data/config/locales/is-IS.yml +1 -16
  186. data/config/locales/it.yml +8 -69
  187. data/config/locales/ja.yml +129 -118
  188. data/config/locales/kaa.yml +4 -16
  189. data/config/locales/ko.yml +6 -40
  190. data/config/locales/lb.yml +9 -41
  191. data/config/locales/lt.yml +10 -52
  192. data/config/locales/lv.yml +8 -38
  193. data/config/locales/nl.yml +10 -46
  194. data/config/locales/no.yml +10 -46
  195. data/config/locales/pl.yml +9 -54
  196. data/config/locales/pt-BR.yml +121 -104
  197. data/config/locales/pt.yml +9 -42
  198. data/config/locales/ro-RO.yml +15 -51
  199. data/config/locales/ru.yml +4 -35
  200. data/config/locales/sk.yml +8 -814
  201. data/config/locales/sl.yml +1 -7
  202. data/config/locales/sq-AL.yml +1 -21
  203. data/config/locales/sr-CS.yml +4 -24
  204. data/config/locales/sv.yml +80 -121
  205. data/config/locales/th-TH.yml +0 -8
  206. data/config/locales/tr-TR.yml +33 -93
  207. data/config/locales/uk.yml +0 -26
  208. data/config/locales/val-ES.yml +0 -1
  209. data/config/locales/zh-CN.yml +9 -38
  210. data/config/locales/zh-TW.yml +10 -52
  211. data/config/routes.rb +4 -0
  212. data/decidim-admin.gemspec +7 -10
  213. data/lib/decidim/admin/engine.rb +5 -2
  214. data/lib/decidim/admin/form_builder.rb +3 -1
  215. data/lib/decidim/admin/menu.rb +1 -1
  216. data/lib/decidim/admin/test/admin_members_shared_examples.rb +119 -0
  217. data/lib/decidim/admin/test/admin_participatory_space_access_examples.rb +3 -3
  218. data/lib/decidim/admin/test/filterable_examples.rb +20 -11
  219. data/lib/decidim/admin/test/invite_participatory_space_admins_shared_examples.rb +17 -17
  220. data/lib/decidim/admin/test/invite_participatory_space_collaborators_shared_examples.rb +1 -1
  221. data/lib/decidim/admin/test/invite_participatory_space_moderators_shared_examples.rb +1 -1
  222. data/lib/decidim/admin/test/invite_participatory_space_users_shared_context.rb +1 -1
  223. data/lib/decidim/admin/test/manage_attachment_collections_examples.rb +3 -3
  224. data/lib/decidim/admin/test/manage_attachments_examples.rb +6 -6
  225. data/lib/decidim/admin/test/manage_component_permissions_examples.rb +5 -5
  226. data/lib/decidim/admin/test/manage_moderations_examples.rb +6 -6
  227. data/lib/decidim/admin/test/manage_participatory_space_publications_examples.rb +2 -2
  228. data/lib/decidim/admin/test/manage_resource_soft_deletion_examples.rb +3 -3
  229. data/lib/decidim/admin/version.rb +1 -1
  230. data/lib/decidim/admin.rb +0 -2
  231. metadata +40 -36
  232. data/app/commands/decidim/admin/create_participatory_space_private_user.rb +0 -98
  233. data/app/commands/decidim/admin/destroy_participatory_space_private_user.rb +0 -28
  234. data/app/commands/decidim/admin/process_participatory_space_private_user_import_csv.rb +0 -44
  235. data/app/commands/decidim/admin/publish_all_participatory_space_private_users.rb +0 -50
  236. data/app/commands/decidim/admin/unpublish_all_participatory_space_private_users.rb +0 -50
  237. data/app/commands/decidim/admin/update_participatory_space_private_user.rb +0 -11
  238. data/app/controllers/concerns/decidim/participatory_space_private_users/admin/filterable.rb +0 -34
  239. data/app/controllers/decidim/admin/concerns/has_private_users.rb +0 -173
  240. data/app/controllers/decidim/admin/concerns/has_private_users_csv_import.rb +0 -67
  241. data/app/forms/decidim/admin/participatory_space_private_user_csv_import_form.rb +0 -31
  242. data/app/forms/decidim/admin/participatory_space_private_user_form.rb +0 -24
  243. data/app/jobs/decidim/admin/destroy_private_users_follows_job.rb +0 -37
  244. data/app/jobs/decidim/admin/import_participatory_space_private_user_csv_job.rb +0 -27
  245. data/app/views/decidim/admin/devise/mailers/password_change.html.erb +0 -3
  246. data/app/views/decidim/admin/devise/mailers/reset_password_instructions.html.erb +0 -8
  247. data/app/views/decidim/admin/shared/_attachments.html.erb +0 -15
  248. /data/app/views/decidim/admin/{participatory_space_private_users → members}/_form.html.erb +0 -0
@@ -34,7 +34,7 @@ module Decidim
34
34
 
35
35
  on(:invalid) do
36
36
  flash.now[:alert] = I18n.t("area_types.create.error", scope: "decidim.admin")
37
- render :new, status: :unprocessable_entity
37
+ render :new, status: :unprocessable_content
38
38
  end
39
39
  end
40
40
  end
@@ -56,7 +56,7 @@ module Decidim
56
56
 
57
57
  on(:invalid) do
58
58
  flash.now[:alert] = I18n.t("area_types.update.error", scope: "decidim.admin")
59
- render :edit, status: :unprocessable_entity
59
+ render :edit, status: :unprocessable_content
60
60
  end
61
61
  end
62
62
  end
@@ -6,6 +6,7 @@ module Decidim
6
6
  #
7
7
  class AreasController < Decidim::Admin::ApplicationController
8
8
  include Decidim::Admin::Concerns::HasTabbedMenu
9
+
9
10
  helper Decidim::Admin::AreasHelper
10
11
 
11
12
  layout "decidim/admin/settings"
@@ -35,7 +36,7 @@ module Decidim
35
36
 
36
37
  on(:invalid) do
37
38
  flash.now[:alert] = I18n.t("areas.create.error", scope: "decidim.admin")
38
- render :new, status: :unprocessable_entity
39
+ render :new, status: :unprocessable_content
39
40
  end
40
41
  end
41
42
  end
@@ -57,7 +58,7 @@ module Decidim
57
58
 
58
59
  on(:invalid) do
59
60
  flash.now[:alert] = I18n.t("areas.update.error", scope: "decidim.admin")
60
- render :edit, status: :unprocessable_entity
61
+ render :edit, status: :unprocessable_content
61
62
  end
62
63
  end
63
64
  end
@@ -10,8 +10,6 @@ module Decidim
10
10
  def new
11
11
  enforce_permission_to :block, :admin_user
12
12
 
13
- return redirect_to(officializations_path, alert: I18n.t("officializations.block.no_user", scope: "decidim.admin")) unless user
14
-
15
13
  @form = form(BlockUserForm).from_model(user)
16
14
  @form.hide = params[:hide] || false
17
15
  end
@@ -29,7 +27,7 @@ module Decidim
29
27
 
30
28
  on(:invalid) do
31
29
  flash[:alert] = I18n.t("officializations.block.error", scope: "decidim.admin")
32
- render :new, status: :unprocessable_entity
30
+ render :new, status: :unprocessable_content
33
31
  end
34
32
  end
35
33
  end
@@ -57,7 +55,6 @@ module Decidim
57
55
  end
58
56
 
59
57
  def bulk_create
60
- enforce_permission_to :block, :admin_user
61
58
  @form = form(BlockUsersForm).from_params(params)
62
59
 
63
60
  Admin::BulkBlockUsers.call(@form) do
@@ -68,13 +65,12 @@ module Decidim
68
65
 
69
66
  on(:invalid) do
70
67
  flash.now[:alert] = I18n.t("officializations.bulk_action.block.invalid", scope: "decidim.admin")
71
- render :bulk_new, status: :unprocessable_entity
68
+ render :bulk_new, status: :unprocessable_content
72
69
  end
73
70
  end
74
71
  end
75
72
 
76
73
  def bulk_destroy
77
- enforce_permission_to :block, :admin_user
78
74
  Admin::BulkUnblockUsers.call(blocked_users, current_user) do
79
75
  on(:ok) do
80
76
  flash[:notice] = I18n.t("officializations.bulk_action.unblock.success", scope: "decidim.admin")
@@ -26,7 +26,7 @@ module Decidim
26
26
 
27
27
  on(:invalid) do
28
28
  flash.now[:alert] = t("component_permissions.update.error", scope: "decidim.admin")
29
- render action: :edit, status: :unprocessable_entity
29
+ render action: :edit, status: :unprocessable_content
30
30
  end
31
31
  end
32
32
  end
@@ -10,6 +10,7 @@ module Decidim
10
10
 
11
11
  include Decidim::Admin::ParticipatorySpaceAdminContext
12
12
  include Decidim::NeedsPermission
13
+
13
14
  participatory_space_admin_layout
14
15
 
15
16
  helper Decidim::ResourceHelper
@@ -25,7 +26,7 @@ module Decidim
25
26
 
26
27
  before_action :enforce_component_permissions
27
28
 
28
- before_action :set_component_breadcrumb_item
29
+ before_action :set_breadcrumb_items
29
30
 
30
31
  def permissions_context
31
32
  super.merge(
@@ -71,9 +72,7 @@ module Decidim
71
72
  end
72
73
  end
73
74
 
74
- protected
75
-
76
- def set_component_breadcrumb_item
75
+ def set_breadcrumb_items
77
76
  context_breadcrumb_items << {
78
77
  label: t("components", scope: "decidim.admin.menu"),
79
78
  url: parent_path,
@@ -7,6 +7,7 @@ module Decidim
7
7
  #
8
8
  class ComponentsController < Decidim::Admin::ApplicationController
9
9
  include Decidim::Admin::HasTrashableResources
10
+
10
11
  helper_method :manifest
11
12
 
12
13
  def index
@@ -47,7 +48,7 @@ module Decidim
47
48
 
48
49
  on(:invalid) do
49
50
  flash.now[:alert] = I18n.t("components.create.error", scope: "decidim.admin")
50
- render action: "new", status: :unprocessable_entity
51
+ render action: "new", status: :unprocessable_content
51
52
  end
52
53
  end
53
54
  end
@@ -74,7 +75,7 @@ module Decidim
74
75
 
75
76
  on(:invalid) do
76
77
  flash[:alert] = I18n.t("components.update.error", scope: "decidim.admin")
77
- render action: :edit, status: :unprocessable_entity
78
+ render action: :edit, status: :unprocessable_content
78
79
  end
79
80
  end
80
81
  end
@@ -86,7 +87,7 @@ module Decidim
86
87
 
87
88
  Decidim::Commands::SoftDeleteResource.call(trashable_deleted_resource, current_user) do
88
89
  on(:ok) do
89
- Decidim::Reminder.where(component: resource).destroy_all # rubocop:disable Decidim/OrganizationScopedFinder -- resource is the soft-deleted component, already scoped to current_participatory_space via query_scope
90
+ Decidim::Reminder.where(component: resource).destroy_all
90
91
  flash[:notice] = I18n.t("soft_delete.success", scope: trashable_i18n_scope, resource_name: human_readable_resource_name.capitalize)
91
92
  redirect_to_resource_index
92
93
  end
@@ -135,9 +136,9 @@ module Decidim
135
136
  end
136
137
 
137
138
  def share
138
- enforce_permission_to :share, :component
139
139
  @component = query_scope.find(params[:id])
140
140
  share_token = @component.share_tokens.create!(user: current_user, organization: current_organization)
141
+
141
142
  redirect_to share_token.url
142
143
  end
143
144
 
@@ -39,7 +39,7 @@ module Decidim
39
39
 
40
40
  on(:invalid) do
41
41
  flash.now[:alert] = I18n.t("attachment_collections.create.error", scope: "decidim.admin")
42
- render template: "decidim/admin/attachment_collections/new", status: :unprocessable_entity
42
+ render template: "decidim/admin/attachment_collections/new", status: :unprocessable_content
43
43
  end
44
44
  end
45
45
  end
@@ -64,7 +64,7 @@ module Decidim
64
64
 
65
65
  on(:invalid) do
66
66
  flash.now[:alert] = I18n.t("attachment_collections.update.error", scope: "decidim.admin")
67
- render template: "decidim/admin/attachment_collections/edit", status: :unprocessable_entity
67
+ render template: "decidim/admin/attachment_collections/edit", status: :unprocessable_content
68
68
  end
69
69
  end
70
70
  end
@@ -82,8 +82,6 @@ module Decidim
82
82
  redirect_to after_destroy_path
83
83
  end
84
84
 
85
- protected
86
-
87
85
  # Public: Returns a String or Object that will be passed to `redirect_to` after
88
86
  # destroying an attachment collection. By default it redirects to the object
89
87
  # that holds the attachment collection.
@@ -39,7 +39,7 @@ module Decidim
39
39
 
40
40
  on(:invalid) do
41
41
  flash.now[:alert] = I18n.t("attachments.create.error", scope: "decidim.admin")
42
- render template: "decidim/admin/attachments/new", status: :unprocessable_entity
42
+ render template: "decidim/admin/attachments/new", status: :unprocessable_content
43
43
  end
44
44
  end
45
45
  end
@@ -64,7 +64,7 @@ module Decidim
64
64
 
65
65
  on(:invalid) do
66
66
  flash.now[:alert] = I18n.t("attachments.update.error", scope: "decidim.admin")
67
- render template: "decidim/admin/attachments/edit", status: :unprocessable_entity
67
+ render template: "decidim/admin/attachments/edit", status: :unprocessable_content
68
68
  end
69
69
  end
70
70
  end
@@ -82,8 +82,6 @@ module Decidim
82
82
  redirect_to after_destroy_path
83
83
  end
84
84
 
85
- protected
86
-
87
85
  # Public: Returns a String or Object that will be passed to `redirect_to` after
88
86
  # destroying an attachment. By default it redirects to the attached_to.
89
87
  #
@@ -7,16 +7,12 @@ module Decidim
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  class_methods do
10
- protected
11
-
12
10
  def add_breadcrumb_item_from_menu(target_menu, opts = {})
13
11
  before_action -> { secondary_breadcrumb_menus << target_menu }, opts
14
12
  end
15
13
  end
16
14
 
17
15
  included do
18
- protected
19
-
20
16
  def secondary_breadcrumb_menus
21
17
  @secondary_breadcrumb_menus ||= []
22
18
  end
@@ -18,6 +18,8 @@ module Decidim
18
18
  def edit
19
19
  enforce_permission_to :index, :impersonatable_user
20
20
 
21
+ conflict = Decidim::Verifications::Conflict.find(params[:id])
22
+
21
23
  @form = form(TransferUserForm).from_params(
22
24
  user: conflict.current_user,
23
25
  managed_user: conflict.managed_user,
@@ -28,6 +30,8 @@ module Decidim
28
30
  def update
29
31
  enforce_permission_to :index, :impersonatable_user
30
32
 
33
+ conflict = Decidim::Verifications::Conflict.find(params[:id])
34
+
31
35
  @form = form(TransferUserForm).from_params(
32
36
  current_user:,
33
37
  conflict:,
@@ -43,17 +47,13 @@ module Decidim
43
47
 
44
48
  on(:invalid) do
45
49
  flash.now[:alert] = I18n.t("error", scope: "decidim.admin.conflicts.transfer")
46
- render action: "edit", status: :unprocessable_entity
50
+ render action: "edit", status: :unprocessable_content
47
51
  end
48
52
  end
49
53
  end
50
54
 
51
55
  private
52
56
 
53
- def conflict
54
- @conflict ||= collection.find(params.require(:id))
55
- end
56
-
57
57
  def context_breadcrumb_items
58
58
  @context_breadcrumb_items ||= [impersonations_breadcrumb_item]
59
59
  end
@@ -67,7 +67,7 @@ module Decidim
67
67
 
68
68
  def collection
69
69
  @collection ||= Decidim::Verifications::Conflict.joins(:current_user).where(
70
- decidim_users: { organization: current_organization }
70
+ decidim_users: { decidim_organization_id: current_organization.id }
71
71
  )
72
72
  end
73
73
 
@@ -15,7 +15,7 @@ module Decidim
15
15
 
16
16
  flash[:notice] = t("decidim.admin.exports.notice")
17
17
 
18
- redirect_back(fallback_location: manage_component_path(component))
18
+ redirect_back_or_to(manage_component_path(component))
19
19
  end
20
20
 
21
21
  private
@@ -9,8 +9,6 @@ module Decidim
9
9
 
10
10
  include Decidim::Admin::GlobalModerationContext
11
11
 
12
- protected
13
-
14
12
  def moderation
15
13
  @moderation ||= moderations_for_user.find(params[:moderation_id])
16
14
  end
@@ -9,8 +9,6 @@ module Decidim
9
9
 
10
10
  include Decidim::Admin::GlobalModerationContext
11
11
 
12
- protected
13
-
14
12
  # Private: This method is used by the `Filterable` concern as the base query
15
13
  # without applying filtering and/or sorting options.
16
14
  def collection
@@ -12,17 +12,17 @@ module Decidim
12
12
 
13
13
  helper_method :sections
14
14
 
15
- def show
15
+ before_action do
16
16
  enforce_permission_to :update, :help_sections
17
+ end
17
18
 
19
+ def show
18
20
  @form = form(HelpSectionsForm).from_model(
19
21
  OpenStruct.new(sections:)
20
22
  )
21
23
  end
22
24
 
23
25
  def update
24
- enforce_permission_to :update, :help_sections
25
-
26
26
  @form = form(HelpSectionsForm).from_params(
27
27
  params[:help_sections]
28
28
  )
@@ -46,13 +46,12 @@ module Decidim
46
46
 
47
47
  on(:invalid) do
48
48
  flash.now[:alert] = I18n.t("impersonations.create.error", scope: "decidim.admin")
49
- render :new, status: :unprocessable_entity
49
+ render :new, status: :unprocessable_content
50
50
  end
51
51
  end
52
52
  end
53
53
 
54
54
  def close_session
55
- enforce_permission_to :close_session, :managed_user
56
55
  CloseSessionManagedUser.call(user, current_user) do
57
56
  on(:ok) do
58
57
  flash[:notice] = I18n.t("impersonations.close_session.success", scope: "decidim.admin")
@@ -83,7 +82,7 @@ module Decidim
83
82
  )
84
83
  return nil unless handler.unique_id
85
84
 
86
- existing_authorization = Authorization.find_by( # rubocop:disable Decidim/OrganizationScopedFinder -- user: subquery scopes to current_organization
85
+ existing_authorization = Authorization.find_by(
87
86
  user: User.where(organization: current_organization),
88
87
  name: handler_name,
89
88
  unique_id: handler.unique_id
@@ -5,6 +5,7 @@ module Decidim
5
5
  # This controller allows admins to import resources from a file.
6
6
  class ImportsController < Decidim::Admin::ApplicationController
7
7
  include Decidim::ComponentPathHelper
8
+
8
9
  before_action :set_import_breadcrumb_item
9
10
 
10
11
  helper_method :import_manifest
@@ -39,7 +40,7 @@ module Decidim
39
40
 
40
41
  on(:invalid) do
41
42
  flash.now[:alert] = t("decidim.admin.imports.error")
42
- render :new, status: :unprocessable_entity
43
+ render :new, status: :unprocessable_content
43
44
  end
44
45
  end
45
46
  end
@@ -11,7 +11,7 @@ module Decidim
11
11
  def index
12
12
  enforce_permission_to :index, :impersonatable_user
13
13
 
14
- @impersonation_logs = user.impersonation_logs.order(started_at: :desc).page(params[:page]).per(15)
14
+ @impersonation_logs = Decidim::ImpersonationLog.where(user:).order(started_at: :desc).page(params[:page]).per(15)
15
15
  end
16
16
 
17
17
  private
@@ -25,7 +25,7 @@ module Decidim
25
25
 
26
26
  on(:invalid) do
27
27
  flash.now[:alert] = I18n.t("managed_users.promotion.error", scope: "decidim.admin")
28
- render :new, status: :unprocessable_entity
28
+ render :new, status: :unprocessable_content
29
29
  end
30
30
  end
31
31
  end
@@ -34,7 +34,6 @@ module Decidim
34
34
  end
35
35
 
36
36
  def bulk_unreport
37
- enforce_permission_to :unreport, :moderate_users
38
37
  Admin::BulkUnreportUsers.call(current_user, reportables) do
39
38
  on(:ok) do
40
39
  flash[:notice] = I18n.t("reportable.bulk_action.ignore.success", scope: "decidim.moderations.admin")
@@ -68,8 +67,6 @@ module Decidim
68
67
  Decidim::Admin::ModerationStats.new(current_user).user_reports
69
68
  end
70
69
 
71
- protected
72
-
73
70
  def collection
74
71
  @collection ||= if params[:blocked]
75
72
  base_query_finder.blocked
@@ -73,8 +73,6 @@ module Decidim
73
73
  end
74
74
 
75
75
  def bulk_action
76
- enforce_permission_to :bulk_action, authorization_scope
77
-
78
76
  Admin::BulkAction.call(current_user, params[:bulk_action], selected_moderations) do
79
77
  on(:ok) do |ok, ko|
80
78
  flash[:notice] = I18n.t("reportable.bulk_action.#{params[:bulk_action]}.success", scope: "decidim.moderations.admin", count_ok: ok.count) if ok.count.positive?
@@ -94,8 +92,6 @@ module Decidim
94
92
  query_params[:q] || { s: "created_at desc" }
95
93
  end
96
94
 
97
- protected
98
-
99
95
  # Private: This method is used by the `Filterable` concern as the base query
100
96
  # without applying filtering and/or sorting options.
101
97
  def collection
@@ -12,12 +12,9 @@ module Decidim
12
12
  enforce_permission_to :index, :newsletter
13
13
  end
14
14
 
15
- def show
16
- enforce_permission_to :index, :newsletter
17
- end
15
+ def show; end
18
16
 
19
17
  def preview
20
- enforce_permission_to :index, :newsletter
21
18
  email = NewsletterMailer.newsletter(current_user, fake_newsletter, true)
22
19
  Premailer::Rails::Hook.perform(email)
23
20
  render html: email.html_part.body.decoded.html_safe
@@ -7,6 +7,7 @@ module Decidim
7
7
  include Decidim::NewslettersHelper
8
8
  include Decidim::Admin::NewslettersHelper
9
9
  include Paginable
10
+
10
11
  helper_method :newsletter, :recipients_count_query, :content_block, :selected_options, :newsletter_params
11
12
 
12
13
  def index
@@ -31,7 +32,7 @@ module Decidim
31
32
  NewsletterMailer.newsletter(current_user, newsletter).deliver_later
32
33
  flash[:notice] = I18n.t("newsletters.send_to_user.sent_successfully", scope: "decidim.admin", email: current_user.email)
33
34
 
34
- redirect_back fallback_location: newsletters_path
35
+ redirect_back_or_to(newsletters_path)
35
36
  end
36
37
 
37
38
  def preview
@@ -44,7 +45,7 @@ module Decidim
44
45
 
45
46
  def create
46
47
  enforce_permission_to :create, :newsletter
47
- @form = form(NewsletterForm).from_params(params)
48
+ @form = form(NewsletterForm).from_params(params, content_block:)
48
49
  @form.images = images_block_context unless has_images_block_context?
49
50
 
50
51
  CreateNewsletter.call(@form, content_block) do
@@ -55,9 +56,8 @@ module Decidim
55
56
 
56
57
  on(:invalid) do |newsletter|
57
58
  @newsletter = newsletter
58
- @form.images = content_block.images_container
59
59
  flash.now[:error] = I18n.t("newsletters.create.error", scope: "decidim.admin")
60
- render action: :new, status: :unprocessable_entity
60
+ render action: :new, status: :unprocessable_content
61
61
  end
62
62
  end
63
63
  end
@@ -69,7 +69,7 @@ module Decidim
69
69
 
70
70
  def update
71
71
  enforce_permission_to(:update, :newsletter, newsletter:)
72
- @form = form(NewsletterForm).from_params(params)
72
+ @form = form(NewsletterForm).from_params(params, content_block:)
73
73
  @form.images = images_block_context unless has_images_block_context?
74
74
 
75
75
  UpdateNewsletter.call(newsletter, @form) do
@@ -81,7 +81,7 @@ module Decidim
81
81
  on(:invalid) do |newsletter|
82
82
  @newsletter = newsletter
83
83
  flash.now[:error] = I18n.t("newsletters.update.error", scope: "decidim.admin")
84
- render action: :edit, status: :unprocessable_entity
84
+ render action: :edit, status: :unprocessable_content
85
85
  end
86
86
  end
87
87
  end
@@ -113,7 +113,6 @@ module Decidim
113
113
  end
114
114
 
115
115
  def recipients_count
116
- enforce_permission_to :read, :newsletter, newsletter:
117
116
  @form = form(SelectiveNewsletterForm).from_params(newsletter_params)
118
117
  render plain: recipients_count_query
119
118
  end
@@ -130,12 +129,12 @@ module Decidim
130
129
 
131
130
  on(:invalid) do
132
131
  flash.now[:error] = I18n.t("newsletters.deliver.error", scope: "decidim.admin")
133
- render action: :select_recipients_to_deliver, status: :unprocessable_entity
132
+ render action: :select_recipients_to_deliver, status: :unprocessable_content
134
133
  end
135
134
 
136
135
  on(:no_recipients) do
137
136
  flash.now[:error] = I18n.t("newsletters.send.no_recipients", scope: "decidim.admin")
138
- render action: :select_recipients_to_deliver, status: :unprocessable_entity
137
+ render action: :select_recipients_to_deliver, status: :unprocessable_content
139
138
  end
140
139
  end
141
140
  end
@@ -157,7 +156,7 @@ module Decidim
157
156
  :send_to_verified_users,
158
157
  :send_to_followers,
159
158
  :send_to_participants,
160
- :send_to_private_members,
159
+ :send_to_members,
161
160
  verification_types: [],
162
161
  participatory_space_types: {
163
162
  assemblies: [:manifest_name, { ids: [] }],
@@ -183,8 +182,6 @@ module Decidim
183
182
  end
184
183
  end
185
184
 
186
- protected
187
-
188
185
  def collection
189
186
  @collection ||= Newsletter.where(organization: current_organization)
190
187
  end
@@ -22,8 +22,6 @@ module Decidim
22
22
  def new
23
23
  enforce_permission_to :create, :officialization
24
24
 
25
- return redirect_to(officializations_path, alert: I18n.t("officializations.create.no_user_found", scope: "decidim.admin")) unless user
26
-
27
25
  @form = form(OfficializationForm).from_model(user)
28
26
  end
29
27
 
@@ -25,7 +25,7 @@ module Decidim
25
25
 
26
26
  on(:invalid) do
27
27
  flash.now[:alert] = I18n.t("organization.update.error", scope: "decidim.admin")
28
- render :edit, status: :unprocessable_entity
28
+ render :edit, status: :unprocessable_content
29
29
  end
30
30
  end
31
31
  end
@@ -29,7 +29,36 @@ module Decidim
29
29
 
30
30
  on(:invalid) do
31
31
  flash.now[:alert] = I18n.t("organization.update.error", scope: "decidim.admin")
32
- render :edit, status: :unprocessable_entity
32
+ render :edit, status: :unprocessable_content
33
+ end
34
+ end
35
+ end
36
+
37
+ def users
38
+ search(current_organization.users.available)
39
+ end
40
+
41
+ private
42
+
43
+ def search(relation)
44
+ respond_to do |format|
45
+ format.json do
46
+ if (term = params[:term].to_s).present?
47
+ query = if term.start_with?("@")
48
+ nickname = term.delete("@")
49
+ relation.where("nickname LIKE ?", "#{nickname}%")
50
+ .order(Arel.sql(ActiveRecord::Base.sanitize_sql_array("similarity(nickname, '#{nickname}') DESC")))
51
+ else
52
+ relation.where("name ILIKE ?", "%#{term}%").or(
53
+ relation.where("email ILIKE ?", "%#{term}%")
54
+ )
55
+ .order(Arel.sql(ActiveRecord::Base.sanitize_sql_array("GREATEST(similarity(name, '#{term}'), similarity(email, '#{term}')) DESC")))
56
+ .order(Arel.sql(ActiveRecord::Base.sanitize_sql_array("(similarity(name, '#{term}') + similarity(email, '#{term}')) / 2 DESC")))
57
+ end
58
+ render json: query.all.collect { |u| { value: u.id, label: "#{u.name} (@#{u.nickname})" } }
59
+ else
60
+ render json: []
61
+ end
33
62
  end
34
63
  end
35
64
  end
@@ -25,7 +25,7 @@ module Decidim
25
25
  end
26
26
  on(:invalid) do
27
27
  flash[:notice] = t("domain_allowlist.update.error", scope: "decidim.admin")
28
- render action: "edit", status: :unprocessable_entity
28
+ render action: "edit", status: :unprocessable_content
29
29
  end
30
30
  end
31
31
  end
@@ -10,18 +10,14 @@ module Decidim
10
10
 
11
11
  add_breadcrumb_item_from_menu :admin_settings_menu
12
12
 
13
- helper_method :scoped_resource
13
+ def content_block_scope
14
+ :homepage
15
+ end
14
16
 
15
17
  def scoped_resource
16
18
  nil
17
19
  end
18
20
 
19
- protected
20
-
21
- def content_block_scope
22
- :homepage
23
- end
24
-
25
21
  def enforce_permission_to_update_resource
26
22
  enforce_permission_to :update, :organization, organization: current_organization
27
23
  end