decidim-decidim_awesome 0.8.0 → 0.12.0

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 (351) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +363 -0
  3. data/README.md +375 -100
  4. data/Rakefile +2 -1
  5. data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +20 -0
  6. data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +26 -0
  7. data/app/cells/decidim/decidim_awesome/content_blocks/map/show.erb +5 -12
  8. data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +7 -7
  9. data/app/cells/decidim/decidim_awesome/voting/proposal_metadata_cell.rb +69 -0
  10. data/app/cells/decidim/decidim_awesome/voting/voting_cards_base_cell.rb +40 -0
  11. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/modal.erb +18 -0
  12. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +40 -0
  13. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +16 -0
  14. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal_cell.rb +90 -0
  15. data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +2 -2
  16. data/app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb +31 -0
  17. data/app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb +27 -0
  18. data/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb +27 -0
  19. data/app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb +27 -0
  20. data/app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb +26 -0
  21. data/app/commands/concerns/decidim/decidim_awesome/system/create_organization_override.rb +29 -0
  22. data/app/commands/concerns/decidim/decidim_awesome/system/update_organization_override.rb +35 -0
  23. data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +30 -0
  24. data/app/commands/decidim/decidim_awesome/admin/create_constraint.rb +3 -3
  25. data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +1 -1
  26. data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +1 -1
  27. data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +5 -4
  28. data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +1 -1
  29. data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +4 -3
  30. data/app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb +1 -1
  31. data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +2 -2
  32. data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +2 -2
  33. data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +7 -4
  34. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +1 -1
  35. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +7 -5
  36. data/app/commands/decidim/decidim_awesome/admin/rename_scope_label.rb +2 -2
  37. data/app/commands/decidim/decidim_awesome/admin/update_config.rb +2 -3
  38. data/app/commands/decidim/decidim_awesome/admin/update_constraint.rb +3 -3
  39. data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +3 -3
  40. data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +1 -1
  41. data/app/commands/decidim/decidim_awesome/command.rb +8 -0
  42. data/app/commands/decidim/decidim_awesome/create_editor_image.rb +2 -2
  43. data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +43 -0
  44. data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable.rb +67 -0
  45. data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable_helper.rb +38 -0
  46. data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +60 -0
  47. data/app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb +34 -0
  48. data/app/controllers/concerns/decidim/decidim_awesome/limit_pending_amendments.rb +35 -0
  49. data/app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb +0 -2
  50. data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +3 -3
  51. data/app/controllers/concerns/decidim/decidim_awesome/proposals/memoize_extra_fields.rb +23 -0
  52. data/app/controllers/concerns/decidim/decidim_awesome/proposals/orderable_override.rb +94 -0
  53. data/app/controllers/concerns/decidim/decidim_awesome/proposals/proposal_votes_controller_override.rb +64 -0
  54. data/app/controllers/concerns/decidim/decidim_awesome/use_user_time_zone.rb +32 -0
  55. data/app/controllers/decidim/decidim_awesome/admin/admin_accountability_controller.rb +72 -0
  56. data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +122 -0
  57. data/app/controllers/decidim/decidim_awesome/admin/application_controller.rb +2 -0
  58. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +21 -17
  59. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +17 -8
  60. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +27 -20
  61. data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +6 -8
  62. data/app/controllers/decidim/decidim_awesome/admin/maintenance_controller.rb +76 -0
  63. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +6 -8
  64. data/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb +14 -6
  65. data/app/controllers/decidim/decidim_awesome/admin/scoped_admins_controller.rb +2 -2
  66. data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +14 -6
  67. data/app/controllers/decidim/decidim_awesome/blank_component_controller.rb +8 -3
  68. data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +3 -5
  69. data/app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb +18 -5
  70. data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +58 -0
  71. data/app/forms/concerns/decidim/decidim_awesome/account_form_override.rb +25 -0
  72. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb +57 -0
  73. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +21 -0
  74. data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +34 -0
  75. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +88 -20
  76. data/app/forms/decidim/decidim_awesome/admin/custom_redirect_form.rb +3 -3
  77. data/app/forms/decidim/decidim_awesome/admin/intergram_form.rb +4 -0
  78. data/app/forms/decidim/decidim_awesome/admin/menu_form.rb +5 -5
  79. data/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb +65 -0
  80. data/app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb +23 -0
  81. data/app/helpers/concerns/decidim/decidim_awesome/proposals/application_helper_override.rb +110 -0
  82. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +12 -29
  83. data/app/helpers/decidim/decidim_awesome/admin/system_checker_helpers.rb +4 -0
  84. data/app/helpers/decidim/decidim_awesome/map_helper.rb +38 -52
  85. data/app/jobs/decidim/decidim_awesome/destroy_private_data_job.rb +22 -0
  86. data/app/jobs/decidim/decidim_awesome/export_admin_actions_job.rb +28 -0
  87. data/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb +80 -0
  88. data/app/models/concerns/decidim/decidim_awesome/has_vote_weight.rb +30 -0
  89. data/app/models/decidim/decidim_awesome/awesome_config.rb +1 -2
  90. data/app/models/decidim/decidim_awesome/config_constraint.rb +0 -2
  91. data/app/models/decidim/decidim_awesome/editor_image.rb +0 -3
  92. data/app/models/decidim/decidim_awesome/paper_trail_version.rb +117 -0
  93. data/app/models/decidim/decidim_awesome/proposal_extra_field.rb +45 -0
  94. data/app/models/decidim/decidim_awesome/vote_weight.rb +30 -0
  95. data/app/overrides/decidim/account/show/add_timezone_select.html.erb.deface +3 -0
  96. data/app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface +3 -0
  97. data/app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface +5 -0
  98. data/app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface +5 -0
  99. data/app/overrides/decidim/proposals/admin/proposals/_form/replace_editor.html.erb.deface +3 -0
  100. data/app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface +7 -0
  101. data/app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface +5 -0
  102. data/app/overrides/decidim/proposals/proposals/_proposal_aside/limit_amendments_modal.html.erb.deface +5 -0
  103. data/app/overrides/decidim/proposals/proposals/_vote_button/replace_vote_button.html.erb.deface +7 -0
  104. data/app/overrides/decidim/proposals/proposals/_votes_count/replace_counter.html.erb.deface +10 -0
  105. data/app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface +9 -0
  106. data/app/{views/layouts/decidim/_head.html.erb → overrides/layouts/decidim/_decidim_javascript/add_awesome_tags.html.erb.deface} +2 -1
  107. data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +7 -0
  108. data/app/overrides/layouts/decidim/admin/_header/add_awesome_custom_styles.html.erb.deface +3 -0
  109. data/app/overrides/layouts/decidim/admin/_header/add_awesome_tags.html.erb.deface +10 -0
  110. data/app/packs/entrypoints/decidim_admin_decidim_awesome.js +2 -2
  111. data/app/packs/entrypoints/decidim_admin_decidim_awesome_global.js +4 -0
  112. data/app/packs/entrypoints/decidim_admin_decidim_awesome_global.scss +1 -0
  113. data/app/packs/entrypoints/decidim_admin_decidim_awesome_search_form.scss +1 -0
  114. data/app/packs/entrypoints/decidim_decidim_awesome.js +2 -2
  115. data/app/packs/entrypoints/decidim_decidim_awesome_map.scss +1 -1
  116. data/app/packs/entrypoints/decidim_editor.js +14 -0
  117. data/app/packs/images/decidim/decidim_awesome/handcard.svg +14 -0
  118. data/app/packs/images/decidim/decidim_awesome/handcheck.svg +17 -0
  119. data/app/packs/images/decidim/decidim_awesome/pokecode-logo.png +0 -0
  120. data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +96 -69
  121. data/app/packs/src/decidim/decidim_awesome/admin/check_redirections.js +46 -41
  122. data/app/packs/src/decidim/decidim_awesome/admin/codemirror.js +3 -3
  123. data/app/packs/src/decidim/decidim_awesome/admin/constraint_form_events.js +115 -0
  124. data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +19 -14
  125. data/app/packs/src/decidim/decidim_awesome/admin/form_exit_warn.js +23 -11
  126. data/app/packs/src/decidim/decidim_awesome/admin/proposal_sortings.js +26 -0
  127. data/app/packs/src/decidim/decidim_awesome/admin/tabs_change.js +31 -0
  128. data/app/packs/src/decidim/decidim_awesome/admin/user_picker.js +34 -20
  129. data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +21 -0
  130. data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +43 -0
  131. data/app/packs/src/decidim/decidim_awesome/amendments/show_modal_on_limits.js +28 -0
  132. data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +7 -16
  133. data/app/packs/src/decidim/decidim_awesome/awesome_admin_global.js +2 -0
  134. data/app/packs/src/decidim/decidim_awesome/awesome_application.js +2 -15
  135. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/fetcher.js +48 -23
  136. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/meetings_fetcher.js +9 -12
  137. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +28 -0
  138. data/app/packs/src/decidim/decidim_awesome/awesome_map/awesome_map.js +15 -15
  139. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +70 -37
  140. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/meetings_controller.js +11 -7
  141. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +9 -16
  142. data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +75 -45
  143. data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +28 -18
  144. data/app/packs/src/decidim/decidim_awesome/editor/index.js +94 -0
  145. data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +29 -28
  146. data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +55 -42
  147. data/app/packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js +30 -32
  148. data/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js +32 -16
  149. data/app/packs/src/decidim/decidim_awesome/proposals/images.js +16 -10
  150. data/app/packs/src/decidim/decidim_awesome/voting/voting_cards.js +72 -0
  151. data/app/packs/stylesheets/decidim/decidim_awesome/admin/admin_accountability.scss +67 -0
  152. data/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +11 -12
  153. data/app/packs/stylesheets/decidim/decidim_awesome/admin/check_redirections.scss +15 -0
  154. data/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +24 -12
  155. data/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss +49 -29
  156. data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +28 -71
  157. data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_styles.scss +48 -0
  158. data/app/packs/stylesheets/decidim/decidim_awesome/admin/intergram_fixes.scss +11 -0
  159. data/app/packs/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +17 -26
  160. data/app/packs/stylesheets/decidim/decidim_awesome/admin/verifications.scss +99 -0
  161. data/app/packs/stylesheets/decidim/decidim_awesome/amendments/modal.scss +5 -0
  162. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin.scss +14 -49
  163. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin_global.scss +20 -0
  164. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_application.scss +4 -18
  165. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_iframe/iframe.scss +1 -1
  166. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +41 -35
  167. data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +6 -6
  168. data/app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss +118 -0
  169. data/app/packs/stylesheets/decidim/decidim_awesome/shared/spinner.scss +26 -0
  170. data/app/packs/stylesheets/decidim/decidim_awesome/voting/voting_cards.scss +205 -0
  171. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +57 -1
  172. data/app/permissions/decidim/decidim_awesome/permissions.rb +11 -6
  173. data/app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb +23 -0
  174. data/app/presenters/{decidim → concerns/decidim}/decidim_awesome/menu_item_presenter_override.rb +10 -2
  175. data/app/presenters/{decidim → concerns/decidim}/decidim_awesome/menu_presenter_override.rb +8 -0
  176. data/app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb +20 -0
  177. data/app/presenters/decidim/decidim_awesome/admin_log/component_presenter_override.rb +28 -0
  178. data/app/presenters/decidim/decidim_awesome/admin_log/user_presenter_override.rb +46 -0
  179. data/app/presenters/decidim/decidim_awesome/paper_trail_base_presenter.rb +28 -0
  180. data/app/presenters/decidim/decidim_awesome/participatory_space_role_presenter.rb +45 -0
  181. data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +70 -0
  182. data/app/presenters/decidim/decidim_awesome/role_base_presenter.rb +102 -0
  183. data/app/presenters/decidim/decidim_awesome/user_entity_presenter.rb +50 -0
  184. data/app/queries/decidim/decidim_awesome/private_data_finder.rb +19 -0
  185. data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb +72 -0
  186. data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb +38 -0
  187. data/app/serializers/decidim/decidim_awesome/paper_trail_version_serializer.rb +37 -0
  188. data/app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb +34 -0
  189. data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb +59 -0
  190. data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb +20 -0
  191. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +12 -0
  192. data/app/validators/concerns/decidim/decidim_awesome/etiquette_validator_override.rb +41 -0
  193. data/app/views/decidim/decidim_awesome/account/_timezone_select.html.erb +3 -0
  194. data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +71 -0
  195. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/authorization.html.erb +20 -0
  196. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +3 -0
  197. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +5 -0
  198. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +41 -0
  199. data/app/views/decidim/decidim_awesome/admin/checks/_assets_tester.html.erb +2 -0
  200. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +51 -48
  201. data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +7 -2
  202. data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +25 -18
  203. data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +7 -6
  204. data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +12 -16
  205. data/app/views/decidim/decidim_awesome/admin/config/_form_livechat.html.erb +39 -23
  206. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +35 -17
  207. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb +1 -0
  208. data/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +92 -6
  209. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_admin_styles.html.erb +1 -0
  210. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +48 -0
  211. data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +16 -6
  212. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +15 -0
  213. data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +22 -12
  214. data/app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb +1 -49
  215. data/app/views/decidim/decidim_awesome/admin/constraints/new.html.erb +14 -9
  216. data/app/views/decidim/decidim_awesome/admin/constraints/no_permissions.html.erb +6 -0
  217. data/app/views/decidim/decidim_awesome/admin/constraints/show.html.erb +14 -9
  218. data/app/views/decidim/decidim_awesome/admin/custom_redirects/_form.html.erb +20 -5
  219. data/app/views/decidim/decidim_awesome/admin/custom_redirects/edit.html.erb +5 -5
  220. data/app/views/decidim/decidim_awesome/admin/custom_redirects/index.html.erb +14 -13
  221. data/app/views/decidim/decidim_awesome/admin/custom_redirects/new.html.erb +5 -5
  222. data/app/views/decidim/decidim_awesome/admin/maintenance/_private_data.html.erb +44 -0
  223. data/app/views/decidim/decidim_awesome/admin/maintenance/show.html.erb +44 -0
  224. data/app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb +6 -6
  225. data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +21 -12
  226. data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +39 -42
  227. data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +21 -12
  228. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_td.html.erb +25 -0
  229. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_th.html.erb +1 -0
  230. data/app/views/decidim/decidim_awesome/admin/officializations/_verification_modal.html.erb +9 -0
  231. data/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +8 -5
  232. data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +20 -0
  233. data/app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb +61 -0
  234. data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +23 -0
  235. data/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb +8 -2
  236. data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +7 -12
  237. data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +53 -37
  238. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +14 -5
  239. data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +66 -0
  240. data/app/views/decidim/decidim_awesome/system/organizations/_admin_allowed_authorizations.html.erb +5 -0
  241. data/app/views/decidim/decidim_awesome/voting/voting_cards/_show_vote_button.html.erb +3 -0
  242. data/app/views/decidim/decidim_awesome/voting/voting_cards/_show_votes_count.html.erb +1 -0
  243. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +11 -8
  244. data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
  245. data/app/views/layouts/decidim/decidim_awesome/_intergram_widget.html.erb +9 -6
  246. data/app/views/layouts/decidim/decidim_awesome/admin/_base.html.erb +12 -0
  247. data/app/views/layouts/decidim/decidim_awesome/admin/_custom_styles.html.erb +3 -0
  248. data/app/views/layouts/decidim/decidim_awesome/admin/admin_authorizations.html.erb +7 -0
  249. data/app/views/layouts/decidim/decidim_awesome/admin/application.html.erb +3 -0
  250. data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +19 -0
  251. data/config/assets.rb +5 -34
  252. data/config/i18n-tasks.yml +30 -0
  253. data/config/locales/ca.yml +335 -26
  254. data/config/locales/cs.yml +331 -22
  255. data/config/locales/de.yml +642 -0
  256. data/config/locales/en.yml +403 -33
  257. data/config/locales/es.yml +333 -24
  258. data/config/locales/eu.yml +623 -20
  259. data/config/locales/fr.yml +282 -23
  260. data/config/locales/hu.yml +268 -0
  261. data/config/locales/it.yml +155 -24
  262. data/config/locales/ja.yml +334 -25
  263. data/config/locales/lt.yml +94 -0
  264. data/config/locales/nl.yml +20 -19
  265. data/config/locales/pt-BR.yml +31 -24
  266. data/config/locales/ro-RO.yml +152 -0
  267. data/config/locales/sv.yml +28 -12
  268. data/config/rubocop/disabled.yml +11 -0
  269. data/config/rubocop/faker.yml +480 -0
  270. data/config/rubocop/rails.yml +88 -0
  271. data/config/rubocop/rspec.yml +65 -0
  272. data/config/rubocop/ruby.yml +1210 -0
  273. data/db/migrate/20231006113837_create_decidim_awesome_vote_weights.rb +13 -0
  274. data/db/migrate/20231006113841_create_decidim_awesome_proposal_extra_fields.rb +14 -0
  275. data/db/migrate/20240306175331_rename_editor_images_awesome_config.rb +18 -0
  276. data/db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb +29 -0
  277. data/db/migrate/20240729164227_add_decidim_awesome_proposal_private_fields_date.rb +20 -0
  278. data/db/seeds.rb +4 -4
  279. data/lib/decidim/decidim_awesome/admin_engine.rb +41 -6
  280. data/lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb +22 -0
  281. data/lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb +51 -0
  282. data/lib/decidim/decidim_awesome/authorizator.rb +34 -0
  283. data/lib/decidim/decidim_awesome/awesome.rb +236 -29
  284. data/lib/decidim/decidim_awesome/awesome_helpers.rb +57 -17
  285. data/lib/decidim/decidim_awesome/checksums.yml +95 -20
  286. data/lib/decidim/decidim_awesome/config.rb +25 -17
  287. data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +3 -3
  288. data/lib/decidim/decidim_awesome/custom_fields.rb +13 -5
  289. data/lib/decidim/decidim_awesome/engine.rb +250 -19
  290. data/lib/decidim/decidim_awesome/iframe_component/component.rb +4 -4
  291. data/lib/decidim/decidim_awesome/lock.rb +47 -0
  292. data/lib/decidim/decidim_awesome/map_component/component.rb +2 -2
  293. data/lib/decidim/decidim_awesome/menu.rb +201 -0
  294. data/lib/decidim/decidim_awesome/menu_hacker.rb +7 -5
  295. data/{app/middleware/decidim/decidim_awesome → lib/decidim/decidim_awesome/middleware}/current_config.rb +5 -3
  296. data/lib/decidim/decidim_awesome/request_memoizer.rb +16 -0
  297. data/lib/decidim/decidim_awesome/system_checker.rb +6 -2
  298. data/lib/decidim/decidim_awesome/test/factories.rb +31 -9
  299. data/lib/decidim/decidim_awesome/test/initializer.rb +22 -6
  300. data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +2 -2
  301. data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +2 -2
  302. data/lib/decidim/decidim_awesome/test/shared_examples/action_log_presenter_examples.rb +61 -0
  303. data/lib/decidim/decidim_awesome/test/shared_examples/{box_label_editor.rb → box_label_editor_examples.rb} +22 -22
  304. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +24 -6
  305. data/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb +155 -0
  306. data/lib/decidim/decidim_awesome/test/shared_examples/custom_redirects_contexts.rb +7 -7
  307. data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +156 -0
  308. data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +42 -58
  309. data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +9 -8
  310. data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +40 -29
  311. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +129 -38
  312. data/lib/decidim/decidim_awesome/version.rb +2 -2
  313. data/lib/decidim/decidim_awesome/voting_manifest.rb +55 -0
  314. data/lib/decidim/decidim_awesome.rb +1 -3
  315. data/lib/tasks/decidim_awesome_upgrade_tasks.rake +9 -0
  316. data/lib/tasks/decidim_awesome_webpacker_tasks.rake +2 -0
  317. data/package.json +54 -0
  318. metadata +192 -86
  319. data/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb +0 -38
  320. data/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb +0 -48
  321. data/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +0 -78
  322. data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +0 -106
  323. data/app/packs/entrypoints/decidim_admin_decidim_awesome_custom_fields.js +0 -2
  324. data/app/packs/entrypoints/decidim_decidim_awesome_admin_form_exit_warn.js +0 -1
  325. data/app/packs/images/decidim/decidim_awesome/platoniq-logo.png +0 -0
  326. data/app/packs/src/decidim/decidim_awesome/admin/constraints.js +0 -55
  327. data/app/packs/src/decidim/decidim_awesome/editors/editor.js +0 -190
  328. data/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js +0 -22
  329. data/app/packs/src/vendor/image-resize.min.js +0 -1
  330. data/app/packs/src/vendor/image-upload.min.js +0 -6
  331. data/app/packs/src/vendor/leaflet.featuregroup.subgroup.js +0 -184
  332. data/app/packs/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +0 -19
  333. data/app/packs/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +0 -58
  334. data/app/packs/stylesheets/vendor/select2-foundation-theme.scss +0 -348
  335. data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +0 -26
  336. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -26
  337. data/app/views/decidim/decidim_awesome/admin/config/_modal.html.erb +0 -11
  338. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +0 -101
  339. data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +0 -83
  340. data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +0 -1
  341. data/app/views/layouts/decidim/admin/_header.html.erb +0 -5
  342. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +0 -75
  343. data/app/views/v0.25/decidim/proposals/collaborative_drafts/_show.html.erb +0 -128
  344. data/app/views/v0.25/layouts/decidim/_head.html.erb +0 -41
  345. data/app/views/v0.25/layouts/decidim/admin/_header.html.erb +0 -11
  346. data/app/views/v0.26/decidim/proposals/collaborative_drafts/_show.html.erb +0 -128
  347. data/app/views/v0.26/layouts/decidim/_head.html.erb +0 -45
  348. data/app/views/v0.26/layouts/decidim/admin/_header.html.erb +0 -11
  349. data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +0 -39
  350. data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +0 -37
  351. /data/app/models/{decidim → concerns/decidim}/decidim_awesome/user_override.rb +0 -0
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Proposals
6
+ module MemoizeExtraFields
7
+ extend ActiveSupport::Concern
8
+ include Decidim::DecidimAwesome::RequestMemoizer
9
+
10
+ included do
11
+ alias_method :decidim_original_index, :index
12
+
13
+ def index
14
+ decidim_original_index
15
+
16
+ memoize("extra_fields") { Decidim::DecidimAwesome::ProposalExtraField.where(proposal: @proposals).index_by(&:decidim_proposal_id) }
17
+ memoize("user_votes") { Decidim::Proposals::ProposalVote.where(proposal: proposals, author: current_user).index_by(&:decidim_proposal_id) if current_user }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Proposals
6
+ module OrderableOverride
7
+ extend ActiveSupport::Concern
8
+ include Decidim::DecidimAwesome::NeedsAwesomeConfig
9
+
10
+ included do
11
+ before_action only: [:index] do
12
+ session[:order] = params[:order] if params[:order].present?
13
+ end
14
+
15
+ private
16
+
17
+ alias_method :decidim_original_reorder, :reorder
18
+
19
+ # read order from session if available
20
+ def order
21
+ @order ||= detect_order(session[:order]) || default_order
22
+ end
23
+
24
+ def possible_orders
25
+ @possible_orders ||= begin
26
+ possible_orders = %w(random recent)
27
+ possible_orders += awesome_additional_sortings
28
+ possible_orders << "most_voted" if most_voted_order_available?
29
+ possible_orders << "most_endorsed" if current_settings.endorsements_enabled?
30
+ possible_orders << "most_commented" if component_settings.comments_enabled?
31
+ possible_orders << "most_followed" << "with_more_authors"
32
+ possible_orders
33
+ end
34
+ end
35
+
36
+ def reorder(proposals)
37
+ title_by_locale = Arel.sql(proposals.sanitize_sql(["decidim_proposals_proposals.title->>? #{collation}", locale]))
38
+ title_by_machine_translation = Arel.sql(proposals.sanitize_sql(["decidim_proposals_proposals.title->'machine_translations'->>? #{collation}", locale]))
39
+ title_by_default_locale = Arel.sql(proposals.sanitize_sql(["decidim_proposals_proposals.title->>? #{collation}", default_locale]))
40
+ case order
41
+ when "az"
42
+ proposals.order(title_by_locale => :asc, title_by_machine_translation => :asc, title_by_default_locale => :asc)
43
+ when "za"
44
+ proposals.order(title_by_locale => :desc, title_by_machine_translation => :desc, title_by_default_locale => :desc)
45
+ when "supported_first"
46
+ proposals.joins(my_votes_join).group(:id).order(Arel.sql("COUNT(decidim_proposals_proposal_votes.id) DESC"))
47
+ when "supported_last"
48
+ proposals.joins(my_votes_join).group(:id).order(Arel.sql("COUNT(decidim_proposals_proposal_votes.id) ASC"))
49
+ else
50
+ decidim_original_reorder(proposals)
51
+ end
52
+ end
53
+
54
+ def collation
55
+ @collation ||= begin
56
+ collation = Decidim::DecidimAwesome.collation_for(locale)
57
+ "COLLATE \"#{collation}\"" if collation.present?
58
+ end
59
+ end
60
+
61
+ def my_votes_join
62
+ votes_table = Decidim::Proposals::ProposalVote.arel_table
63
+ proposals_table = Decidim::Proposals::Proposal.arel_table
64
+ Arel::Nodes::OuterJoin.new(
65
+ votes_table,
66
+ Arel::Nodes::On.new(
67
+ votes_table[:decidim_proposal_id].eq(proposals_table[:id])
68
+ .and(votes_table[:decidim_author_id].eq(current_user.id))
69
+ )
70
+ )
71
+ end
72
+
73
+ def supported_order_available?
74
+ most_voted_order_available? && current_user
75
+ end
76
+
77
+ def awesome_additional_sortings
78
+ return [] unless DecidimAwesome.enabled?(:additional_proposal_sortings)
79
+ return [] if awesome_config[:additional_proposal_sortings].blank?
80
+ return [] unless awesome_config_instance.constrained_in_context?(:additional_proposal_sortings)
81
+
82
+ awesome_config[:additional_proposal_sortings].filter_map do |sort|
83
+ sort = sort.to_s
84
+ next unless sort.in? DecidimAwesome.possible_additional_proposal_sortings
85
+ next if sort.in?(%w(supported_first supported_last)) && !supported_order_available?
86
+
87
+ sort
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Proposals
6
+ module ProposalVotesControllerOverride
7
+ extend ActiveSupport::Concern
8
+ include Decidim::DecidimAwesome::AwesomeHelpers
9
+
10
+ included do
11
+ # rubocop:disable Rails/LexicallyScopedActionFilter
12
+ before_action :validate_weight, only: :create
13
+ # rubocop:enable Rails/LexicallyScopedActionFilter
14
+
15
+ def create
16
+ enforce_permission_to(:vote, :proposal, proposal:)
17
+ @from_proposals_list = params[:from_proposals_list] == "true"
18
+
19
+ Decidim::Proposals::VoteProposal.call(proposal, current_user) do
20
+ on(:ok) do
21
+ current_vote.weight = weight if current_vote && vote_manifest
22
+
23
+ proposal.reload
24
+
25
+ proposals = Decidim::Proposals::ProposalVote.where(
26
+ author: current_user,
27
+ proposal: Decidim::Proposals::Proposal.where(component: current_component)
28
+ ).map(&:proposal)
29
+
30
+ expose(proposals:)
31
+ render :update_buttons_and_counters
32
+ end
33
+
34
+ on(:invalid) do
35
+ render json: { error: I18n.t("proposal_votes.create.error", scope: "decidim.proposals") }, status: :unprocessable_entity
36
+ end
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def validate_weight
43
+ return unless vote_manifest
44
+ return if vote_manifest.valid_weight? weight, user: current_user, proposal: proposal
45
+
46
+ render json: { error: I18n.t("proposal_votes.create.error", scope: "decidim.proposals") }, status: :unprocessable_entity
47
+ end
48
+
49
+ def current_vote
50
+ @current_vote ||= Decidim::Proposals::ProposalVote.find_by(author: current_user, proposal:)
51
+ end
52
+
53
+ def vote_manifest
54
+ @vote_manifest ||= awesome_voting_manifest_for(current_component)
55
+ end
56
+
57
+ def weight
58
+ params[:weight].to_i if params.has_key?(:weight)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module UseUserTimeZone
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ around_action :use_user_time_zone, if: -> { user_time_zone.present? }
10
+ helper_method :user_time_zone
11
+
12
+ # Executes a block of code in the context of the user's time zone
13
+ #
14
+ # &action - a block of code to be wrapped around the time zone
15
+ #
16
+ # Returns nothing.
17
+ def use_user_time_zone(&)
18
+ Time.use_zone(user_time_zone, &)
19
+ end
20
+
21
+ # The current time zone from the user. Available as a helper for the views.
22
+ #
23
+ # Returns a String.
24
+ def user_time_zone
25
+ return if helpers&.awesome_config&.[](:user_timezone).blank?
26
+
27
+ @user_time_zone ||= current_user&.extended_data&.[]("time_zone")
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Admin
6
+ class AdminAccountabilityController < DecidimAwesome::Admin::ApplicationController
7
+ include NeedsAwesomeConfig
8
+ include AdminAccountability::Admin::Filterable
9
+
10
+ helper_method :admin_actions, :collection, :export_params, :global?, :global_users_missing_date
11
+
12
+ layout "decidim/admin/users"
13
+
14
+ before_action do
15
+ enforce_permission_to :edit_config, :admin_accountability, global: global?
16
+ end
17
+
18
+ def index; end
19
+
20
+ def export
21
+ filters = export_params[:q]
22
+
23
+ ExportAdminActionsJob.perform_later(current_user,
24
+ params[:format].to_s,
25
+ admin_actions.ransack(filters).result.ids)
26
+
27
+ redirect_back fallback_location: decidim_admin_decidim_awesome.admin_accountability_path,
28
+ notice: t("decidim.decidim_awesome.admin.admin_accountability.exports.notice")
29
+ end
30
+
31
+ private
32
+
33
+ def admin_actions
34
+ @admin_actions ||= filtered_collection
35
+ end
36
+
37
+ def collection
38
+ @collection = global? ? paginate(admin_role_actions) : paginate(space_role_actions)
39
+ end
40
+
41
+ def space_role_actions
42
+ @space_role_actions ||= PaperTrailVersion.space_role_actions(current_organization)
43
+ end
44
+
45
+ def admin_role_actions
46
+ @admin_role_actions ||= PaperTrailVersion.in_organization(current_organization).admin_role_actions(PaperTrailVersion.safe_admin_role_type(params[:admin_role_type]))
47
+ end
48
+
49
+ def export_params
50
+ params.permit(:format, :admins, :admin_role_type, q: [:role_type_eq, :user_name_or_user_email_cont, :created_at_gteq, :created_at_lteq])
51
+ end
52
+
53
+ def global?
54
+ params[:admins] == "true"
55
+ end
56
+
57
+ # User traceability was introduced in version 0.24. Users created before that might appear in the list.
58
+ # Returns the first traceability record available if there are users created before.
59
+ # Returns nil otherwise
60
+ def global_users_missing_date
61
+ return unless global?
62
+
63
+ @global_users_missing_date ||= begin
64
+ first_version = PaperTrailVersion.where(item_type: "Decidim::UserBaseEntity").last
65
+ first_user = Decidim::User.first
66
+ first_version.created_at if first_user && first_version && (first_version.created_at > first_user.created_at + 1.second)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Admin
6
+ class AdminAuthorizationsController < DecidimAwesome::Admin::ApplicationController
7
+ include NeedsAwesomeConfig
8
+
9
+ layout "layouts/decidim/decidim_awesome/admin/admin_authorizations"
10
+ helper_method :user, :authorization, :workflow, :handler, :conflict
11
+ # overwrite original rescue_from to ensure we print messages from ajax methods
12
+ rescue_from Decidim::ActionForbidden, with: :json_error
13
+
14
+ before_action do
15
+ enforce_permission_to :edit_config, :admins_available_authorizations, handler: workflow.name
16
+ end
17
+
18
+ def edit
19
+ render "authorization" if authorization
20
+ end
21
+
22
+ def update
23
+ if conflict
24
+ message = render_to_string("conflict")
25
+ else
26
+ message = render_to_string("callout", locals: { i18n_key: "user_authorized", klass: "success" })
27
+ Decidim::Verifications::AuthorizeUser.call(handler, current_organization) do
28
+ on(:transferred) do |transfer|
29
+ message += render_to_string("callout", locals: { i18n_key: "authorization_transferred", klass: "success" }) if transfer.records.any?
30
+ end
31
+ on(:invalid) do
32
+ if force_verification.present?
33
+ create_forced_authorization
34
+ else
35
+ message = render_to_string("callout", locals: { i18n_key: "user_not_authorized", klass: "alert" })
36
+ message += render_to_string("edit", locals: { with_override: true })
37
+ end
38
+ end
39
+ on(:ok) do
40
+ Decidim::ActionLogger.log("admin_creates_authorization", current_user, user, nil, user_id: user.id, handler: workflow.name, handler_name: workflow.fullname)
41
+ end
42
+ end
43
+ end
44
+
45
+ render json: {
46
+ message:,
47
+ granted: granted?,
48
+ userId: user.id,
49
+ handler: workflow.name
50
+ }
51
+ end
52
+
53
+ def destroy
54
+ message = if destroy_authorization
55
+ render_to_string("callout", locals: { i18n_key: "authorization_destroyed", klass: "success" })
56
+ else
57
+ render_to_string("callout", locals: { i18n_key: "authorization_not_destroyed", klass: "alert" })
58
+ end
59
+
60
+ render json: {
61
+ message:,
62
+ granted: granted?,
63
+ userId: user.id,
64
+ handler: workflow.name
65
+ }
66
+ end
67
+
68
+ private
69
+
70
+ def create_forced_authorization
71
+ Decidim::Authorization.create_or_update_from(handler)
72
+ Decidim::ActionLogger.log("admin_forces_authorization", current_user, user, nil, handler: workflow.name, user_id: user.id, handler_name: workflow.fullname,
73
+ reason: force_verification)
74
+ end
75
+
76
+ def destroy_authorization
77
+ if authorization&.destroy
78
+ Decidim::ActionLogger.log("admin_destroys_authorization", current_user, user, nil, user_id: user.id, handler: workflow.name, handler_name: workflow.fullname)
79
+ end
80
+ end
81
+
82
+ def json_error(exception)
83
+ render plain: render_to_string("callout", locals: { message: exception.message, klass: "alert" }), status: :unprocessable_entity
84
+ end
85
+
86
+ def user
87
+ @user ||= Decidim::User.find(params[:id])
88
+ end
89
+
90
+ def authorization
91
+ @authorization ||= Decidim::Authorization.where.not(granted_at: nil).find_by(user:, name: workflow.name)
92
+ end
93
+
94
+ def granted?
95
+ authorization&.reload.present?
96
+ rescue ActiveRecord::RecordNotFound
97
+ false
98
+ end
99
+
100
+ def workflow
101
+ @workflow ||= Decidim::Verifications.find_workflow_manifest(params[:handler])
102
+ end
103
+
104
+ def handler
105
+ @handler ||= Decidim::AuthorizationHandler.handler_for(params[:handler], handler_params)
106
+ end
107
+
108
+ def conflict
109
+ @conflict ||= Decidim::Authorization.find_by(unique_id: handler.unique_id)
110
+ end
111
+
112
+ def handler_params
113
+ (params[:authorization_handler] || {}).merge(user:)
114
+ end
115
+
116
+ def force_verification
117
+ @force_verification ||= params[:force_verification].to_s.strip.presence
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -9,6 +9,8 @@ module Decidim
9
9
  # Note that it inherits from `Decidim::Admin::Components::BaseController`, which
10
10
  # override its layout and provide all kinds of useful methods.
11
11
  class ApplicationController < Decidim::Admin::ApplicationController
12
+ layout "decidim/decidim_awesome/admin/application"
13
+
12
14
  def permission_class_chain
13
15
  [::Decidim::DecidimAwesome::Admin::Permissions] + super
14
16
  end
@@ -8,50 +8,54 @@ module Decidim
8
8
  # System compatibility analyzer
9
9
  class ChecksController < DecidimAwesome::Admin::ApplicationController
10
10
  include NeedsAwesomeConfig
11
+ include MaintenanceContext
12
+
11
13
  helper ConfigConstraintsHelpers
12
14
  helper SystemCheckerHelpers
13
15
 
14
- layout "decidim/admin/decidim_awesome"
15
-
16
16
  helper_method :head, :admin_head, :head_addons, :admin_addons
17
17
 
18
- def migrate_images
19
- Decidim::DecidimAwesome::MigrateLegacyImagesJob.perform_later(current_organization.id)
20
- flash[:notice] = I18n.t("image_migrations_started", scope: "decidim.decidim_awesome.admin.checks.index")
21
- redirect_to checks_path
22
- end
23
-
24
18
  private
25
19
 
26
20
  def head
27
- @head ||= Nokogiri::HTML(render_to_string(partial: "layouts/decidim/head"))
21
+ @head ||= Nokogiri::HTML(render_template("decidim/decidim_awesome/admin/checks/assets_tester"))
28
22
  end
29
23
 
30
24
  def admin_head
31
- @admin_head = Nokogiri::HTML(render_to_string(partial: "layouts/decidim/admin/header"))
25
+ @admin_head = Nokogiri::HTML(render_template("layouts/decidim/admin/header"))
32
26
  end
33
27
 
34
28
  def head_addons(part)
35
29
  case part
36
30
  when :CSS
37
- ['<%= stylesheet_pack_tag "decidim_decidim_awesome", media: "all" %>',
38
- '<%= render(partial: "layouts/decidim/decidim_awesome/custom_styles") if awesome_custom_styles %>'].join("\n")
31
+ ['<%= append_stylesheet_pack_tag "decidim_decidim_awesome", media: "all" %>',
32
+ '<%= render(partial: "layouts/decidim/decidim_awesome/custom_styles") if awesome_scoped_styles %>'].join("\n")
39
33
  when :JavaScript
40
34
  ['<%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>',
41
- '<%= javascript_pack_tag "decidim_decidim_awesome" %>',
42
- '<%= javascript_pack_tag "decidim_decidim_awesome_custom_fields" if awesome_proposal_custom_fields %>'].join("\n")
35
+ '<%= append_javascript_pack_tag "decidim_decidim_awesome", defer: false %>',
36
+ '<%= append_javascript_pack_tag "decidim_decidim_awesome_custom_fields" if awesome_proposal_custom_fields %>'].join("\n")
43
37
  end
44
38
  end
45
39
 
46
40
  def admin_addons(part)
47
41
  case part
48
42
  when :CSS
49
- '<%= stylesheet_pack_tag "decidim_admin_decidim_awesome", media: "all" %>'
43
+ '<%= append_stylesheet_pack_tag "decidim_admin_decidim_awesome", media: "all" %>'
50
44
  when :JavaScript
51
- ['<%= javascript_pack_tag "decidim_admin_decidim_awesome", defer: false %>',
52
- '<%= javascript_pack_tag "decidim_decidim_awesome_custom_fields" if awesome_proposal_custom_fields %>'].join("\n")
45
+ ['<%= append_javascript_pack_tag "decidim_admin_decidim_awesome", defer: false %>',
46
+ '<%= append_javascript_pack_tag "decidim_decidim_awesome_custom_fields" if awesome_proposal_custom_fields %>'].join("\n")
53
47
  end
54
48
  end
49
+
50
+ def render_template(partial)
51
+ render_to_string(partial:)
52
+ rescue ActionView::Template::Error => e
53
+ flash.now[:alert] = "Partial [#{partial}] has thrown an error: #{e.message}"
54
+ end
55
+
56
+ def current_view
57
+ "checks"
58
+ end
55
59
  end
56
60
  end
57
61
  end
@@ -9,9 +9,7 @@ module Decidim
9
9
  include ConfigConstraintsHelpers
10
10
  helper ConfigConstraintsHelpers
11
11
 
12
- layout "decidim/admin/decidim_awesome"
13
-
14
- helper_method :constraints_for, :users_for, :config_var
12
+ helper_method :constraints_for, :users_for, :config_var, :available_authorizations
15
13
  before_action do
16
14
  enforce_permission_to :edit_config, configs
17
15
  end
@@ -19,7 +17,7 @@ module Decidim
19
17
  def show
20
18
  @form = form(ConfigForm).from_params(organization_awesome_config)
21
19
 
22
- redirect_to decidim_admin_decidim_awesome.checks_path unless config_var
20
+ redirect_to decidim_admin_decidim_awesome.checks_maintenance_index_path unless config_var
23
21
  end
24
22
 
25
23
  def update
@@ -43,8 +41,13 @@ module Decidim
43
41
  if (term = params[:term].to_s).present?
44
42
  query = current_organization.users.order(name: :asc)
45
43
  query = query.where("name ILIKE :term OR nickname ILIKE :term OR email ILIKE :term", term: "%#{term}%")
46
-
47
- render json: query.all.collect { |u| { id: u.id, text: format_user_name(u) } }
44
+ render json: query.all.collect { |u|
45
+ {
46
+ value: u.id,
47
+ text: format_user_name(u),
48
+ is_admin: u.read_attribute("admin")
49
+ }
50
+ }
48
51
  else
49
52
  render json: []
50
53
  end
@@ -89,11 +92,17 @@ module Decidim
89
92
  end
90
93
 
91
94
  def users_for(ids_list)
92
- Decidim::User.where(id: ids_list).map { |user| OpenStruct.new(text: format_user_name(user), id: user.id) }
95
+ Decidim::User.where(id: ids_list).map { |user| [format_user_name(user), user.id, { data: { is_admin: user.read_attribute("admin") } }] }
93
96
  end
94
97
 
95
98
  def format_user_name(user)
96
- "<span class='#{"is-admin" if user.read_attribute("admin")}'>#{user.name} (@#{user.nickname} - #{user.email})</span>"
99
+ "#{user.name} (@#{user.nickname} - #{user.email})"
100
+ end
101
+
102
+ def available_authorizations
103
+ @available_authorizations ||= Decidim::Verifications::Adapter.from_collection(
104
+ current_organization.available_authorizations & Decidim.authorization_workflows.map(&:name)
105
+ )
97
106
  end
98
107
  end
99
108
  end
@@ -6,21 +6,24 @@ module Decidim
6
6
  # Constraints configuration controller for config keys
7
7
  class ConstraintsController < DecidimAwesome::Admin::ApplicationController
8
8
  include NeedsAwesomeConfig
9
+ include Decidim::Headers::HttpCachingDisabler
9
10
  helper ConfigConstraintsHelpers
10
11
 
11
12
  layout false
12
- before_action do
13
- enforce_permission_to :edit_config, constraint_key
14
- end
13
+ helper_method :constraint_key
15
14
 
16
- def new
17
- @form = form(ConstraintForm).from_params(filtered_params, setting: current_setting)
15
+ before_action do
16
+ render :no_permissions unless allowed_to? :edit_config, constraint_key
18
17
  end
19
18
 
20
19
  def show
21
20
  @form = form(ConstraintForm).from_params(constraint.settings.merge(filtered_params))
22
21
  end
23
22
 
23
+ def new
24
+ @form = form(ConstraintForm).from_params(filtered_params, setting: current_setting)
25
+ end
26
+
24
27
  def create
25
28
  @form = form(ConstraintForm).from_params(params, setting: current_setting)
26
29
  CreateConstraint.call(@form) do
@@ -39,11 +42,11 @@ module Decidim
39
42
 
40
43
  on(:invalid) do |message|
41
44
  render json: {
42
- id: params[:id],
43
- key: current_setting.var,
44
- message: I18n.t("decidim_awesome.admin.constraints.create.error", scope: "decidim"),
45
- error: message
46
- },
45
+ id: params[:id],
46
+ key: current_setting.var,
47
+ message: I18n.t("decidim_awesome.admin.constraints.create.error", scope: "decidim"),
48
+ error: message
49
+ },
47
50
  status: :unprocessable_entity
48
51
  end
49
52
  end
@@ -67,11 +70,11 @@ module Decidim
67
70
 
68
71
  on(:invalid) do |message|
69
72
  render json: {
70
- id: params[:id],
71
- key: constraint.awesome_config.var,
72
- message: I18n.t("decidim_awesome.admin.constraints.update.error", scope: "decidim"),
73
- error: message
74
- },
73
+ id: params[:id],
74
+ key: constraint.awesome_config.var,
75
+ message: I18n.t("decidim_awesome.admin.constraints.update.error", scope: "decidim"),
76
+ error: message
77
+ },
75
78
  status: :unprocessable_entity
76
79
  end
77
80
  end
@@ -94,11 +97,11 @@ module Decidim
94
97
 
95
98
  on(:invalid) do |message|
96
99
  render json: {
97
- id: params[:id],
98
- key: constraint.awesome_config.var,
99
- message: I18n.t("decidim_awesome.admin.constraints.destroy.error", scope: "decidim"),
100
- error: message
101
- },
100
+ id: params[:id],
101
+ key: constraint.awesome_config.var,
102
+ message: I18n.t("decidim_awesome.admin.constraints.destroy.error", scope: "decidim"),
103
+ error: message
104
+ },
102
105
  status: :unprocessable_entity
103
106
  end
104
107
  end
@@ -127,10 +130,14 @@ module Decidim
127
130
  case key
128
131
  when /^scoped_style_/
129
132
  :scoped_styles
133
+ when /^scoped_admin_style_/
134
+ :scoped_admin_styles
130
135
  when /^scoped_admin_/
131
136
  :scoped_admins
132
137
  when /^proposal_custom_field_/
133
138
  :proposal_custom_fields
139
+ when /^proposal_private_custom_field_/
140
+ :proposal_private_custom_fields
134
141
  else
135
142
  key
136
143
  end