decidim-admin 0.30.2 → 0.31.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 (255) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/admin/update_organization.rb +18 -3
  3. data/app/controllers/concerns/decidim/admin/content_blocks/landing_page_content_blocks.rb +1 -1
  4. data/app/controllers/concerns/decidim/admin/filterable.rb +1 -1
  5. data/app/controllers/decidim/admin/area_types_controller.rb +2 -2
  6. data/app/controllers/decidim/admin/areas_controller.rb +2 -2
  7. data/app/controllers/decidim/admin/block_user_controller.rb +2 -2
  8. data/app/controllers/decidim/admin/component_permissions_controller.rb +1 -1
  9. data/app/controllers/decidim/admin/components_controller.rb +2 -2
  10. data/app/controllers/decidim/admin/concerns/has_attachment_collections.rb +2 -2
  11. data/app/controllers/decidim/admin/concerns/has_attachments.rb +2 -2
  12. data/app/controllers/decidim/admin/concerns/has_private_users.rb +3 -3
  13. data/app/controllers/decidim/admin/concerns/has_private_users_csv_import.rb +1 -1
  14. data/app/controllers/decidim/admin/conflicts_controller.rb +1 -1
  15. data/app/controllers/decidim/admin/dashboard_controller.rb +0 -9
  16. data/app/controllers/decidim/admin/impersonations_controller.rb +1 -1
  17. data/app/controllers/decidim/admin/imports_controller.rb +1 -1
  18. data/app/controllers/decidim/admin/managed_users/promotions_controller.rb +1 -1
  19. data/app/controllers/decidim/admin/newsletters_controller.rb +4 -4
  20. data/app/controllers/decidim/admin/organization_appearance_controller.rb +1 -3
  21. data/app/controllers/decidim/admin/organization_controller.rb +3 -5
  22. data/app/controllers/decidim/admin/organization_external_domain_allowlist_controller.rb +1 -1
  23. data/app/controllers/decidim/admin/organization_homepage_controller.rb +4 -0
  24. data/app/controllers/decidim/admin/participatory_space/user_role_controller.rb +2 -2
  25. data/app/controllers/decidim/admin/reminders_controller.rb +1 -1
  26. data/app/controllers/decidim/admin/resource_permissions_controller.rb +1 -1
  27. data/app/controllers/decidim/admin/scope_types_controller.rb +2 -2
  28. data/app/controllers/decidim/admin/scopes_controller.rb +2 -2
  29. data/app/controllers/decidim/admin/share_tokens_controller.rb +2 -2
  30. data/app/controllers/decidim/admin/static_page_topics_controller.rb +2 -2
  31. data/app/controllers/decidim/admin/static_pages_controller.rb +2 -2
  32. data/app/controllers/decidim/admin/statistics_controller.rb +34 -0
  33. data/app/controllers/decidim/admin/taxonomies_controller.rb +2 -2
  34. data/app/controllers/decidim/admin/taxonomy_filters_controller.rb +2 -2
  35. data/app/controllers/decidim/admin/taxonomy_items_controller.rb +2 -2
  36. data/app/controllers/decidim/admin/users_controller.rb +1 -1
  37. data/app/forms/decidim/admin/block_user_form.rb +1 -1
  38. data/app/forms/decidim/admin/block_users_form.rb +1 -1
  39. data/app/forms/decidim/admin/organization_form.rb +35 -6
  40. data/app/helpers/decidim/admin/filterable_helper.rb +27 -8
  41. data/app/helpers/decidim/admin/icon_link_helper.rb +2 -3
  42. data/app/helpers/decidim/admin/icon_with_tooltip_helper.rb +1 -2
  43. data/app/helpers/decidim/admin/imports_helper.rb +0 -5
  44. data/app/helpers/decidim/admin/menu_helper.rb +3 -2
  45. data/app/helpers/decidim/admin/moderations/reports_helper.rb +1 -1
  46. data/app/helpers/decidim/admin/resource_permissions_helper.rb +13 -13
  47. data/app/helpers/decidim/admin/settings_helper.rb +11 -3
  48. data/app/jobs/decidim/admin/newsletter_job.rb +1 -0
  49. data/app/packs/entrypoints/decidim_admin.js +2 -3
  50. data/app/packs/entrypoints/decidim_admin.scss +1 -1
  51. data/app/packs/entrypoints/decidim_admin_overrides.scss +1 -1
  52. data/app/packs/src/decidim/admin/admin_autocomplete.js +2 -2
  53. data/app/packs/src/decidim/admin/application.js +11 -10
  54. data/app/packs/src/decidim/admin/budget_rule_toggler.component.js +84 -34
  55. data/app/packs/src/decidim/admin/controllers/slug/controller.js +25 -0
  56. data/app/packs/src/decidim/admin/controllers/slug/slug.test.js +239 -0
  57. data/app/packs/src/decidim/admin/css_preview.js +1 -1
  58. data/app/packs/src/decidim/admin/draggable-list.js +1 -1
  59. data/app/packs/src/decidim/admin/draggable-table.js +1 -1
  60. data/app/packs/src/decidim/admin/dynamic_fields.component.js +13 -12
  61. data/app/packs/src/decidim/admin/external_domain_allowlist.js +1 -1
  62. data/app/packs/src/decidim/admin/form.js +21 -4
  63. data/app/packs/src/decidim/admin/global_moderations.js +2 -2
  64. data/app/packs/src/decidim/admin/managed_moderated_users.js +2 -2
  65. data/app/packs/src/decidim/admin/moderations.js +1 -1
  66. data/app/packs/src/decidim/admin/newsletters.js +1 -1
  67. data/app/packs/src/decidim/admin/officializations.js +1 -1
  68. data/app/packs/src/decidim/admin/participatory_space_search.js +2 -2
  69. data/app/packs/src/decidim/admin/proposal_infinite_edit.js +1 -1
  70. data/app/packs/src/decidim/admin/resources_permissions.js +1 -1
  71. data/app/packs/src/decidim/admin/sortable.js +1 -1
  72. data/app/packs/src/decidim/admin/sync_radio_buttons.js +1 -1
  73. data/app/packs/src/decidim/admin/tab_focus.js +1 -1
  74. data/app/packs/src/decidim/admin/text_copy.js +1 -1
  75. data/app/packs/src/decidim/admin/triadic_color_picker.js +1 -1
  76. data/app/packs/stylesheets/decidim/admin/_datepicker.scss +2 -2
  77. data/app/packs/stylesheets/decidim/admin/_dropdown.scss +12 -2
  78. data/app/packs/stylesheets/decidim/admin/_filters.scss +1 -57
  79. data/app/packs/stylesheets/decidim/admin/_forms.scss +1 -10
  80. data/app/packs/stylesheets/decidim/admin/_item_edit.scss +2 -10
  81. data/app/packs/stylesheets/decidim/admin/_item_show.scss +1 -5
  82. data/app/packs/stylesheets/decidim/admin/_legacy_foundation.scss +0 -412
  83. data/app/packs/stylesheets/decidim/admin/_main-nav.scss +75 -3
  84. data/app/packs/stylesheets/decidim/admin/_secondary-nav.scss +6 -10
  85. data/app/packs/stylesheets/decidim/admin/_select_picker.scss +1 -1
  86. data/app/packs/stylesheets/decidim/admin/_sidebar-menu.scss +2 -2
  87. data/app/packs/stylesheets/decidim/admin/_table-list.scss +25 -7
  88. data/app/packs/stylesheets/decidim/admin/_tabs.scss +4 -0
  89. data/app/packs/stylesheets/decidim/admin/_taxonomies.scss +6 -2
  90. data/app/packs/stylesheets/decidim/admin/application.scss +28 -29
  91. data/app/permissions/decidim/admin/permissions.rb +17 -5
  92. data/app/presenters/decidim/admin/dashboard_statistic_charts_presenter.rb +18 -0
  93. data/app/queries/decidim/admin/user_filter.rb +3 -3
  94. data/app/views/decidim/admin/area_types/index.html.erb +34 -11
  95. data/app/views/decidim/admin/areas/index.html.erb +32 -12
  96. data/app/views/decidim/admin/attachment_collections/index.html.erb +42 -14
  97. data/app/views/decidim/admin/attachments/index.html.erb +32 -13
  98. data/app/views/decidim/admin/block_user/bulk_new.html.erb +1 -1
  99. data/app/views/decidim/admin/block_user/new.html.erb +1 -1
  100. data/app/views/decidim/admin/components/_actions.html.erb +114 -54
  101. data/app/views/decidim/admin/components/_component_row.html.erb +5 -5
  102. data/app/views/decidim/admin/components/_components_table.html.erb +1 -1
  103. data/app/views/decidim/admin/components/_form.html.erb +4 -4
  104. data/app/views/decidim/admin/components/index.html.erb +12 -13
  105. data/app/views/decidim/admin/dashboard/show.html.erb +9 -21
  106. data/app/views/decidim/admin/exports/_dropdown.html.erb +16 -14
  107. data/app/views/decidim/admin/help_sections/_form.html.erb +1 -1
  108. data/app/views/decidim/admin/impersonatable_users/index.html.erb +68 -33
  109. data/app/views/decidim/admin/imports/_dropdown.html.erb +13 -11
  110. data/app/views/decidim/admin/imports/new.html.erb +13 -12
  111. data/app/views/decidim/admin/moderated_users/bulk_actions/_dropdown.html.erb +29 -32
  112. data/app/views/decidim/admin/moderated_users/index.html.erb +61 -21
  113. data/app/views/decidim/admin/moderations/_moderation-tr.html.erb +87 -32
  114. data/app/views/decidim/admin/moderations/_report.html.erb +2 -4
  115. data/app/views/decidim/admin/moderations/bulk_actions/_dropdown.html.erb +30 -34
  116. data/app/views/decidim/admin/moderations/index.html.erb +1 -1
  117. data/app/views/decidim/admin/moderations/reports/index.html.erb +1 -2
  118. data/app/views/decidim/admin/newsletters/index.html.erb +64 -21
  119. data/app/views/decidim/admin/officializations/index.html.erb +91 -32
  120. data/app/views/decidim/admin/organization/_form.html.erb +6 -92
  121. data/app/views/decidim/admin/organization/edit.html.erb +1 -5
  122. data/app/views/decidim/admin/organization/form/_admin_terms_of_service.html.erb +15 -0
  123. data/app/views/decidim/admin/organization/form/_basic_configuration.html.erb +31 -0
  124. data/app/views/decidim/admin/{organization_appearance → organization}/form/_colors.html.erb +9 -9
  125. data/app/views/decidim/admin/organization/form/_extra_features.html.erb +84 -0
  126. data/app/views/decidim/admin/{organization_appearance/form/_images.html.erb → organization/form/_logos.html.erb} +4 -4
  127. data/app/views/decidim/admin/organization/form/_welcome_notification.html.erb +25 -0
  128. data/app/views/decidim/admin/organization_external_domain_allowlist/_external_domain.html.erb +8 -6
  129. data/app/views/decidim/admin/participatory_space_private_users/index.html.erb +49 -22
  130. data/app/views/decidim/admin/resource_permissions/edit.html.erb +1 -1
  131. data/app/views/decidim/admin/scope_types/index.html.erb +31 -12
  132. data/app/views/decidim/admin/scopes/index.html.erb +40 -13
  133. data/app/views/decidim/admin/share_tokens/_form.html.erb +1 -1
  134. data/app/views/decidim/admin/share_tokens/edit.html.erb +1 -1
  135. data/app/views/decidim/admin/share_tokens/index.html.erb +69 -12
  136. data/app/views/decidim/admin/share_tokens/new.html.erb +1 -1
  137. data/app/views/decidim/admin/shared/_filters.html.erb +8 -10
  138. data/app/views/decidim/admin/shared/landing_page/_content_blocks.html.erb +14 -11
  139. data/app/views/decidim/admin/shared/landing_page_content_blocks/edit.html.erb +2 -4
  140. data/app/views/decidim/admin/static_page_topics/index.html.erb +31 -10
  141. data/app/views/decidim/admin/static_pages/_form.html.erb +1 -1
  142. data/app/views/decidim/admin/static_pages/_topic.html.erb +46 -16
  143. data/app/views/decidim/admin/statistics/_statistics.html.erb +13 -0
  144. data/app/views/decidim/admin/statistics/index.html.erb +6 -0
  145. data/app/views/decidim/admin/taxonomies/_form.html.erb +1 -1
  146. data/app/views/decidim/admin/taxonomies/_row.html.erb +24 -6
  147. data/app/views/decidim/admin/taxonomies/_table.html.erb +2 -2
  148. data/app/views/decidim/admin/taxonomies/_taxonomy_actions.html.erb +48 -15
  149. data/app/views/decidim/admin/taxonomies/edit.html.erb +10 -0
  150. data/app/views/decidim/admin/taxonomy_filters/_form.html.erb +1 -1
  151. data/app/views/decidim/admin/taxonomy_filters/_table.html.erb +52 -15
  152. data/app/views/decidim/admin/taxonomy_filters/new.html.erb +1 -1
  153. data/app/views/decidim/admin/taxonomy_filters_selector/_component_table.html.erb +38 -23
  154. data/app/views/decidim/admin/taxonomy_items/_form.html.erb +1 -1
  155. data/app/views/decidim/admin/users/index.html.erb +48 -24
  156. data/app/views/layouts/decidim/admin/_application.html.erb +3 -6
  157. data/app/views/layouts/decidim/admin/_header.html.erb +3 -1
  158. data/app/views/layouts/decidim/admin/_js_configuration.html.erb +11 -12
  159. data/app/views/layouts/decidim/admin/_sidebar_menu.html.erb +1 -1
  160. data/app/views/layouts/decidim/admin/_title_bar.html.erb +4 -4
  161. data/app/views/layouts/decidim/admin/_title_bar_responsive.html.erb +4 -4
  162. data/app/views/layouts/decidim/admin/insights.html.erb +6 -0
  163. data/config/assets.rb +2 -2
  164. data/config/locales/ar.yml +0 -90
  165. data/config/locales/bg.yml +1 -110
  166. data/config/locales/bs-BA.yml +0 -44
  167. data/config/locales/ca-IT.yml +59 -117
  168. data/config/locales/ca.yml +59 -117
  169. data/config/locales/cs.yml +51 -119
  170. data/config/locales/de.yml +60 -118
  171. data/config/locales/el.yml +2 -102
  172. data/config/locales/en.yml +61 -119
  173. data/config/locales/eo.yml +0 -4
  174. data/config/locales/es-MX.yml +61 -119
  175. data/config/locales/es-PY.yml +61 -119
  176. data/config/locales/es.yml +61 -119
  177. data/config/locales/eu.yml +61 -119
  178. data/config/locales/fi-plain.yml +60 -118
  179. data/config/locales/fi.yml +60 -118
  180. data/config/locales/fr-CA.yml +61 -119
  181. data/config/locales/fr.yml +61 -119
  182. data/config/locales/ga-IE.yml +1 -34
  183. data/config/locales/gl.yml +0 -95
  184. data/config/locales/he-IL.yml +0 -8
  185. data/config/locales/hu.yml +2 -105
  186. data/config/locales/id-ID.yml +0 -62
  187. data/config/locales/is-IS.yml +1 -36
  188. data/config/locales/it.yml +35 -116
  189. data/config/locales/ja.yml +60 -118
  190. data/config/locales/kaa.yml +0 -12
  191. data/config/locales/ko.yml +0 -75
  192. data/config/locales/lb.yml +2 -95
  193. data/config/locales/lt.yml +1 -103
  194. data/config/locales/lv.yml +2 -74
  195. data/config/locales/nl.yml +2 -96
  196. data/config/locales/no.yml +2 -96
  197. data/config/locales/pl.yml +2 -108
  198. data/config/locales/pt-BR.yml +6 -110
  199. data/config/locales/pt.yml +2 -96
  200. data/config/locales/ro-RO.yml +10 -102
  201. data/config/locales/ru.yml +2 -54
  202. data/config/locales/sk.yml +2 -72
  203. data/config/locales/sl.yml +1 -18
  204. data/config/locales/sq-AL.yml +0 -45
  205. data/config/locales/sr-CS.yml +1 -44
  206. data/config/locales/sv.yml +58 -119
  207. data/config/locales/th-TH.yml +0 -10
  208. data/config/locales/tr-TR.yml +5 -88
  209. data/config/locales/uk.yml +1 -45
  210. data/config/locales/val-ES.yml +0 -1
  211. data/config/locales/zh-CN.yml +0 -72
  212. data/config/locales/zh-TW.yml +1 -102
  213. data/config/routes.rb +1 -12
  214. data/lib/decidim/admin/engine.rb +5 -1
  215. data/lib/decidim/admin/form_builder.rb +1 -1
  216. data/lib/decidim/admin/menu.rb +32 -16
  217. data/lib/decidim/admin/test/filterable_examples.rb +8 -18
  218. data/lib/decidim/admin/test/invite_participatory_space_admins_shared_examples.rb +4 -4
  219. data/lib/decidim/admin/test/invite_participatory_space_collaborators_shared_examples.rb +2 -2
  220. data/lib/decidim/admin/test/invite_participatory_space_moderators_shared_examples.rb +9 -6
  221. data/lib/decidim/admin/test/invite_participatory_space_users_shared_context.rb +1 -0
  222. data/lib/decidim/admin/test/manage_attachment_collections_examples.rb +5 -1
  223. data/lib/decidim/admin/test/manage_attachments_examples.rb +5 -1
  224. data/lib/decidim/admin/test/manage_component_permissions_examples.rb +31 -4
  225. data/lib/decidim/admin/test/manage_moderations_examples.rb +12 -5
  226. data/lib/decidim/admin/test/manage_participatory_space_publications_examples.rb +12 -6
  227. data/lib/decidim/admin/test/manage_resource_soft_deletion_examples.rb +19 -4
  228. data/lib/decidim/admin/test/manage_taxonomy_filters_examples.rb +28 -8
  229. data/lib/decidim/admin/version.rb +1 -1
  230. metadata +22 -35
  231. data/app/commands/decidim/admin/process_user_group_verification_csv.rb +0 -44
  232. data/app/commands/decidim/admin/reject_user_group.rb +0 -42
  233. data/app/commands/decidim/admin/update_organization_appearance.rb +0 -39
  234. data/app/commands/decidim/admin/update_user_groups.rb +0 -44
  235. data/app/commands/decidim/admin/verify_user_group.rb +0 -43
  236. data/app/controllers/concerns/decidim/admin/user_groups/filterable.rb +0 -45
  237. data/app/controllers/concerns/decidim/admin/user_groups.rb +0 -24
  238. data/app/controllers/decidim/admin/metrics_controller.rb +0 -23
  239. data/app/controllers/decidim/admin/user_groups_controller.rb +0 -76
  240. data/app/controllers/decidim/admin/user_groups_csv_verifications_controller.rb +0 -36
  241. data/app/forms/decidim/admin/organization_appearance_form.rb +0 -88
  242. data/app/forms/decidim/admin/user_group_csv_verification_form.rb +0 -25
  243. data/app/jobs/decidim/admin/verify_user_group_from_csv_job.rb +0 -30
  244. data/app/packs/src/decidim/admin/welcome_notification.js +0 -32
  245. data/app/packs/stylesheets/decidim/admin/_bulk_actions.scss +0 -16
  246. data/app/presenters/decidim/admin/dashboard_metric_charts_presenter.rb +0 -33
  247. data/app/queries/decidim/admin/user_groups_evaluation.rb +0 -56
  248. data/app/views/decidim/admin/metrics/_metrics.html.erb +0 -16
  249. data/app/views/decidim/admin/metrics/index.html.erb +0 -7
  250. data/app/views/decidim/admin/organization_appearance/_form.html.erb +0 -100
  251. data/app/views/decidim/admin/organization_appearance/edit.html.erb +0 -18
  252. data/app/views/decidim/admin/organization_appearance/form/_header_snippets.html.erb +0 -17
  253. data/app/views/decidim/admin/user_groups/index.html.erb +0 -68
  254. data/app/views/decidim/admin/user_groups_csv_verifications/new.html.erb +0 -31
  255. /data/app/views/decidim/admin/{organization_appearance → organization}/form/_minimap.html.erb +0 -0
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- # A form object used to update the current organization appearance from the admin
6
- # dashboard.
7
- #
8
- class OrganizationAppearanceForm < Form
9
- include TranslatableAttributes
10
- include Decidim::HasUploadValidations
11
-
12
- mimic :organization
13
-
14
- attribute :logo
15
- attribute :remove_logo, Boolean, default: false
16
- attribute :favicon
17
- attribute :remove_favicon, Boolean, default: false
18
- attribute :official_img_footer
19
- attribute :remove_official_img_footer, Boolean, default: false
20
- attribute :official_url
21
- attribute :header_snippets, String
22
- attribute :cta_button_path, String
23
- attribute :highlighted_content_banner_enabled, Boolean, default: false
24
- attribute :highlighted_content_banner_action_url, String
25
- attribute :highlighted_content_banner_image
26
- attribute :remove_highlighted_content_banner_image, Boolean, default: false
27
- attribute :enable_omnipresent_banner, Boolean, default: false
28
- attribute :omnipresent_banner_url, String
29
-
30
- attribute :primary_color, String
31
- attribute :secondary_color, String
32
- attribute :tertiary_color, String
33
-
34
- translatable_attribute :cta_button_text, String
35
- translatable_attribute :description, Decidim::Attributes::RichText
36
- translatable_attribute :highlighted_content_banner_title, String
37
- translatable_attribute :highlighted_content_banner_short_description, Decidim::Attributes::RichText
38
- translatable_attribute :highlighted_content_banner_action_title, String
39
- translatable_attribute :highlighted_content_banner_action_subtitle, String
40
- translatable_attribute :omnipresent_banner_title, String
41
- translatable_attribute :omnipresent_banner_short_description, String
42
-
43
- validates :cta_button_path, format: { with: %r{\A[a-zA-Z]+[a-zA-Z0-9\-_/]+\z} }, allow_blank: true
44
- validates :official_img_footer,
45
- :logo,
46
- passthru: { to: Decidim::Organization }
47
-
48
- validates :highlighted_content_banner_action_url, url: true, presence: true, if: :highlighted_content_banner_enabled?
49
- validates :highlighted_content_banner_image,
50
- presence: true,
51
- passthru: { to: Decidim::Organization },
52
- if: :highlighted_content_banner_image_is_changed?
53
-
54
- validates :highlighted_content_banner_title,
55
- translatable_presence: true,
56
- if: :highlighted_content_banner_enabled?
57
-
58
- validates :highlighted_content_banner_short_description,
59
- translatable_presence: true,
60
- if: :highlighted_content_banner_enabled?
61
-
62
- validates :highlighted_content_banner_action_title,
63
- translatable_presence: true,
64
- if: :highlighted_content_banner_enabled?
65
-
66
- validates :omnipresent_banner_url, url: true, presence: true, if: :enable_omnipresent_banner?
67
- validates :omnipresent_banner_title, translatable_presence: true, if: :enable_omnipresent_banner?
68
- validates :omnipresent_banner_short_description, translatable_presence: true, if: :enable_omnipresent_banner?
69
-
70
- alias organization current_organization
71
-
72
- private
73
-
74
- def highlighted_content_banner_enabled?
75
- highlighted_content_banner_enabled
76
- end
77
-
78
- def enable_omnipresent_banner?
79
- enable_omnipresent_banner
80
- end
81
-
82
- def highlighted_content_banner_image_is_changed?
83
- highlighted_content_banner_enabled? &&
84
- current_organization.highlighted_content_banner_image.blank?
85
- end
86
- end
87
- end
88
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- # A form object used to upload CSV to batch verify user groups.
6
- #
7
- class UserGroupCsvVerificationForm < Form
8
- include Decidim::HasUploadValidations
9
- include Decidim::ProcessesFileLocally
10
-
11
- attribute :file, Decidim::Attributes::Blob
12
-
13
- validates :file, presence: true, file_content_type: { allow: ["text/csv"] }
14
- validate :validate_csv, unless: ->(f) { f.file.blank? }
15
-
16
- def validate_csv
17
- process_file_locally(file) do |file_path|
18
- CSV.open(file_path, &:readline)
19
- end
20
- rescue CSV::MalformedCSVError
21
- errors.add(:file, :malformed)
22
- end
23
- end
24
- end
25
- end
@@ -1,30 +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 VerifyUserGroupFromCsvJob < ApplicationJob
8
- queue_as :default
9
-
10
- def perform(email, verifier, organization)
11
- @organization = organization
12
- @email = email.downcase.strip
13
-
14
- return if email.blank?
15
- return unless user_group
16
-
17
- Decidim::Admin::VerifyUserGroup.call(user_group, verifier, via_csv: true)
18
- end
19
-
20
- private
21
-
22
- def user_group
23
- @user_group ||= UserGroup.where(organization: @organization)
24
- .where.not(confirmed_at: nil)
25
- .not_verified
26
- .find_by(email: @email)
27
- end
28
- end
29
- end
30
- end
@@ -1,32 +0,0 @@
1
- $(() => {
2
- const $scope = $("#welcome-notification-details");
3
-
4
- const $sendNotificationCheckbox = $(
5
- "#organization_send_welcome_notification",
6
- $scope
7
- );
8
-
9
- const $customizeCheckbox = $(
10
- "#organization_customize_welcome_notification",
11
- $scope
12
- );
13
-
14
- const toggleVisibility = () => {
15
- if ($sendNotificationCheckbox.is(":checked")) {
16
- $(".send-welcome-notification-details", $scope).show();
17
- } else {
18
- $(".send-welcome-notification-details", $scope).hide();
19
- }
20
-
21
- if ($customizeCheckbox.is(":checked")) {
22
- $(".customize-welcome-notification-details", $scope).show();
23
- } else {
24
- $(".customize-welcome-notification-details", $scope).hide();
25
- }
26
- };
27
-
28
- $($sendNotificationCheckbox).click(() => toggleVisibility());
29
- $($customizeCheckbox).click(() => toggleVisibility());
30
-
31
- toggleVisibility();
32
- });
@@ -1,16 +0,0 @@
1
- .main {
2
- #js-other-actions-wrapper,
3
- #js-bulk-actions-wrapper {
4
- .dropdown {
5
- @apply relative;
6
- }
7
- }
8
-
9
- .bulk-actions-budgets {
10
- @apply flex items-center gap-x-4 ml-auto;
11
-
12
- .dropdown {
13
- @apply relative;
14
- }
15
- }
16
- }
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- class DashboardMetricChartsPresenter < Decidim::MetricChartsPresenter
6
- def summary?
7
- __getobj__.fetch(:summary)
8
- end
9
-
10
- def highlighted_metrics
11
- return super unless summary?
12
-
13
- Decidim.metrics_registry.filtered(
14
- highlight: true,
15
- scope: "home"
16
- ).select do |registry|
17
- %w(users proposals).include? registry.metric_name
18
- end
19
- end
20
-
21
- def not_highlighted_metrics
22
- return super unless summary?
23
-
24
- Decidim.metrics_registry.filtered(
25
- highlight: false,
26
- scope: "home"
27
- ).select do |registry|
28
- %w(comments meetings accepted_proposals results blocked_users user_reports reported_users).include? registry.metric_name
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Admin
5
- # A class used to find the UserGroup's by their evaluation state.
6
- class UserGroupsEvaluation < Decidim::Query
7
- # Syntactic sugar to initialize the class and return the queried objects.
8
- #
9
- # user_groups - the initial User Group relation that needs to be filtered.
10
- # query - query to filter user group names
11
- # state - evaluation state to be used as a filter
12
- def self.for(user_groups, query = nil, state = nil)
13
- new(user_groups, query, state).query
14
- end
15
-
16
- # Initializes the class.
17
- #
18
- # user_groups - the User groups that need to be filtered
19
- # query - query to filter user group names
20
- # state - evaluation state to be used as a filter
21
- def initialize(user_groups, query = nil, state = nil)
22
- @user_groups = user_groups
23
- @query = query
24
- @state = state
25
- end
26
-
27
- # List the User groups by the different filters.
28
- def query
29
- @user_groups = filter_by_search(@user_groups)
30
- @user_groups = filter_by_state(@user_groups)
31
- @user_groups
32
- end
33
-
34
- private
35
-
36
- def filter_by_search(user_groups)
37
- return user_groups if @query.blank?
38
-
39
- user_groups.where("LOWER(name) LIKE LOWER(?)", "%#{@query}%")
40
- end
41
-
42
- def filter_by_state(user_groups)
43
- case @state
44
- when "verified"
45
- user_groups.verified
46
- when "rejected"
47
- user_groups.rejected
48
- when "pending"
49
- user_groups.pending
50
- else
51
- user_groups
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,16 +0,0 @@
1
- <div class="card">
2
- <div class="card-divider">
3
- <h2 class="card-title">
4
- <%= t "decidim.admin.titles.metrics" %>
5
- </h2>
6
- </div>
7
-
8
- <div class="metric__container">
9
- <%= metrics_presenter.highlighted %>
10
- <%= metrics_presenter.not_highlighted %>
11
- </div>
12
- </div>
13
-
14
- <% if show_link_to_more %>
15
- <div class="text-center"><%= link_to t(".see_more_metrics"), metrics_path %></div>
16
- <% end %>
@@ -1,7 +0,0 @@
1
- <%= render(
2
- partial: "decidim/admin/metrics/metrics",
3
- locals: {
4
- metrics_presenter:,
5
- show_link_to_more: false
6
- }
7
- ) %>
@@ -1,100 +0,0 @@
1
- <div class="form__wrapper">
2
- <div class="card" data-component="accordion" id="accordion-homepage_appearance_title">
3
- <div class="card-divider">
4
- <button class="card-divider-button" data-open="true" data-controls="panel-homepage_appearance_title" type="button">
5
- <%= icon "arrow-right-s-line" %>
6
- <h2 class="card-title" id="homepage_appearance_title">
7
- <%= t("homepage_appearance_title", scope: "decidim.admin.organization_appearance.form") %>
8
- </h2>
9
- </button>
10
- </div>
11
- <div id="panel-homepage_appearance_title" class="card-section">
12
- <div class="row column">
13
- <%= form.translated :editor, :description, aria: { label: :description } %>
14
- </div>
15
-
16
- <div class="row">
17
- <div class="columns slug">
18
- <%= form.text_field :cta_button_path, help_text: t(".cta_button_path_help_html", url: decidim_form_slug_url("", form.object.cta_button_path)) %>
19
- </div>
20
-
21
- <div class="columns">
22
- <%= form.translated :text_field, :cta_button_text, help_text: t(".cta_button_text_help") %>
23
- </div>
24
- </div>
25
- </div>
26
- </div>
27
-
28
- <div class="card" data-component="accordion" id="accordion-homepage_highlighted_content_banner_title">
29
- <div class="card-divider">
30
- <button class="card-divider-button" data-open="true" data-controls="panel-homepage_highlighted_content_banner_title" type="button">
31
- <%= icon "arrow-right-s-line" %>
32
- <h2 class="card-title" id="homepage_highlighted_content_banner_title">
33
- <%= t("homepage_highlighted_content_banner_title", scope: "decidim.admin.organization_appearance.form") %>
34
- </h2>
35
- </button>
36
- </div>
37
- <div id="panel-homepage_highlighted_content_banner_title" class="card-section">
38
- <div class="row column">
39
- <%= form.check_box :highlighted_content_banner_enabled %>
40
- </div>
41
-
42
- <div class="row column">
43
- <%= form.translated :text_area, :highlighted_content_banner_title, aria: { label: :highlighted_content_banner_title } %>
44
- </div>
45
-
46
- <div class="row column">
47
- <%= form.translated :editor, :highlighted_content_banner_short_description, aria: { label: :highlighted_content_banner_short_description } %>
48
- </div>
49
-
50
- <div class="row column">
51
- <%= form.translated :text_area, :highlighted_content_banner_action_title, aria: { label: :highlighted_content_banner_action_title } %>
52
- </div>
53
-
54
- <div class="row column">
55
- <%= form.translated :text_area, :highlighted_content_banner_action_subtitle, aria: { label: :highlighted_content_banner_action_subtitle } %>
56
- </div>
57
-
58
- <div class="row column">
59
- <%= form.url_field :highlighted_content_banner_action_url %>
60
- </div>
61
-
62
- <div class="row">
63
- <div class="columns">
64
- <%= form.upload :highlighted_content_banner_image, button_class: "button button__sm button__transparent-secondary" %>
65
- </div>
66
- </div>
67
- </div>
68
- </div>
69
-
70
- <div class="card" data-component="accordion" id="accordion-omnipresent_banner_appearance_title">
71
- <div class="card-divider">
72
- <button class="card-divider-button" data-open="true" data-controls="panel-omnipresent_banner_appearance_title" type="button">
73
- <%= icon "arrow-right-s-line" %>
74
- <h2 class="card-title" id="omnipresent_banner_appearance_title">
75
- <%= t("omnipresent_banner_appearance_title", scope: "decidim.admin.organization_appearance.form") %>
76
- </h2>
77
- </button>
78
- </div>
79
- <div id="panel-omnipresent_banner_appearance_title" class="card-section">
80
- <div class="row column">
81
- <%= form.check_box :enable_omnipresent_banner %>
82
- </div>
83
-
84
- <div class="row column">
85
- <%= form.translated :text_field, :omnipresent_banner_title, aria: { label: :omnipresent_banner_title } %>
86
- </div>
87
-
88
- <div class="row column">
89
- <%= form.translated :text_field, :omnipresent_banner_short_description, aria: { label: :omnipresent_banner_short_description } %>
90
- </div>
91
-
92
- <div class="row column">
93
- <%= form.url_field :omnipresent_banner_url %>
94
- </div>
95
- </div>
96
- </div>
97
- <%= render partial: "decidim/admin/organization_appearance/form/images", locals: { form: } %>
98
- <%= render partial: "decidim/admin/organization_appearance/form/colors", locals: { form: } %>
99
- <%= render partial: "decidim/admin/organization_appearance/form/header_snippets", locals: { form: } %>
100
- </div>
@@ -1,18 +0,0 @@
1
- <% add_decidim_page_title(t("edit_organization_appearance", scope: "decidim.admin.titles")) %>
2
-
3
- <div class="item_show__header">
4
- <h1 class="item_show__header-title">
5
- <%= t("edit_organization_appearance", scope: "decidim.admin.titles") %>
6
- </h1>
7
- </div>
8
-
9
- <div class="item__edit-form">
10
- <%= decidim_form_for(@form, html: { class: "form-defaults form edit_organization_appearance" }, url: organization_appearance_path, method: :put) do |f| %>
11
- <%= render partial: "form", object: f %>
12
- <div class="item__edit-sticky">
13
- <div class="item__edit-sticky-container">
14
- <%= f.submit t(".update"), class: "button button__sm button__secondary" %>
15
- </div>
16
- </div>
17
- <% end %>
18
- </div>
@@ -1,17 +0,0 @@
1
- <% if Decidim.enable_html_header_snippets %>
2
- <div class="card" data-component="accordion" id="accordion-header-snippets">
3
- <div class="card-divider">
4
- <button class="card-divider-button" data-open="true" data-controls="panel-header-snippets" type="button">
5
- <%= icon "arrow-right-s-line" %>
6
- <h2 class="card-title">
7
- <%= t("title", scope: "decidim.admin.organization_appearance.form.header_snippets") %>
8
- </h2>
9
- </button>
10
- </div>
11
- <div id="panel-header-snippets" class="card-section">
12
- <div class="row column">
13
- <%= form.text_area :header_snippets, help_text: t(".header_snippets_help_html"), rows: 20 %>
14
- </div>
15
- </div>
16
- </div>
17
- <% end %>
@@ -1,68 +0,0 @@
1
- <% add_decidim_page_title(t("decidim.admin.titles.user_groups")) %>
2
- <div class="card" id="user-groups">
3
- <div class="item_show__header">
4
- <h1 class="item_show__header-title">
5
- <%= t "decidim.admin.titles.user_groups" %>
6
- <%= link_to t(".verify_via_csv"), new_user_groups_csv_verification_path, class: "button button__sm button__secondary" %>
7
- </h1>
8
- </div>
9
- <%= admin_filter_selector %>
10
- <div class="table-scroll">
11
- <table class="table-list">
12
- <thead>
13
- <tr>
14
- <th><%= sort_link(query, :name, t("models.user_group.fields.name", scope: "decidim.admin"), default_order: :desc) %></th>
15
- <th><%= sort_link(query, :nickname, t("models.user_group.fields.nickname", scope: "decidim.admin"), default_order: :desc) %></th>
16
- <th><%= sort_link(query, :document_number, t("models.user_group.fields.document_number", scope: "decidim.admin"), default_order: :desc) %></th>
17
- <th><%= sort_link(query, :phone, t("models.user_group.fields.phone", scope: "decidim.admin"), default_order: :desc) %></th>
18
- <th><%= sort_link(query, :users_count, t("models.user_group.fields.users_count", scope: "decidim.admin"), default_order: :desc) %></th>
19
- <th><%= sort_link(query, :created_at, t("models.user_group.fields.created_at", scope: "decidim.admin"), default_order: :desc) %></th>
20
- <th><%= sort_link(query, :state, t("models.user_group.fields.state", scope: "decidim.admin"), default_order: :desc) %></th>
21
- <th><%= t("models.user_group.fields.actions", scope: "decidim.admin") %></th>
22
- </tr>
23
- </thead>
24
- <tbody>
25
- <% @user_groups.each do |user_group| %>
26
- <tr data-user-group-id="<%= user_group.id %>">
27
- <td><%= link_to_if user_group.nickname.present?, user_group.name, decidim.profile_path(user_group.nickname) %></td>
28
- <td><%= link_to_if user_group.nickname.present?, user_group.nickname, decidim.profile_path(user_group.nickname) %></td>
29
- <td><%= user_group.document_number %></td>
30
- <td><%= user_group.phone %></td>
31
- <td><%= user_group.users.size %></td>
32
- <td><%= l user_group.created_at, format: :short %></td>
33
- <td>
34
- <% if user_group.verified? %>
35
- <%= t(".state.verified") %>
36
- <% end %>
37
- <% if user_group.rejected? %>
38
- <%= t(".state.rejected") %>
39
- <% end %>
40
- <% if user_group.pending? %>
41
- <%= t(".state.pending") %>
42
- <% end %>
43
- </td>
44
- <td class="table-list__actions">
45
- <% if allowed_to?(:verify, :user_group, user_group: user_group) %>
46
- <% if !user_group.verified? %>
47
- <%= icon_link_to "checkbox-circle-line", decidim_admin.verify_user_group_path(user_group), t("actions.verify", scope: "decidim.admin"), method: :put, class: "action-icon--verify" %>
48
- <% else %>
49
- <%= icon "checkbox-circle-line", class: "action-icon action-icon--disabled", role: "img", aria_label: t("actions.verify", scope: "decidim.admin") %>
50
- <% end %>
51
- <% end %>
52
-
53
- <% if allowed_to?(:reject, :user_group, user_group: user_group) %>
54
- <% if !user_group.rejected? %>
55
- <%= icon_link_to "delete-bin-line", decidim_admin.reject_user_group_path(user_group), t("actions.reject", scope: "decidim.admin"), method: :put, class: "action-icon--reject" %>
56
- <% else %>
57
- <%= icon "delete-bin-line", class: "action-icon action-icon--disabled", role: "img", aria_label: t("actions.reject", scope: "decidim.admin") %>
58
- <% end %>
59
- <% end %>
60
- </td>
61
- </tr>
62
- <% end %>
63
- </tbody>
64
- </table>
65
- </div>
66
- </div>
67
-
68
- <%= decidim_paginate @user_groups %>
@@ -1,31 +0,0 @@
1
- <% add_decidim_page_title(t(".title")) %>
2
- <div class="item_show__header">
3
- <h1 class="item_show__header-title">
4
- <%= t ".title" %>
5
- </h1>
6
- </div>
7
- <div class="item__edit item__edit-1col">
8
- <div class="item__edit-form">
9
- <div class="form__wrapper">
10
- <%= decidim_form_for(@form, url: user_groups_csv_verification_path, html: { class: "form form-defaults" }) do |form| %>
11
- <div class="card pt-4">
12
- <div class="card-section">
13
- <div class="row column">
14
- <p><%= t(".explanation") %></p>
15
- <p><%= t(".example_file") %></p>
16
- <code class="code-block"><%= t(".explanation_example") %></code>
17
- </div>
18
- <div class="row column">
19
- <%= form.upload :file, button_class: "button button__sm button__transparent-secondary" %>
20
- </div>
21
- </div>
22
- </div>
23
- <div class="item__edit-sticky">
24
- <div class="item__edit-sticky-container">
25
- <%= form.submit t(".upload"), class: "button button__sm button__secondary" %>
26
- </div>
27
- </div>
28
- <% end %>
29
- </div>
30
- </div>
31
- </div>