decidim-admin 0.31.3 → 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 (220) 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_attachment.rb +1 -0
  7. data/app/commands/decidim/admin/participatory_space/create_member.rb +99 -0
  8. data/app/commands/decidim/admin/participatory_space/destroy_member.rb +30 -0
  9. data/app/commands/decidim/admin/participatory_space/import_member_csv.rb +46 -0
  10. data/app/commands/decidim/admin/participatory_space/publish_all_members.rb +52 -0
  11. data/app/commands/decidim/admin/participatory_space/unpublish_all_members.rb +52 -0
  12. data/app/commands/decidim/admin/participatory_space/update_member.rb +13 -0
  13. data/app/commands/decidim/admin/reorder_components.rb +1 -1
  14. data/app/commands/decidim/admin/reorder_taxonomies.rb +1 -1
  15. data/app/commands/decidim/admin/update_organization.rb +1 -1
  16. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page.rb +1 -0
  17. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page_content_blocks.rb +3 -2
  18. data/app/controllers/concerns/decidim/admin/filterable.rb +4 -4
  19. data/app/controllers/concerns/decidim/admin/participatory_space_admin_context.rb +1 -0
  20. data/app/controllers/concerns/decidim/admin/participatory_space_export.rb +1 -1
  21. data/app/controllers/decidim/admin/area_types_controller.rb +2 -2
  22. data/app/controllers/decidim/admin/areas_controller.rb +3 -2
  23. data/app/controllers/decidim/admin/block_user_controller.rb +2 -2
  24. data/app/controllers/decidim/admin/component_permissions_controller.rb +1 -1
  25. data/app/controllers/decidim/admin/components/base_controller.rb +13 -9
  26. data/app/controllers/decidim/admin/components_controller.rb +3 -2
  27. data/app/controllers/decidim/admin/concerns/has_attachment_collections.rb +2 -2
  28. data/app/controllers/decidim/admin/concerns/has_attachments.rb +2 -2
  29. data/app/controllers/decidim/admin/conflicts_controller.rb +1 -1
  30. data/app/controllers/decidim/admin/exports_controller.rb +1 -1
  31. data/app/controllers/decidim/admin/impersonations_controller.rb +1 -1
  32. data/app/controllers/decidim/admin/imports_controller.rb +2 -1
  33. data/app/controllers/decidim/admin/managed_users/promotions_controller.rb +1 -1
  34. data/app/controllers/decidim/admin/newsletters_controller.rb +9 -8
  35. data/app/controllers/decidim/admin/organization_appearance_controller.rb +1 -1
  36. data/app/controllers/decidim/admin/organization_controller.rb +1 -1
  37. data/app/controllers/decidim/admin/organization_external_domain_allowlist_controller.rb +1 -1
  38. data/app/controllers/decidim/admin/participatory_space/concerns/has_members.rb +166 -0
  39. data/app/controllers/decidim/admin/participatory_space/concerns/has_members_csv_import.rb +67 -0
  40. data/app/controllers/decidim/admin/participatory_space/concerns/members_filterable.rb +36 -0
  41. data/app/controllers/decidim/admin/participatory_space/user_role_controller.rb +2 -2
  42. data/app/controllers/decidim/admin/reminders_controller.rb +1 -1
  43. data/app/controllers/decidim/admin/resource_permissions_controller.rb +1 -1
  44. data/app/controllers/decidim/admin/scope_types_controller.rb +2 -2
  45. data/app/controllers/decidim/admin/scopes_controller.rb +3 -2
  46. data/app/controllers/decidim/admin/share_tokens_controller.rb +2 -2
  47. data/app/controllers/decidim/admin/space_publications_controller.rb +2 -2
  48. data/app/controllers/decidim/admin/static_page_topics_controller.rb +2 -2
  49. data/app/controllers/decidim/admin/static_pages_controller.rb +2 -2
  50. data/app/controllers/decidim/admin/taxonomies_controller.rb +3 -3
  51. data/app/controllers/decidim/admin/taxonomy_filters_controller.rb +3 -3
  52. data/app/controllers/decidim/admin/taxonomy_items_controller.rb +3 -3
  53. data/app/controllers/decidim/admin/users_controller.rb +1 -1
  54. data/app/forms/decidim/admin/content_block_form.rb +28 -1
  55. data/app/forms/decidim/admin/organization_form.rb +0 -1
  56. data/app/forms/decidim/admin/participatory_space/member_csv_import_form.rb +33 -0
  57. data/app/forms/decidim/admin/participatory_space/member_form.rb +26 -0
  58. data/app/forms/decidim/admin/participatory_space_admin_user_form.rb +1 -1
  59. data/app/forms/decidim/admin/selective_newsletter_form.rb +7 -7
  60. data/app/forms/decidim/admin/taxonomy_filter_form.rb +1 -0
  61. data/app/helpers/decidim/admin/newsletters_helper.rb +8 -5
  62. data/app/helpers/decidim/admin/search_form_helper.rb +17 -0
  63. data/app/helpers/decidim/admin/settings_helper.rb +2 -0
  64. data/app/jobs/decidim/admin/newsletter_job.rb +2 -2
  65. data/app/jobs/decidim/admin/participatory_space/destroy_members_follows_job.rb +36 -0
  66. data/app/jobs/decidim/admin/participatory_space/import_member_csv_job.rb +29 -0
  67. data/app/packs/src/decidim/admin/controllers/access_mode/access_mode.test.js +68 -0
  68. data/app/packs/src/decidim/admin/controllers/access_mode/controller.js +52 -0
  69. data/app/packs/src/decidim/admin/newsletters.js +2 -2
  70. data/app/packs/stylesheets/decidim/admin/_datepicker.scss +0 -4
  71. data/app/queries/decidim/admin/newsletter_recipients.rb +8 -8
  72. data/app/views/decidim/admin/admin_terms/show.html.erb +3 -1
  73. data/app/views/decidim/admin/area_types/index.html.erb +3 -2
  74. data/app/views/decidim/admin/areas/index.html.erb +3 -2
  75. data/app/views/decidim/admin/attachment_collections/edit.html.erb +2 -2
  76. data/app/views/decidim/admin/attachment_collections/index.html.erb +2 -2
  77. data/app/views/decidim/admin/attachment_collections/new.html.erb +2 -2
  78. data/app/views/decidim/admin/attachments/index.html.erb +3 -2
  79. data/app/views/decidim/admin/authorization_workflows/index.html.erb +2 -2
  80. data/app/views/decidim/admin/block_user/new.html.erb +1 -0
  81. data/app/views/decidim/admin/components/index.html.erb +2 -2
  82. data/app/views/decidim/admin/components/manage_trash.html.erb +2 -2
  83. data/app/views/decidim/admin/conflicts/edit.html.erb +3 -1
  84. data/app/views/decidim/admin/conflicts/index.html.erb +3 -2
  85. data/app/views/decidim/admin/dashboard/show.html.erb +4 -4
  86. data/app/views/decidim/admin/help_sections/update.html.erb +2 -0
  87. data/app/views/decidim/admin/impersonatable_users/index.html.erb +3 -2
  88. data/app/views/decidim/admin/impersonations/_form.html.erb +2 -2
  89. data/app/views/decidim/admin/impersonations/new.html.erb +3 -2
  90. data/app/views/decidim/admin/imports/new.html.erb +1 -0
  91. data/app/views/decidim/admin/logs/_logs_list.html.erb +1 -1
  92. data/app/views/decidim/admin/logs/index.html.erb +1 -1
  93. data/app/views/decidim/admin/managed_users/impersonation_logs/index.html.erb +6 -5
  94. data/app/views/decidim/admin/managed_users/promotions/new.html.erb +3 -2
  95. data/app/views/decidim/admin/{participatory_space_private_users → members}/edit.html.erb +2 -2
  96. data/app/views/decidim/admin/{participatory_space_private_users → members}/index.html.erb +25 -25
  97. data/app/views/decidim/admin/{participatory_space_private_users → members}/new.html.erb +2 -2
  98. data/app/views/decidim/admin/{participatory_space_private_users_csv_imports → members_csv_imports}/new.html.erb +2 -2
  99. data/app/views/decidim/admin/moderations/_moderation-tr.html.erb +2 -6
  100. data/app/views/decidim/admin/moderations/_moderations-thead.html.erb +0 -1
  101. data/app/views/decidim/admin/moderations/reports/index.html.erb +1 -1
  102. data/app/views/decidim/admin/newsletter_templates/show.html.erb +3 -2
  103. data/app/views/decidim/admin/newsletters/confirm_recipients.html.erb +4 -6
  104. data/app/views/decidim/admin/newsletters/index.html.erb +2 -2
  105. data/app/views/decidim/admin/newsletters/select_recipients_to_deliver.html.erb +2 -2
  106. data/app/views/decidim/admin/newsletters/show.html.erb +3 -2
  107. data/app/views/decidim/admin/officializations/index.html.erb +6 -4
  108. data/app/views/decidim/admin/officializations/show_email.html.erb +2 -0
  109. data/app/views/decidim/admin/organization/form/_extra_features.html.erb +0 -4
  110. data/app/views/decidim/admin/organization_external_domain_allowlist/_form.html.erb +2 -2
  111. data/app/views/decidim/admin/organization_external_domain_allowlist/edit.html.erb +2 -2
  112. data/app/views/decidim/admin/reminders/new.html.erb +8 -1
  113. data/app/views/decidim/admin/resource_permissions/edit.html.erb +2 -2
  114. data/app/views/decidim/admin/scope_types/index.html.erb +3 -2
  115. data/app/views/decidim/admin/scopes/index.html.erb +2 -2
  116. data/app/views/decidim/admin/share_tokens/index.html.erb +2 -0
  117. data/app/views/decidim/admin/shared/landing_page/_content_blocks.html.erb +0 -2
  118. data/app/views/decidim/admin/shared/landing_page/edit.html.erb +2 -0
  119. data/app/views/decidim/admin/shared/landing_page_content_blocks/edit.html.erb +1 -0
  120. data/app/views/decidim/admin/static_page_topics/index.html.erb +2 -2
  121. data/app/views/decidim/admin/static_pages/edit.html.erb +2 -1
  122. data/app/views/decidim/admin/static_pages/index.html.erb +2 -2
  123. data/app/views/decidim/admin/statistics/_statistics.html.erb +1 -1
  124. data/app/views/decidim/admin/statistics/index.html.erb +2 -0
  125. data/app/views/decidim/admin/taxonomies/_row.html.erb +1 -1
  126. data/app/views/decidim/admin/taxonomies/_row_children.html.erb +1 -1
  127. data/app/views/decidim/admin/taxonomies/_table.html.erb +1 -1
  128. data/app/views/decidim/admin/taxonomies/edit.html.erb +2 -2
  129. data/app/views/decidim/admin/taxonomies/index.html.erb +4 -4
  130. data/app/views/decidim/admin/taxonomy_filters/index.html.erb +2 -2
  131. data/app/views/decidim/admin/taxonomy_filters_selector/index.html.erb +2 -0
  132. data/app/views/decidim/admin/taxonomy_filters_selector/new.html.erb +2 -0
  133. data/app/views/decidim/admin/taxonomy_filters_selector/show.html.erb +2 -0
  134. data/app/views/decidim/admin/taxonomy_items/edit.html.erb +2 -0
  135. data/app/views/decidim/admin/taxonomy_items/new.html.erb +2 -0
  136. data/app/views/decidim/admin/users/index.html.erb +3 -2
  137. data/config/locales/ar.yml +4 -49
  138. data/config/locales/bg.yml +4 -55
  139. data/config/locales/bs-BA.yml +0 -24
  140. data/config/locales/ca-IT.yml +127 -100
  141. data/config/locales/ca.yml +127 -100
  142. data/config/locales/cs.yml +122 -94
  143. data/config/locales/de.yml +109 -87
  144. data/config/locales/el.yml +11 -45
  145. data/config/locales/en.yml +126 -98
  146. data/config/locales/eo.yml +0 -7
  147. data/config/locales/es-MX.yml +126 -99
  148. data/config/locales/es-PY.yml +126 -99
  149. data/config/locales/es.yml +126 -99
  150. data/config/locales/eu.yml +126 -99
  151. data/config/locales/fi-plain.yml +132 -87
  152. data/config/locales/fi.yml +132 -87
  153. data/config/locales/fr-CA.yml +87 -91
  154. data/config/locales/fr.yml +87 -91
  155. data/config/locales/ga-IE.yml +0 -13
  156. data/config/locales/gl.yml +4 -41
  157. data/config/locales/he-IL.yml +0 -5
  158. data/config/locales/hu.yml +4 -52
  159. data/config/locales/id-ID.yml +4 -34
  160. data/config/locales/is-IS.yml +1 -16
  161. data/config/locales/it.yml +4 -68
  162. data/config/locales/ja.yml +124 -99
  163. data/config/locales/kaa.yml +0 -16
  164. data/config/locales/ko.yml +0 -40
  165. data/config/locales/lb.yml +4 -41
  166. data/config/locales/lt.yml +4 -52
  167. data/config/locales/lv.yml +4 -38
  168. data/config/locales/nl.yml +4 -46
  169. data/config/locales/no.yml +4 -46
  170. data/config/locales/pl.yml +4 -54
  171. data/config/locales/pt-BR.yml +109 -97
  172. data/config/locales/pt.yml +4 -42
  173. data/config/locales/ro-RO.yml +9 -51
  174. data/config/locales/ru.yml +4 -35
  175. data/config/locales/sk.yml +4 -38
  176. data/config/locales/sl.yml +0 -7
  177. data/config/locales/sq-AL.yml +0 -21
  178. data/config/locales/sr-CS.yml +0 -24
  179. data/config/locales/sv.yml +74 -87
  180. data/config/locales/th-TH.yml +0 -8
  181. data/config/locales/tr-TR.yml +21 -58
  182. data/config/locales/uk.yml +0 -26
  183. data/config/locales/val-ES.yml +0 -1
  184. data/config/locales/zh-CN.yml +4 -38
  185. data/config/locales/zh-TW.yml +4 -52
  186. data/decidim-admin.gemspec +7 -10
  187. data/lib/decidim/admin/engine.rb +5 -2
  188. data/lib/decidim/admin/menu.rb +1 -1
  189. data/lib/decidim/admin/test/admin_members_shared_examples.rb +119 -0
  190. data/lib/decidim/admin/test/admin_participatory_space_access_examples.rb +3 -3
  191. data/lib/decidim/admin/test/filterable_examples.rb +20 -11
  192. data/lib/decidim/admin/test/invite_participatory_space_admins_shared_examples.rb +17 -17
  193. data/lib/decidim/admin/test/invite_participatory_space_collaborators_shared_examples.rb +1 -1
  194. data/lib/decidim/admin/test/invite_participatory_space_moderators_shared_examples.rb +1 -1
  195. data/lib/decidim/admin/test/invite_participatory_space_users_shared_context.rb +1 -1
  196. data/lib/decidim/admin/test/manage_attachment_collections_examples.rb +3 -3
  197. data/lib/decidim/admin/test/manage_attachments_examples.rb +6 -6
  198. data/lib/decidim/admin/test/manage_component_permissions_examples.rb +5 -5
  199. data/lib/decidim/admin/test/manage_moderations_examples.rb +6 -6
  200. data/lib/decidim/admin/test/manage_participatory_space_publications_examples.rb +2 -2
  201. data/lib/decidim/admin/test/manage_resource_soft_deletion_examples.rb +3 -3
  202. data/lib/decidim/admin/version.rb +1 -1
  203. data/lib/decidim/admin.rb +0 -2
  204. metadata +39 -35
  205. data/app/commands/decidim/admin/create_participatory_space_private_user.rb +0 -98
  206. data/app/commands/decidim/admin/destroy_participatory_space_private_user.rb +0 -28
  207. data/app/commands/decidim/admin/process_participatory_space_private_user_import_csv.rb +0 -44
  208. data/app/commands/decidim/admin/publish_all_participatory_space_private_users.rb +0 -50
  209. data/app/commands/decidim/admin/unpublish_all_participatory_space_private_users.rb +0 -50
  210. data/app/commands/decidim/admin/update_participatory_space_private_user.rb +0 -11
  211. data/app/controllers/concerns/decidim/participatory_space_private_users/admin/filterable.rb +0 -34
  212. data/app/controllers/decidim/admin/concerns/has_private_users.rb +0 -169
  213. data/app/controllers/decidim/admin/concerns/has_private_users_csv_import.rb +0 -65
  214. data/app/forms/decidim/admin/participatory_space_private_user_csv_import_form.rb +0 -31
  215. data/app/forms/decidim/admin/participatory_space_private_user_form.rb +0 -24
  216. data/app/jobs/decidim/admin/destroy_private_users_follows_job.rb +0 -37
  217. data/app/jobs/decidim/admin/import_participatory_space_private_user_csv_job.rb +0 -27
  218. data/app/views/decidim/admin/devise/mailers/password_change.html.erb +0 -3
  219. data/app/views/decidim/admin/devise/mailers/reset_password_instructions.html.erb +0 -8
  220. /data/app/views/decidim/admin/{participatory_space_private_users → members}/_form.html.erb +0 -0
@@ -1,4 +1,3 @@
1
- ---
2
1
  zh-CN:
3
2
  activemodel:
4
3
  attributes:
@@ -66,11 +65,6 @@ zh-CN:
66
65
  welcome_notification_body: 欢迎通知机构
67
66
  welcome_notification_subject: 欢迎通知主题
68
67
  youtube_handler: YouTube 处理程序
69
- participatory_space_private_user:
70
- email: 电子邮件地址
71
- name: 名称
72
- participatory_space_private_user_csv_import:
73
- file: 文件
74
68
  scope:
75
69
  code: 代码
76
70
  name: 名称
@@ -230,10 +224,6 @@ zh-CN:
230
224
  values:
231
225
  'false': 已授权
232
226
  'true': 未正式授权
233
- participatory_space_private_users:
234
- user_invitation_sent_at_not_null:
235
- values:
236
- 'false': 未发送
237
227
  private_space_eq:
238
228
  label: 非公开的
239
229
  values:
@@ -281,7 +271,6 @@ zh-CN:
281
271
  impersonate: 仿冒的
282
272
  impersonate_existing_managed_user: 管理参与者 "%{name}"
283
273
  impersonate_existing_user: 管理参与者 "%{name}"
284
- impersonate_new_managed_user: 管理新参与者
285
274
  managed_users:
286
275
  promotion:
287
276
  error: 在促进管理下的参与者方面存在问题。
@@ -290,6 +279,10 @@ zh-CN:
290
279
  new:
291
280
  explanation: 管理下的参与者可以提升到标准参与者。 这意味着他们将被邀请到应用程序中,您将无法再次管理他们。 邀请的参与者将收到一封电子邮件来接受您的邀请。
292
281
  promote: 升级
282
+ members_csv_imports:
283
+ new:
284
+ csv_upload:
285
+ title: 上传您的 CSV 文件
293
286
  menu:
294
287
  admin_log: 管理员活动日志
295
288
  admins: 管理员
@@ -343,8 +336,6 @@ zh-CN:
343
336
  sent_to: 发送至
344
337
  subject: 议 题
345
338
  name: 通讯
346
- participatory_space_private_user:
347
- name: 参与性空间私人参与者
348
339
  scope:
349
340
  fields:
350
341
  name: 名称
@@ -423,7 +414,6 @@ zh-CN:
423
414
  title: 选择要交付的收件人
424
415
  warning: "<strong>注意:</strong> 这份通讯将只发送给已激活 <em>我想在其通知设置中接收新闻简讯</em>。"
425
416
  show:
426
- preview: 预览
427
417
  select_recipients_to_deliver: 选择要交付的收件人
428
418
  subject: 议 题
429
419
  update:
@@ -465,24 +455,6 @@ zh-CN:
465
455
  update:
466
456
  error: 更新这个组织时出现问题。
467
457
  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
458
  resource_permissions:
487
459
  edit:
488
460
  submit: 提交
@@ -536,7 +508,6 @@ zh-CN:
536
508
  title: 新主题
537
509
  update:
538
510
  error: 更新这个主题时出现问题。
539
- success: 主题更新成功
540
511
  static_pages:
541
512
  create:
542
513
  error: 创建新页面时出现问题。
@@ -557,13 +528,8 @@ zh-CN:
557
528
  update:
558
529
  error: 更新此页面时出现问题。
559
530
  titles:
560
- area_types: 区域类型
561
531
  areas: 地区
562
532
  authorization_workflows: 核查方法
563
- impersonations: 参与者管理
564
- pages: 页 次
565
- participants: 参加者
566
- scope_types: 范围类型
567
533
  scopes: 范围
568
534
  users:
569
535
  create:
@@ -1,4 +1,3 @@
1
- ---
2
1
  zh-TW:
3
2
  activemodel:
4
3
  attributes:
@@ -47,7 +46,6 @@ zh-TW:
47
46
  default_locale: 預設語言
48
47
  description: 說明
49
48
  enable_omnipresent_banner: 顯示全域廣告
50
- enable_participatory_space_filters: 啟用參與空間過濾器
51
49
  facebook_handler: Facebook 處理器
52
50
  favicon: 圖示
53
51
  force_authentication: 強制認證
@@ -86,11 +84,6 @@ zh-TW:
86
84
  welcome_notification_body: 歡迎通知內容
87
85
  welcome_notification_subject: 歡迎通知主旨
88
86
  youtube_handler: YouTube 處理器
89
- participatory_space_private_user:
90
- email: 電子郵件
91
- name: 名稱
92
- participatory_space_private_user_csv_import:
93
- file: 檔案
94
87
  scope:
95
88
  code: 代碼
96
89
  name: 名稱
@@ -131,10 +124,6 @@ zh-TW:
131
124
  attributes:
132
125
  official_img_footer:
133
126
  allowed_file_content_types: 圖片有誤
134
- participatory_space_private_user_csv_import:
135
- attributes:
136
- file:
137
- malformed: 匯入檔案格式有誤,請小心閱讀教學並且確認檔案是使用 UTF-8 編碼
138
127
  user_group_csv_verification:
139
128
  attributes:
140
129
  file:
@@ -172,8 +161,6 @@ zh-TW:
172
161
  import: 匯入
173
162
  newsletter:
174
163
  new: 新電子報
175
- participatory_space_private_user:
176
- new: 新參與空間私有使用者
177
164
  per_page: 每頁
178
165
  share: 分享
179
166
  user:
@@ -292,7 +279,6 @@ zh-TW:
292
279
  title: '新增元件: %{name}'
293
280
  publish:
294
281
  success: 這個元件已經成功發佈
295
- title: 组件
296
282
  unpublish:
297
283
  success: 這個元件已經成功取消發佈
298
284
  update:
@@ -352,10 +338,6 @@ zh-TW:
352
338
  values:
353
339
  'false': 官方化
354
340
  'true': 非官方化
355
- participatory_space_private_users:
356
- user_invitation_sent_at_not_null:
357
- values:
358
- 'false': 未發送
359
341
  private_space_eq:
360
342
  label: 私人的
361
343
  values:
@@ -418,7 +400,6 @@ zh-TW:
418
400
  impersonate: 模擬
419
401
  impersonate_existing_managed_user: 管理參與者 "%{name}"
420
402
  impersonate_existing_user: 管理參與者 "%{name}"
421
- impersonate_new_managed_user: 管理新參與者
422
403
  imports:
423
404
  and: 和
424
405
  data_errors:
@@ -468,6 +449,10 @@ zh-TW:
468
449
  new:
469
450
  explanation: 受管理的參與者可以晉升為標準參與者。這意味著他們將受邀加入應用程式,您將無法再對其進行管理。被邀請的參與者將收到一封電子郵件,以接受您的邀請。
470
451
  promote: 推廣
452
+ members_csv_imports:
453
+ new:
454
+ csv_upload:
455
+ title: 請上傳您的 CSV 檔案。
471
456
  menu:
472
457
  admin_log: 管理員活動日誌
473
458
  admins: 管理員
@@ -525,8 +510,6 @@ zh-TW:
525
510
  sent_to: 發送至
526
511
  subject: 主旨
527
512
  name: 電子報
528
- participatory_space_private_user:
529
- name: 參與空間私有參與者
530
513
  scope:
531
514
  fields:
532
515
  name: 名稱
@@ -649,7 +632,6 @@ zh-TW:
649
632
  send:
650
633
  no_recipients: 沒有選擇收件人.
651
634
  show:
652
- preview: 預覽
653
635
  select_recipients_to_deliver: 選擇要傳送的收件人
654
636
  subject: 主旨
655
637
  update:
@@ -703,30 +685,6 @@ zh-TW:
703
685
  update:
704
686
  error: 更新此組織時發生問題。
705
687
  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
688
  reminders:
731
689
  create:
732
690
  error: 在創建提醒時遇到問題。
@@ -792,7 +750,6 @@ zh-TW:
792
750
  title: 新增主題
793
751
  update:
794
752
  error: 更新主題時發生問題。
795
- success: 主題已成功更新。
796
753
  static_pages:
797
754
  create:
798
755
  error: 創建新頁面時出現問題。
@@ -816,14 +773,9 @@ zh-TW:
816
773
  error: 更新此頁面時出現問題。
817
774
  success: 頁面已更新成功.
818
775
  titles:
819
- area_types: 區域類型
820
776
  areas: 區域
821
777
  authorization_workflows: 驗證方式
822
- impersonations: 參與者管理
823
- pages: 頁
824
778
  panel: 管理員
825
- participants: 參與者
826
- scope_types: 範圍類型
827
779
  scopes: 範圍
828
780
  users:
829
781
  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.rc1"
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))