decidim-admin 0.31.5 → 0.32.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 (218) 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/participatory_space/create_member.rb +99 -0
  7. data/app/commands/decidim/admin/participatory_space/destroy_member.rb +30 -0
  8. data/app/commands/decidim/admin/participatory_space/import_member_csv.rb +46 -0
  9. data/app/commands/decidim/admin/participatory_space/publish_all_members.rb +52 -0
  10. data/app/commands/decidim/admin/participatory_space/unpublish_all_members.rb +52 -0
  11. data/app/commands/decidim/admin/participatory_space/update_member.rb +13 -0
  12. data/app/commands/decidim/admin/reorder_components.rb +1 -1
  13. data/app/commands/decidim/admin/reorder_taxonomies.rb +1 -1
  14. data/app/commands/decidim/admin/update_organization.rb +1 -1
  15. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page.rb +1 -0
  16. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page_content_blocks.rb +3 -2
  17. data/app/controllers/concerns/decidim/admin/filterable.rb +4 -4
  18. data/app/controllers/concerns/decidim/admin/participatory_space_admin_context.rb +1 -0
  19. data/app/controllers/concerns/decidim/admin/participatory_space_export.rb +1 -1
  20. data/app/controllers/decidim/admin/area_types_controller.rb +2 -2
  21. data/app/controllers/decidim/admin/areas_controller.rb +3 -2
  22. data/app/controllers/decidim/admin/block_user_controller.rb +2 -2
  23. data/app/controllers/decidim/admin/component_permissions_controller.rb +1 -1
  24. data/app/controllers/decidim/admin/components/base_controller.rb +13 -9
  25. data/app/controllers/decidim/admin/components_controller.rb +3 -2
  26. data/app/controllers/decidim/admin/concerns/has_attachment_collections.rb +2 -2
  27. data/app/controllers/decidim/admin/concerns/has_attachments.rb +2 -2
  28. data/app/controllers/decidim/admin/conflicts_controller.rb +1 -1
  29. data/app/controllers/decidim/admin/exports_controller.rb +1 -1
  30. data/app/controllers/decidim/admin/impersonations_controller.rb +1 -1
  31. data/app/controllers/decidim/admin/imports_controller.rb +2 -1
  32. data/app/controllers/decidim/admin/managed_users/promotions_controller.rb +1 -1
  33. data/app/controllers/decidim/admin/newsletters_controller.rb +9 -8
  34. data/app/controllers/decidim/admin/organization_appearance_controller.rb +1 -1
  35. data/app/controllers/decidim/admin/organization_controller.rb +1 -1
  36. data/app/controllers/decidim/admin/organization_external_domain_allowlist_controller.rb +1 -1
  37. data/app/controllers/decidim/admin/participatory_space/concerns/has_members.rb +166 -0
  38. data/app/controllers/decidim/admin/participatory_space/concerns/has_members_csv_import.rb +67 -0
  39. data/app/controllers/decidim/admin/participatory_space/concerns/members_filterable.rb +36 -0
  40. data/app/controllers/decidim/admin/participatory_space/user_role_controller.rb +2 -2
  41. data/app/controllers/decidim/admin/reminders_controller.rb +1 -1
  42. data/app/controllers/decidim/admin/resource_permissions_controller.rb +1 -1
  43. data/app/controllers/decidim/admin/scope_types_controller.rb +2 -2
  44. data/app/controllers/decidim/admin/scopes_controller.rb +3 -2
  45. data/app/controllers/decidim/admin/share_tokens_controller.rb +2 -2
  46. data/app/controllers/decidim/admin/space_publications_controller.rb +2 -2
  47. data/app/controllers/decidim/admin/static_page_topics_controller.rb +2 -2
  48. data/app/controllers/decidim/admin/static_pages_controller.rb +2 -2
  49. data/app/controllers/decidim/admin/taxonomies_controller.rb +3 -3
  50. data/app/controllers/decidim/admin/taxonomy_filters_controller.rb +3 -3
  51. data/app/controllers/decidim/admin/taxonomy_items_controller.rb +3 -3
  52. data/app/controllers/decidim/admin/users_controller.rb +1 -1
  53. data/app/forms/decidim/admin/content_block_form.rb +28 -1
  54. data/app/forms/decidim/admin/organization_form.rb +0 -1
  55. data/app/forms/decidim/admin/participatory_space/member_csv_import_form.rb +33 -0
  56. data/app/forms/decidim/admin/participatory_space/member_form.rb +26 -0
  57. data/app/forms/decidim/admin/participatory_space_admin_user_form.rb +1 -1
  58. data/app/forms/decidim/admin/selective_newsletter_form.rb +7 -7
  59. data/app/forms/decidim/admin/taxonomy_filter_form.rb +1 -0
  60. data/app/helpers/decidim/admin/newsletters_helper.rb +8 -5
  61. data/app/helpers/decidim/admin/search_form_helper.rb +17 -0
  62. data/app/helpers/decidim/admin/settings_helper.rb +2 -0
  63. data/app/jobs/decidim/admin/newsletter_job.rb +2 -2
  64. data/app/jobs/decidim/admin/participatory_space/destroy_members_follows_job.rb +36 -0
  65. data/app/jobs/decidim/admin/participatory_space/import_member_csv_job.rb +29 -0
  66. data/app/packs/src/decidim/admin/controllers/access_mode/access_mode.test.js +68 -0
  67. data/app/packs/src/decidim/admin/controllers/access_mode/controller.js +52 -0
  68. data/app/packs/src/decidim/admin/newsletters.js +2 -2
  69. data/app/packs/stylesheets/decidim/admin/_datepicker.scss +0 -4
  70. data/app/queries/decidim/admin/newsletter_recipients.rb +8 -8
  71. data/app/views/decidim/admin/admin_terms/show.html.erb +3 -1
  72. data/app/views/decidim/admin/area_types/index.html.erb +3 -2
  73. data/app/views/decidim/admin/areas/index.html.erb +3 -2
  74. data/app/views/decidim/admin/attachment_collections/edit.html.erb +2 -2
  75. data/app/views/decidim/admin/attachment_collections/index.html.erb +2 -2
  76. data/app/views/decidim/admin/attachment_collections/new.html.erb +2 -2
  77. data/app/views/decidim/admin/attachments/index.html.erb +3 -2
  78. data/app/views/decidim/admin/authorization_workflows/index.html.erb +2 -2
  79. data/app/views/decidim/admin/block_user/new.html.erb +1 -0
  80. data/app/views/decidim/admin/components/index.html.erb +2 -2
  81. data/app/views/decidim/admin/components/manage_trash.html.erb +2 -2
  82. data/app/views/decidim/admin/conflicts/edit.html.erb +3 -1
  83. data/app/views/decidim/admin/conflicts/index.html.erb +3 -2
  84. data/app/views/decidim/admin/dashboard/show.html.erb +4 -4
  85. data/app/views/decidim/admin/help_sections/update.html.erb +2 -0
  86. data/app/views/decidim/admin/impersonatable_users/index.html.erb +3 -2
  87. data/app/views/decidim/admin/impersonations/_form.html.erb +2 -2
  88. data/app/views/decidim/admin/impersonations/new.html.erb +3 -2
  89. data/app/views/decidim/admin/imports/new.html.erb +1 -0
  90. data/app/views/decidim/admin/logs/_logs_list.html.erb +1 -1
  91. data/app/views/decidim/admin/logs/index.html.erb +1 -1
  92. data/app/views/decidim/admin/managed_users/impersonation_logs/index.html.erb +6 -5
  93. data/app/views/decidim/admin/managed_users/promotions/new.html.erb +3 -2
  94. data/app/views/decidim/admin/{participatory_space_private_users → members}/edit.html.erb +2 -2
  95. data/app/views/decidim/admin/{participatory_space_private_users → members}/index.html.erb +25 -25
  96. data/app/views/decidim/admin/{participatory_space_private_users → members}/new.html.erb +2 -2
  97. data/app/views/decidim/admin/{participatory_space_private_users_csv_imports → members_csv_imports}/new.html.erb +2 -2
  98. data/app/views/decidim/admin/moderations/_moderation-tr.html.erb +2 -6
  99. data/app/views/decidim/admin/moderations/_moderations-thead.html.erb +0 -1
  100. data/app/views/decidim/admin/moderations/reports/index.html.erb +1 -1
  101. data/app/views/decidim/admin/newsletter_templates/show.html.erb +3 -2
  102. data/app/views/decidim/admin/newsletters/confirm_recipients.html.erb +4 -6
  103. data/app/views/decidim/admin/newsletters/index.html.erb +2 -2
  104. data/app/views/decidim/admin/newsletters/select_recipients_to_deliver.html.erb +2 -2
  105. data/app/views/decidim/admin/newsletters/show.html.erb +3 -2
  106. data/app/views/decidim/admin/officializations/index.html.erb +6 -4
  107. data/app/views/decidim/admin/officializations/show_email.html.erb +2 -0
  108. data/app/views/decidim/admin/organization/form/_extra_features.html.erb +0 -4
  109. data/app/views/decidim/admin/organization_external_domain_allowlist/_form.html.erb +2 -2
  110. data/app/views/decidim/admin/organization_external_domain_allowlist/edit.html.erb +2 -2
  111. data/app/views/decidim/admin/reminders/new.html.erb +8 -1
  112. data/app/views/decidim/admin/resource_permissions/edit.html.erb +2 -2
  113. data/app/views/decidim/admin/scope_types/index.html.erb +3 -2
  114. data/app/views/decidim/admin/scopes/index.html.erb +2 -2
  115. data/app/views/decidim/admin/share_tokens/index.html.erb +2 -0
  116. data/app/views/decidim/admin/shared/landing_page/_content_blocks.html.erb +0 -2
  117. data/app/views/decidim/admin/shared/landing_page/edit.html.erb +2 -0
  118. data/app/views/decidim/admin/shared/landing_page_content_blocks/edit.html.erb +1 -0
  119. data/app/views/decidim/admin/static_page_topics/index.html.erb +2 -2
  120. data/app/views/decidim/admin/static_pages/edit.html.erb +2 -1
  121. data/app/views/decidim/admin/static_pages/index.html.erb +2 -2
  122. data/app/views/decidim/admin/statistics/_statistics.html.erb +1 -1
  123. data/app/views/decidim/admin/statistics/index.html.erb +2 -0
  124. data/app/views/decidim/admin/taxonomies/_row.html.erb +1 -1
  125. data/app/views/decidim/admin/taxonomies/_row_children.html.erb +1 -1
  126. data/app/views/decidim/admin/taxonomies/_table.html.erb +1 -1
  127. data/app/views/decidim/admin/taxonomies/edit.html.erb +2 -2
  128. data/app/views/decidim/admin/taxonomies/index.html.erb +4 -4
  129. data/app/views/decidim/admin/taxonomy_filters/index.html.erb +2 -2
  130. data/app/views/decidim/admin/taxonomy_filters_selector/index.html.erb +2 -0
  131. data/app/views/decidim/admin/taxonomy_filters_selector/new.html.erb +2 -0
  132. data/app/views/decidim/admin/taxonomy_filters_selector/show.html.erb +2 -0
  133. data/app/views/decidim/admin/taxonomy_items/edit.html.erb +2 -0
  134. data/app/views/decidim/admin/taxonomy_items/new.html.erb +2 -0
  135. data/app/views/decidim/admin/users/index.html.erb +3 -2
  136. data/config/locales/ar.yml +4 -48
  137. data/config/locales/bg.yml +4 -54
  138. data/config/locales/bs-BA.yml +0 -23
  139. data/config/locales/ca-IT.yml +126 -98
  140. data/config/locales/ca.yml +126 -98
  141. data/config/locales/cs.yml +122 -95
  142. data/config/locales/de.yml +109 -93
  143. data/config/locales/el.yml +11 -44
  144. data/config/locales/en.yml +126 -98
  145. data/config/locales/eo.yml +0 -6
  146. data/config/locales/es-MX.yml +126 -98
  147. data/config/locales/es-PY.yml +126 -98
  148. data/config/locales/es.yml +126 -98
  149. data/config/locales/eu.yml +126 -98
  150. data/config/locales/fi-plain.yml +126 -98
  151. data/config/locales/fi.yml +126 -98
  152. data/config/locales/fr-CA.yml +91 -90
  153. data/config/locales/fr.yml +91 -90
  154. data/config/locales/ga-IE.yml +0 -12
  155. data/config/locales/gl.yml +4 -40
  156. data/config/locales/he-IL.yml +0 -4
  157. data/config/locales/hu.yml +4 -51
  158. data/config/locales/id-ID.yml +4 -33
  159. data/config/locales/is-IS.yml +0 -14
  160. data/config/locales/it.yml +4 -67
  161. data/config/locales/ja.yml +124 -98
  162. data/config/locales/kaa.yml +0 -15
  163. data/config/locales/ko.yml +0 -39
  164. data/config/locales/lb.yml +4 -40
  165. data/config/locales/lt.yml +4 -51
  166. data/config/locales/lv.yml +4 -37
  167. data/config/locales/nl.yml +4 -45
  168. data/config/locales/no.yml +4 -45
  169. data/config/locales/pl.yml +4 -53
  170. data/config/locales/pt-BR.yml +109 -96
  171. data/config/locales/pt.yml +4 -41
  172. data/config/locales/ro-RO.yml +9 -50
  173. data/config/locales/ru.yml +4 -34
  174. data/config/locales/sk.yml +126 -98
  175. data/config/locales/sl.yml +0 -6
  176. data/config/locales/sq-AL.yml +0 -20
  177. data/config/locales/sr-CS.yml +0 -23
  178. data/config/locales/sv.yml +74 -86
  179. data/config/locales/th-TH.yml +0 -7
  180. data/config/locales/tr-TR.yml +21 -57
  181. data/config/locales/uk.yml +0 -25
  182. data/config/locales/zh-CN.yml +4 -37
  183. data/config/locales/zh-TW.yml +4 -51
  184. data/decidim-admin.gemspec +7 -10
  185. data/lib/decidim/admin/engine.rb +5 -2
  186. data/lib/decidim/admin/menu.rb +1 -1
  187. data/lib/decidim/admin/test/admin_members_shared_examples.rb +119 -0
  188. data/lib/decidim/admin/test/admin_participatory_space_access_examples.rb +3 -3
  189. data/lib/decidim/admin/test/filterable_examples.rb +20 -11
  190. data/lib/decidim/admin/test/invite_participatory_space_admins_shared_examples.rb +17 -17
  191. data/lib/decidim/admin/test/invite_participatory_space_collaborators_shared_examples.rb +1 -1
  192. data/lib/decidim/admin/test/invite_participatory_space_moderators_shared_examples.rb +1 -1
  193. data/lib/decidim/admin/test/invite_participatory_space_users_shared_context.rb +1 -1
  194. data/lib/decidim/admin/test/manage_attachment_collections_examples.rb +3 -3
  195. data/lib/decidim/admin/test/manage_attachments_examples.rb +6 -6
  196. data/lib/decidim/admin/test/manage_component_permissions_examples.rb +5 -5
  197. data/lib/decidim/admin/test/manage_moderations_examples.rb +6 -6
  198. data/lib/decidim/admin/test/manage_participatory_space_publications_examples.rb +2 -2
  199. data/lib/decidim/admin/test/manage_resource_soft_deletion_examples.rb +3 -3
  200. data/lib/decidim/admin/version.rb +1 -1
  201. data/lib/decidim/admin.rb +0 -2
  202. metadata +39 -35
  203. data/app/commands/decidim/admin/create_participatory_space_private_user.rb +0 -98
  204. data/app/commands/decidim/admin/destroy_participatory_space_private_user.rb +0 -28
  205. data/app/commands/decidim/admin/process_participatory_space_private_user_import_csv.rb +0 -44
  206. data/app/commands/decidim/admin/publish_all_participatory_space_private_users.rb +0 -50
  207. data/app/commands/decidim/admin/unpublish_all_participatory_space_private_users.rb +0 -50
  208. data/app/commands/decidim/admin/update_participatory_space_private_user.rb +0 -11
  209. data/app/controllers/concerns/decidim/participatory_space_private_users/admin/filterable.rb +0 -34
  210. data/app/controllers/decidim/admin/concerns/has_private_users.rb +0 -169
  211. data/app/controllers/decidim/admin/concerns/has_private_users_csv_import.rb +0 -65
  212. data/app/forms/decidim/admin/participatory_space_private_user_csv_import_form.rb +0 -31
  213. data/app/forms/decidim/admin/participatory_space_private_user_form.rb +0 -24
  214. data/app/jobs/decidim/admin/destroy_private_users_follows_job.rb +0 -37
  215. data/app/jobs/decidim/admin/import_participatory_space_private_user_csv_job.rb +0 -27
  216. data/app/views/decidim/admin/devise/mailers/password_change.html.erb +0 -3
  217. data/app/views/decidim/admin/devise/mailers/reset_password_instructions.html.erb +0 -8
  218. /data/app/views/decidim/admin/{participatory_space_private_users → members}/_form.html.erb +0 -0
@@ -66,11 +66,6 @@ zh-CN:
66
66
  welcome_notification_body: 欢迎通知机构
67
67
  welcome_notification_subject: 欢迎通知主题
68
68
  youtube_handler: YouTube 处理程序
69
- participatory_space_private_user:
70
- email: 电子邮件地址
71
- name: 名称
72
- participatory_space_private_user_csv_import:
73
- file: 文件
74
69
  scope:
75
70
  code: 代码
76
71
  name: 名称
@@ -230,10 +225,6 @@ zh-CN:
230
225
  values:
231
226
  'false': 已授权
232
227
  'true': 未正式授权
233
- participatory_space_private_users:
234
- user_invitation_sent_at_not_null:
235
- values:
236
- 'false': 未发送
237
228
  private_space_eq:
238
229
  label: 非公开的
239
230
  values:
@@ -281,7 +272,6 @@ zh-CN:
281
272
  impersonate: 仿冒的
282
273
  impersonate_existing_managed_user: 管理参与者 "%{name}"
283
274
  impersonate_existing_user: 管理参与者 "%{name}"
284
- impersonate_new_managed_user: 管理新参与者
285
275
  managed_users:
286
276
  promotion:
287
277
  error: 在促进管理下的参与者方面存在问题。
@@ -290,6 +280,10 @@ zh-CN:
290
280
  new:
291
281
  explanation: 管理下的参与者可以提升到标准参与者。 这意味着他们将被邀请到应用程序中,您将无法再次管理他们。 邀请的参与者将收到一封电子邮件来接受您的邀请。
292
282
  promote: 升级
283
+ members_csv_imports:
284
+ new:
285
+ csv_upload:
286
+ title: 上传您的 CSV 文件
293
287
  menu:
294
288
  admin_log: 管理员活动日志
295
289
  admins: 管理员
@@ -343,8 +337,6 @@ zh-CN:
343
337
  sent_to: 发送至
344
338
  subject: 议 题
345
339
  name: 通讯
346
- participatory_space_private_user:
347
- name: 参与性空间私人参与者
348
340
  scope:
349
341
  fields:
350
342
  name: 名称
@@ -423,7 +415,6 @@ zh-CN:
423
415
  title: 选择要交付的收件人
424
416
  warning: "<strong>注意:</strong> 这份通讯将只发送给已激活 <em>我想在其通知设置中接收新闻简讯</em>。"
425
417
  show:
426
- preview: 预览
427
418
  select_recipients_to_deliver: 选择要交付的收件人
428
419
  subject: 议 题
429
420
  update:
@@ -465,24 +456,6 @@ zh-CN:
465
456
  update:
466
457
  error: 更新这个组织时出现问题。
467
458
  success: 组织更新成功。
468
- participatory_space_private_users:
469
- create:
470
- error: 在这种参与空间中添加私人参与者时出现了问题。
471
- success: 参与性空间私人参与者访问成功创建。
472
- destroy:
473
- error: 删除这个参与空间的私人参与者时出错。
474
- success: 参与性空间私人参与者访问成功被摧毁。
475
- edit:
476
- update: 更新
477
- index:
478
- title: 参与性空间私人参与者
479
- new:
480
- create: 创建
481
- title: 新的参与性空间活动私人参与者。
482
- participatory_space_private_users_csv_imports:
483
- new:
484
- csv_upload:
485
- title: 上传您的 CSV 文件
486
459
  resource_permissions:
487
460
  edit:
488
461
  submit: 提交
@@ -536,7 +509,6 @@ zh-CN:
536
509
  title: 新主题
537
510
  update:
538
511
  error: 更新这个主题时出现问题。
539
- success: 主题更新成功
540
512
  static_pages:
541
513
  create:
542
514
  error: 创建新页面时出现问题。
@@ -557,13 +529,8 @@ zh-CN:
557
529
  update:
558
530
  error: 更新此页面时出现问题。
559
531
  titles:
560
- area_types: 区域类型
561
532
  areas: 地区
562
533
  authorization_workflows: 核查方法
563
- impersonations: 参与者管理
564
- pages: 页 次
565
- participants: 参加者
566
- scope_types: 范围类型
567
534
  scopes: 范围
568
535
  users:
569
536
  create:
@@ -47,7 +47,6 @@ zh-TW:
47
47
  default_locale: 預設語言
48
48
  description: 說明
49
49
  enable_omnipresent_banner: 顯示全域廣告
50
- enable_participatory_space_filters: 啟用參與空間過濾器
51
50
  facebook_handler: Facebook 處理器
52
51
  favicon: 圖示
53
52
  force_authentication: 強制認證
@@ -86,11 +85,6 @@ zh-TW:
86
85
  welcome_notification_body: 歡迎通知內容
87
86
  welcome_notification_subject: 歡迎通知主旨
88
87
  youtube_handler: YouTube 處理器
89
- participatory_space_private_user:
90
- email: 電子郵件
91
- name: 名稱
92
- participatory_space_private_user_csv_import:
93
- file: 檔案
94
88
  scope:
95
89
  code: 代碼
96
90
  name: 名稱
@@ -131,10 +125,6 @@ zh-TW:
131
125
  attributes:
132
126
  official_img_footer:
133
127
  allowed_file_content_types: 圖片有誤
134
- participatory_space_private_user_csv_import:
135
- attributes:
136
- file:
137
- malformed: 匯入檔案格式有誤,請小心閱讀教學並且確認檔案是使用 UTF-8 編碼
138
128
  user_group_csv_verification:
139
129
  attributes:
140
130
  file:
@@ -172,8 +162,6 @@ zh-TW:
172
162
  import: 匯入
173
163
  newsletter:
174
164
  new: 新電子報
175
- participatory_space_private_user:
176
- new: 新參與空間私有使用者
177
165
  per_page: 每頁
178
166
  share: 分享
179
167
  user:
@@ -292,7 +280,6 @@ zh-TW:
292
280
  title: '新增元件: %{name}'
293
281
  publish:
294
282
  success: 這個元件已經成功發佈
295
- title: 组件
296
283
  unpublish:
297
284
  success: 這個元件已經成功取消發佈
298
285
  update:
@@ -352,10 +339,6 @@ zh-TW:
352
339
  values:
353
340
  'false': 官方化
354
341
  'true': 非官方化
355
- participatory_space_private_users:
356
- user_invitation_sent_at_not_null:
357
- values:
358
- 'false': 未發送
359
342
  private_space_eq:
360
343
  label: 私人的
361
344
  values:
@@ -418,7 +401,6 @@ zh-TW:
418
401
  impersonate: 模擬
419
402
  impersonate_existing_managed_user: 管理參與者 "%{name}"
420
403
  impersonate_existing_user: 管理參與者 "%{name}"
421
- impersonate_new_managed_user: 管理新參與者
422
404
  imports:
423
405
  and: 和
424
406
  data_errors:
@@ -468,6 +450,10 @@ zh-TW:
468
450
  new:
469
451
  explanation: 受管理的參與者可以晉升為標準參與者。這意味著他們將受邀加入應用程式,您將無法再對其進行管理。被邀請的參與者將收到一封電子郵件,以接受您的邀請。
470
452
  promote: 推廣
453
+ members_csv_imports:
454
+ new:
455
+ csv_upload:
456
+ title: 請上傳您的 CSV 檔案。
471
457
  menu:
472
458
  admin_log: 管理員活動日誌
473
459
  admins: 管理員
@@ -525,8 +511,6 @@ zh-TW:
525
511
  sent_to: 發送至
526
512
  subject: 主旨
527
513
  name: 電子報
528
- participatory_space_private_user:
529
- name: 參與空間私有參與者
530
514
  scope:
531
515
  fields:
532
516
  name: 名稱
@@ -649,7 +633,6 @@ zh-TW:
649
633
  send:
650
634
  no_recipients: 沒有選擇收件人.
651
635
  show:
652
- preview: 預覽
653
636
  select_recipients_to_deliver: 選擇要傳送的收件人
654
637
  subject: 主旨
655
638
  update:
@@ -703,30 +686,6 @@ zh-TW:
703
686
  update:
704
687
  error: 更新此組織時發生問題。
705
688
  success: 組織更新成功
706
- participatory_space_private_users:
707
- create:
708
- error: 在此參與空間中添加私人參與者時出現問題。
709
- success: 成功建立參與空間的私人參與者訪問權限。
710
- destroy:
711
- error: 刪除參與空間的私人參與者時發生問題。
712
- success: 成功刪除參與空間的私人參與者訪問權限。
713
- edit:
714
- update: 更新
715
- index:
716
- title: 參與空間私有參與者
717
- new:
718
- create: 建立
719
- title: 新的參與空間私人參與者。
720
- participatory_space_private_users_csv_imports:
721
- new:
722
- csv_upload:
723
- title: 請上傳您的 CSV 檔案。
724
- destroy:
725
- button: 刪除所有私人參與者
726
- confirm: 您確定要刪除所有私人參與者嗎?此操作無法撤銷,您將無法恢復它們。
727
- empty: 您沒有私人參與者。
728
- explanation: 您有 %{count} 位私人參與者。
729
- title: 刪除私人參與者
730
689
  reminders:
731
690
  create:
732
691
  error: 在創建提醒時遇到問題。
@@ -792,7 +751,6 @@ zh-TW:
792
751
  title: 新增主題
793
752
  update:
794
753
  error: 更新主題時發生問題。
795
- success: 主題已成功更新。
796
754
  static_pages:
797
755
  create:
798
756
  error: 創建新頁面時出現問題。
@@ -816,14 +774,9 @@ zh-TW:
816
774
  error: 更新此頁面時出現問題。
817
775
  success: 頁面已更新成功.
818
776
  titles:
819
- area_types: 區域類型
820
777
  areas: 區域
821
778
  authorization_workflows: 驗證方式
822
- impersonations: 參與者管理
823
- pages: 頁
824
779
  panel: 管理員
825
- participants: 參與者
826
- scope_types: 範圍類型
827
780
  scopes: 範圍
828
781
  users:
829
782
  create:
@@ -2,12 +2,9 @@
2
2
 
3
3
  $LOAD_PATH.push File.expand_path("lib", __dir__)
4
4
 
5
- # Maintain your gem's version:
6
- require "decidim/admin/version"
7
-
8
- # Describe your gem and declare its dependencies:
9
5
  Gem::Specification.new do |s|
10
- s.version = Decidim::Admin.version
6
+ version = "0.32.0.rc2"
7
+ s.version = version
11
8
  s.authors = ["Josep Jaume Rey Peroy", "Marc Riera Casals", "Oriol Gual Oliva"]
12
9
  s.email = ["josepjaume@gmail.com", "mrc2407@gmail.com", "oriolgual@gmail.com"]
13
10
  s.license = "AGPL-3.0-or-later"
@@ -19,7 +16,7 @@ Gem::Specification.new do |s|
19
16
  "homepage_uri" => "https://decidim.org",
20
17
  "source_code_uri" => "https://github.com/decidim/decidim"
21
18
  }
22
- s.required_ruby_version = "~> 3.3.0"
19
+ s.required_ruby_version = "~> 3.4.0"
23
20
 
24
21
  s.name = "decidim-admin"
25
22
  s.summary = "Decidim organization administration"
@@ -33,11 +30,11 @@ Gem::Specification.new do |s|
33
30
  end
34
31
 
35
32
  s.add_dependency "active_link_to", "~> 1.0"
36
- s.add_dependency "decidim-core", Decidim::Admin.version
37
- s.add_dependency "devise", "~> 4.7"
33
+ s.add_dependency "decidim-core", version
34
+ s.add_dependency "devise", ">= 4.7", "< 6.0"
38
35
  s.add_dependency "devise-i18n", "~> 1.2"
39
36
  s.add_dependency "devise_invitable", "~> 2.0", ">= 2.0.9"
40
37
 
41
- s.add_development_dependency "decidim-dev", Decidim::Admin.version
42
- s.add_development_dependency "decidim-participatory_processes", Decidim::Admin.version
38
+ s.add_development_dependency "decidim-dev", version
39
+ s.add_development_dependency "decidim-participatory_processes", version
43
40
  end
@@ -20,7 +20,11 @@ module Decidim
20
20
 
21
21
  initializer "decidim_admin.mount_routes" do |_app|
22
22
  Decidim::Core::Engine.routes do
23
- mount Decidim::Admin::Engine => "/admin"
23
+ extend Decidim::Routes::LocaleRedirects
24
+
25
+ scope "/:locale", **locale_scope_options do
26
+ mount Decidim::Admin::Engine => "/admin"
27
+ end
24
28
  end
25
29
  end
26
30
 
@@ -44,7 +48,6 @@ module Decidim
44
48
  Decidim.icons.register(name: "earth-line", icon: "earth-line", category: "system", description: "Earth line", engine: :admin)
45
49
 
46
50
  Decidim.icons.register(name: "attachment-2", icon: "attachment-2", category: "system", description: "", engine: :admin)
47
- Decidim.icons.register(name: "spy-line", icon: "spy-line", category: "system", description: "", engine: :admin)
48
51
  Decidim.icons.register(name: "refresh-line", icon: "refresh-line", category: "system", description: "", engine: :admin)
49
52
  Decidim.icons.register(name: "zoom-in-line", icon: "zoom-in-line", category: "system", description: "", engine: :admin)
50
53
  Decidim.icons.register(name: "add-line", icon: "add-line", category: "system", description: "", engine: :admin)
@@ -48,7 +48,7 @@ module Decidim
48
48
  def self.register_impersonate_menu!
49
49
  Decidim.menu :impersonate_menu do |menu|
50
50
  menu.add_item :conflicts,
51
- I18n.t("title", scope: "decidim.admin.conflicts"),
51
+ I18n.t("title", scope: "decidim.admin.conflicts.index"),
52
52
  decidim_admin.conflicts_path,
53
53
  active: is_active_link?(decidim_admin.conflicts_path),
54
54
  if: allowed_to?(:index, :impersonatable_user)
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples "manage admin members examples" do
4
+ let(:other_user) { create(:user, organization:, email: "my_email@example.org") }
5
+
6
+ let!(:member) { create(:member, user:, participatory_space:) }
7
+
8
+ before do
9
+ switch_to_host(organization.host)
10
+ login_as user, scope: :user
11
+ visit participatory_space_edit_path
12
+ within_admin_sidebar_menu do
13
+ click_on "Members"
14
+ end
15
+ end
16
+
17
+ it "shows the member list" do
18
+ within "#members table" do
19
+ expect(page).to have_content(member.user.email)
20
+ end
21
+ end
22
+
23
+ it "creates a new member" do
24
+ click_on "New member"
25
+
26
+ within ".new_member" do
27
+ fill_in :member_name, with: "John Doe"
28
+ fill_in :member_email, with: other_user.email
29
+
30
+ find("*[type=submit]").click
31
+ end
32
+
33
+ expect(page).to have_callout("Member access successfully created.")
34
+
35
+ within "#members table" do
36
+ expect(page).to have_content(other_user.email)
37
+ end
38
+
39
+ visit decidim_admin.root_path
40
+ expect(page).to have_content("invited #{other_user.name} to be a member")
41
+ end
42
+
43
+ describe "when import a batch of members from csv" do
44
+ it "import a batch of members" do
45
+ click_on "Import via CSV"
46
+
47
+ # The CSV has no headers
48
+ expect(Decidim::Admin::ParticipatorySpace::ImportMemberCsvJob).to receive(:perform_later).once.ordered.with("john.doe@example.org", "John Doe", participatory_space, user)
49
+ expect(Decidim::Admin::ParticipatorySpace::ImportMemberCsvJob).to receive(:perform_later).once.ordered.with("jane.doe@example.org", "Jane Doe", participatory_space, user)
50
+ dynamically_attach_file(:member_csv_import_file, Decidim::Dev.asset("import_members.csv"))
51
+ perform_enqueued_jobs { click_on "Upload" }
52
+
53
+ expect(page).to have_content("CSV file uploaded successfully")
54
+ end
55
+ end
56
+
57
+ describe "when publishing all members" do
58
+ let!(:member) { create(:member, :unpublished, user:, participatory_space:) }
59
+
60
+ it "publishes all members" do
61
+ click_on "Publish all"
62
+
63
+ sleep(1)
64
+ expect(member.reload).to be_published
65
+ end
66
+
67
+ it "displays the correct log message" do
68
+ click_on "Publish all"
69
+ sleep(1)
70
+ visit decidim_admin.root_path
71
+ expect(page).to have_content("published all members of the #{translated(participatory_space.title)}")
72
+ end
73
+ end
74
+
75
+ describe "when managing different users" do
76
+ before do
77
+ create(:member, user: other_user, participatory_space:)
78
+ visit current_path
79
+ end
80
+
81
+ it "deletes a member" do
82
+ within "#members tr", text: other_user.email do
83
+ find("button[data-controller='dropdown']").click
84
+ accept_confirm { click_on "Delete" }
85
+ end
86
+
87
+ expect(page).to have_callout("Member access successfully destroyed.")
88
+
89
+ within "#members table" do
90
+ expect(page).to have_no_content(other_user.email)
91
+ end
92
+ end
93
+
94
+ context "when the user has not accepted the invitation" do
95
+ before do
96
+ form = Decidim::Admin::ParticipatorySpace::MemberForm.from_params(
97
+ name: "test",
98
+ email: "test@example.org"
99
+ )
100
+
101
+ Decidim::Admin::ParticipatorySpace::CreateMember.call(
102
+ form,
103
+ participatory_space
104
+ )
105
+
106
+ visit current_path
107
+ end
108
+
109
+ it "resends the invitation to the user" do
110
+ within "#members tr", text: "test@example.org" do
111
+ find("button[data-controller='dropdown']").click
112
+ click_on "Resend invitation"
113
+ end
114
+
115
+ expect(page).to have_callout("Invitation successfully resent.")
116
+ end
117
+ end
118
+ end
119
+ end
@@ -11,7 +11,7 @@ end
11
11
  shared_examples "showing the unauthorized error message" do
12
12
  it "redirects to the relevant unauthorized page" do
13
13
  expect(page).to have_content("You are not authorized to perform this action")
14
- expect(page).to have_current_path("/admin/")
14
+ expect(page).to have_current_path(decidim_admin.root_path)
15
15
  end
16
16
  end
17
17
 
@@ -40,7 +40,7 @@ shared_examples "admin participatory space access" do
40
40
 
41
41
  context "when the user is a normal user" do
42
42
  let(:user) { create(:user, :confirmed, organization:) }
43
- let(:unauthorized_path) { "/" }
43
+ let(:unauthorized_path) { decidim.root_path }
44
44
 
45
45
  it_behaves_like "a 404 page"
46
46
  end
@@ -53,7 +53,7 @@ shared_examples "admin participatory space access" do
53
53
  visit decidim.root_path
54
54
 
55
55
  within "#admin-bar" do
56
- expect(page).to have_link("Admin dashboard", href: "/admin/")
56
+ expect(page).to have_link("Admin dashboard", href: decidim_admin.root_path)
57
57
  end
58
58
  end
59
59
  end
@@ -148,27 +148,36 @@ shared_examples "filtering collection by published/unpublished" do
148
148
  it_behaves_like "paginating a collection"
149
149
  end
150
150
 
151
- shared_examples "filtering collection by private/public" do
151
+ shared_examples "filtering collection by open/restricted/transparent" do
152
152
  include_context "with filterable context"
153
153
 
154
154
  unless block_given?
155
- let!(:public_space) do
156
- create(factory_name, private_space: false, organization:)
155
+ let!(:open_space) do
156
+ create(factory_name, :open, organization:)
157
157
  end
158
158
 
159
- let!(:private_space) do
160
- create(factory_name, private_space: true, organization:)
159
+ let!(:restricted_space) do
160
+ create(factory_name, :restricted, organization:)
161
161
  end
162
+
163
+ let!(:transparent_space) do
164
+ create(factory_name, :transparent, organization:)
165
+ end
166
+ end
167
+
168
+ it_behaves_like "a filtered collection", options: "Access mode", filter: "Open" do
169
+ let(:in_filter) { translated(open_space.title) }
170
+ let(:not_in_filter) { [translated(restricted_space.title), translated(transparent_space.title)] }
162
171
  end
163
172
 
164
- it_behaves_like "a filtered collection", options: "Private", filter: "Public" do
165
- let(:in_filter) { translated(public_space.title) }
166
- let(:not_in_filter) { translated(private_space.title) }
173
+ it_behaves_like "a filtered collection", options: "Access mode", filter: "Restricted" do
174
+ let(:in_filter) { translated(restricted_space.title) }
175
+ let(:not_in_filter) { [translated(open_space.title), translated(transparent_space.title)] }
167
176
  end
168
177
 
169
- it_behaves_like "a filtered collection", options: "Private", filter: "Private" do
170
- let(:in_filter) { translated(private_space.title) }
171
- let(:not_in_filter) { translated(public_space.title) }
178
+ it_behaves_like "a filtered collection", options: "Access mode", filter: "Transparent" do
179
+ let(:in_filter) { translated(transparent_space.title) }
180
+ let(:not_in_filter) { [translated(open_space.title), translated(restricted_space.title)] }
172
181
  end
173
182
 
174
183
  it_behaves_like "paginating a collection"
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- shared_examples "inviting participatory space admins" do |check_private_space: true, check_landing_page: true|
3
+ shared_examples "inviting participatory space admins" do |check_members_page: true, check_landing_page: true|
4
4
  let(:role) { "Administrator" }
5
5
 
6
6
  before do
7
7
  switch_to_host organization.host
8
8
  end
9
9
 
10
- shared_examples "sees public space menu" do
10
+ shared_examples "sees space without members menu" do
11
11
  it "can access all sections" do
12
12
  within_admin_sidebar_menu do
13
13
  expect(page).to have_content(about_this_space_label)
@@ -16,13 +16,13 @@ shared_examples "inviting participatory space admins" do |check_private_space: t
16
16
  expect(page).to have_content("Components")
17
17
  expect(page).to have_content("Attachments")
18
18
  expect(page).to have_content(space_admins_label)
19
- expect(page).to have_no_content("Members") if participatory_space.respond_to?(:private_space)
19
+ expect(page).to have_no_content("Members") if participatory_space.respond_to?(:has_members)
20
20
  expect(page).to have_content("Moderations")
21
21
  end
22
22
  end
23
23
  end
24
24
 
25
- shared_examples "sees private space menu" do
25
+ shared_examples "sees space with members menu" do
26
26
  it "can access all sections" do
27
27
  within_admin_sidebar_menu do
28
28
  expect(page).to have_content(about_this_space_label)
@@ -31,7 +31,7 @@ shared_examples "inviting participatory space admins" do |check_private_space: t
31
31
  expect(page).to have_content("Components")
32
32
  expect(page).to have_content("Attachments")
33
33
  expect(page).to have_content(space_admins_label)
34
- expect(page).to have_content("Members") if participatory_space.respond_to?(:private_space)
34
+ expect(page).to have_content("Members") if participatory_space.respond_to?(:has_members)
35
35
  expect(page).to have_content("Moderations")
36
36
  end
37
37
  end
@@ -52,7 +52,7 @@ shared_examples "inviting participatory space admins" do |check_private_space: t
52
52
  find("*[type=submit]").click
53
53
  end
54
54
 
55
- expect(page).to have_current_path "/admin/admin_terms/show"
55
+ expect(page).to have_current_path decidim_admin.admin_terms_show_path
56
56
 
57
57
  visit decidim_admin.admin_terms_show_path
58
58
 
@@ -81,7 +81,7 @@ shared_examples "inviting participatory space admins" do |check_private_space: t
81
81
  find("*[type=submit]").click
82
82
  end
83
83
 
84
- expect(page).to have_current_path "/admin/admin_terms/show"
84
+ expect(page).to have_current_path decidim_admin.admin_terms_show_path
85
85
 
86
86
  visit decidim_admin.admin_terms_show_path
87
87
 
@@ -98,14 +98,14 @@ shared_examples "inviting participatory space admins" do |check_private_space: t
98
98
  end
99
99
 
100
100
  context "and is a public space" do
101
- it_behaves_like "sees public space menu"
101
+ it_behaves_like "sees space without members menu"
102
102
  end
103
103
 
104
- if check_private_space
105
- context "and is a private space" do
106
- let(:participatory_space) { private_participatory_space }
104
+ if check_members_page
105
+ context "and is a space with members" do
106
+ let(:participatory_space) { members_participatory_space }
107
107
 
108
- it_behaves_like "sees private space menu"
108
+ it_behaves_like "sees space with members menu"
109
109
  end
110
110
  end
111
111
  end
@@ -163,14 +163,14 @@ shared_examples "inviting participatory space admins" do |check_private_space: t
163
163
  end
164
164
 
165
165
  context "and is a public space" do
166
- it_behaves_like "sees public space menu"
166
+ it_behaves_like "sees space without members menu"
167
167
  end
168
168
 
169
- if check_private_space
170
- context "and is a private space" do
171
- let(:participatory_space) { private_participatory_space }
169
+ if check_members_page
170
+ context "and is a space with members" do
171
+ let(:participatory_space) { members_participatory_space }
172
172
 
173
- it_behaves_like "sees private space menu"
173
+ it_behaves_like "sees space with members menu"
174
174
  end
175
175
  end
176
176
  end
@@ -22,7 +22,7 @@ shared_examples "inviting participatory space collaborators" do
22
22
  find("*[type=submit]").click
23
23
  end
24
24
 
25
- expect(page).to have_current_path "/admin/admin_terms/show"
25
+ expect(page).to have_current_path decidim_admin.admin_terms_show_path
26
26
 
27
27
  visit decidim_admin.admin_terms_show_path
28
28
  find_button("I agree with the terms").click
@@ -20,7 +20,7 @@ shared_examples "inviting participatory space moderators" do
20
20
  find("*[type=submit]").click
21
21
  end
22
22
 
23
- expect(page).to have_current_path "/admin/admin_terms/show"
23
+ expect(page).to have_current_path decidim_admin.admin_terms_show_path
24
24
 
25
25
  visit decidim_admin.admin_terms_show_path
26
26
  find_button("I agree with the terms").click
@@ -18,7 +18,7 @@ shared_context "when inviting participatory space users" do
18
18
  fill_in "Email", with: email
19
19
  select role, from: "Role"
20
20
  click_on "Create"
21
- expect(page).to have_content("successfully added")
21
+ expect(page).to have_callout(added_callout_message)
22
22
  logout :user
23
23
  end
24
24
 
@@ -44,7 +44,7 @@ shared_examples "manage attachment collections examples" do
44
44
  find("*[type=submit]").click
45
45
  end
46
46
 
47
- expect(page).to have_admin_callout("successfully")
47
+ expect(page).to have_callout("Folder created successfully.")
48
48
 
49
49
  within "#attachment_collections table" do
50
50
  expect(page).to have_content(translated(attributes[:name]))
@@ -72,7 +72,7 @@ shared_examples "manage attachment collections examples" do
72
72
  find("*[type=submit]").click
73
73
  end
74
74
 
75
- expect(page).to have_admin_callout("successfully")
75
+ expect(page).to have_callout("Folder updated successfully.")
76
76
 
77
77
  within "#attachment_collections table" do
78
78
  expect(page).to have_content(translated(attributes[:name]))
@@ -96,7 +96,7 @@ shared_examples "manage attachment collections examples" do
96
96
  accept_confirm { click_on "Delete" }
97
97
  end
98
98
 
99
- expect(page).to have_admin_callout("successfully")
99
+ expect(page).to have_callout("Folder destroyed successfully.")
100
100
 
101
101
  within "#attachment_collections table" do
102
102
  expect(page).to have_no_content(translated(attachment_collection2.name))