decidim-elections 0.27.4 → 0.28.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (456) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +60 -3
  3. data/app/cells/decidim/elections/content_blocks/related_elections_cell.rb +13 -0
  4. data/app/cells/decidim/elections/election_cell.rb +7 -2
  5. data/app/cells/decidim/elections/election_g_cell.rb +23 -0
  6. data/app/cells/decidim/elections/election_metadata_cell.rb +57 -0
  7. data/app/cells/decidim/elections/election_preview/show.erb +24 -24
  8. data/app/cells/decidim/elections/election_results/progress_bar.erb +6 -7
  9. data/app/cells/decidim/elections/election_results/show.erb +36 -33
  10. data/app/cells/decidim/elections/election_s_cell.rb +10 -0
  11. data/app/cells/decidim/elections/election_vote_cta/show.erb +14 -26
  12. data/app/cells/decidim/elections/election_vote_cta_cell.rb +0 -9
  13. data/app/cells/decidim/elections/highlighted_elections_for_component/show.erb +18 -0
  14. data/app/cells/decidim/elections/highlighted_elections_for_component_cell.rb +50 -0
  15. data/app/cells/decidim/elections/remaining_time_callout/show.erb +1 -3
  16. data/app/cells/decidim/elections/voting_step_navigation/show.erb +21 -25
  17. data/app/cells/decidim/elections/voting_step_navigation_cell.rb +2 -2
  18. data/app/cells/decidim/votings/content_block_cell.rb +5 -1
  19. data/app/cells/decidim/votings/content_blocks/hero_cell.rb +53 -0
  20. data/app/cells/decidim/votings/content_blocks/hero_settings_form_cell.rb +15 -0
  21. data/app/cells/decidim/votings/content_blocks/highlighted_votings_cell.rb +12 -21
  22. data/app/cells/decidim/votings/content_blocks/highlighted_votings_settings_form/show.erb +1 -1
  23. data/app/cells/decidim/votings/content_blocks/main_data_cell.rb +34 -0
  24. data/app/cells/decidim/votings/content_blocks/metrics_cell.rb +17 -0
  25. data/app/cells/decidim/votings/content_blocks/polling_stations/show.erb +21 -0
  26. data/app/cells/decidim/votings/content_blocks/polling_stations_cell.rb +31 -0
  27. data/app/cells/decidim/votings/content_blocks/statistics_cell.rb +18 -0
  28. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/show.erb +14 -13
  29. data/app/cells/decidim/votings/polling_officers/polling_officers_picker_cell.rb +19 -16
  30. data/app/cells/decidim/votings/polling_station_closure_certificate/show.erb +5 -7
  31. data/app/cells/decidim/votings/polling_station_closure_recount/show.erb +55 -59
  32. data/app/cells/decidim/votings/voting_cell.rb +7 -2
  33. data/app/cells/decidim/votings/voting_dropdown_metadata_cell.rb +19 -0
  34. data/app/cells/decidim/votings/voting_g_cell.rb +19 -0
  35. data/app/cells/decidim/votings/voting_map/show.erb +16 -0
  36. data/app/cells/decidim/votings/voting_map_cell.rb +28 -0
  37. data/app/cells/decidim/votings/voting_metadata_cell.rb +66 -0
  38. data/app/cells/decidim/votings/voting_s_cell.rb +10 -0
  39. data/app/commands/decidim/elections/admin/add_user_as_trustee.rb +5 -5
  40. data/app/commands/decidim/elections/admin/create_answer.rb +0 -1
  41. data/app/commands/decidim/elections/admin/create_election.rb +0 -1
  42. data/app/commands/decidim/elections/admin/destroy_answer.rb +0 -1
  43. data/app/commands/decidim/elections/admin/destroy_election.rb +0 -1
  44. data/app/commands/decidim/elections/admin/end_vote.rb +2 -2
  45. data/app/commands/decidim/elections/admin/import_proposals_to_elections.rb +1 -1
  46. data/app/commands/decidim/elections/admin/publish_election.rb +1 -1
  47. data/app/commands/decidim/elections/admin/publish_results.rb +2 -2
  48. data/app/commands/decidim/elections/admin/report_missing_trustee.rb +2 -2
  49. data/app/commands/decidim/elections/admin/setup_election.rb +2 -2
  50. data/app/commands/decidim/elections/admin/start_key_ceremony.rb +2 -2
  51. data/app/commands/decidim/elections/admin/start_tally.rb +2 -2
  52. data/app/commands/decidim/elections/admin/start_vote.rb +2 -2
  53. data/app/commands/decidim/elections/admin/unpublish_election.rb +1 -1
  54. data/app/commands/decidim/elections/admin/update_answer.rb +0 -1
  55. data/app/commands/decidim/elections/admin/update_answer_selection.rb +1 -1
  56. data/app/commands/decidim/elections/admin/update_election.rb +0 -1
  57. data/app/commands/decidim/elections/trustee_zone/update_election_bulletin_board_status.rb +3 -3
  58. data/app/commands/decidim/elections/voter/cast_vote.rb +1 -1
  59. data/app/commands/decidim/elections/voter/update_vote_status.rb +2 -2
  60. data/app/commands/decidim/votings/admin/create_ballot_style.rb +1 -1
  61. data/app/commands/decidim/votings/admin/create_monitoring_committee_member.rb +4 -4
  62. data/app/commands/decidim/votings/admin/create_polling_officer.rb +4 -4
  63. data/app/commands/decidim/votings/admin/create_polling_station.rb +1 -1
  64. data/app/commands/decidim/votings/admin/create_voting.rb +1 -1
  65. data/app/commands/decidim/votings/admin/destroy_ballot_style.rb +1 -1
  66. data/app/commands/decidim/votings/admin/destroy_monitoring_committee_member.rb +1 -1
  67. data/app/commands/decidim/votings/admin/destroy_polling_officer.rb +1 -1
  68. data/app/commands/decidim/votings/admin/manage_polling_station.rb +1 -1
  69. data/app/commands/decidim/votings/admin/monitoring_committee_validate_polling_station_closure.rb +1 -1
  70. data/app/commands/decidim/votings/admin/update_ballot_style.rb +1 -1
  71. data/app/commands/decidim/votings/admin/update_voting.rb +1 -1
  72. data/app/commands/decidim/votings/census/admin/create_dataset.rb +2 -2
  73. data/app/commands/decidim/votings/census/admin/create_datum.rb +3 -3
  74. data/app/commands/decidim/votings/census/admin/destroy_dataset.rb +1 -1
  75. data/app/commands/decidim/votings/census/admin/increment_dataset_processed_rows.rb +1 -1
  76. data/app/commands/decidim/votings/census/admin/launch_access_codes_generation.rb +1 -1
  77. data/app/commands/decidim/votings/census/admin/update_dataset.rb +1 -1
  78. data/app/commands/decidim/votings/certify_polling_station_closure.rb +1 -2
  79. data/app/commands/decidim/votings/create_polling_station_closure.rb +1 -1
  80. data/app/commands/decidim/votings/create_polling_station_results.rb +1 -1
  81. data/app/commands/decidim/votings/send_access_code.rb +5 -1
  82. data/app/commands/decidim/votings/sign_polling_station_closure.rb +2 -2
  83. data/app/commands/decidim/votings/voter/in_person_vote.rb +1 -1
  84. data/app/constraints/decidim/votings/current_voting.rb +1 -1
  85. data/app/controllers/concerns/decidim/elections/content_security_policy.rb +23 -0
  86. data/app/controllers/concerns/decidim/elections/has_vote_flow.rb +2 -2
  87. data/app/controllers/concerns/decidim/votings/admin/voting_admin.rb +1 -1
  88. data/app/controllers/concerns/decidim/votings/needs_voting.rb +1 -1
  89. data/app/controllers/decidim/elections/admin/answers_controller.rb +9 -10
  90. data/app/controllers/decidim/elections/admin/application_controller.rb +1 -0
  91. data/app/controllers/decidim/elections/admin/elections_controller.rb +7 -7
  92. data/app/controllers/decidim/elections/admin/feedback_forms_controller.rb +2 -2
  93. data/app/controllers/decidim/elections/admin/proposals_imports_controller.rb +3 -3
  94. data/app/controllers/decidim/elections/admin/questions_controller.rb +7 -7
  95. data/app/controllers/decidim/elections/admin/steps_controller.rb +4 -4
  96. data/app/controllers/decidim/elections/admin/trustees_participatory_spaces_controller.rb +2 -2
  97. data/app/controllers/decidim/elections/application_controller.rb +1 -0
  98. data/app/controllers/decidim/elections/elections_controller.rb +5 -2
  99. data/app/controllers/decidim/elections/trustee_zone/application_controller.rb +1 -0
  100. data/app/controllers/decidim/elections/trustee_zone/elections_controller.rb +2 -2
  101. data/app/controllers/decidim/elections/trustee_zone/trustees_controller.rb +3 -3
  102. data/app/controllers/decidim/elections/votes_controller.rb +19 -13
  103. data/app/controllers/decidim/votings/admin/monitoring_committee_election_results_controller.rb +11 -3
  104. data/app/controllers/decidim/votings/admin/monitoring_committee_members_controller.rb +3 -3
  105. data/app/controllers/decidim/votings/admin/monitoring_committee_polling_station_closures_controller.rb +3 -3
  106. data/app/controllers/decidim/votings/admin/polling_officers_controller.rb +3 -3
  107. data/app/controllers/decidim/votings/admin/polling_stations_controller.rb +3 -4
  108. data/app/controllers/decidim/votings/admin/voting_attachment_collections_controller.rb +5 -0
  109. data/app/controllers/decidim/votings/admin/voting_attachments_controller.rb +5 -0
  110. data/app/controllers/decidim/votings/admin/voting_publications_controller.rb +25 -0
  111. data/app/controllers/decidim/votings/admin/votings_controller.rb +2 -26
  112. data/app/controllers/decidim/votings/admin/votings_landing_page_content_blocks_controller.rb +1 -5
  113. data/app/controllers/decidim/votings/admin/votings_landing_page_controller.rb +4 -7
  114. data/app/controllers/decidim/votings/census/admin/census_controller.rb +2 -2
  115. data/app/controllers/decidim/votings/polling_officer_zone/closures_controller.rb +12 -12
  116. data/app/controllers/decidim/votings/polling_officer_zone/in_person_votes_controller.rb +17 -10
  117. data/app/controllers/decidim/votings/polling_officer_zone/polling_officers_controller.rb +1 -1
  118. data/app/controllers/decidim/votings/votings_controller.rb +7 -9
  119. data/app/events/decidim/elections/election_published_event.rb +1 -1
  120. data/app/events/decidim/elections/trustees/notify_new_trustee_event.rb +1 -1
  121. data/app/events/decidim/elections/trustees/notify_trustee_new_election_event.rb +1 -1
  122. data/app/events/decidim/elections/votes/vote_accepted_event.rb +1 -1
  123. data/app/events/decidim/votings/polling_officers/polling_station_assigned_event.rb +1 -1
  124. data/app/forms/decidim/elections/admin/answer_form.rb +1 -1
  125. data/app/forms/decidim/elections/admin/election_form.rb +1 -1
  126. data/app/forms/decidim/votings/admin/publish_results_form.rb +5 -5
  127. data/app/forms/decidim/votings/admin/voting_form.rb +1 -1
  128. data/app/forms/decidim/votings/admin/{polling_officer_form.rb → voting_user_role_form.rb} +1 -1
  129. data/app/forms/decidim/votings/census/frontend_fields.rb +1 -1
  130. data/app/forms/decidim/votings/census/in_person_fields.rb +8 -4
  131. data/app/forms/decidim/votings/closure_result_form.rb +2 -2
  132. data/app/helpers/decidim/elections/admin/trustees_participatory_spaces_helper.rb +4 -2
  133. data/app/helpers/decidim/elections/application_helper.rb +8 -0
  134. data/app/helpers/decidim/votings/map_helper.rb +22 -0
  135. data/app/helpers/decidim/votings/votings_helper.rb +33 -0
  136. data/app/jobs/decidim/votings/census/admin/create_datum_job.rb +1 -1
  137. data/app/jobs/decidim/votings/census/admin/generate_access_codes_job.rb +2 -2
  138. data/app/mailers/decidim/votings/access_code_mailer.rb +1 -1
  139. data/app/mailers/decidim/votings/census/export_mailer.rb +1 -1
  140. data/app/models/decidim/elections/trustee.rb +2 -2
  141. data/app/models/decidim/votings/ballot_style.rb +1 -1
  142. data/app/models/decidim/votings/polling_officer.rb +2 -2
  143. data/app/models/decidim/votings/polling_station.rb +1 -1
  144. data/app/packs/entrypoints/decidim_elections.js +12 -0
  145. data/app/packs/entrypoints/decidim_elections_admin.js +6 -0
  146. data/app/packs/entrypoints/decidim_votings.js +11 -0
  147. data/app/packs/entrypoints/decidim_votings_admin.js +10 -0
  148. data/app/packs/src/decidim/elections/admin/pending_action.js +10 -7
  149. data/app/packs/src/decidim/elections/admin/trustees_process.js +107 -104
  150. data/app/packs/src/decidim/elections/admin/vote_statistics.js +6 -3
  151. data/app/packs/src/decidim/elections/broken_promises_handler.js +9 -7
  152. data/app/packs/src/decidim/elections/election_log.js +126 -128
  153. data/app/packs/src/decidim/elections/trustee/key_ceremony.js +138 -139
  154. data/app/packs/src/decidim/elections/trustee/tally.js +122 -118
  155. data/app/packs/src/decidim/elections/trustee/trustee_zone.js +9 -7
  156. data/app/packs/src/decidim/elections/voter/casting-vote.js +9 -7
  157. data/app/packs/src/decidim/elections/voter/new-vote.js +92 -71
  158. data/app/packs/src/decidim/elections/voter/setup-preview.js +0 -4
  159. data/app/packs/src/decidim/elections/voter/setup-vote.js +0 -4
  160. data/app/packs/src/decidim/elections/voter/verify-vote.js +11 -6
  161. data/app/packs/src/decidim/elections/voter/vote_questions.component.js +74 -28
  162. data/app/packs/src/decidim/votings/admin/polling_officers_picker.js +16 -31
  163. data/app/packs/src/decidim/votings/admin/polling_stations_form.js +4 -1
  164. data/app/packs/src/decidim/votings/admin/{polling_officers_form.js → voting_user_role_form.js} +1 -1
  165. data/app/packs/src/decidim/votings/in-person-vote.js +4 -4
  166. data/app/packs/src/decidim/votings/polling_officer_zone/edit-closure.js +4 -4
  167. data/app/packs/src/decidim/votings/polling_officer_zone/in-person-vote.js +1 -1
  168. data/app/packs/src/decidim/votings/polling_officer_zone/new-closure.js +6 -8
  169. data/app/packs/stylesheets/decidim/elections/elections.scss +200 -6
  170. data/app/packs/stylesheets/decidim/votings/admin/votings/_ballot-styles.scss +3 -3
  171. data/app/packs/stylesheets/decidim/votings/admin/votings/_monitoring-committee-polling-station-closures.scss +2 -2
  172. data/app/packs/stylesheets/decidim/votings/admin/votings/_results.scss +1 -1
  173. data/app/packs/stylesheets/decidim/votings/admin/votings.scss +20 -0
  174. data/app/packs/stylesheets/decidim/votings/votings.scss +53 -2
  175. data/app/permissions/decidim/votings/admin/permissions.rb +2 -2
  176. data/app/presenters/decidim/elections/admin_log/election_presenter.rb +2 -2
  177. data/app/presenters/decidim/elections/admin_log/trustee_presenter.rb +2 -2
  178. data/app/presenters/decidim/elections/trustee_presenter.rb +1 -1
  179. data/app/presenters/decidim/votings/admin_log/ballot_style_presenter.rb +2 -2
  180. data/app/presenters/decidim/votings/admin_log/monitoring_committee_member_presenter.rb +2 -2
  181. data/app/presenters/decidim/votings/admin_log/polling_officer_presenter.rb +2 -2
  182. data/app/presenters/decidim/votings/admin_log/polling_station_presenter.rb +2 -2
  183. data/app/presenters/decidim/votings/admin_log/voting_presenter.rb +2 -2
  184. data/app/presenters/decidim/votings/census/admin_log/dataset_presenter.rb +2 -2
  185. data/app/presenters/decidim/votings/voting_stats_presenter.rb +3 -42
  186. data/app/services/decidim/votings/census/access_codes_exporter.rb +1 -1
  187. data/app/services/decidim/votings/census_vote_flow.rb +3 -3
  188. data/app/views/decidim/elections/admin/answers/_form.html.erb +16 -18
  189. data/app/views/decidim/elections/admin/answers/edit.html.erb +21 -5
  190. data/app/views/decidim/elections/admin/answers/index.html.erb +33 -18
  191. data/app/views/decidim/elections/admin/answers/new.html.erb +21 -5
  192. data/app/views/decidim/elections/admin/elections/_form.html.erb +20 -19
  193. data/app/views/decidim/elections/admin/elections/edit.html.erb +16 -6
  194. data/app/views/decidim/elections/admin/elections/index.html.erb +72 -70
  195. data/app/views/decidim/elections/admin/elections/new.html.erb +16 -6
  196. data/app/views/decidim/elections/admin/proposals_imports/new.html.erb +36 -21
  197. data/app/views/decidim/elections/admin/questions/_form.html.erb +18 -20
  198. data/app/views/decidim/elections/admin/questions/edit.html.erb +20 -6
  199. data/app/views/decidim/elections/admin/questions/index.html.erb +50 -49
  200. data/app/views/decidim/elections/admin/questions/new.html.erb +20 -5
  201. data/app/views/decidim/elections/admin/steps/_create_election.html.erb +41 -36
  202. data/app/views/decidim/elections/admin/steps/_created.html.erb +2 -2
  203. data/app/views/decidim/elections/admin/steps/_key_ceremony.html.erb +7 -7
  204. data/app/views/decidim/elections/admin/steps/_key_ceremony_ended.html.erb +2 -2
  205. data/app/views/decidim/elections/admin/steps/_results_published.html.erb +4 -4
  206. data/app/views/decidim/elections/admin/steps/_tally_ended.html.erb +4 -4
  207. data/app/views/decidim/elections/admin/steps/_tally_started.html.erb +11 -11
  208. data/app/views/decidim/elections/admin/steps/_vote.html.erb +3 -3
  209. data/app/views/decidim/elections/admin/steps/_vote_ended.html.erb +2 -2
  210. data/app/views/decidim/elections/admin/steps/_vote_stats.html.erb +2 -2
  211. data/app/views/decidim/elections/admin/steps/index.html.erb +44 -37
  212. data/app/views/decidim/elections/admin/trustees_participatory_spaces/_form.html.erb +10 -14
  213. data/app/views/decidim/elections/admin/trustees_participatory_spaces/index.html.erb +57 -60
  214. data/app/views/decidim/elections/admin/trustees_participatory_spaces/new.html.erb +16 -5
  215. data/app/views/decidim/elections/elections/_elections.html.erb +9 -16
  216. data/app/views/decidim/elections/elections/election_log.html.erb +171 -179
  217. data/app/views/decidim/elections/elections/index.html.erb +18 -21
  218. data/app/views/decidim/elections/elections/index.js.erb +0 -5
  219. data/app/views/decidim/elections/elections/show.html.erb +63 -39
  220. data/app/views/decidim/elections/shared/_broken_promises_modal.html.erb +18 -27
  221. data/app/views/decidim/elections/trustee_zone/elections/_backup_modal.html.erb +10 -20
  222. data/app/views/decidim/elections/trustee_zone/elections/_key_ceremony_steps.html.erb +32 -27
  223. data/app/views/decidim/elections/trustee_zone/elections/_restore_modal.html.erb +11 -21
  224. data/app/views/decidim/elections/trustee_zone/elections/_tally_started_steps.html.erb +46 -41
  225. data/app/views/decidim/elections/trustee_zone/elections/show.html.erb +4 -6
  226. data/app/views/decidim/elections/trustee_zone/trustees/_no_public_keys.html.erb +30 -0
  227. data/app/views/decidim/elections/trustee_zone/trustees/_public_keys.html.erb +17 -0
  228. data/app/views/decidim/elections/trustee_zone/trustees/_table.html.erb +28 -0
  229. data/app/views/decidim/elections/trustee_zone/trustees/show.html.erb +21 -96
  230. data/app/views/decidim/elections/votes/_new_ballot_decision_step.html.erb +22 -26
  231. data/app/views/decidim/elections/votes/_new_confirm_step.html.erb +59 -47
  232. data/app/views/decidim/elections/votes/_new_encrypting_step.html.erb +8 -19
  233. data/app/views/decidim/elections/votes/_new_question.html.erb +12 -28
  234. data/app/views/decidim/elections/votes/_new_question_modal.html.erb +20 -23
  235. data/app/views/decidim/elections/votes/_onboarding_modal.html.erb +14 -22
  236. data/app/views/decidim/elections/votes/_show_casted.html.erb +28 -30
  237. data/app/views/decidim/elections/votes/_show_casting.html.erb +12 -19
  238. data/app/views/decidim/elections/votes/_show_failed.html.erb +20 -17
  239. data/app/views/decidim/elections/votes/new.html.erb +78 -61
  240. data/app/views/decidim/elections/votes/show.html.erb +12 -11
  241. data/app/views/decidim/elections/votes/verify.html.erb +40 -61
  242. data/app/views/decidim/votings/admin/ballot_styles/_form.html.erb +19 -19
  243. data/app/views/decidim/votings/admin/ballot_styles/edit.html.erb +16 -6
  244. data/app/views/decidim/votings/admin/ballot_styles/index.html.erb +50 -54
  245. data/app/views/decidim/votings/admin/ballot_styles/new.html.erb +16 -6
  246. data/app/views/decidim/votings/admin/monitoring_committee_election_results/_results.html.erb +43 -46
  247. data/app/views/decidim/votings/admin/monitoring_committee_election_results/index.html.erb +23 -25
  248. data/app/views/decidim/votings/admin/monitoring_committee_election_results/show.html.erb +5 -5
  249. data/app/views/decidim/votings/admin/monitoring_committee_members/_form.html.erb +19 -20
  250. data/app/views/decidim/votings/admin/monitoring_committee_members/index.html.erb +32 -34
  251. data/app/views/decidim/votings/admin/monitoring_committee_members/new.html.erb +17 -6
  252. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_closure_certificate_results.erb +1 -1
  253. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_closures.html.erb +53 -56
  254. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_elections.html.erb +22 -25
  255. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/edit.html.erb +12 -11
  256. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/show.html.erb +1 -1
  257. data/app/views/decidim/votings/admin/monitoring_committee_verify_elections/index.html.erb +37 -39
  258. data/app/views/decidim/votings/admin/polling_officers/_form.html.erb +19 -20
  259. data/app/views/decidim/votings/admin/polling_officers/index.html.erb +40 -41
  260. data/app/views/decidim/votings/admin/polling_officers/new.html.erb +17 -6
  261. data/app/views/decidim/votings/admin/polling_stations/_form.html.erb +25 -31
  262. data/app/views/decidim/votings/admin/polling_stations/edit.html.erb +17 -6
  263. data/app/views/decidim/votings/admin/polling_stations/index.html.erb +46 -47
  264. data/app/views/decidim/votings/admin/polling_stations/new.html.erb +17 -6
  265. data/app/views/decidim/votings/admin/votings/_form.html.erb +49 -52
  266. data/app/views/decidim/votings/admin/votings/edit.html.erb +35 -28
  267. data/app/views/decidim/votings/admin/votings/index.html.erb +58 -82
  268. data/app/views/decidim/votings/admin/votings/new.html.erb +16 -9
  269. data/app/views/decidim/votings/census/admin/census/_creating_data.html.erb +4 -4
  270. data/app/views/decidim/votings/census/admin/census/_export_codes.html.erb +3 -3
  271. data/app/views/decidim/votings/census/admin/census/_generate_codes.html.erb +8 -8
  272. data/app/views/decidim/votings/census/admin/census/_new_census.html.erb +8 -7
  273. data/app/views/decidim/votings/census/admin/census/_upload_info.html.erb +5 -5
  274. data/app/views/decidim/votings/census/admin/census/show.html.erb +7 -7
  275. data/app/views/decidim/votings/polling_officer_zone/closures/_answer_results_form_fields.html.erb +2 -3
  276. data/app/views/decidim/votings/polling_officer_zone/closures/_ballot_results_form_fields.html.erb +24 -35
  277. data/app/views/decidim/votings/polling_officer_zone/closures/_certify_form.html.erb +5 -9
  278. data/app/views/decidim/votings/polling_officer_zone/closures/_modal_ballots_count_error.html.erb +34 -48
  279. data/app/views/decidim/votings/polling_officer_zone/closures/_modal_ballots_results_count_error.html.erb +18 -18
  280. data/app/views/decidim/votings/polling_officer_zone/closures/_question_results_form_fields.html.erb +12 -17
  281. data/app/views/decidim/votings/polling_officer_zone/closures/_sign_form.html.erb +34 -49
  282. data/app/views/decidim/votings/polling_officer_zone/closures/edit.html.erb +50 -37
  283. data/app/views/decidim/votings/polling_officer_zone/closures/new.html.erb +57 -51
  284. data/app/views/decidim/votings/polling_officer_zone/closures/show.html.erb +44 -34
  285. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_complete_voting.html.erb +40 -57
  286. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_in_person_form.html.erb +34 -47
  287. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_verify_document.html.erb +19 -22
  288. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/new.html.erb +12 -12
  289. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/show.html.erb +22 -21
  290. data/app/views/decidim/votings/polling_officer_zone/polling_officers/_polling_station.html.erb +34 -41
  291. data/app/views/decidim/votings/polling_officer_zone/polling_officers/index.html.erb +9 -5
  292. data/app/views/decidim/votings/votings/_access_code_modal.html.erb +26 -31
  293. data/app/views/decidim/votings/votings/_check_fields.html.erb +19 -28
  294. data/app/views/decidim/votings/votings/_polling_officers_picker.html.erb +4 -0
  295. data/app/views/decidim/votings/votings/_votings.html.erb +5 -11
  296. data/app/views/decidim/votings/votings/check_census.html.erb +53 -53
  297. data/app/views/decidim/votings/votings/elections_log.html.erb +25 -22
  298. data/app/views/decidim/votings/votings/index.html.erb +24 -25
  299. data/app/views/decidim/votings/votings/index.js.erb +0 -5
  300. data/app/views/decidim/votings/votings/login.html.erb +51 -44
  301. data/app/views/decidim/votings/votings/show.html.erb +5 -7
  302. data/app/views/layouts/decidim/admin/voting.html.erb +11 -11
  303. data/app/views/layouts/decidim/admin/votings.html.erb +16 -0
  304. data/app/views/layouts/decidim/votings.html.erb +10 -14
  305. data/config/assets.rb +3 -28
  306. data/config/environment.rb +3 -0
  307. data/config/locales/ar.yml +0 -8
  308. data/config/locales/ca.yml +162 -216
  309. data/config/locales/cs.yml +155 -205
  310. data/config/locales/de.yml +160 -214
  311. data/config/locales/el.yml +160 -110
  312. data/config/locales/en.yml +183 -237
  313. data/config/locales/es-MX.yml +161 -215
  314. data/config/locales/es-PY.yml +160 -214
  315. data/config/locales/es.yml +160 -214
  316. data/config/locales/eu.yml +293 -218
  317. data/config/locales/fi-plain.yml +152 -206
  318. data/config/locales/fi.yml +157 -211
  319. data/config/locales/fr-CA.yml +167 -200
  320. data/config/locales/fr.yml +170 -203
  321. data/config/locales/ga-IE.yml +0 -40
  322. data/config/locales/gl.yml +2 -76
  323. data/config/locales/hu.yml +7 -52
  324. data/config/locales/it.yml +3 -245
  325. data/config/locales/ja.yml +176 -230
  326. data/config/locales/lt.yml +154 -181
  327. data/config/locales/lv.yml +0 -38
  328. data/config/locales/nl.yml +0 -214
  329. data/config/locales/no.yml +0 -128
  330. data/config/locales/pl.yml +3 -247
  331. data/config/locales/pt-BR.yml +1 -247
  332. data/config/locales/pt.yml +1 -248
  333. data/config/locales/ro-RO.yml +1 -143
  334. data/config/locales/sq-AL.yml +1 -0
  335. data/config/locales/sv.yml +20 -102
  336. data/config/locales/th-TH.yml +1 -0
  337. data/config/locales/tr-TR.yml +56 -118
  338. data/config/locales/zh-CN.yml +0 -64
  339. data/config/locales/zh-TW.yml +81 -168
  340. data/lib/decidim/api/election_type.rb +1 -1
  341. data/lib/decidim/api/elections_type.rb +1 -1
  342. data/lib/decidim/elections/admin_engine.rb +4 -19
  343. data/lib/decidim/elections/component.rb +4 -452
  344. data/lib/decidim/elections/engine.rb +23 -1
  345. data/lib/decidim/elections/menu.rb +39 -0
  346. data/lib/decidim/elections/seeds.rb +435 -0
  347. data/lib/decidim/elections/test/factories.rb +22 -21
  348. data/lib/decidim/elections/trustee_zone_engine.rb +3 -7
  349. data/lib/decidim/elections/version.rb +1 -1
  350. data/lib/decidim/elections.rb +6 -0
  351. data/lib/decidim/votings/admin_engine.rb +16 -122
  352. data/lib/decidim/votings/census_admin_engine.rb +4 -8
  353. data/lib/decidim/votings/census_menu.rb +18 -0
  354. data/lib/decidim/votings/content_blocks/registry_manager.rb +88 -0
  355. data/lib/decidim/votings/engine.rb +12 -88
  356. data/lib/decidim/votings/menu.rb +164 -0
  357. data/lib/decidim/votings/participatory_space.rb +6 -190
  358. data/lib/decidim/votings/polling_officer_zone_engine.rb +3 -7
  359. data/lib/decidim/votings/polling_officer_zone_menu.rb +17 -0
  360. data/lib/decidim/votings/query_extensions.rb +4 -4
  361. data/lib/decidim/votings/seeds.rb +197 -0
  362. data/lib/decidim/votings/test/factories.rb +29 -13
  363. data/lib/decidim/votings/voting_serializer.rb +3 -3
  364. data/lib/tasks/decidim_elections.rake +2 -2
  365. metadata +77 -123
  366. data/app/cells/decidim/elections/election_m/data.erb +0 -19
  367. data/app/cells/decidim/elections/election_m/footer.erb +0 -5
  368. data/app/cells/decidim/elections/election_m/tags.erb +0 -3
  369. data/app/cells/decidim/elections/election_m_cell.rb +0 -96
  370. data/app/cells/decidim/elections/election_results/blank_votes.erb +0 -7
  371. data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +0 -30
  372. data/app/cells/decidim/votings/content_blocks/landing_page/attachments_and_folders_cell.rb +0 -22
  373. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +0 -15
  374. data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -25
  375. data/app/cells/decidim/votings/content_blocks/landing_page/elections/show.erb +0 -15
  376. data/app/cells/decidim/votings/content_blocks/landing_page/elections/single.erb +0 -11
  377. data/app/cells/decidim/votings/content_blocks/landing_page/elections_cell.rb +0 -47
  378. data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +0 -29
  379. data/app/cells/decidim/votings/content_blocks/landing_page/header_cell.rb +0 -108
  380. data/app/cells/decidim/votings/content_blocks/landing_page/header_settings_form_cell.rb +0 -17
  381. data/app/cells/decidim/votings/content_blocks/landing_page/metrics/show.erb +0 -12
  382. data/app/cells/decidim/votings/content_blocks/landing_page/metrics_cell.rb +0 -19
  383. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/address.erb +0 -14
  384. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/map.erb +0 -18
  385. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/show.erb +0 -25
  386. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations_cell.rb +0 -56
  387. data/app/cells/decidim/votings/content_blocks/landing_page/statistics_cell.rb +0 -24
  388. data/app/cells/decidim/votings/content_blocks/landing_page/timeline/show.erb +0 -7
  389. data/app/cells/decidim/votings/content_blocks/landing_page/timeline_cell.rb +0 -17
  390. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/polling_officers.erb +0 -12
  391. data/app/cells/decidim/votings/voting_m/data.erb +0 -21
  392. data/app/cells/decidim/votings/voting_m/footer.erb +0 -5
  393. data/app/cells/decidim/votings/voting_m_cell.rb +0 -94
  394. data/app/commands/decidim/votings/admin/publish_voting.rb +0 -40
  395. data/app/commands/decidim/votings/admin/unpublish_voting.rb +0 -40
  396. data/app/forms/decidim/votings/admin/monitoring_committee_member_form.rb +0 -27
  397. data/app/forms/decidim/votings/admin/voting_role_form.rb +0 -29
  398. data/app/helpers/decidim/votings/admin/polling_officers_picker_helper.rb +0 -29
  399. data/app/packs/entrypoints/decidim_elections_admin_pending_action.js +0 -1
  400. data/app/packs/entrypoints/decidim_elections_admin_trustees_process.js +0 -1
  401. data/app/packs/entrypoints/decidim_elections_admin_vote_statistics.js +0 -1
  402. data/app/packs/entrypoints/decidim_elections_election_log.js +0 -1
  403. data/app/packs/entrypoints/decidim_elections_onboarding.js +0 -1
  404. data/app/packs/entrypoints/decidim_elections_trustee_key_ceremony.js +0 -1
  405. data/app/packs/entrypoints/decidim_elections_trustee_tally_started.js +0 -1
  406. data/app/packs/entrypoints/decidim_elections_trustee_trustee_zone.js +0 -1
  407. data/app/packs/entrypoints/decidim_elections_trustee_zone.js +0 -1
  408. data/app/packs/entrypoints/decidim_elections_trustee_zone.scss +0 -1
  409. data/app/packs/entrypoints/decidim_elections_voter_casting-vote.js +0 -1
  410. data/app/packs/entrypoints/decidim_elections_voter_new-vote.js +0 -1
  411. data/app/packs/entrypoints/decidim_elections_voter_setup-preview.js +0 -1
  412. data/app/packs/entrypoints/decidim_elections_voter_setup-vote.js +0 -1
  413. data/app/packs/entrypoints/decidim_elections_voter_verify-vote.js +0 -1
  414. data/app/packs/entrypoints/decidim_votings_admin_monitoring_committee_members_form.js +0 -1
  415. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_form.js +0 -1
  416. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_picker.js +0 -1
  417. data/app/packs/entrypoints/decidim_votings_admin_polling_stations_form.js +0 -1
  418. data/app/packs/entrypoints/decidim_votings_admin_update_census_dataset_status.js +0 -1
  419. data/app/packs/entrypoints/decidim_votings_admin_votings.js +0 -1
  420. data/app/packs/entrypoints/decidim_votings_admin_votings.scss +0 -1
  421. data/app/packs/entrypoints/decidim_votings_in-person-vote.js +0 -1
  422. data/app/packs/entrypoints/decidim_votings_voting-description-cell.js +0 -1
  423. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-edit-closure.js +0 -1
  424. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-in-person-vote.js +0 -1
  425. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-new-closure.js +0 -1
  426. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-sign-closure.js +0 -1
  427. data/app/packs/src/decidim/elections/onboarding.js +0 -5
  428. data/app/packs/src/decidim/votings/admin/monitoring_committee_members_form.js +0 -35
  429. data/app/packs/src/decidim/votings/voting-description-cell.js +0 -34
  430. data/app/packs/stylesheets/decidim/elections/focus/_accordion.scss +0 -36
  431. data/app/packs/stylesheets/decidim/elections/focus/_evote.scss +0 -344
  432. data/app/packs/stylesheets/decidim/elections/focus/_focus.scss +0 -128
  433. data/app/packs/stylesheets/decidim/elections/trustee_zone.scss +0 -24
  434. data/app/packs/stylesheets/decidim/votings/votings/_polling-stations-cell.scss +0 -6
  435. data/app/packs/stylesheets/decidim/votings/votings/_voting-description-cell.scss +0 -29
  436. data/app/views/decidim/elections/admin/answers/proposals_picker.html.erb +0 -1
  437. data/app/views/decidim/elections/elections/_count.html.erb +0 -1
  438. data/app/views/decidim/elections/elections/_election.html.erb +0 -1
  439. data/app/views/decidim/elections/elections/_filters.html.erb +0 -25
  440. data/app/views/decidim/elections/elections/_filters_small_view.html.erb +0 -18
  441. data/app/views/decidim/elections/votes/_focus_header.html.erb +0 -8
  442. data/app/views/decidim/elections/votes/_new_confirm_step_footer.html.erb +0 -23
  443. data/app/views/decidim/votings/admin/votings/polling_officers_picker.html.erb +0 -2
  444. data/app/views/decidim/votings/votings/_count.html.erb +0 -1
  445. data/app/views/decidim/votings/votings/_filters.html.erb +0 -25
  446. data/app/views/decidim/votings/votings/_filters_small_view.html.erb +0 -23
  447. data/app/views/decidim/votings/votings/_promoted_voting.html.erb +0 -27
  448. data/app/views/layouts/decidim/_election_votes_header.html.erb +0 -13
  449. data/app/views/layouts/decidim/election_votes.html.erb +0 -27
  450. data/app/views/layouts/decidim/voting_landing.html.erb +0 -13
  451. data/db/seeds/Exampledocument.pdf +0 -0
  452. data/db/seeds/city.jpeg +0 -0
  453. data/db/seeds/city2.jpeg +0 -0
  454. data/lib/decidim/elections/seeds/city.jpeg +0 -0
  455. data/lib/decidim/votings/test/capybara_polling_officers_picker.rb +0 -49
  456. /data/app/cells/decidim/votings/content_blocks/{landing_page/header_settings_form → hero_settings_form}/show.erb +0 -0
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ module Admin
6
+ # Controller that allows managing voting publications.
7
+ #
8
+ # i18n-tasks-use t('decidim.admin.voting_publications.create.error')
9
+ # i18n-tasks-use t('decidim.admin.voting_publications.create.success')
10
+ # i18n-tasks-use t('decidim.admin.voting_publications.destroy.error')
11
+ # i18n-tasks-use t('decidim.admin.voting_publications.destroy.success')
12
+ class VotingPublicationsController < Decidim::Admin::SpacePublicationsController
13
+ include VotingAdmin
14
+
15
+ private
16
+
17
+ def enforce_permission_to_publish = enforce_permission_to(:publish, :voting, voting: current_voting)
18
+
19
+ def i18n_scope = "decidim.admin.voting_publications"
20
+
21
+ def fallback_location = votings_path
22
+ end
23
+ end
24
+ end
25
+ end
@@ -6,11 +6,13 @@ module Decidim
6
6
  # This controller allows to create or update a voting.
7
7
  class VotingsController < Admin::ApplicationController
8
8
  include Decidim::Votings::Admin::Filterable
9
+ include Decidim::Admin::ParticipatorySpaceAdminBreadcrumb
9
10
  helper_method :votings, :current_voting, :current_participatory_space
10
11
 
11
12
  def index
12
13
  enforce_permission_to :read, :votings
13
14
  @votings = filtered_collection
15
+ render layout: "decidim/admin/votings"
14
16
  end
15
17
 
16
18
  def new
@@ -58,28 +60,6 @@ module Decidim
58
60
  end
59
61
  end
60
62
 
61
- def publish
62
- enforce_permission_to :publish, :voting, voting: current_voting
63
-
64
- PublishVoting.call(current_voting, current_user) do
65
- on(:ok) do
66
- flash[:notice] = I18n.t("votings.publish.success", scope: "decidim.votings.admin")
67
- redirect_to edit_voting_path(voting)
68
- end
69
- end
70
- end
71
-
72
- def unpublish
73
- enforce_permission_to :unpublish, :voting, voting: current_voting
74
-
75
- UnpublishVoting.call(current_voting, current_user) do
76
- on(:ok) do
77
- flash[:notice] = I18n.t("votings.unpublish.success", scope: "decidim.votings.admin")
78
- redirect_to edit_voting_path(voting)
79
- end
80
- end
81
- end
82
-
83
63
  def available_polling_officers
84
64
  respond_to do |format|
85
65
  format.json do
@@ -100,10 +80,6 @@ module Decidim
100
80
  end
101
81
  end
102
82
 
103
- def polling_officers_picker
104
- render :polling_officers_picker, layout: false
105
- end
106
-
107
83
  private
108
84
 
109
85
  def votings
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows to edit the content of the landing page content blocks
7
7
  class VotingsLandingPageContentBlocksController < Decidim::Votings::Admin::ApplicationController
8
- include Decidim::Admin::LandingPageContentBlocks
8
+ include Decidim::Admin::ContentBlocks::LandingPageContentBlocks
9
9
 
10
10
  layout "decidim/admin/voting"
11
11
 
@@ -33,10 +33,6 @@ module Decidim
33
33
  voting_landing_page_content_block_path(scoped_resource, params[:id])
34
34
  end
35
35
 
36
- def submit_button_text
37
- t("landing_page.content_blocks.edit.update", scope: "decidim.votings.admin")
38
- end
39
-
40
36
  alias current_participatory_space scoped_resource
41
37
  end
42
38
  end
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows to (de)activate the content blocks from a voting landing page
7
7
  class VotingsLandingPageController < Decidim::Votings::Admin::ApplicationController
8
- include Decidim::Admin::LandingPage
8
+ include Decidim::Admin::ContentBlocks::LandingPage
9
9
 
10
10
  layout "decidim/admin/voting"
11
11
 
@@ -27,12 +27,9 @@ module Decidim
27
27
  voting_landing_page_path(scoped_resource)
28
28
  end
29
29
 
30
- def active_content_blocks_title
31
- t("landing_page.edit.active_content_blocks", scope: "decidim.votings.admin")
32
- end
33
-
34
- def inactive_content_blocks_title
35
- t("landing_page.edit.inactive_content_blocks", scope: "decidim.votings.admin")
30
+ def resource_create_url(manifest_name)
31
+ voting_landing_page_content_blocks_path(participatory_process_group_id: params[:participatory_process_group_id],
32
+ manifest_name:)
36
33
  end
37
34
 
38
35
  def resource_content_block_cell
@@ -22,7 +22,7 @@ module Decidim
22
22
  enforce_permission_to :manage, :census, voting: current_participatory_space
23
23
 
24
24
  @form = form(DatasetForm).from_params(params).with_context(
25
- current_participatory_space: current_participatory_space
25
+ current_participatory_space:
26
26
  )
27
27
 
28
28
  CreateDataset.call(@form, current_user) do
@@ -163,7 +163,7 @@ module Decidim
163
163
 
164
164
  def ballot_style_callout_text
165
165
  if current_participatory_space.has_ballot_styles?
166
- t("has_ballot_styles_message", scope: "decidim.votings.census.admin.census.new", ballot_style_code_header: ballot_style_code_header)
166
+ t("has_ballot_styles_message", scope: "decidim.votings.census.admin.census.new", ballot_style_code_header:)
167
167
  else
168
168
  t("missing_ballot_styles_message", scope: "decidim.votings.census.admin.census.new", ballot_styles_admin_path: admin_voting_ballot_styles_path)
169
169
  end
@@ -8,17 +8,17 @@ module Decidim
8
8
  helper_method :election, :polling_officer, :polling_station, :closure
9
9
 
10
10
  def show
11
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
11
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
12
12
 
13
13
  @form = if closure.certificate_phase?
14
- form(ClosureCertifyForm).instance.with_context(closure: closure)
14
+ form(ClosureCertifyForm).instance.with_context(closure:)
15
15
  elsif closure.signature_phase?
16
16
  form(ClosureSignForm).instance
17
17
  end
18
18
  end
19
19
 
20
20
  def new
21
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
21
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
22
22
 
23
23
  @form = EnvelopesResultForm.new(
24
24
  polling_station_id: polling_station.id,
@@ -28,8 +28,8 @@ module Decidim
28
28
  end
29
29
 
30
30
  def create
31
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
32
- @form = form(EnvelopesResultForm).from_params(params).with_context(polling_officer: polling_officer)
31
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
32
+ @form = form(EnvelopesResultForm).from_params(params).with_context(polling_officer:)
33
33
 
34
34
  CreatePollingStationClosure.call(@form) do
35
35
  on(:ok) do
@@ -46,13 +46,13 @@ module Decidim
46
46
  end
47
47
 
48
48
  def edit
49
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
49
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
50
50
 
51
51
  @form = form(ClosureResultForm).from_model(closure)
52
52
  end
53
53
 
54
54
  def update
55
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
55
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
56
56
  @form = form(ClosureResultForm).from_params(params)
57
57
 
58
58
  CreatePollingStationResults.call(@form, closure) do
@@ -69,9 +69,9 @@ module Decidim
69
69
  end
70
70
 
71
71
  def certify
72
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
72
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
73
73
 
74
- @form = form(ClosureCertifyForm).from_params(params).with_context(closure: closure)
74
+ @form = form(ClosureCertifyForm).from_params(params).with_context(closure:)
75
75
 
76
76
  CertifyPollingStationClosure.call(@form, closure) do
77
77
  on(:ok) do
@@ -87,7 +87,7 @@ module Decidim
87
87
  end
88
88
 
89
89
  def sign
90
- enforce_permission_to :manage, :polling_station_results, polling_officer: polling_officer
90
+ enforce_permission_to(:manage, :polling_station_results, polling_officer:)
91
91
 
92
92
  @form = form(ClosureSignForm).from_params(params)
93
93
 
@@ -122,11 +122,11 @@ module Decidim
122
122
  end
123
123
 
124
124
  def closure
125
- @closure ||= polling_station.closures.find_by(election: election)
125
+ @closure ||= polling_station.closures.find_by(election:)
126
126
  end
127
127
 
128
128
  def polling_station_election_votes_count
129
- @polling_station_election_votes_count ||= polling_station.in_person_votes.where(election: election).count
129
+ @polling_station_election_votes_count ||= polling_station.in_person_votes.where(election:).count
130
130
  end
131
131
  end
132
132
  end
@@ -7,6 +7,7 @@ module Decidim
7
7
  class InPersonVotesController < Decidim::Votings::PollingOfficerZone::ApplicationController
8
8
  include FormFactory
9
9
  include Decidim::Elections::HasVoteFlow
10
+ before_action :append_csp_directives
10
11
 
11
12
  helper_method :polling_officer, :election, :in_person_form, :has_voter?,
12
13
  :vote_check, :cant_vote_reason, :questions, :in_person_vote_form, :voted_online?,
@@ -15,13 +16,13 @@ module Decidim
15
16
  helper Decidim::Admin::IconLinkHelper
16
17
 
17
18
  def new
18
- enforce_permission_to :manage, :in_person_vote, polling_officer: polling_officer
19
+ enforce_permission_to(:manage, :in_person_vote, polling_officer:)
19
20
 
20
21
  has_pending_in_person_vote?
21
22
  end
22
23
 
23
24
  def create
24
- enforce_permission_to :manage, :in_person_vote, polling_officer: polling_officer
25
+ enforce_permission_to(:manage, :in_person_vote, polling_officer:)
25
26
 
26
27
  return if has_pending_in_person_vote?
27
28
 
@@ -33,11 +34,11 @@ module Decidim
33
34
  end
34
35
 
35
36
  def show
36
- enforce_permission_to :manage, :in_person_vote, polling_officer: polling_officer
37
+ enforce_permission_to :manage, :in_person_vote, polling_officer:
37
38
  end
38
39
 
39
40
  def update
40
- enforce_permission_to :manage, :in_person_vote, polling_officer: polling_officer
41
+ enforce_permission_to(:manage, :in_person_vote, polling_officer:)
41
42
 
42
43
  Decidim::Votings::Voter::UpdateInPersonVoteStatus.call(in_person_vote) do
43
44
  on(:ok) do
@@ -59,6 +60,12 @@ module Decidim
59
60
  delegate :has_voter?, to: :vote_flow
60
61
  delegate :polling_station, to: :polling_officer
61
62
 
63
+ def append_csp_directives
64
+ return if bulletin_board_server.blank?
65
+
66
+ content_security_policy.append_csp_directive("connect-src", bulletin_board_server)
67
+ end
68
+
62
69
  def bulletin_board_client
63
70
  @bulletin_board_client ||= Decidim::Elections.bulletin_board
64
71
  end
@@ -106,13 +113,13 @@ module Decidim
106
113
  def in_person_vote_form
107
114
  @in_person_vote_form ||= form(Decidim::Votings::Voter::InPersonVoteForm).from_params(
108
115
  {
109
- voter_token: voter_token,
110
- voter_id: voter_id,
116
+ voter_token:,
117
+ voter_id:,
111
118
  voted: params.dig(:in_person_vote, :voted)
112
119
  },
113
- election: election,
114
- polling_station: polling_station,
115
- polling_officer: polling_officer
120
+ election:,
121
+ polling_station:,
122
+ polling_officer:
116
123
  )
117
124
  end
118
125
 
@@ -140,7 +147,7 @@ module Decidim
140
147
  end
141
148
 
142
149
  def pending_in_person_vote
143
- @pending_in_person_vote ||= Decidim::Votings::Votes::PendingInPersonVotes.for.find_by(polling_officer: polling_officer, election: election)
150
+ @pending_in_person_vote ||= Decidim::Votings::Votes::PendingInPersonVotes.for.find_by(polling_officer:, election:)
144
151
  end
145
152
 
146
153
  def exit_path
@@ -11,7 +11,7 @@ module Decidim
11
11
  helper_method :polling_stations, :polling_officers_elections
12
12
 
13
13
  def index
14
- enforce_permission_to :view, :polling_officers, polling_officers: polling_officers
14
+ enforce_permission_to :view, :polling_officers, polling_officers:
15
15
  end
16
16
 
17
17
  private
@@ -5,8 +5,6 @@ module Decidim
5
5
  # A controller that holds the logic to show votings in a
6
6
  # public layout.
7
7
  class VotingsController < Decidim::Votings::ApplicationController
8
- layout "layouts/decidim/voting_landing", only: :show
9
-
10
8
  include FormFactory
11
9
  include ParticipatorySpaceContext
12
10
  include NeedsVoting
@@ -15,6 +13,8 @@ module Decidim
15
13
  include Decidim::Votings::Orderable
16
14
  include Decidim::Elections::HasVoteFlow
17
15
 
16
+ participatory_space_layout only: [:show]
17
+
18
18
  helper_method :published_votings, :paginated_votings, :filter, :promoted_votings, :only_finished_votings?, :landing_content_blocks, :census_contact_information
19
19
 
20
20
  helper Decidim::FiltersHelper
@@ -22,7 +22,6 @@ module Decidim
22
22
  helper Decidim::SanitizeHelper
23
23
  helper Decidim::PaginateHelper
24
24
  helper Decidim::IconHelper
25
- helper Decidim::WidgetUrlsHelper
26
25
  helper Decidim::ResourceHelper
27
26
  helper Decidim::Admin::IconLinkHelper
28
27
 
@@ -42,10 +41,9 @@ module Decidim
42
41
  helper_method :election, :exit_path, :election_log_path, :elections
43
42
 
44
43
  def login
45
- @form = form(Census::LoginForm).from_params(params, election: election)
44
+ @form = form(Census::LoginForm).from_params(params, election:)
46
45
 
47
- render :login,
48
- layout: "decidim/election_votes"
46
+ render :login
49
47
  end
50
48
 
51
49
  def show_check_census
@@ -59,7 +57,7 @@ module Decidim
59
57
  raise ActionController::RoutingError, "Not Found" unless current_participatory_space.check_census_enabled?
60
58
 
61
59
  @form = form(Census::CheckForm).from_params(params).with_context(
62
- current_participatory_space: current_participatory_space
60
+ current_participatory_space:
63
61
  )
64
62
 
65
63
  success = not_found = false
@@ -77,7 +75,7 @@ module Decidim
77
75
  end
78
76
  end
79
77
 
80
- render action: :check_census, locals: { success: success, not_found: not_found, datum: datum }
78
+ render action: :check_census, locals: { success:, not_found:, datum: }
81
79
  end
82
80
 
83
81
  def send_access_code
@@ -89,7 +87,7 @@ module Decidim
89
87
  flash[:alert] = t("send_access_code.invalid", scope: "decidim.votings.votings")
90
88
  end
91
89
  end
92
- render action: :check_census, locals: { success: true, not_found: false, datum: datum }
90
+ render action: :check_census, locals: { success: true, not_found: false, datum: }
93
91
  end
94
92
 
95
93
  def elections_log
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Elections
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Elections
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Elections
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Elections
@@ -1,4 +1,4 @@
1
- # frozen-string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
4
  module Votings
@@ -40,7 +40,7 @@ module Decidim
40
40
 
41
41
  private
42
42
 
43
- # This method will add an error to the `attachment` field only if there's
43
+ # This method will add an error to the `attachment` field only if there is
44
44
  # any error in any other field. This is needed because when the form has
45
45
  # an error, the attachment is lost, so we need a way to inform the user of
46
46
  # this problem.
@@ -24,7 +24,7 @@ module Decidim
24
24
 
25
25
  private
26
26
 
27
- # This method will add an error to the `photos` field only if there's
27
+ # This method will add an error to the `photos` field only if there is
28
28
  # any error in any other field. This is needed because when the form has
29
29
  # an error, the attachment is lost, so we need a way to inform the user of
30
30
  # this problem.
@@ -11,8 +11,8 @@ module Decidim
11
11
  private
12
12
 
13
13
  def closurables
14
- @closurables ||= Decidim::Votings::PollingStationClosure.where(election: election) +
15
- Decidim::Elections::BulletinBoardClosure.where(election: election)
14
+ @closurables ||= Decidim::Votings::PollingStationClosure.where(election:) +
15
+ Decidim::Elections::BulletinBoardClosure.where(election:)
16
16
  end
17
17
 
18
18
  def groups_for(question)
@@ -23,13 +23,13 @@ module Decidim
23
23
  end
24
24
 
25
25
  {
26
- question: question,
26
+ question:,
27
27
  results: groups.values
28
28
  }
29
29
  end
30
30
 
31
31
  def aggregate_results_for(question)
32
- Decidim::Elections::Result.where(closurable: closurables, question: question)
32
+ Decidim::Elections::Result.where(closurable: closurables, question:)
33
33
  .group(:closurable_type, :result_type, :decidim_elections_answer_id)
34
34
  .sum(:value)
35
35
  end
@@ -37,7 +37,7 @@ module Decidim
37
37
  def update_group(groups, group_id, key, total)
38
38
  closurable_type, result_type, answer_id = key
39
39
  groups[group_id] ||= {
40
- result_type: result_type,
40
+ result_type:,
41
41
  answer: all_answers[answer_id],
42
42
  value: 0,
43
43
  polling_station: 0,
@@ -61,7 +61,7 @@ module Decidim
61
61
 
62
62
  def slug_uniqueness
63
63
  return unless organization_votings
64
- .where(slug: slug)
64
+ .where(slug:)
65
65
  .where.not(id: context[:voting_id])
66
66
  .any?
67
67
 
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Votings
5
5
  module Admin
6
- class PollingOfficerForm < Decidim::Form
6
+ class VotingUserRoleForm < Decidim::Form
7
7
  attribute :name, String
8
8
  attribute :email, String
9
9
  attribute :user_id, Integer
@@ -34,7 +34,7 @@ module Decidim
34
34
  def birthdate
35
35
  return unless [year, month, day].all? { |part| part.is_a? Numeric }
36
36
 
37
- format("%04d%02d%02d", year, month, day) # rubocop:disable Style/FormatStringToken
37
+ format("%04d%02d%02d", year, month, day)
38
38
  end
39
39
  end
40
40
  end
@@ -10,8 +10,6 @@ module Decidim
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  included do
13
- DOCUMENT_TYPES = %w(DNI NIE PASSPORT).freeze
14
-
15
13
  attribute :document_number, String
16
14
  attribute :document_type, String
17
15
  attribute :birthdate, String
@@ -21,7 +19,7 @@ module Decidim
21
19
  :birthdate,
22
20
  presence: true
23
21
 
24
- validates :document_type, inclusion: { in: DOCUMENT_TYPES }
22
+ validates :document_type, inclusion: { in: :document_types }
25
23
  end
26
24
 
27
25
  # hash of birth, document type and number
@@ -35,13 +33,19 @@ module Decidim
35
33
  end
36
34
 
37
35
  def options_for_document_type_select
38
- DOCUMENT_TYPES.map do |document_type|
36
+ document_types.map do |document_type|
39
37
  [
40
38
  I18n.t(document_type.downcase, scope: "decidim.votings.census.document_types"),
41
39
  document_type
42
40
  ]
43
41
  end
44
42
  end
43
+
44
+ private
45
+
46
+ def document_types
47
+ Decidim::Elections.document_types
48
+ end
45
49
  end
46
50
  end
47
51
  end
@@ -23,12 +23,12 @@ module Decidim
23
23
  self.ballot_results = BallotResultForm.from_model(model)
24
24
 
25
25
  self.question_results = model.election.questions.flat_map do |question|
26
- QuestionResultForm.from_model(question: question, closure: model)
26
+ QuestionResultForm.from_model(question:, closure: model)
27
27
  end
28
28
 
29
29
  self.answer_results = model.election.questions.flat_map do |question|
30
30
  question.answers.map do |answer|
31
- AnswerResultForm.from_model(answer: answer, closure: model)
31
+ AnswerResultForm.from_model(answer:, closure: model)
32
32
  end
33
33
  end
34
34
  end
@@ -6,15 +6,17 @@ module Decidim
6
6
  # Custom helpers for trustees admin.
7
7
  #
8
8
  module TrusteesParticipatorySpacesHelper
9
+ include Decidim::PaginateHelper
10
+
9
11
  def trustee_current_participatory_space(trustee)
10
12
  trustee.trustees_participatory_spaces.find_by(participatory_space: current_participatory_space)
11
13
  end
12
14
 
13
15
  def considered_icon_action_for(trustee)
14
16
  if trustee_current_participatory_space(trustee).considered
15
- "x"
17
+ "close-line"
16
18
  else
17
- "check"
19
+ "check-line"
18
20
  end
19
21
  end
20
22
 
@@ -17,6 +17,14 @@ module Decidim
17
17
  ]
18
18
  )
19
19
  end
20
+
21
+ def filter_sections
22
+ @filter_sections ||= [{ method: :with_any_date, collection: date_filter_values, label_scope: "decidim.elections.elections.filters", id: "date" }]
23
+ end
24
+
25
+ def component_name
26
+ (defined?(current_component) && translated_attribute(current_component&.name).presence) || t("decidim.components.elections.name")
27
+ end
20
28
  end
21
29
  end
22
30
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ # This helper include some methods for rendering votings dynamic maps.
6
+ module MapHelper
7
+ include Decidim::SanitizeHelper
8
+ include Decidim::LayoutHelper
9
+
10
+ def polling_station_data_for_map(polling_stations)
11
+ polling_stations_geocoded = polling_stations.select(&:geocoded_and_valid?)
12
+ polling_stations_geocoded.map do |polling_station|
13
+ polling_station.slice(:latitude, :longitude, :address)
14
+ .merge(
15
+ title: translated_attribute(polling_station.title),
16
+ items: [{ icon: icon("map-line").html_safe, text: polling_station.address }].to_json
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -15,6 +15,39 @@ module Decidim
15
15
  ]
16
16
  )
17
17
  end
18
+
19
+ def filter_sections
20
+ @filter_sections ||= [{ method: :with_any_date, collection: date_filter_values, label_scope: "decidim.votings.votings.filters", id: "date" }]
21
+ end
22
+
23
+ def voting_nav_items(participatory_space)
24
+ components = participatory_space.components.published.or(Decidim::Component.where(id: try(:current_component)))
25
+
26
+ (
27
+ [
28
+ if participatory_space.check_census_enabled?
29
+ {
30
+ name: t("layouts.decidim.voting_navigation.check_census"),
31
+ url: decidim_votings.voting_check_census_path(participatory_space),
32
+ active: is_active_link?(decidim_votings.voting_check_census_path(participatory_space), :exclusive)
33
+ }
34
+ end
35
+ ] + components.map do |component|
36
+ {
37
+ name: translated_attribute(component.name),
38
+ url: main_component_path(component),
39
+ active: is_active_link?(main_component_path(component), :inclusive) && !is_active_link?("election_log", /election_log$/)
40
+ }
41
+ end +
42
+ [
43
+ {
44
+ name: t("layouts.decidim.voting_navigation.election_log"),
45
+ url: decidim_votings.voting_elections_log_path(participatory_space),
46
+ active: is_active_link?(decidim_votings.voting_elections_log_path(participatory_space), :exclusive) || is_active_link?("election_log", /election_log$/)
47
+ }
48
+ ]
49
+ ).compact
50
+ end
18
51
  end
19
52
  end
20
53
  end