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
@@ -4,13 +4,20 @@ module Decidim
4
4
  module DecidimAwesome
5
5
  include ActiveSupport::Configurable
6
6
 
7
+ autoload :AwesomeHelpers, "decidim/decidim_awesome/awesome_helpers"
8
+ autoload :RequestMemoizer, "decidim/decidim_awesome/request_memoizer"
7
9
  autoload :Config, "decidim/decidim_awesome/config"
8
10
  autoload :SystemChecker, "decidim/decidim_awesome/system_checker"
9
11
  autoload :ContextAnalyzers, "decidim/decidim_awesome/context_analyzers"
10
12
  autoload :MenuHacker, "decidim/decidim_awesome/menu_hacker"
11
13
  autoload :CustomFields, "decidim/decidim_awesome/custom_fields"
14
+ autoload :VotingManifest, "decidim/decidim_awesome/voting_manifest"
15
+ autoload :Lock, "decidim/decidim_awesome/lock"
16
+ autoload :TranslatedCustomFieldsType, "decidim/decidim_awesome/api/types/translated_custom_fields_type"
17
+ autoload :LocalizedCustomFieldsType, "decidim/decidim_awesome/api/types/localized_custom_fields_type"
18
+ autoload :Authorizator, "decidim/decidim_awesome/authorizator"
12
19
 
13
- # Awesome coms with some components for participatory spaces
20
+ # Awesome comes with some components for participatory spaces
14
21
  # Currently :awesome_map and :awesome_iframe, list them here
15
22
  # if you wan to disable them
16
23
  # NOTE if you have spaces with some of these components already configured
@@ -31,11 +38,11 @@ module Decidim
31
38
  # true => always true but admins can still restrict its scope
32
39
  # false => default false, admins can turn it true
33
40
  # :disabled => false and non available, hidden from admins
34
- config_accessor :allow_images_in_full_editor do
41
+ config_accessor :allow_images_in_editors do
35
42
  false
36
43
  end
37
44
 
38
- config_accessor :allow_images_in_small_editor do
45
+ config_accessor :allow_videos_in_editors do
39
46
  false
40
47
  end
41
48
 
@@ -43,32 +50,89 @@ module Decidim
43
50
  false
44
51
  end
45
52
 
46
- config_accessor :use_markdown_editor do
47
- false
48
- end
49
-
50
- config_accessor :allow_images_in_markdown_editor do
51
- false
52
- end
53
-
54
53
  # used to save forms in localstorage
55
54
  config_accessor :auto_save_forms do
56
- false
55
+ true
57
56
  end
58
57
 
59
58
  # Live chat widget linked to Telegram account or group
59
+ # In the admin side only
60
60
  config_accessor :intergram_for_admins do
61
- false
61
+ true
62
62
  end
63
63
 
64
+ # In the public side only
64
65
  config_accessor :intergram_for_public do
66
+ true
67
+ end
68
+
69
+ # Configuration options to handle different validations in proposals
70
+ # (maybe in the future will apply to other places)
71
+ # Set it to :disabled if you don't want to use this feature
72
+ config_accessor :validate_title_min_length do
73
+ 15
74
+ end
75
+
76
+ config_accessor :validate_title_max_caps_percent do
77
+ 25
78
+ end
79
+
80
+ config_accessor :validate_title_max_marks_together do
81
+ 1
82
+ end
83
+
84
+ config_accessor :validate_title_start_with_caps do
85
+ true
86
+ end
87
+
88
+ config_accessor :validate_body_min_length do
89
+ 15
90
+ end
91
+
92
+ config_accessor :validate_body_max_caps_percent do
93
+ 25
94
+ end
95
+
96
+ config_accessor :validate_body_max_marks_together do
97
+ 1
98
+ end
99
+
100
+ config_accessor :validate_body_start_with_caps do
101
+ true
102
+ end
103
+
104
+ # This transforms the proposal voting into a weighted voting
105
+ # Different processors can be registered and configured in the component's settings
106
+ # Each processor must account for a cell to display how to vote and a cell to display the results
107
+ config_accessor :weighted_proposal_voting do
108
+ true
109
+ end
110
+
111
+ # Additional sorting methods for proposals
112
+ # this setting also stores the selected sorting method in the user's session
113
+ config_accessor :additional_proposal_sortings do
114
+ [
115
+ :supported_first,
116
+ :supported_last,
117
+ :az,
118
+ :za
119
+ ]
120
+ end
121
+
122
+ # Allows admins to limit the amount of pending amendments to (currently) one per proposal before it's accepted.
123
+ # Once a pending amendment is accepted, a new on can be created.
124
+ # Note that this does not limit the number of amendment per se, the admin has to set the limit in the proposal's component configuration.
125
+ # set to :disable to will prevent admins to set an amendment's limit in the proposal's component configuration.
126
+ # if set to "true" the checkbox will be checked by default
127
+ # if set to "false" the checkbox will be unchecked by default
128
+ config_accessor :allow_limiting_amendments do
65
129
  false
66
130
  end
67
131
 
68
- # allows admins to created specific CSS snippets affecting only some specific parts
132
+ # allows admins to created specific CSS snippets affecting only some public frontend specific parts
69
133
  # Valid values differ a little from the previous convention:
70
134
  # :disabled => false and non available, hidden from admins
71
- # Hash => hash of different css text, each key will be used for the contraints
135
+ # Hash => hash of different css text, each key will be used for the constraints
72
136
  # Admins create this hash dynamically but some pre-defined css boxes can be created here as:
73
137
  # {
74
138
  # some_identifier: ".wrapper { background: red; }"
@@ -77,11 +141,23 @@ module Decidim
77
141
  {}
78
142
  end
79
143
 
144
+ # allows admins to created specific CSS snippets affecting only some admin specific parts
145
+ # Valid values differ a little from the previous convention:
146
+ # :disabled => false and non available, hidden from admins
147
+ # Hash => hash of different css text, each key will be used for the constraints
148
+ # Admins create this hash dynamically but some pre-defined css boxes can be created here as:
149
+ # {
150
+ # some_identifier: ".wrapper { background: red; }"
151
+ # }
152
+ config_accessor :scoped_admin_styles do
153
+ {}
154
+ end
155
+
80
156
  # custom fields for proposals using JSON specification:
81
157
  # https://github.com/jsonform/jsonform/wiki
82
158
  # Valid values uses the same structure as :scoped_styles
83
159
  # :disabled => false and non available, hidden from admins
84
- # Hash => hash of different JSON texts, each key will be used for the contraints
160
+ # Hash => hash of different JSON texts, each key will be used for the constraints
85
161
  # Admins can create this hash dynamically but some pre-defined css boxes can be created here as:
86
162
  # {
87
163
  # some_identifier: "{ ... some definition... }"
@@ -90,8 +166,62 @@ module Decidim
90
166
  {}
91
167
  end
92
168
 
169
+ # Same as proposal_custom_fields but for generating private fields than can be read only by admins
170
+ config_accessor :proposal_private_custom_fields do
171
+ {}
172
+ end
173
+
174
+ # whether to add a select to user's profile to allow them to select their preferred time zone
175
+ # if set to false, the select won't be shown but it can still be configured by the admins
176
+ # if set to :disabled the feature will be completely removed
177
+ config_accessor :user_timezone do
178
+ false
179
+ end
180
+
181
+ # Forces the user to authorize using some registered verification flow in order to access the platform
182
+ # if set to an empty array, the user will be able to access the platform without any verification but admins can still enforce it
183
+ # if set to :disabled the feature will be completely removed
184
+ # You can initialize some default verification workflow manifests
185
+ config_accessor :force_authorization_after_login do
186
+ []
187
+ end
188
+
189
+ # By default all methods specified in force_authorization_after_login must be granted in order to access the platform
190
+ # if set to true, the user will be able to access the platform if any of the methods is granted
191
+ config_accessor :force_authorization_with_any_method do
192
+ false
193
+ end
194
+
195
+ # When force_authorization_after_login is enabled, this text will be shown to the user as a help text (ie: add a contact information)
196
+ config_accessor :force_authorization_help_text do
197
+ {}
198
+ end
199
+
200
+ # Allows admins to manually authorize users with the specified methods
201
+ # if set to an empty array, the admins will not be able to authorize users but the system admin can still configure it
202
+ # if set to :disabled the feature will be completely removed
203
+ config_accessor :admins_available_authorizations do
204
+ []
205
+ end
206
+
207
+ # This controllers will be skipped from the authorization check
208
+ # Included automatically: required_authorizations authorizations upload_validations timeouts editor_images locales pages tos
209
+ config_accessor :force_authorization_allowed_controller_names do
210
+ %w(account)
211
+ end
212
+
213
+ # How old must be the private data to be considered expired and therefore presented to the admins for deletion
214
+ config_accessor :private_data_expiration_time do
215
+ 3.months
216
+ end
217
+
218
+ # How long must be the private data prevented from being deleted again after being scheduled for deletion
219
+ config_accessor :lock_time do
220
+ 1.minute
221
+ end
222
+
93
223
  # allows to keep modifications for the main menu
94
- # can return :disabled to completly remove this feature
224
+ # can return :disabled to completely remove this feature
95
225
  # otherwise it should be an array (some overrides can be specified by default):
96
226
  # [
97
227
  # {
@@ -104,16 +234,20 @@ module Decidim
104
234
  []
105
235
  end
106
236
 
107
- # Allows admins to assignate "fake" admins scoped to some admin zones using the
237
+ config_accessor :home_content_block_menu do
238
+ []
239
+ end
240
+
241
+ # Allows admins to assign "fake" admins scoped to some admin zones using the
108
242
  # same scope editor as :scoped_styles, valid values uses the same convention:
109
243
  # :disabled => false and non available, hidden from admins
110
- # Hash => hash of different admin ids, each key will be used for the contraints
244
+ # Hash => hash of different admin ids, each key will be used for the constraints
111
245
  # Admins create this hash dynamically but some pre-defined admin boxes can be created here as:
112
246
  # {
113
247
  # some_identifier: [1234, 5678, 90123]
114
248
  # }
115
249
  #
116
- # To test this feature in development, ensure that config/environmnets/development.rb is configured as:
250
+ # To test this feature in development, ensure that config/environments/development.rb is configured as:
117
251
  # config.action_dispatch.show_exceptions = true
118
252
  # config.action_dispatch.show_detailed_exceptions = false
119
253
  # config.consider_all_requests_local = false
@@ -122,13 +256,13 @@ module Decidim
122
256
  end
123
257
 
124
258
  # Allow to configure custom redirections
125
- # can return :disabled to completly remove this feature
259
+ # can return :disabled to completely remove this feature
126
260
  # You can initialize some default redirection if desired as follows:
127
261
  # {
128
262
  # "/decidim-docs" => { destination: "http://docs.decidim.org", active: true }
129
263
  # }
130
264
  #
131
- # To test this feature in development, ensure that config/environmnets/development.rb is configured as:
265
+ # To test this feature in development, ensure that config/environments/development.rb is configured as:
132
266
  # config.action_dispatch.show_exceptions = true
133
267
  # config.action_dispatch.show_detailed_exceptions = false
134
268
  # config.consider_all_requests_local = false
@@ -174,27 +308,94 @@ module Decidim
174
308
  # additional correspondences between participatory spaces manifests and routes
175
309
  # ie: /admin/assemblies and /admin/assemblies_types are both treated as a "assembly" participatory space in terms of permission scoping
176
310
  # This can be tuned in a initialized if some other hacks over routes are applied
177
- # if a registered participatory space is not listed here then the name manifest will be used as a default route /manifest_name /admin/manifes_name
311
+ # if a registered participatory space is not listed here then the name manifest will be used as a default route /manifest_name /admin/manifest_name
178
312
  config_accessor :participatory_spaces_routes_context do
179
313
  {
180
- # route in admin is diferent than in the frontend: /processes, /admin/participatory_processes
314
+ # route in admin is different than in the frontend: /processes, /admin/participatory_processes
181
315
  participatory_processes: [:participatory_processes, :processes],
182
316
  # both /admin/assemblies and /admin/assemblies_types are considered assemblies
183
317
  assemblies: [:assemblies, :assemblies_types],
184
- # route in admin is diferent than in the frontend: /process_groups, /admin/participatory_process_groups
318
+ # route in admin is different than in the frontend: /process_groups, /admin/participatory_process_groups
185
319
  process_groups: [:processes_groups, :participatory_process_groups]
186
320
  }
187
321
  end
188
322
 
323
+ # If true, enables a new section in "Participants" where to audit all the admin roles that have been enabled/disabled historically in Decidim
324
+ # Set to :disabled to completely remove this feature
325
+ config_accessor :admin_accountability do
326
+ [:participatory_space_roles, :admin_roles]
327
+ end
328
+
329
+ # Roles for which it is necessary to show admin_accountability
330
+ config_accessor :participatory_space_roles do
331
+ [
332
+ "Decidim::AssemblyUserRole",
333
+ "Decidim::ParticipatoryProcessUserRole",
334
+ "Decidim::ConferenceUserRole"
335
+ ]
336
+ end
337
+
338
+ # Which components will be tampered to add the voting registry override
339
+ config_accessor :voting_components do
340
+ [:proposals, :reporting_proposals]
341
+ end
342
+
343
+ # A URL where to obtain the translations for the FormBuilder component
344
+ # you can a custom place if you are worried about the CDN geolocation
345
+ # Download them from https://github.com/kevinchappell/formBuilder-languages
346
+ config_accessor :form_builder_langs_location do
347
+ "https://cdn.jsdelivr.net/npm/formbuilder-languages@1.1.0/"
348
+ end
349
+
350
+ # Public: Stores an instance of ContentBlockRegistry
351
+ def self.voting_registry
352
+ @voting_registry ||= Decidim::ManifestRegistry.new("decidim_awesome/voting")
353
+ end
354
+
189
355
  #
190
356
  # HELPERS
191
357
  #
192
358
  # pass a single config var or an array of them
193
359
  # any non disabled match will return as true
194
- def self.enabled?(config_vars)
195
- config_vars = [config_vars] unless config_vars.respond_to?(:detect)
360
+ def self.possible_additional_proposal_sortings
361
+ return [] unless additional_proposal_sortings.is_a?(Array)
362
+
363
+ @possible_additional_proposal_sortings ||= additional_proposal_sortings.filter_map do |sort|
364
+ next unless sort.to_sym.in?([:az, :za, :supported_first, :supported_last])
196
365
 
197
- config_vars.detect do |item|
366
+ sort.to_s
367
+ end
368
+ end
369
+
370
+ # appends to a hash a new value in a specified position so that the hash becomes:
371
+ # { a: 1, b: 2, c: 3 } => append_hash(hash, :b, :d, 4) => { a: 1, b: 2, d: 4, c: 3 }
372
+ # if key is not found then it will be inserted at the end
373
+ def self.hash_append!(hash, after_key, key, value)
374
+ insert_at = hash.to_a.index(hash.assoc(after_key))
375
+ insert_at = insert_at.nil? ? hash.size : insert_at + 1
376
+ hash.replace(hash.to_a.insert(insert_at, [key, value]).to_h)
377
+ end
378
+
379
+ # prepends to a hash a new value in a specified position so that the hash becomes:
380
+ # { a: 1, b: 2, c: 3 } => prepend_hash(hash, :b, :d, 4) => { a: 1, d: 4, b: 2, c: 3 }
381
+ # if key is not found then it will be inserted at the beginning
382
+ def self.hash_prepend!(hash, before_key, key, value)
383
+ insert_at = hash.to_a.index(hash.assoc(before_key))
384
+ insert_at = 0 if insert_at.nil?
385
+ hash.replace(hash.to_a.insert(insert_at, [key, value]).to_h)
386
+ end
387
+
388
+ def self.collation_for(locale)
389
+ @collation_for ||= {}
390
+ @collation_for[locale] ||= ["#{locale}-x-icu", "#{locale[0..1]}%"].filter_map do |loc|
391
+ sql = ApplicationRecord.sanitize_sql(["SELECT collname FROM pg_collation WHERE collname LIKE ? LIMIT 1", loc])
392
+ res = ActiveRecord::Base.connection.execute(sql).first
393
+ res["collname"] if res
394
+ end.first
395
+ end
396
+
397
+ def self.enabled?(*config_vars)
398
+ config_vars.any? do |item|
198
399
  next unless config.has_key?(item.to_sym)
199
400
 
200
401
  config.send(item) != :disabled
@@ -205,10 +406,16 @@ module Decidim
205
406
  @registered_components ||= []
206
407
  end
207
408
 
208
- # Wrapp component registering to register component later, after initializer
409
+ # Wrap registered components to register it later, after initializing
209
410
  # so we can honor disabled_components config
210
411
  def self.register_component(manifest, &block)
211
412
  registered_components << [manifest, block]
212
413
  end
414
+
415
+ # version 0.12 is compatible only with decidim 0.29
416
+ def self.legacy_version?
417
+ # Decidim.version[0..3] == "0.29"
418
+ false
419
+ end
213
420
  end
214
421
  end
@@ -6,40 +6,46 @@ module Decidim
6
6
  # add a global helper with awesome configuration
7
7
  module DecidimAwesome
8
8
  module AwesomeHelpers
9
+ include RequestMemoizer
10
+
9
11
  # Returns the normalized config for an Organization and the current url
10
12
  def awesome_config_instance
11
- return @awesome_config_instance if @awesome_config_instance
12
-
13
- # if already created in the middleware, reuse it as it might have additional constraints
14
- @awesome_config_instance = request.env["decidim_awesome.current_config"]
15
- unless @awesome_config_instance.is_a? Config
16
- @awesome_config_instance = Config.new request.env["decidim.current_organization"]
17
- @awesome_config_instance.context_from_request request
13
+ memoize("current_config") do
14
+ config = Config.new(request.env["decidim.current_organization"])
15
+ config.context_from_request(request)
16
+ config
18
17
  end
19
- @awesome_config_instance
20
18
  end
21
19
 
22
20
  def awesome_config
23
- @awesome_config ||= awesome_config_instance.config
21
+ memoize("awesome_config") do
22
+ awesome_config_instance.config
23
+ end
24
24
  end
25
25
 
26
26
  def javascript_config_vars
27
- awesome_config.except(:scoped_styles, :proposal_custom_fields, :scoped_admins).to_json.html_safe
27
+ memoize("javascript_config_vars") do
28
+ awesome_config.slice(:allow_images_in_proposals, :allow_images_in_editors, :allow_videos_in_editors, :auto_save_forms).to_json.html_safe
29
+ end
28
30
  end
29
31
 
30
32
  def show_public_intergram?
31
- return unless awesome_config[:intergram_for_public]
33
+ return false unless awesome_config[:intergram_for_public]
32
34
  return true unless awesome_config[:intergram_for_public_settings][:require_login]
33
35
 
34
36
  user_signed_in?
35
37
  end
36
38
 
37
39
  def unfiltered_awesome_config
38
- @unfiltered_awesome_config ||= awesome_config_instance.unfiltered_config
40
+ memoize("unfiltered_awesome_config") do
41
+ awesome_config_instance.unfiltered_config
42
+ end
39
43
  end
40
44
 
41
45
  def organization_awesome_config
42
- @organization_awesome_config ||= awesome_config_instance.organization_config
46
+ memoize("organization_awesome_config") do
47
+ awesome_config_instance.organization_config
48
+ end
43
49
  end
44
50
 
45
51
  def awesome_version
@@ -47,18 +53,52 @@ module Decidim
47
53
  end
48
54
 
49
55
  # Collects all CSS that is applied in the current URL context
50
- def awesome_custom_styles
51
- @awesome_custom_styles ||= awesome_config_instance.collect_sub_configs_values("scoped_style")
56
+ def awesome_scoped_styles
57
+ memoize("awesome_scoped_styles") do
58
+ awesome_config_instance.collect_sub_configs_values("scoped_style")
59
+ end
60
+ end
61
+
62
+ # Collects all CSS that is applied in the current URL context
63
+ def awesome_scoped_admin_styles
64
+ memoize("awesome_scoped_admin_styles") do
65
+ awesome_config_instance.collect_sub_configs_values("scoped_admin_style")
66
+ end
52
67
  end
53
68
 
54
69
  # Collects all proposal custom fields that is applied in the current URL context
55
70
  def awesome_scoped_admins
56
- @awesome_scoped_admins ||= awesome_config_instance.collect_sub_configs_values("scoped_admin")
71
+ memoize("awesome_scoped_admins") do
72
+ awesome_config_instance.collect_sub_configs_values("scoped_admin")
73
+ end
57
74
  end
58
75
 
59
76
  # Collects all proposal custom fields that is applied in the current URL context
60
77
  def awesome_proposal_custom_fields
61
- @awesome_proposal_custom_fields ||= awesome_config_instance.collect_sub_configs_values("proposal_custom_field")
78
+ memoize("awesome_proposal_custom_fields") do
79
+ awesome_config_instance.collect_sub_configs_values("proposal_custom_field")
80
+ end
81
+ end
82
+
83
+ def awesome_proposal_private_custom_fields
84
+ memoize("awesome_proposal_private_custom_fields") do
85
+ awesome_config_instance.collect_sub_configs_values("proposal_private_custom_field")
86
+ end
87
+ end
88
+
89
+ # this will check if the current component has been configured to use a custom voting manifest
90
+ def awesome_voting_manifest_for(component)
91
+ memoize("awesome_voting_manifest_for_#{component.id}") do
92
+ DecidimAwesome.voting_registry.find(component.settings.try(:awesome_voting_manifest))
93
+ end
94
+ end
95
+
96
+ # Retrives all the "admins_available_authorizations" for the user along with other possible authorizations
97
+ # returns an instance of Decidim::DecidimAwesome::Authorizator
98
+ def awesome_authorizations_for(user)
99
+ memoize("awesome_authorizations_for_#{user.id}") do
100
+ Authorizator.new(user, awesome_config[:admins_available_authorizations])
101
+ end
62
102
  end
63
103
 
64
104
  def version_prefix
@@ -1,30 +1,105 @@
1
1
  decidim-admin:
2
2
  /app/views/layouts/decidim/admin/_header.html.erb:
3
- decidim-0.25: 1aff077428830b12306d6c42e6b37216
3
+ decidim-0.28: 25bf272ac5a70eb8a975f4889fa46095
4
+ decidim-0.28.c4d3889: 6391da1f357f9b260622ddd404a47987
5
+ decidim-0.28.1: b2ae319d5bcf43954bbe0edb9a4e3ffb
6
+ decidim-0.29.1: b2ae319d5bcf43954bbe0edb9a4e3ffb
4
7
  decidim-core:
8
+ /app/packs/entrypoints/decidim_editor.js:
9
+ decidim-0.28: beddd77e3893fd0b7cd2679a7ee6e536
10
+ decidim-0.29.1: beddd77e3893fd0b7cd2679a7ee6e536
11
+ /app/packs/src/decidim/editor/index.js:
12
+ decidim-0.28: 90dfac3acae97202dec083955e2249e4
13
+ decidim-0.29.1: 90dfac3acae97202dec083955e2249e4
14
+ /app/validators/etiquette_validator.rb:
15
+ decidim-0.28: e9ad91d824ad48ac2075a088a0d21349
16
+ decidim-0.29.1: e9ad91d824ad48ac2075a088a0d21349
5
17
  /app/views/layouts/decidim/_head.html.erb:
6
- decidim-0.25: eb490aa482477ff70f541d20cddec773
7
- decidim-0.26: 0927fc81123addec70853c2e7986c538
8
- /app/packs/src/decidim/editor.js:
9
- decidim-0.25: 742698903a30034094c01aecaca6de84
10
- decidim-0.26: 651830d87aeeeff39316a787fc70d461
18
+ decidim-0.28: e51e400a98821f4ca0fff26ebd4d0741
19
+ decidim-0.28.1: 8ac1af4e223d9a7a98136760b6194a75
20
+ decidim-0.28.4: 59abccd8b1c5315d5c0b772be0c26d45
21
+ decidim-0.29.1: 8ac1af4e223d9a7a98136760b6194a75
22
+ /app/views/layouts/decidim/_decidim_javascript.html.erb:
23
+ decidim-0.28: dc60ed8abf7649611f18804b67b1408d
24
+ decidim-0.29.1: 8d51790de859ee66f305d9111cdfb324
11
25
  /app/presenters/decidim/menu_presenter.rb:
12
- decidim-0.25: f3b05daf279f909f8b3b628658dd5810
26
+ decidim-0.28: 220c8865a43bd8b7b12a7f926f7f4324
27
+ decidim-0.29.1: 220c8865a43bd8b7b12a7f926f7f4324
13
28
  /app/presenters/decidim/menu_item_presenter.rb:
14
- decidim-0.25: 860ffb160ec5f8552cc2855a6a47851b
29
+ decidim-0.28: 4e4cd366a8a313079ac5fab466bd3679
30
+ decidim-0.28.4: f04f0f5112499a86079119d5f9ae8487
31
+ decidim-0.29.1: f04f0f5112499a86079119d5f9ae8487
15
32
  /app/helpers/decidim/amendments_helper.rb:
16
- decidim-0.25: 63532a04fcf07cf92b789833a9421416
17
- decidim-0.26: 636943ccb2e994fe0124dc87e72e49e9
33
+ decidim-0.28: df28f9321d1bc07757746ed608274e3d
34
+ decidim-0.29.1: 36072334cba7a58841a6b2fb007d24a6
35
+ /app/presenters/decidim/admin_log/component_presenter.rb:
36
+ decidim-0.28: 77e80d527727acdf117a0c4517a69a7c
37
+ decidim-0.29.1: 77e80d527727acdf117a0c4517a69a7c
38
+ /app/forms/decidim/account_form.rb:
39
+ decidim-0.28: 11a022ae6ae18ad89da168bec4207935
40
+ decidim-0.29.1: 11a022ae6ae18ad89da168bec4207935
41
+ /app/commands/decidim/update_account.rb:
42
+ decidim-0.28: 363872116fb99372c046b7394d618333
43
+ decidim-0.29.1: d24090fdd9358c38e6e15c4607a78e18
44
+ /app/views/decidim/account/show.html.erb:
45
+ decidim-0.28: a0647f1740d696018f73ec8db8c7587a
46
+ decidim-0.29.1: f13218e2358a2d611996c2a197c0de25
18
47
  decidim-proposals:
19
- /app/forms/decidim/proposals/proposal_wizard_create_step_form.rb:
20
- decidim-0.24: db69edd0ba8ffa3965a5c44a6bfaba8d
48
+ /lib/decidim/proposals/proposal_serializer.rb:
49
+ decidim-0.28: bbd33bdc60defb734b3fb814666bb622
50
+ decidim-0.28.1: 7bd5cadb1127a4e81bd5f333670351bd
51
+ decidim-0.28.2: ab146c54850a4486d96cf50211679671
52
+ decidim-0.29.1: 58915ff3a7528463587d3762a93ff51b
53
+ /lib/decidim/api/proposal_type.rb:
54
+ decidim-0.26: e38e4875e408ec4f658e28725c5a94d4
55
+ decidim-0.29.1: 25d61a67a4b969ac8c472237d3f64b66
56
+ /app/forms/decidim/proposals/proposal_form.rb:
57
+ decidim-0.29.1: 0b19bfeb4f7bd15cd378a69c3935de6b
58
+ /app/forms/decidim/proposals/admin/proposal_form.rb:
59
+ decidim-0.28: 422632395194b19beed4c7c65f127ff5
60
+ decidim-0.29.1: 422632395194b19beed4c7c65f127ff5
21
61
  /app/helpers/decidim/proposals/application_helper.rb:
22
- decidim-0.24: c5f99f5fa7de9a6e45776983330e9d73
23
- decidim-0.26: 216c974bc425393c18b01bfc4eed4f0b
24
- /app/views/decidim/proposals/collaborative_drafts/show.html.erb:
25
- decidim-0.24: 2a7e0a4c65361f238fd1b917f39c8642
26
- /app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb:
27
- decidim-0.24: 6f717555a20e2ab3f555003c337d3003
28
- decidim-0.26: 97fa28043a26fc2940d30d38d9a7369b
62
+ decidim-0.28: 89df14045349cc2eaaec78f79f6140b1
63
+ decidim-0.28.2: 317b0347528e697fa405a792bcfa3db8
64
+ decidim-0.29.1: 940488938f644b63a2ef6177f3757ca2
65
+ /app/controllers/decidim/proposals/proposal_votes_controller.rb:
66
+ decidim-0.28: f983e72c1ee8d31222d537533c762cd2
67
+ decidim-0.29.1: f983e72c1ee8d31222d537533c762cd2
29
68
  /app/views/decidim/proposals/admin/proposals/_form.html.erb:
30
- decidim-0.25: 90a04984d4269398b7cd21aa33763a1f
69
+ decidim-0.28: 824463b320562c15fdb530bfebbf2f0f
70
+ decidim-0.29.1: 667c2ef6ffbf3369f59bd1e8eb0ba421
71
+ /app/views/decidim/proposals/proposals/_vote_button.html.erb:
72
+ decidim-0.27: 3d087d807238f33b71e6b385db8ffc70
73
+ decidim-0.29.1: 06dd4c9bf7fc4953fc330b7ba081b2f6
74
+ /app/views/decidim/proposals/proposals/_votes_count.html.erb:
75
+ decidim-0.27: 6e663e5c82c27291b63f29f346df8737
76
+ decidim-0.29.1: 6e663e5c82c27291b63f29f346df8737
77
+ /app/cells/decidim/proposals/proposal_l_cell.rb:
78
+ decidim-0.27.4: 5e111ed30bca9475bed8247e5e056747
79
+ decidim-0.28.3: 6d955d56d9d9f0cba46ba157fa923cfc
80
+ decidim-0.29.1: e38d1cd0ea6c7f14c8f8b56d3ceb0db5
81
+ /app/cells/decidim/proposals/proposal_metadata_cell.rb:
82
+ decidim-0.26: eedfd7f813aedbd819b519e03ae4a680
83
+ decidim-0.29.1: 6859b77805227c4cf71ae0a1351a4551
84
+ /app/commands/decidim/proposals/create_proposal.rb:
85
+ decidim-0.28: 95c7bba44dbe477abdfbf450b7eee258
86
+ decidim-0.29.1: 02a6f54a032457e68be580e6a539c47b
87
+ /app/commands/decidim/proposals/create_collaborative_draft.rb:
88
+ decidim-0.28: ab3f937f15c6ed945e776fef34b18abf
89
+ decidim-0.29.1: ab3f937f15c6ed945e776fef34b18abf
90
+ /app/commands/decidim/proposals/admin/create_proposal.rb:
91
+ decidim-0.28: aa0c093cb10b3ccfb046edd0018eae1d
92
+ decidim-0.28.3: 8d73a8c852f473c118f978ddfab323b1
93
+ decidim-0.29.1: 837d86d2eb1f2d7579a0cef82d68caf7
94
+ /app/commands/decidim/proposals/update_proposal.rb:
95
+ decidim-0.28: 1cc15b946512f4d5a54d1cf5aea8450a
96
+ decidim-0.29.1: e81268a1f9b3770387944d44d7704291
97
+ /app/commands/decidim/proposals/update_collaborative_draft.rb:
98
+ decidim-0.28: 7df5266382bd57db72832da391fe7e11
99
+ decidim-0.29.1: 7df5266382bd57db72832da391fe7e11
100
+ /app/commands/decidim/proposals/admin/update_proposal.rb:
101
+ decidim-0.28: 67b691b6d1ce61cb198592ac25f76f74
102
+ decidim-0.29.1: 67b691b6d1ce61cb198592ac25f76f74
103
+ /app/presenters/decidim/proposals/proposal_presenter.rb:
104
+ decidim-0.28: 72910541010305f25baf297f4a58497b
105
+ decidim-0.29.1: bbc7cee02125c1f8cf909219e48af337