decidim-admin 0.31.6 → 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 (232) 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/content_blocks/landing_page.rb +1 -0
  19. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page_content_blocks.rb +3 -2
  20. data/app/controllers/concerns/decidim/admin/filterable.rb +4 -4
  21. data/app/controllers/concerns/decidim/admin/participatory_space_admin_context.rb +1 -0
  22. data/app/controllers/concerns/decidim/admin/participatory_space_export.rb +1 -1
  23. data/app/controllers/decidim/admin/area_types_controller.rb +2 -2
  24. data/app/controllers/decidim/admin/areas_controller.rb +3 -2
  25. data/app/controllers/decidim/admin/block_user_controller.rb +2 -4
  26. data/app/controllers/decidim/admin/component_permissions_controller.rb +1 -1
  27. data/app/controllers/decidim/admin/components/base_controller.rb +13 -9
  28. data/app/controllers/decidim/admin/components_controller.rb +3 -2
  29. data/app/controllers/decidim/admin/concerns/has_attachment_collections.rb +2 -2
  30. data/app/controllers/decidim/admin/concerns/has_attachments.rb +2 -2
  31. data/app/controllers/decidim/admin/conflicts_controller.rb +1 -1
  32. data/app/controllers/decidim/admin/exports_controller.rb +1 -1
  33. data/app/controllers/decidim/admin/impersonations_controller.rb +1 -1
  34. data/app/controllers/decidim/admin/imports_controller.rb +2 -1
  35. data/app/controllers/decidim/admin/managed_users/promotions_controller.rb +1 -1
  36. data/app/controllers/decidim/admin/newsletters_controller.rb +9 -9
  37. data/app/controllers/decidim/admin/officializations_controller.rb +0 -2
  38. data/app/controllers/decidim/admin/organization_appearance_controller.rb +1 -1
  39. data/app/controllers/decidim/admin/organization_controller.rb +30 -1
  40. data/app/controllers/decidim/admin/organization_external_domain_allowlist_controller.rb +1 -1
  41. data/app/controllers/decidim/admin/participatory_space/concerns/has_members.rb +166 -0
  42. data/app/controllers/decidim/admin/participatory_space/concerns/has_members_csv_import.rb +67 -0
  43. data/app/controllers/decidim/admin/participatory_space/concerns/members_filterable.rb +36 -0
  44. data/app/controllers/decidim/admin/participatory_space/user_role_controller.rb +2 -2
  45. data/app/controllers/decidim/admin/reminders_controller.rb +1 -1
  46. data/app/controllers/decidim/admin/resource_permissions_controller.rb +1 -1
  47. data/app/controllers/decidim/admin/scope_types_controller.rb +2 -2
  48. data/app/controllers/decidim/admin/scopes_controller.rb +3 -2
  49. data/app/controllers/decidim/admin/share_tokens_controller.rb +2 -2
  50. data/app/controllers/decidim/admin/space_publications_controller.rb +2 -2
  51. data/app/controllers/decidim/admin/static_page_topics_controller.rb +2 -2
  52. data/app/controllers/decidim/admin/static_pages_controller.rb +2 -2
  53. data/app/controllers/decidim/admin/taxonomies_controller.rb +3 -3
  54. data/app/controllers/decidim/admin/taxonomy_filters_controller.rb +3 -3
  55. data/app/controllers/decidim/admin/taxonomy_items_controller.rb +3 -3
  56. data/app/controllers/decidim/admin/users_controller.rb +1 -1
  57. data/app/forms/decidim/admin/content_block_form.rb +28 -1
  58. data/app/forms/decidim/admin/organization_form.rb +0 -1
  59. data/app/forms/decidim/admin/participatory_space/member_csv_import_form.rb +33 -0
  60. data/app/forms/decidim/admin/participatory_space/member_form.rb +26 -0
  61. data/app/forms/decidim/admin/participatory_space_admin_user_form.rb +1 -1
  62. data/app/forms/decidim/admin/selective_newsletter_form.rb +7 -7
  63. data/app/forms/decidim/admin/taxonomy_filter_form.rb +10 -11
  64. data/app/helpers/decidim/admin/newsletters_helper.rb +8 -5
  65. data/app/helpers/decidim/admin/search_form_helper.rb +17 -0
  66. data/app/helpers/decidim/admin/settings_helper.rb +2 -0
  67. data/app/jobs/decidim/admin/newsletter_job.rb +2 -2
  68. data/app/jobs/decidim/admin/participatory_space/destroy_members_follows_job.rb +36 -0
  69. data/app/jobs/decidim/admin/participatory_space/import_member_csv_job.rb +29 -0
  70. data/app/packs/src/decidim/admin/admin_autocomplete.js +10 -16
  71. data/app/packs/src/decidim/admin/controllers/access_mode/access_mode.test.js +68 -0
  72. data/app/packs/src/decidim/admin/controllers/access_mode/controller.js +52 -0
  73. data/app/packs/src/decidim/admin/newsletters.js +2 -2
  74. data/app/packs/stylesheets/decidim/admin/_datepicker.scss +0 -4
  75. data/app/packs/stylesheets/decidim/admin/application.scss +1 -1
  76. data/app/queries/decidim/admin/newsletter_recipients.rb +8 -8
  77. data/app/views/decidim/admin/admin_terms/show.html.erb +3 -1
  78. data/app/views/decidim/admin/area_types/index.html.erb +3 -2
  79. data/app/views/decidim/admin/areas/index.html.erb +3 -2
  80. data/app/views/decidim/admin/attachment_collections/edit.html.erb +2 -2
  81. data/app/views/decidim/admin/attachment_collections/index.html.erb +3 -3
  82. data/app/views/decidim/admin/attachment_collections/new.html.erb +2 -2
  83. data/app/views/decidim/admin/attachments/index.html.erb +3 -2
  84. data/app/views/decidim/admin/authorization_workflows/index.html.erb +2 -2
  85. data/app/views/decidim/admin/block_user/new.html.erb +1 -0
  86. data/app/views/decidim/admin/components/_actions.html.erb +1 -1
  87. data/app/views/decidim/admin/components/index.html.erb +2 -2
  88. data/app/views/decidim/admin/components/manage_trash.html.erb +2 -2
  89. data/app/views/decidim/admin/conflicts/edit.html.erb +3 -1
  90. data/app/views/decidim/admin/conflicts/index.html.erb +3 -2
  91. data/app/views/decidim/admin/dashboard/show.html.erb +4 -4
  92. data/app/views/decidim/admin/help_sections/update.html.erb +2 -0
  93. data/app/views/decidim/admin/impersonatable_users/index.html.erb +3 -2
  94. data/app/views/decidim/admin/impersonations/_form.html.erb +2 -2
  95. data/app/views/decidim/admin/impersonations/new.html.erb +3 -2
  96. data/app/views/decidim/admin/imports/new.html.erb +1 -0
  97. data/app/views/decidim/admin/logs/_logs_list.html.erb +1 -1
  98. data/app/views/decidim/admin/logs/index.html.erb +1 -1
  99. data/app/views/decidim/admin/managed_users/impersonation_logs/index.html.erb +6 -5
  100. data/app/views/decidim/admin/managed_users/promotions/new.html.erb +3 -2
  101. data/app/views/decidim/admin/{participatory_space_private_users → members}/edit.html.erb +2 -2
  102. data/app/views/decidim/admin/{participatory_space_private_users → members}/index.html.erb +25 -25
  103. data/app/views/decidim/admin/{participatory_space_private_users → members}/new.html.erb +2 -2
  104. data/app/views/decidim/admin/{participatory_space_private_users_csv_imports → members_csv_imports}/new.html.erb +2 -2
  105. data/app/views/decidim/admin/moderations/_moderation-tr.html.erb +3 -7
  106. data/app/views/decidim/admin/moderations/_moderations-thead.html.erb +0 -1
  107. data/app/views/decidim/admin/moderations/reports/index.html.erb +1 -1
  108. data/app/views/decidim/admin/newsletter_templates/show.html.erb +3 -2
  109. data/app/views/decidim/admin/newsletters/confirm_recipients.html.erb +4 -6
  110. data/app/views/decidim/admin/newsletters/index.html.erb +2 -2
  111. data/app/views/decidim/admin/newsletters/select_recipients_to_deliver.html.erb +2 -2
  112. data/app/views/decidim/admin/newsletters/show.html.erb +3 -2
  113. data/app/views/decidim/admin/officializations/index.html.erb +6 -4
  114. data/app/views/decidim/admin/officializations/show_email.html.erb +3 -7
  115. data/app/views/decidim/admin/organization/form/_extra_features.html.erb +0 -4
  116. data/app/views/decidim/admin/organization_external_domain_allowlist/_form.html.erb +2 -2
  117. data/app/views/decidim/admin/organization_external_domain_allowlist/edit.html.erb +2 -2
  118. data/app/views/decidim/admin/reminders/new.html.erb +8 -1
  119. data/app/views/decidim/admin/resource_permissions/edit.html.erb +2 -2
  120. data/app/views/decidim/admin/scope_types/index.html.erb +3 -2
  121. data/app/views/decidim/admin/scopes/index.html.erb +2 -2
  122. data/app/views/decidim/admin/share_tokens/index.html.erb +2 -0
  123. data/app/views/decidim/admin/shared/_gallery.html.erb +15 -0
  124. data/app/views/decidim/admin/shared/landing_page/_content_blocks.html.erb +0 -2
  125. data/app/views/decidim/admin/shared/landing_page/edit.html.erb +2 -0
  126. data/app/views/decidim/admin/shared/landing_page_content_blocks/edit.html.erb +1 -0
  127. data/app/views/decidim/admin/static_page_topics/index.html.erb +2 -2
  128. data/app/views/decidim/admin/static_pages/edit.html.erb +2 -1
  129. data/app/views/decidim/admin/static_pages/index.html.erb +2 -2
  130. data/app/views/decidim/admin/statistics/_statistics.html.erb +1 -1
  131. data/app/views/decidim/admin/statistics/index.html.erb +2 -0
  132. data/app/views/decidim/admin/taxonomies/_row.html.erb +1 -1
  133. data/app/views/decidim/admin/taxonomies/_row_children.html.erb +1 -1
  134. data/app/views/decidim/admin/taxonomies/_table.html.erb +1 -1
  135. data/app/views/decidim/admin/taxonomies/edit.html.erb +2 -2
  136. data/app/views/decidim/admin/taxonomies/index.html.erb +4 -4
  137. data/app/views/decidim/admin/taxonomy_filters/_table.html.erb +2 -2
  138. data/app/views/decidim/admin/taxonomy_filters/index.html.erb +2 -2
  139. data/app/views/decidim/admin/taxonomy_filters_selector/index.html.erb +2 -0
  140. data/app/views/decidim/admin/taxonomy_filters_selector/new.html.erb +2 -0
  141. data/app/views/decidim/admin/taxonomy_filters_selector/show.html.erb +2 -0
  142. data/app/views/decidim/admin/taxonomy_items/edit.html.erb +2 -0
  143. data/app/views/decidim/admin/taxonomy_items/new.html.erb +2 -0
  144. data/app/views/decidim/admin/users/index.html.erb +3 -2
  145. data/app/views/layouts/decidim/admin/_application.html.erb +1 -1
  146. data/config/locales/ar.yml +9 -49
  147. data/config/locales/bg.yml +9 -55
  148. data/config/locales/bs-BA.yml +4 -24
  149. data/config/locales/ca-IT.yml +130 -113
  150. data/config/locales/ca.yml +130 -113
  151. data/config/locales/cs.yml +126 -107
  152. data/config/locales/de.yml +114 -98
  153. data/config/locales/el.yml +17 -45
  154. data/config/locales/en.yml +130 -112
  155. data/config/locales/eo.yml +0 -7
  156. data/config/locales/es-MX.yml +130 -113
  157. data/config/locales/es-PY.yml +130 -113
  158. data/config/locales/es.yml +130 -113
  159. data/config/locales/eu.yml +159 -142
  160. data/config/locales/fi-plain.yml +129 -112
  161. data/config/locales/fi.yml +129 -112
  162. data/config/locales/fr-CA.yml +91 -142
  163. data/config/locales/fr.yml +91 -142
  164. data/config/locales/ga-IE.yml +0 -13
  165. data/config/locales/gl.yml +10 -41
  166. data/config/locales/he-IL.yml +1 -5
  167. data/config/locales/hu.yml +10 -52
  168. data/config/locales/id-ID.yml +4 -34
  169. data/config/locales/is-IS.yml +1 -16
  170. data/config/locales/it.yml +8 -69
  171. data/config/locales/ja.yml +129 -114
  172. data/config/locales/kaa.yml +4 -16
  173. data/config/locales/ko.yml +6 -40
  174. data/config/locales/lb.yml +9 -41
  175. data/config/locales/lt.yml +10 -52
  176. data/config/locales/lv.yml +8 -38
  177. data/config/locales/nl.yml +10 -46
  178. data/config/locales/no.yml +10 -46
  179. data/config/locales/pl.yml +9 -54
  180. data/config/locales/pt-BR.yml +121 -104
  181. data/config/locales/pt.yml +9 -42
  182. data/config/locales/ro-RO.yml +15 -51
  183. data/config/locales/ru.yml +4 -35
  184. data/config/locales/sk.yml +8 -814
  185. data/config/locales/sl.yml +1 -7
  186. data/config/locales/sq-AL.yml +1 -21
  187. data/config/locales/sr-CS.yml +4 -24
  188. data/config/locales/sv.yml +79 -89
  189. data/config/locales/th-TH.yml +0 -8
  190. data/config/locales/tr-TR.yml +33 -65
  191. data/config/locales/uk.yml +0 -26
  192. data/config/locales/val-ES.yml +0 -1
  193. data/config/locales/zh-CN.yml +9 -38
  194. data/config/locales/zh-TW.yml +10 -52
  195. data/config/routes.rb +4 -0
  196. data/decidim-admin.gemspec +7 -10
  197. data/lib/decidim/admin/engine.rb +5 -2
  198. data/lib/decidim/admin/form_builder.rb +3 -1
  199. data/lib/decidim/admin/menu.rb +1 -1
  200. data/lib/decidim/admin/test/admin_members_shared_examples.rb +119 -0
  201. data/lib/decidim/admin/test/admin_participatory_space_access_examples.rb +3 -3
  202. data/lib/decidim/admin/test/filterable_examples.rb +20 -11
  203. data/lib/decidim/admin/test/invite_participatory_space_admins_shared_examples.rb +17 -17
  204. data/lib/decidim/admin/test/invite_participatory_space_collaborators_shared_examples.rb +1 -1
  205. data/lib/decidim/admin/test/invite_participatory_space_moderators_shared_examples.rb +1 -1
  206. data/lib/decidim/admin/test/invite_participatory_space_users_shared_context.rb +1 -1
  207. data/lib/decidim/admin/test/manage_attachment_collections_examples.rb +3 -3
  208. data/lib/decidim/admin/test/manage_attachments_examples.rb +6 -6
  209. data/lib/decidim/admin/test/manage_component_permissions_examples.rb +5 -5
  210. data/lib/decidim/admin/test/manage_moderations_examples.rb +6 -6
  211. data/lib/decidim/admin/test/manage_participatory_space_publications_examples.rb +2 -2
  212. data/lib/decidim/admin/test/manage_resource_soft_deletion_examples.rb +3 -3
  213. data/lib/decidim/admin/version.rb +1 -1
  214. data/lib/decidim/admin.rb +0 -2
  215. metadata +40 -36
  216. data/app/commands/decidim/admin/create_participatory_space_private_user.rb +0 -98
  217. data/app/commands/decidim/admin/destroy_participatory_space_private_user.rb +0 -28
  218. data/app/commands/decidim/admin/process_participatory_space_private_user_import_csv.rb +0 -44
  219. data/app/commands/decidim/admin/publish_all_participatory_space_private_users.rb +0 -50
  220. data/app/commands/decidim/admin/unpublish_all_participatory_space_private_users.rb +0 -50
  221. data/app/commands/decidim/admin/update_participatory_space_private_user.rb +0 -11
  222. data/app/controllers/concerns/decidim/participatory_space_private_users/admin/filterable.rb +0 -34
  223. data/app/controllers/decidim/admin/concerns/has_private_users.rb +0 -169
  224. data/app/controllers/decidim/admin/concerns/has_private_users_csv_import.rb +0 -65
  225. data/app/forms/decidim/admin/participatory_space_private_user_csv_import_form.rb +0 -31
  226. data/app/forms/decidim/admin/participatory_space_private_user_form.rb +0 -24
  227. data/app/jobs/decidim/admin/destroy_private_users_follows_job.rb +0 -37
  228. data/app/jobs/decidim/admin/import_participatory_space_private_user_csv_job.rb +0 -27
  229. data/app/views/decidim/admin/devise/mailers/password_change.html.erb +0 -3
  230. data/app/views/decidim/admin/devise/mailers/reset_password_instructions.html.erb +0 -8
  231. data/app/views/decidim/admin/shared/_attachments.html.erb +0 -15
  232. /data/app/views/decidim/admin/{participatory_space_private_users → members}/_form.html.erb +0 -0
@@ -1,169 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- module Concerns
6
- # PrivateUsers can be related to any ParticipatorySpace, in order to
7
- # manage the private users for a given type, you should create a new
8
- # controller and include this concern.
9
- #
10
- # The only requirement is to define a `privatable_to` method that
11
- # returns an instance of the model to relate the private_user to.
12
- module HasPrivateUsers
13
- extend ActiveSupport::Concern
14
-
15
- included do
16
- include Decidim::ParticipatorySpacePrivateUsers::Admin::Filterable
17
- helper PaginateHelper
18
- helper_method :privatable_to, :participatory_space_private_users
19
-
20
- # rubocop:disable Rails/LexicallyScopedActionFilter
21
- before_action :set_private_user, only: [:edit, :update, :destroy, :resend_invitation]
22
- # rubocop:enable Rails/LexicallyScopedActionFilter
23
-
24
- def index
25
- enforce_permission_to :read, :space_private_user
26
-
27
- render template: "decidim/admin/participatory_space_private_users/index"
28
- end
29
-
30
- def new
31
- enforce_permission_to :create, :space_private_user
32
- @form = form(ParticipatorySpacePrivateUserForm).from_params({}, privatable_to:)
33
- render template: "decidim/admin/participatory_space_private_users/new"
34
- end
35
-
36
- def edit
37
- enforce_permission_to :update, :space_private_user, private_user: @private_user
38
- @form = form(ParticipatorySpacePrivateUserForm).from_model(@private_user)
39
- render template: "decidim/admin/participatory_space_private_users/edit"
40
- end
41
-
42
- def update
43
- enforce_permission_to :update, :space_private_user, private_user: @private_user
44
- @form = form(ParticipatorySpacePrivateUserForm).from_params(params, privatable_to:)
45
-
46
- UpdateParticipatorySpacePrivateUser.call(@form, @private_user) do
47
- on(:ok) do
48
- flash[:notice] = I18n.t("participatory_space_private_users.update.success", scope: "decidim.admin")
49
- redirect_to action: :index
50
- end
51
-
52
- on(:invalid) do
53
- flash.now[:alert] = I18n.t("participatory_space_private_users.update.error", scope: "decidim.admin")
54
- render template: "decidim/admin/participatory_space_private_users/edit", status: :unprocessable_entity
55
- end
56
- end
57
- end
58
-
59
- def create
60
- enforce_permission_to :create, :space_private_user
61
- @form = form(ParticipatorySpacePrivateUserForm).from_params(params, privatable_to:)
62
-
63
- CreateParticipatorySpacePrivateUser.call(@form, current_participatory_space) do
64
- on(:ok) do
65
- flash[:notice] = I18n.t("participatory_space_private_users.create.success", scope: "decidim.admin")
66
- redirect_to action: :index
67
- end
68
-
69
- on(:invalid) do
70
- flash.now[:alert] = I18n.t("participatory_space_private_users.create.error", scope: "decidim.admin")
71
- render template: "decidim/admin/participatory_space_private_users/new", status: :unprocessable_entity
72
- end
73
- end
74
- end
75
-
76
- def destroy
77
- enforce_permission_to :destroy, :space_private_user, private_user: @private_user
78
-
79
- DestroyParticipatorySpacePrivateUser.call(@private_user, current_user) do
80
- on(:ok) do
81
- flash[:notice] = I18n.t("participatory_space_private_users.destroy.success", scope: "decidim.admin")
82
- redirect_to after_destroy_path
83
- end
84
-
85
- on(:invalid) do
86
- flash.now[:alert] = I18n.t("participatory_space_private_users.destroy.error", scope: "decidim.admin")
87
- render template: "decidim/admin/participatory_space_private_users/index", status: :unprocessable_entity
88
- end
89
- end
90
- end
91
-
92
- def resend_invitation
93
- enforce_permission_to :invite, :space_private_user, private_user: @private_user
94
- InviteUserAgain.call(@private_user.user, "invite_private_user") do
95
- on(:ok) do
96
- flash[:notice] = I18n.t("users.resend_invitation.success", scope: "decidim.admin")
97
- end
98
-
99
- on(:invalid) do
100
- flash[:alert] = I18n.t("users.resend_invitation.error", scope: "decidim.admin")
101
- end
102
- end
103
-
104
- redirect_to after_destroy_path
105
- end
106
-
107
- def publish_all
108
- PublishAllParticipatorySpacePrivateUsers.call(current_participatory_space, current_user) do
109
- on(:ok) do
110
- flash[:notice] = I18n.t("participatory_space_private_users.publish_all.success", scope: "decidim.admin")
111
- redirect_to action: :index
112
- end
113
-
114
- on(:invalid) do
115
- flash[:alert] = I18n.t("participatory_space_private_users.publish_all.error", scope: "decidim.admin")
116
- redirect_to action: :index
117
- end
118
- end
119
- end
120
-
121
- def unpublish_all
122
- UnpublishAllParticipatorySpacePrivateUsers.call(current_participatory_space, current_user) do
123
- on(:ok) do
124
- flash[:notice] = I18n.t("participatory_space_private_users.unpublish_all.success", scope: "decidim.admin")
125
- redirect_to action: :index
126
- end
127
-
128
- on(:invalid) do
129
- flash[:alert] = I18n.t("participatory_space_private_users.unpublish_all.error", scope: "decidim.admin")
130
- redirect_to action: :index
131
- end
132
- end
133
- end
134
-
135
- # Public: Returns a String or Object that will be passed to `redirect_to` after
136
- # destroying a private user. By default it redirects to the privatable_to.
137
- #
138
- # It can be redefined at controller level if you need to redirect elsewhere.
139
- def after_destroy_path
140
- privatable_to
141
- end
142
-
143
- # Public: The only method to be implemented at the controller. You need to
144
- # return the object where the attachment will be attached to.
145
- def privatable_to
146
- raise NotImplementedError
147
- end
148
-
149
- def collection
150
- # there is an unidentified corner case where Decidim::User
151
- # may have been destroyed, but the related ParticipatorySpacePrivateUser
152
- # remains in the database. That is why filtering by not null users
153
- @collection ||= privatable_to
154
- .participatory_space_private_users
155
- .includes(:user).where.not("decidim_users.id" => nil)
156
- end
157
-
158
- def participatory_space_private_users
159
- filtered_collection
160
- end
161
-
162
- def set_private_user
163
- @private_user = collection.find(params[:id])
164
- end
165
- end
166
- end
167
- end
168
- end
169
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- module Concerns
6
- # PrivateUsers can be related to any ParticipatorySpace, in order to
7
- # import private users from csv for a given type, you should create a new
8
- # controller and include this concern.
9
- #
10
- # The only requirement is to define a `privatable_to` method that
11
- # returns an instance of the model to relate the private_user to.
12
- module HasPrivateUsersCsvImport
13
- extend ActiveSupport::Concern
14
-
15
- included do
16
- helper_method :privatable_to
17
-
18
- def new
19
- enforce_permission_to :csv_import, :space_private_user
20
- @form = form(ParticipatorySpacePrivateUserCsvImportForm).from_params({}, privatable_to:)
21
- @count = Decidim::ParticipatorySpacePrivateUser.by_participatory_space(privatable_to).count
22
- render template: "decidim/admin/participatory_space_private_users_csv_imports/new"
23
- end
24
-
25
- def create
26
- enforce_permission_to :csv_import, :space_private_user
27
- @form = form(ParticipatorySpacePrivateUserCsvImportForm).from_params(params, privatable_to:)
28
-
29
- ProcessParticipatorySpacePrivateUserImportCsv.call(@form, current_participatory_space) do
30
- on(:ok) do
31
- flash[:notice] = I18n.t("participatory_space_private_users_csv_imports.create.success", scope: "decidim.admin")
32
- redirect_to after_import_path
33
- end
34
-
35
- on(:invalid) do
36
- flash[:alert] = I18n.t("participatory_space_private_users_csv_imports.create.invalid", scope: "decidim.admin")
37
- render template: "decidim/admin/participatory_space_private_users_csv_imports/new", status: :unprocessable_entity
38
- end
39
- end
40
- end
41
-
42
- def destroy_all
43
- enforce_permission_to :csv_import, :space_private_user
44
- Decidim::ParticipatorySpacePrivateUser.by_participatory_space(privatable_to).delete_all
45
- redirect_to new_participatory_space_private_users_csv_imports_path
46
- end
47
-
48
- # Public: Returns a String or Object that will be passed to `redirect_to` after
49
- # importing private users. By default it redirects to the privatable_to.
50
- #
51
- # It can be redefined at controller level if you need to redirect elsewhere.
52
- def after_import_path
53
- privatable_to
54
- end
55
-
56
- # Public: The only method to be implemented at the controller. You need to
57
- # return the object where the attachment will be attached to.
58
- def privatable_to
59
- raise NotImplementedError
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- module Decidim
6
- module Admin
7
- # A form object used to upload CSV to batch participatory space private users.
8
- #
9
- class ParticipatorySpacePrivateUserCsvImportForm < Form
10
- include Decidim::HasUploadValidations
11
- include Decidim::Admin::CustomImport
12
-
13
- attribute :file, Decidim::Attributes::Blob
14
- attribute :user_name, String
15
- attribute :email, String
16
-
17
- validates :file, presence: true, file_content_type: { allow: ["text/csv"] }
18
- validate :validate_csv
19
-
20
- def validate_csv
21
- return if file.blank?
22
-
23
- process_import_file(file) do |(_email, user_name)|
24
- errors.add(:user_name, :invalid) if user_name.blank? || !user_name.match?(UserBaseEntity::REGEXP_NAME)
25
- end
26
- rescue CSV::MalformedCSVError
27
- errors.add(:file, :malformed)
28
- end
29
- end
30
- end
31
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- # A form object used to create participatory space private users from the
6
- # admin dashboard.
7
- #
8
- class ParticipatorySpacePrivateUserForm < Form
9
- include TranslatableAttributes
10
-
11
- mimic :participatory_space_private_user
12
-
13
- attribute :name, String
14
- attribute :email, String
15
- attribute :published, Boolean
16
-
17
- translatable_attribute :role, String
18
-
19
- validates :name, :email, presence: true
20
-
21
- validates :name, format: { with: UserBaseEntity::REGEXP_NAME }
22
- end
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- class DestroyPrivateUsersFollowsJob < ApplicationJob
6
- queue_as :default
7
-
8
- def perform(decidim_user_id, space)
9
- return unless space.respond_to?(:private_space?)
10
-
11
- return unless space.private_space?
12
-
13
- return if space.respond_to?(:is_transparent) && space.is_transparent?
14
-
15
- user = Decidim::User.find_by(id: decidim_user_id)
16
-
17
- return if user.blank?
18
-
19
- return if space.respond_to?(:can_participate?) && space.can_participate?(user)
20
-
21
- follows = Decidim::Follow.where(user: user)
22
- follows.where(followable: space).destroy_all
23
-
24
- destroy_children_follows(follows, space)
25
- end
26
-
27
- def destroy_children_follows(follows, space)
28
- follows.map do |follow|
29
- object = follow.followable.presence
30
- next unless object.respond_to?(:decidim_component_id)
31
-
32
- follow.destroy if space.component_ids.include?(object.decidim_component_id)
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- # Custom ApplicationJob scoped to the admin panel.
6
- #
7
- class ImportParticipatorySpacePrivateUserCsvJob < ApplicationJob
8
- queue_as :exports
9
-
10
- def perform(email, user_name, privatable_to, current_user)
11
- return if email.blank? || user_name.blank?
12
-
13
- params = {
14
- name: user_name,
15
- email: email.downcase.strip
16
- }
17
- private_user_form = ParticipatorySpacePrivateUserForm.from_params(params, privatable_to:)
18
- .with_context(
19
- current_user:,
20
- current_participatory_space: privatable_to
21
- )
22
-
23
- Decidim::Admin::CreateParticipatorySpacePrivateUser.call(private_user_form, privatable_to, via_csv: true)
24
- end
25
- end
26
- end
27
- end
@@ -1,3 +0,0 @@
1
- <p>Hello <%= @resource.email %>!</p>
2
-
3
- <p>We are contacting you to notify you that your password has been changed.</p>
@@ -1,8 +0,0 @@
1
- <p>Hello <%= @resource.email %>!</p>
2
-
3
- <p>Someone has requested a link to change your password. You can do this through the link below.</p>
4
-
5
- <p><%= link_to "Change my password", edit_password_url(@resource, reset_password_token: @token) %></p>
6
-
7
- <p>If you did not request this, please ignore this email.</p>
8
- <p>Your password will not change until you access the link above and create a new one.</p>
@@ -1,15 +0,0 @@
1
- <div class="row column mt-4">
2
- <fieldset>
3
- <legend><%= t(".attachment_legend") %></legend>
4
-
5
- <div>
6
- <%= form.attachment :attachments,
7
- multiple: true,
8
- label: t(".add_attachments"),
9
- button_label: t(".add_attachments"),
10
- button_edit_label: t(".edit_attachments"),
11
- button_class: "button button__sm button__transparent-secondary",
12
- help_i18n_scope: "decidim.forms.file_help.attachment" %>
13
- </div>
14
- </fieldset>
15
- </div>