decidim-meetings 0.23.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-meetings might be problematic. Click here for more details.

Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/elements.erb +16 -0
  3. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/heading.erb +1 -0
  4. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings_cell.rb +33 -0
  5. data/app/cells/decidim/meetings/content_blocks/{upcoming_events → upcoming_meetings}/show.erb +6 -6
  6. data/app/cells/decidim/meetings/content_blocks/{upcoming_events_cell.rb → upcoming_meetings_cell.rb} +13 -10
  7. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +5 -4
  8. data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +22 -1
  9. data/app/cells/decidim/meetings/join_meeting_button/registration_confirm.erb +6 -0
  10. data/app/cells/decidim/meetings/join_meeting_button/show.erb +15 -6
  11. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +1 -1
  12. data/app/cells/decidim/meetings/meeting_activity_cell.rb +13 -5
  13. data/app/cells/decidim/meetings/meeting_cell.rb +2 -4
  14. data/app/cells/decidim/meetings/meeting_highlighted_list_item/show.erb +21 -0
  15. data/app/cells/decidim/meetings/meeting_highlighted_list_item_cell.rb +10 -0
  16. data/app/cells/decidim/meetings/meeting_list_item_cell.rb +11 -1
  17. data/app/cells/decidim/meetings/meeting_m/address.erb +5 -1
  18. data/app/cells/decidim/meetings/meeting_m_cell.rb +54 -0
  19. data/app/cells/decidim/meetings/meeting_s_cell.rb +22 -0
  20. data/app/cells/decidim/meetings/meeting_url/show.erb +20 -0
  21. data/app/cells/decidim/meetings/meeting_url_cell.rb +29 -0
  22. data/app/cells/decidim/meetings/meetings_map/show.erb +1 -1
  23. data/app/cells/decidim/meetings/meetings_map_cell.rb +7 -1
  24. data/app/cells/decidim/meetings/online_meeting_cell.rb +51 -0
  25. data/app/cells/decidim/meetings/online_meeting_link/show.erb +44 -0
  26. data/app/cells/decidim/meetings/online_meeting_link_cell.rb +23 -0
  27. data/app/cells/decidim/meetings/public_participants_list/show.erb +16 -0
  28. data/app/cells/decidim/meetings/public_participants_list_cell.rb +32 -0
  29. data/app/cells/decidim/meetings/question_responses/show.erb +7 -0
  30. data/app/cells/decidim/meetings/question_responses_cell.rb +72 -0
  31. data/app/cells/decidim/meetings/reported_content/show.erb +3 -0
  32. data/app/cells/decidim/meetings/reported_content_cell.rb +13 -0
  33. data/app/commands/decidim/meetings/admin/close_meeting.rb +4 -1
  34. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -10
  35. data/app/commands/decidim/meetings/admin/create_agenda.rb +1 -1
  36. data/app/commands/decidim/meetings/admin/create_meeting.rb +16 -20
  37. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +3 -1
  38. data/app/commands/decidim/meetings/admin/export_meeting_registrations.rb +1 -1
  39. data/app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb +10 -12
  40. data/app/commands/decidim/meetings/admin/publish_meeting.rb +74 -0
  41. data/app/commands/decidim/meetings/admin/unpublish_meeting.rb +45 -0
  42. data/app/commands/decidim/meetings/admin/update_agenda.rb +1 -1
  43. data/app/commands/decidim/meetings/admin/update_meeting.rb +17 -6
  44. data/app/commands/decidim/meetings/admin/update_question_status.rb +57 -0
  45. data/app/commands/decidim/meetings/admin/update_questionnaire.rb +96 -0
  46. data/app/commands/decidim/meetings/admin/update_registrations.rb +5 -3
  47. data/app/commands/decidim/meetings/admin/validate_registration_code.rb +3 -1
  48. data/app/commands/decidim/meetings/close_meeting.rb +68 -0
  49. data/app/commands/decidim/meetings/create_answer.rb +52 -0
  50. data/app/commands/decidim/meetings/create_meeting.rb +26 -5
  51. data/app/commands/decidim/meetings/decline_invitation.rb +1 -1
  52. data/app/commands/decidim/meetings/join_meeting.rb +17 -8
  53. data/app/commands/decidim/meetings/leave_meeting.rb +5 -5
  54. data/app/commands/decidim/meetings/update_meeting.rb +15 -4
  55. data/app/commands/decidim/meetings/withdraw_meeting.rb +39 -0
  56. data/app/controllers/concerns/decidim/meetings/admin/filterable.rb +55 -0
  57. data/app/controllers/concerns/decidim/meetings/filterable.rb +27 -0
  58. data/app/controllers/concerns/decidim/meetings/polls_resources.rb +29 -0
  59. data/app/controllers/decidim/meetings/admin/application_controller.rb +6 -2
  60. data/app/controllers/decidim/meetings/admin/invites_controller.rb +0 -2
  61. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +3 -3
  62. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +46 -1
  63. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +107 -0
  64. data/app/controllers/decidim/meetings/calendars_controller.rb +9 -1
  65. data/app/controllers/decidim/meetings/directory/application_controller.rb +16 -0
  66. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +40 -26
  67. data/app/controllers/decidim/meetings/live_events_controller.rb +35 -0
  68. data/app/controllers/decidim/meetings/meeting_closes_controller.rb +43 -0
  69. data/app/controllers/decidim/meetings/meetings_controller.rb +43 -29
  70. data/app/controllers/decidim/meetings/polls/answers_controller.rb +37 -0
  71. data/app/controllers/decidim/meetings/polls/questions_controller.rb +45 -0
  72. data/app/events/decidim/meetings/close_meeting_event.rb +1 -3
  73. data/app/events/decidim/meetings/create_meeting_event.rb +16 -2
  74. data/app/events/decidim/meetings/meeting_event.rb +37 -0
  75. data/app/events/decidim/meetings/meeting_registration_notification_event.rb +1 -1
  76. data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +1 -3
  77. data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +2 -4
  78. data/app/events/decidim/meetings/registration_code_validated_event.rb +2 -4
  79. data/app/events/decidim/meetings/upcoming_meeting_event.rb +1 -3
  80. data/app/events/decidim/meetings/update_meeting_event.rb +1 -3
  81. data/app/forms/decidim/meetings/admin/answer_option_form.rb +24 -0
  82. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +9 -7
  83. data/app/forms/decidim/meetings/admin/meeting_copy_form.rb +4 -13
  84. data/app/forms/decidim/meetings/admin/meeting_form.rb +76 -26
  85. data/app/forms/decidim/meetings/admin/meeting_registration_invite_form.rb +1 -1
  86. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +17 -4
  87. data/app/forms/decidim/meetings/admin/question_form.rb +44 -0
  88. data/app/forms/decidim/meetings/admin/questionnaire_form.rb +19 -0
  89. data/app/forms/decidim/meetings/answer_choice_form.rb +14 -0
  90. data/app/forms/decidim/meetings/answer_form.rb +64 -0
  91. data/app/forms/decidim/meetings/base_meeting_form.rb +59 -0
  92. data/app/forms/decidim/meetings/close_meeting_form.rb +35 -0
  93. data/app/forms/decidim/meetings/join_meeting_form.rb +1 -0
  94. data/app/forms/decidim/meetings/meeting_form.rb +83 -22
  95. data/app/helpers/decidim/meetings/admin/filterable_helper.rb +13 -0
  96. data/app/helpers/decidim/meetings/application_helper.rb +59 -10
  97. data/app/helpers/decidim/meetings/directory/application_helper.rb +148 -0
  98. data/app/helpers/decidim/meetings/map_helper.rb +2 -2
  99. data/app/helpers/decidim/meetings/meeting_cells_helper.rb +4 -1
  100. data/app/helpers/decidim/meetings/meetings_helper.rb +23 -1
  101. data/app/jobs/decidim/meetings/send_close_meeting_reminder_job.rb +17 -0
  102. data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +4 -1
  103. data/app/mailers/decidim/meetings/close_meeting_reminder_mailer.rb +43 -0
  104. data/app/models/decidim/meetings/agenda_item.rb +2 -2
  105. data/app/models/decidim/meetings/answer.rb +48 -0
  106. data/app/models/decidim/meetings/answer_choice.rb +15 -0
  107. data/app/models/decidim/meetings/answer_option.rb +24 -0
  108. data/app/models/decidim/meetings/invite.rb +2 -2
  109. data/app/models/decidim/meetings/meeting.rb +230 -24
  110. data/app/models/decidim/meetings/poll.rb +19 -0
  111. data/app/models/decidim/meetings/question.rb +54 -0
  112. data/app/models/decidim/meetings/questionnaire.rb +29 -0
  113. data/app/models/decidim/meetings/registration.rb +4 -2
  114. data/app/packs/entrypoints/decidim_meetings.js +6 -0
  115. data/app/packs/entrypoints/decidim_meetings_admin.js +5 -0
  116. data/app/{assets/images/decidim/gamification/badges/attended_meetings.svg → packs/images/decidim/gamification/badges/decidim_gamification_badges_attended_meetings.svg} +0 -0
  117. data/app/{assets/images/decidim/meetings/icon.svg → packs/images/decidim/meetings/decidim_meetings.svg} +0 -0
  118. data/app/packs/src/decidim/meetings/admin/agendas.js +159 -0
  119. data/app/{assets/javascripts/decidim/meetings/admin/destroy_meeting_alert.js.es6 → packs/src/decidim/meetings/admin/destroy_meeting_alert.js} +0 -0
  120. data/app/{assets/javascripts/decidim/meetings/admin/meetings_form.js.es6 → packs/src/decidim/meetings/admin/meetings_form.js} +67 -5
  121. data/app/{assets/javascripts/decidim/meetings/admin/registrations_form.js.es6 → packs/src/decidim/meetings/admin/registrations_form.js} +2 -0
  122. data/app/{assets/javascripts/decidim/meetings/admin/registrations_invite_form.es6 → packs/src/decidim/meetings/admin/registrations_invite_form.js} +3 -3
  123. data/app/packs/src/decidim/meetings/meetings_form.js +73 -0
  124. data/app/packs/src/decidim/meetings/meetings_polls.js +46 -0
  125. data/app/packs/src/decidim/meetings/poll.component.js +166 -0
  126. data/app/packs/stylesheets/decidim/meetings/_header.scss +52 -0
  127. data/app/packs/stylesheets/decidim/meetings/_main.scss +178 -0
  128. data/app/packs/stylesheets/decidim/meetings/_meetings.scss +2 -0
  129. data/app/permissions/decidim/meetings/admin/permissions.rb +16 -8
  130. data/app/permissions/decidim/meetings/permissions.rb +60 -17
  131. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +7 -3
  132. data/app/presenters/decidim/meetings/admin_log/{minutes_presenter.rb → questionnaire_presenter.rb} +13 -16
  133. data/app/presenters/decidim/meetings/meeting_edition_presenter.rb +14 -0
  134. data/app/presenters/decidim/meetings/meeting_presenter.rb +73 -24
  135. data/app/queries/decidim/meetings/admin/invites.rb +1 -1
  136. data/app/queries/decidim/meetings/filtered_meetings.rb +2 -2
  137. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +1 -1
  138. data/app/queries/decidim/meetings/questionnaire_user_answers.rb +29 -0
  139. data/app/serializers/decidim/meetings/{data_portability_invite_serializer.rb → download_your_data_invite_serializer.rb} +4 -3
  140. data/app/serializers/decidim/meetings/{data_portability_registration_serializer.rb → download_your_data_registration_serializer.rb} +4 -3
  141. data/app/serializers/decidim/meetings/registration_serializer.rb +3 -12
  142. data/app/services/decidim/meetings/calendar/base_calendar.rb +4 -3
  143. data/app/services/decidim/meetings/calendar/component_calendar.rb +7 -9
  144. data/app/services/decidim/meetings/calendar/meeting_calendar.rb +33 -0
  145. data/app/services/decidim/meetings/calendar/organization_calendar.rb +1 -1
  146. data/app/services/decidim/meetings/calendar_renderer.rb +5 -3
  147. data/app/services/decidim/meetings/close_meeting_reminder_generator.rb +68 -0
  148. data/app/services/decidim/meetings/diff_renderer.rb +4 -4
  149. data/app/services/decidim/meetings/meeting_iframe_embedder.rb +90 -0
  150. data/app/services/decidim/meetings/meeting_search.rb +7 -20
  151. data/app/views/decidim/meetings/_calendar_modal.html.erb +19 -2
  152. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +1 -1
  153. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +4 -4
  154. data/app/views/decidim/meetings/admin/invites/_form.html.erb +1 -1
  155. data/app/views/decidim/meetings/admin/invites/index.html.erb +1 -1
  156. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +16 -1
  157. data/app/views/decidim/meetings/admin/meeting_copies/_form.html.erb +17 -2
  158. data/app/views/decidim/meetings/admin/meeting_copies/new.html.erb +1 -1
  159. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +47 -2
  160. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +1 -1
  161. data/app/views/decidim/meetings/admin/meetings/edit.html.erb +2 -2
  162. data/app/views/decidim/meetings/admin/meetings/index.html.erb +60 -10
  163. data/app/views/decidim/meetings/admin/meetings/new.html.erb +2 -2
  164. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +34 -0
  165. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +7 -0
  166. data/app/views/decidim/meetings/admin/poll/_form.html.erb +63 -0
  167. data/app/views/decidim/meetings/admin/poll/_question.html.erb +96 -0
  168. data/app/views/decidim/meetings/admin/poll/edit.html.erb +9 -0
  169. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +10 -1
  170. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +20 -18
  171. data/app/views/decidim/meetings/close_meeting_reminder_mailer/close_meeting_reminder.html.erb +5 -0
  172. data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +34 -0
  173. data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +6 -1
  174. data/app/views/decidim/meetings/directory/meetings/index.html.erb +5 -21
  175. data/app/views/decidim/meetings/directory/meetings/index.js.erb +9 -4
  176. data/app/views/decidim/meetings/layouts/live_event.html.erb +55 -0
  177. data/app/views/decidim/meetings/live_events/show.html.erb +12 -0
  178. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +14 -0
  179. data/app/views/decidim/meetings/meeting_closes/edit.html.erb +25 -0
  180. data/app/views/decidim/meetings/meeting_closes/proposals_picker.html.erb +1 -0
  181. data/app/views/decidim/meetings/meetings/_calendar_modal.html.erb +26 -0
  182. data/app/views/decidim/meetings/meetings/_count.html.erb +1 -1
  183. data/app/views/decidim/meetings/meetings/_filters.html.erb +13 -5
  184. data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +4 -4
  185. data/app/views/decidim/meetings/meetings/_form.html.erb +55 -3
  186. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +2 -2
  187. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +7 -18
  188. data/app/views/decidim/meetings/meetings/_meetings.html.erb +24 -1
  189. data/app/views/decidim/meetings/meetings/edit.html.erb +2 -2
  190. data/app/views/decidim/meetings/meetings/index.html.erb +7 -6
  191. data/app/views/decidim/meetings/meetings/index.js.erb +7 -4
  192. data/app/views/decidim/meetings/meetings/new.html.erb +2 -2
  193. data/app/views/decidim/meetings/meetings/show.html.erb +50 -43
  194. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +13 -0
  195. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +19 -0
  196. data/app/views/decidim/meetings/polls/answers/create.js.erb +5 -0
  197. data/app/views/decidim/meetings/polls/questions/_closed_question.html.erb +7 -0
  198. data/app/views/decidim/meetings/polls/questions/_index.html.erb +5 -0
  199. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +43 -0
  200. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +29 -0
  201. data/app/views/decidim/meetings/polls/questions/_question.html.erb +7 -0
  202. data/app/views/decidim/meetings/polls/questions/index.js.erb +5 -0
  203. data/app/views/decidim/meetings/polls/questions/index_admin.js.erb +5 -0
  204. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +8 -3
  205. data/app/views/decidim/participatory_spaces/_upcoming_meeting_for_card.html.erb +1 -1
  206. data/app/views/devise/mailer/join_meeting.html.erb +6 -6
  207. data/config/assets.rb +11 -0
  208. data/config/locales/ar.yml +27 -40
  209. data/config/locales/bg.yml +1 -0
  210. data/config/locales/ca.yml +211 -44
  211. data/config/locales/cs.yml +220 -51
  212. data/config/locales/de.yml +249 -106
  213. data/config/locales/el.yml +6 -43
  214. data/config/locales/en.yml +208 -42
  215. data/config/locales/es-MX.yml +208 -41
  216. data/config/locales/es-PY.yml +209 -42
  217. data/config/locales/es.yml +210 -43
  218. data/config/locales/eu.yml +221 -39
  219. data/config/locales/fi-plain.yml +209 -42
  220. data/config/locales/fi.yml +337 -170
  221. data/config/locales/fr-CA.yml +208 -41
  222. data/config/locales/fr-LU.yml +534 -0
  223. data/config/locales/fr.yml +221 -54
  224. data/config/locales/ga-IE.yml +201 -0
  225. data/config/locales/gl.yml +92 -40
  226. data/config/locales/hu.yml +194 -41
  227. data/config/locales/id-ID.yml +6 -40
  228. data/config/locales/is-IS.yml +4 -30
  229. data/config/locales/it.yml +145 -42
  230. data/config/locales/ja.yml +246 -80
  231. data/config/locales/lb-LU.yml +211 -0
  232. data/config/locales/lb.yml +403 -0
  233. data/config/locales/lt.yml +688 -0
  234. data/config/locales/lv.yml +6 -43
  235. data/config/locales/nl.yml +264 -89
  236. data/config/locales/no.yml +167 -42
  237. data/config/locales/oc-FR.yml +1 -0
  238. data/config/locales/pl.yml +111 -61
  239. data/config/locales/pt-BR.yml +174 -40
  240. data/config/locales/pt.yml +143 -42
  241. data/config/locales/ro-RO.yml +257 -109
  242. data/config/locales/ru.yml +4 -39
  243. data/config/locales/si-LK.yml +1 -0
  244. data/config/locales/sk.yml +6 -43
  245. data/config/locales/sl.yml +1 -3
  246. data/config/locales/sr-CS.yml +1 -0
  247. data/config/locales/sv.yml +193 -42
  248. data/config/locales/sw-KE.yml +1 -0
  249. data/config/locales/tr-TR.yml +187 -120
  250. data/config/locales/uk.yml +4 -31
  251. data/config/locales/val-ES.yml +1 -0
  252. data/config/locales/zh-CN.yml +6 -43
  253. data/db/migrate/20180809134748_add_upcoming_events_as_content_block.rb +1 -1
  254. data/db/migrate/20201006140511_add_online_meeting_url.rb +7 -0
  255. data/db/migrate/20201009124057_add_type_of_meeting.rb +7 -0
  256. data/db/migrate/20201016112641_add_registration_type_and_url_to_meetings.rb +19 -0
  257. data/db/migrate/20201111133246_add_salt_to_decidim_meetings.rb +8 -0
  258. data/db/migrate/20210217124802_add_registration_custom_content_to_meetings.rb +8 -0
  259. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +16 -0
  260. data/db/migrate/20210413050756_add_published_at_to_meetings.rb +7 -0
  261. data/db/migrate/20210413050917_update_published_at_to_existing_meetings.rb +20 -0
  262. data/db/migrate/20210430123416_add_public_participation_to_decidim_meetings_registrations.rb +7 -0
  263. data/db/migrate/20210506180226_merge_meetings_minutes_into_meetings_table.rb +48 -0
  264. data/db/migrate/20210512055802_create_decidim_meetings_polls.rb +10 -0
  265. data/db/migrate/20210512100333_drop_decidim_meetings_minutes_table.rb +78 -0
  266. data/db/migrate/20210518133236_merge_minutes_with_closing_report_in_meetings_table.rb +57 -0
  267. data/db/migrate/20210519133705_add_comments_availability_columns_to_meetings_table.rb +14 -0
  268. data/db/migrate/20210520084247_create_decidim_meetings_questionnaires.rb +11 -0
  269. data/db/migrate/20210520084253_create_decidim_meetings_questions.rb +15 -0
  270. data/db/migrate/20210520084321_create_decidim_meetings_answers.rb +13 -0
  271. data/db/migrate/20210520084330_create_decidim_meetings_answer_options.rb +10 -0
  272. data/db/migrate/20210520084337_create_decidim_meetings_answer_choices.rb +13 -0
  273. data/db/migrate/20210520134834_add_status_to_meetings_questions.rb +7 -0
  274. data/db/migrate/20210602040614_add_setting_embed_iframe_to_meetings.rb +7 -0
  275. data/db/migrate/20210727085318_add_state_field_to_meeting.rb +7 -0
  276. data/db/migrate/20210903143040_add_iframe_access_level_to_decidim_meetings.rb +7 -0
  277. data/db/migrate/20210922140454_transform_show_embedded_iframe_column.rb +15 -0
  278. data/db/migrate/20210928095036_rename_upcoming_events_content_block_to_upcoming_meetings.rb +13 -0
  279. data/db/migrate/20211105115625_remove_not_null_on_customize_registration_email.rb +7 -0
  280. data/lib/decidim/api/agenda_item_type.rb +22 -0
  281. data/lib/decidim/api/agenda_type.rb +19 -0
  282. data/lib/decidim/api/linked_resources_interface.rb +14 -6
  283. data/lib/decidim/api/meeting_type.rb +79 -0
  284. data/lib/decidim/api/meetings_type.rb +26 -0
  285. data/{app/types/decidim/meetings → lib/decidim/api}/service_type.rb +4 -4
  286. data/lib/decidim/api/services_interface.rb +3 -3
  287. data/lib/decidim/content_parsers/meeting_parser.rb +20 -0
  288. data/lib/decidim/content_renderers/meeting_renderer.rb +17 -0
  289. data/lib/decidim/meetings/admin_engine.rb +5 -1
  290. data/lib/decidim/meetings/api.rb +5 -0
  291. data/lib/decidim/meetings/component.rb +108 -34
  292. data/lib/decidim/meetings/directory_engine.rb +3 -3
  293. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +33 -0
  294. data/lib/decidim/meetings/engine.rb +39 -27
  295. data/lib/decidim/meetings/meeting_serializer.rb +5 -3
  296. data/lib/decidim/meetings/polls.rb +10 -0
  297. data/lib/decidim/meetings/test/factories.rb +131 -13
  298. data/lib/decidim/meetings/test/notifications_handling.rb +39 -0
  299. data/lib/decidim/meetings/test/translated_event.rb +22 -0
  300. data/lib/decidim/meetings/user_answers_serializer.rb +47 -0
  301. data/lib/decidim/meetings/version.rb +1 -1
  302. data/lib/decidim/meetings.rb +28 -1
  303. metadata +160 -137
  304. data/app/assets/config/decidim_meetings_manifest.js +0 -8
  305. data/app/assets/javascripts/decidim/meetings/admin/agendas.js.es6 +0 -158
  306. data/app/assets/javascripts/decidim/meetings/meetings_form.js.es6 +0 -9
  307. data/app/commands/decidim/meetings/admin/create_minutes.rb +0 -55
  308. data/app/commands/decidim/meetings/admin/update_minutes.rb +0 -63
  309. data/app/controllers/decidim/meetings/admin/minutes_controller.rb +0 -69
  310. data/app/forms/decidim/meetings/admin/minutes_form.rb +0 -20
  311. data/app/models/decidim/meetings/minutes.rb +0 -22
  312. data/app/types/decidim/meetings/agenda_item_type.rb +0 -28
  313. data/app/types/decidim/meetings/agenda_type.rb +0 -25
  314. data/app/types/decidim/meetings/meeting_type.rb +0 -65
  315. data/app/types/decidim/meetings/meetings_type.rb +0 -32
  316. data/app/types/decidim/meetings/minutes_type.rb +0 -26
  317. data/app/views/decidim/meetings/admin/minutes/_form.html.erb +0 -23
  318. data/app/views/decidim/meetings/admin/minutes/edit.html.erb +0 -7
  319. data/app/views/decidim/meetings/admin/minutes/new.html.erb +0 -7
  320. data/app/views/decidim/participatory_processes/participatory_process_groups/_highlighted_meetings.html.erb +0 -15
  321. data/app/views/decidim/participatory_processes/participatory_process_groups/_meeting.html.erb +0 -10
  322. data/config/locales/ja-JP.yml +0 -494
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4dbf4ab48a65ce688b8060ae56a5785f2b13ce7c190c7a6c1ad6e8ae7824525c
4
- data.tar.gz: aa38ade9d4cfe51a106cd7dedc0fa1e4a02036418a0b2779adeaa74c4532d089
3
+ metadata.gz: 678fc1eb355bb55e7c698fea60f3a8cdf1d126a393726a0666227ae8c39f1282
4
+ data.tar.gz: 63ecfe73be4ed3a68d3ad4e9534701d6b2ede93bf5c00dd7220cf6bc99646e1d
5
5
  SHA512:
6
- metadata.gz: '0102305447283a83d06b46cb722a7f43815514856a63c4e34110218803292908737f7cc2bcb08ea04c44e05e01c8c718313da0626a4feef0c46d89a965d7e7bb'
7
- data.tar.gz: 78a3a5d3f1dcd648cec44de5757cb876261b695640b8e051d376363c367adab0b0af321c4f61600f48d1257f7f89d119f17de67a054c48b936efe33865b03bb1
6
+ metadata.gz: b53a44fb38b7829820ca5fa0fc48dda11522bb63faef1630ad9888241f6e56d40760f5a98bab8de30f81a3b86ffc2a22a220075299e293b1276dea2349f40422
7
+ data.tar.gz: 4adba9e32309bdb3f9ca5a59e116d28aa28c3b651852a8f2d22bf07e58ed72f443d305aa2eff3a0c016e1a919ddf306ad9ce194a8e9863ddcb3fbd514d9881c8
@@ -0,0 +1,16 @@
1
+ <div class="row">
2
+ <div class="column medium-6">
3
+ <% elements.first(4).each do |element| %>
4
+ <%= card_for element, size: :highlighted_list_item %>
5
+ <% end %>
6
+ </div>
7
+ <div class="columns medium-6">
8
+ <% if geolocation_enabled? %>
9
+ <%= cell "decidim/meetings/meetings_map", elements %>
10
+ <% else %>
11
+ <% elements.offset(4).first(4).each do |element| %>
12
+ <%= card_for element, size: :highlighted_list_item %>
13
+ <% end %>
14
+ <% end %>
15
+ </div>
16
+ </div>
@@ -0,0 +1 @@
1
+ <h2 class="section-heading"><%= t("decidim.meetings.content_blocks.upcoming_meetings.upcoming_meetings") %></h2>
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ module ContentBlocks
6
+ class HighlightedMeetingsCell < Decidim::ContentBlocks::HighlightedElementsCell
7
+ def base_relation
8
+ Decidim::Meetings::Meeting
9
+ .except_withdrawn
10
+ .published
11
+ .not_hidden
12
+ .upcoming
13
+ .visible_for(current_user)
14
+ .where(component: published_components)
15
+ end
16
+
17
+ def elements
18
+ @elements ||= base_relation.order(start_time: :asc).limit(limit)
19
+ end
20
+
21
+ def geolocation_enabled?
22
+ Decidim::Map.available?(:geocoding)
23
+ end
24
+
25
+ private
26
+
27
+ def limit
28
+ geolocation_enabled? ? 4 : 8
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,17 +1,17 @@
1
- <section class="wrapper-home upcoming-events home-section">
1
+ <section id="upcoming_meetings" class="wrapper-home upcoming-meetings home-section">
2
2
  <div class="row">
3
- <h3 class="section-heading"><%= t("decidim.meetings.content_blocks.upcoming_events.upcoming_events") %></h3>
3
+ <h3 class="section-heading"><%= t("decidim.meetings.content_blocks.upcoming_meetings.upcoming_meetings") %></h3>
4
4
  <div class="row">
5
5
  <div class="columns medium-6">
6
- <% upcoming_events.first(4).each do |event| %>
6
+ <% upcoming_meetings.first(4).each do |event| %>
7
7
  <%= card_for event, size: :s %>
8
8
  <% end %>
9
9
  </div>
10
10
  <div class="columns medium-6">
11
11
  <% if geolocation_enabled? %>
12
- <%= cell "decidim/meetings/meetings_map", upcoming_events %>
12
+ <%= cell "decidim/meetings/meetings_map", upcoming_meetings %>
13
13
  <% else %>
14
- <% (upcoming_events - upcoming_events.first(4)).each do |event| %>
14
+ <% (upcoming_meetings - upcoming_meetings.first(4)).each do |event| %>
15
15
  <%= card_for event, size: :s %>
16
16
  <% end %>
17
17
  <% end %>
@@ -19,7 +19,7 @@
19
19
  </div>
20
20
  <div class="row">
21
21
  <div class="column">
22
- <%= link_to t("decidim.meetings.content_blocks.upcoming_events.view_all_events"), meetings_directory_path, class: "button hollow button--sc pull-right" %>
22
+ <%= link_to t("decidim.meetings.content_blocks.upcoming_meetings.view_all_meetings"), meetings_directory_path, class: "button hollow button--sc pull-right" %>
23
23
  </div>
24
24
  </div>
25
25
  </div>
@@ -3,23 +3,26 @@
3
3
  module Decidim
4
4
  module Meetings
5
5
  module ContentBlocks
6
- class UpcomingEventsCell < Decidim::ViewModel
6
+ class UpcomingMeetingsCell < Decidim::ViewModel
7
7
  include Decidim::CardHelper
8
8
 
9
9
  def show
10
- return if upcoming_events.blank?
10
+ return if upcoming_meetings.blank?
11
11
 
12
12
  render
13
13
  end
14
14
 
15
- def upcoming_events
16
- @upcoming_events ||= Decidim::Meetings::Meeting
17
- .includes(component: :participatory_space)
18
- .where(component: meeting_components)
19
- .visible_meeting_for(current_user)
20
- .where("end_time >= ?", Time.current)
21
- .order(start_time: :asc)
22
- .limit(limit)
15
+ def upcoming_meetings
16
+ @upcoming_meetings ||= Decidim::Meetings::Meeting
17
+ .includes(:author, component: :participatory_space)
18
+ .where(component: meeting_components)
19
+ .visible_for(current_user)
20
+ .published
21
+ .where("end_time >= ?", Time.current)
22
+ .except_withdrawn
23
+ .not_hidden
24
+ .order(start_time: :asc)
25
+ .limit(limit)
23
26
  end
24
27
 
25
28
  def geolocation_enabled?
@@ -1,7 +1,8 @@
1
1
  <% if upcoming_meetings.any? %>
2
2
  <div class="section row collapse upcoming_meetings">
3
3
  <h3 class="section-heading">
4
- <%= translated_attribute(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.upcoming_meetings") %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: meetings_count) %></a>
4
+ <%= translated_attribute(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.upcoming_meetings") %>
5
+ <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: upcoming_meetings_count) %></a>
5
6
  </h3>
6
7
  <div class="card card--list">
7
8
  <% upcoming_meetings.includes(:component).each do |meeting| %>
@@ -9,7 +10,7 @@
9
10
  <% end %>
10
11
  </div>
11
12
  <%= link_to(
12
- t("decidim.participatory_spaces.highlighted_meetings.see_all", count: meetings_count),
13
+ t("decidim.participatory_spaces.highlighted_meetings.see_all", count: upcoming_meetings_count),
13
14
  main_component_path(model),
14
15
  class: "button button--sc hollow button--right"
15
16
  ) %>
@@ -17,7 +18,7 @@
17
18
  <% elsif past_meetings.any? %>
18
19
  <div class="section row collapse past_meetings">
19
20
  <h3 class="section-heading">
20
- <%= translated_attribute(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.past_meetings") %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: meetings_count) %></a>
21
+ <%= translated_attribute(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.past_meetings") %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: past_meetings_count) %></a>
21
22
  </h3>
22
23
  <div class="card card--list">
23
24
  <% past_meetings.each do |meeting| %>
@@ -25,7 +26,7 @@
25
26
  <% end %>
26
27
  </div>
27
28
  <%= link_to(
28
- t("decidim.participatory_spaces.highlighted_meetings.see_all", count: meetings_count),
29
+ t("decidim.participatory_spaces.highlighted_meetings.see_all", count: past_meetings_count),
29
30
  main_component_path(model),
30
31
  class: "button button--sc hollow button--right"
31
32
  ) %>
@@ -18,7 +18,11 @@ module Decidim
18
18
  private
19
19
 
20
20
  def meetings
21
- @meetings ||= Decidim::Meetings::Meeting.where(component: model).visible_meeting_for(current_user)
21
+ @meetings ||= Decidim::Meetings::Meeting.where(component: model)
22
+ .except_withdrawn
23
+ .published
24
+ .not_hidden
25
+ .visible_for(current_user)
22
26
  end
23
27
 
24
28
  def past_meetings
@@ -32,6 +36,23 @@ module Decidim
32
36
  def meetings_count
33
37
  @meetings_count ||= meetings.count
34
38
  end
39
+
40
+ def past_meetings_count
41
+ @past_meetings_count ||= meetings.past.count
42
+ end
43
+
44
+ def upcoming_meetings_count
45
+ @upcoming_meetings_count ||= meetings.upcoming.count
46
+ end
47
+
48
+ def cache_hash
49
+ hash = []
50
+ hash << "decidim/meetings/highlighted_meetings_for_component"
51
+ hash << meetings.cache_key_with_version
52
+ hash.push(current_user.try(:id))
53
+ hash << I18n.locale.to_s
54
+ hash.join(Decidim.cache_key_separator)
55
+ end
35
56
  end
36
57
  end
37
58
  end
@@ -6,6 +6,12 @@
6
6
  </div>
7
7
  </div>
8
8
 
9
+ <div class="row">
10
+ <div class="columns medium-10 medium-offset-1">
11
+ <%= cell("decidim/public_participation", form) %>
12
+ </div>
13
+ </div>
14
+
9
15
  <div class="row">
10
16
  <div class="columns medium-10 medium-offset-1 help-text">
11
17
  <%= registration_terms_text %>
@@ -1,16 +1,18 @@
1
1
  <% if model.can_be_joined_by?(current_user) %>
2
2
  <% if model.has_registration_for? current_user %>
3
+ <span>
4
+ <%= icon("check", class: "icon--small") %>
5
+ <%= t("going", scope: "decidim.meetings.meetings.show") %>
6
+ </span>
3
7
  <%= action_authorized_button_to(
4
8
  :join,
9
+ t("leave", scope: "decidim.meetings.meetings.show"),
5
10
  meeting_registration_path(model),
6
11
  resource: model,
7
12
  method: :delete,
8
- class: "#{button_classes} active",
9
- data: { disable: true }
10
- ) do %>
11
- <%= icon("check", class: "icon--small") %>
12
- <%= t("going", scope: "decidim.meetings.meetings.show") %>
13
- <% end %>
13
+ class: button_classes,
14
+ data: { disable: true, confirm: t("leave_confirmation", scope: "decidim.meetings.meetings.show") }
15
+ ) %>
14
16
  <% else %>
15
17
  <% if model.registration_form_enabled? %>
16
18
  <%= action_authorized_link_to(
@@ -35,4 +37,11 @@
35
37
  <% if shows_remaining_slots? %>
36
38
  <span><%= t("remaining_slots", scope: "decidim.meetings.meetings.show", count: model.remaining_slots) %></span>
37
39
  <% end %>
40
+ <% elsif model.on_different_platform? %>
41
+ <%= action_authorized_link_to(
42
+ :join,
43
+ i18n_join_text,
44
+ model.registration_url,
45
+ class: button_classes
46
+ ) %>
38
47
  <% end %>
@@ -50,7 +50,7 @@ module Decidim
50
50
  end
51
51
 
52
52
  def registration_terms_text
53
- decidim_sanitize translated_attribute(model.registration_terms)
53
+ decidim_sanitize_editor translated_attribute(model.registration_terms)
54
54
  end
55
55
 
56
56
  def registration_form
@@ -2,13 +2,21 @@
2
2
 
3
3
  module Decidim
4
4
  module Meetings
5
- # A cell to display when a meeting has been created.
5
+ # A cell to display when actions happen on a meeting.
6
6
  class MeetingActivityCell < ActivityCell
7
7
  def title
8
- I18n.t(
9
- "decidim.meetings.last_activity.new_meeting_at_html",
10
- link: participatory_space_link
11
- )
8
+ case action
9
+ when "update"
10
+ I18n.t(
11
+ "decidim.meetings.last_activity.meeting_updated_at_html",
12
+ link: participatory_space_link
13
+ )
14
+ else
15
+ I18n.t(
16
+ "decidim.meetings.last_activity.new_meeting_at_html",
17
+ link: participatory_space_link
18
+ )
19
+ end
12
20
  end
13
21
 
14
22
  def resource_link_text
@@ -18,6 +18,8 @@ module Decidim
18
18
 
19
19
  def card_size
20
20
  case @options[:size]
21
+ when :highlighted_list_item
22
+ "decidim/meetings/meeting_highlighted_list_item"
21
23
  when :list_item
22
24
  "decidim/meetings/meeting_list_item"
23
25
  when :s
@@ -27,10 +29,6 @@ module Decidim
27
29
  end
28
30
  end
29
31
 
30
- def title
31
- present(model).title
32
- end
33
-
34
32
  def resource_icon
35
33
  icon "meetings", remove_icon_class: true, width: 40, height: 70
36
34
  end
@@ -0,0 +1,21 @@
1
+ <article class="card">
2
+ <div class="card__content">
3
+ <div class="card__header">
4
+ <%= link_to meeting_path, class: "card__link" do %>
5
+ <h5 class="card__title">
6
+ <%= title %>
7
+ </h5>
8
+ <% end %>
9
+ </div>
10
+ <div class="row">
11
+ <time datetime="<%= l(model.start_time, format: :long_dashed) %>" class="column medium-4 text-muted">
12
+ <%= icon "datetime", class: "mr-xs", role: "img", "aria-hidden": true %>
13
+ <%= l start_date, format: :decidim_with_month_name %>
14
+ </time>
15
+ <div class="column medium-8 text-muted">
16
+ <%= participatory_space_class_name %>
17
+ <%= link_to participatory_space_title, participatory_space_path %>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ </article>
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ # This cell renders the Highlighted List Item Card (:highlighted_list_item)
6
+ # meeting card for an instance of a Meeting. This card is used in the
7
+ # content block of Highlighted Meetings and is based on :s size card
8
+ class MeetingHighlightedListItemCell < MeetingSCell; end
9
+ end
10
+ end
@@ -13,8 +13,18 @@ module Decidim
13
13
 
14
14
  private
15
15
 
16
+ def cache_hash
17
+ hash = []
18
+ hash.push(I18n.locale.to_s)
19
+ hash.push(model.cache_key_with_version)
20
+ hash.push(model.component.cache_key_with_version)
21
+ hash.push(model.must_render_translation?(current_organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
22
+
23
+ hash.join(Decidim.cache_key_separator)
24
+ end
25
+
16
26
  def resource_path
17
- resource_locator(model).path(filter_link_params)
27
+ resource_locator(model).path
18
28
  end
19
29
 
20
30
  def title
@@ -1 +1,5 @@
1
- <%= cell "decidim/address", model %>
1
+ <% if online_meeting? %>
2
+ <%= cell "decidim/meetings/meeting_url", model %>
3
+ <% else %>
4
+ <%= cell "decidim/address", model %>
5
+ <% end %>
@@ -27,8 +27,58 @@ module Decidim
27
27
  present(model).title
28
28
  end
29
29
 
30
+ def description
31
+ present(model).description(strip_tags: true).truncate(120, separator: /\s/)
32
+ end
33
+
34
+ def badge
35
+ render if has_badge?
36
+ end
37
+
38
+ def has_badge?
39
+ withdrawn?
40
+ end
41
+
42
+ def state_classes
43
+ ["alert"]
44
+ end
45
+
46
+ delegate :online_meeting?, to: :model
47
+
30
48
  private
31
49
 
50
+ def cache_hash
51
+ hash = []
52
+ hash << I18n.locale.to_s
53
+ hash << model.cache_key_with_version
54
+ hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
55
+ hash << Digest::MD5.hexdigest(resource_image_path) if resource_image_path
56
+ hash << model.comments_count
57
+ hash << model.follows_count
58
+ hash << render_space? ? 1 : 0
59
+
60
+ if current_user
61
+ hash << current_user.cache_key_with_version
62
+ hash << current_user.follows?(model) ? 1 : 0
63
+ end
64
+ hash << Digest::MD5.hexdigest(model.author.cache_key_with_version)
65
+ hash << (model.must_render_translation?(current_organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
66
+
67
+ hash.join(Decidim.cache_key_separator)
68
+ end
69
+
70
+ def has_state?
71
+ withdrawn?
72
+ end
73
+
74
+ def resource_image_path
75
+ model.photo&.url
76
+ end
77
+
78
+ def has_image?
79
+ true
80
+ end
81
+
32
82
  def spans_multiple_dates?
33
83
  start_date != end_date
34
84
  end
@@ -62,6 +112,10 @@ module Decidim
62
112
  def show_footer_actions?
63
113
  options[:show_footer_actions]
64
114
  end
115
+
116
+ def statuses
117
+ [:follow, :comments_count]
118
+ end
65
119
  end
66
120
  end
67
121
  end
@@ -26,6 +26,28 @@ module Decidim
26
26
  def presenter
27
27
  @presenter ||= Decidim::Meetings::MeetingPresenter.new(model)
28
28
  end
29
+
30
+ private
31
+
32
+ def cache_hash
33
+ hash = []
34
+ hash << I18n.locale.to_s
35
+ hash << model.cache_key_with_version
36
+ hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
37
+ hash << Digest::MD5.hexdigest(resource_image_path) if resource_image_path
38
+ hash << model.comments_count
39
+ hash << model.follows_count
40
+ hash << render_space? ? 1 : 0
41
+
42
+ if current_user
43
+ hash << current_user.cache_key_with_version
44
+ hash << current_user.follows?(model) ? 1 : 0
45
+ end
46
+ hash << Digest::MD5.hexdigest(model.author.cache_key_with_version)
47
+ hash << (model.must_render_translation?(current_organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
48
+
49
+ hash.join(Decidim.cache_key_separator)
50
+ end
29
51
  end
30
52
  end
31
53
  end
@@ -0,0 +1,20 @@
1
+ <div class="card__icondata">
2
+ <ul class="card-data">
3
+ <li class="card-data__item">
4
+ <%= resource_icon %>
5
+ </li>
6
+ <li class="card-data__item">
7
+ <div class="text-left">
8
+ <div class="card__icondata--address">
9
+ <% if future? %>
10
+ <span><%= t("link_available_soon", scope: "decidim.meetings.meetings.show") %></span>
11
+ <% elsif live? %>
12
+ <span><%= link_to(t("join", scope: "decidim.meetings.meetings.show"), live_event_url, target: "_blank") %></span><br>
13
+ <% else %>
14
+ <span><%= link_to(t("visit_finished", scope: "decidim.meetings.meetings.show"), live_event_url, target: "_blank") %></span><br>
15
+ <% end %>
16
+ </div>
17
+ </div>
18
+ </li>
19
+ </ul>
20
+ </div>
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ # This cell renders the URL address of an online meeting.
6
+ class MeetingUrlCell < Decidim::Meetings::OnlineMeetingCell
7
+ include Cell::ViewModel::Partial
8
+ include LayoutHelper
9
+
10
+ private
11
+
12
+ def resource_icon
13
+ icon icon_name, class: "icon--big", role: "img", "aria-hidden": true
14
+ end
15
+
16
+ def icon_name
17
+ if has_meeting_url?
18
+ "video"
19
+ else
20
+ "timer"
21
+ end
22
+ end
23
+
24
+ def has_meeting_url?
25
+ @has_meeting_url ||= model.online_meeting_url.present?
26
+ end
27
+ end
28
+ end
29
+ end
@@ -4,7 +4,7 @@
4
4
  <h3>${title}</h3>
5
5
  <div id="bodyContent">
6
6
  <p>{{html description}}</p>
7
- <div class="map__date-adress">
7
+ <div class="map__date-address">
8
8
  <div class="card__datetime">
9
9
  <div class="card__datetime__date">
10
10
  ${startTimeDay} <span class="card__datetime__month">${startTimeMonth} ${startTimeYear}</span>
@@ -15,12 +15,18 @@ module Decidim
15
15
  end
16
16
 
17
17
  def geocoded_meetings
18
- @geocoded_meetings ||= meetings.select(&:geocoded?)
18
+ @geocoded_meetings ||= meetings.select(&:geocoded_and_valid?)
19
19
  end
20
20
 
21
21
  def meetings
22
22
  model
23
23
  end
24
+
25
+ private
26
+
27
+ def cache_hash
28
+ nil
29
+ end
24
30
  end
25
31
  end
26
32
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ # This cell defines methods required for other cells to render
6
+ # online meeting urls
7
+ class OnlineMeetingCell < Decidim::ViewModel
8
+ delegate :live?, to: :model
9
+
10
+ def show
11
+ return if model.iframe_embed_type_none?
12
+ return unless model.iframe_access_level_allowed_for_user?(current_user)
13
+ return unless assembly_privacy_allowed?
14
+
15
+ render
16
+ end
17
+
18
+ protected
19
+
20
+ def embedder
21
+ @embedder ||= MeetingIframeEmbedder.new(model.online_meeting_url)
22
+ end
23
+
24
+ delegate :embeddable?, to: :embedder
25
+
26
+ def live_event_url
27
+ if embeddable? && !model.iframe_embed_type_open_in_new_tab?
28
+ Decidim::EngineRouter.main_proxy(model.component).meeting_live_event_path(meeting_id: model.id)
29
+ else
30
+ model.online_meeting_url
31
+ end
32
+ end
33
+
34
+ def future?
35
+ Time.current <= model.start_time && !live?
36
+ end
37
+
38
+ def assembly_privacy_allowed?
39
+ return true if !private_transparent_assembly? || current_user&.admin?
40
+
41
+ model.participatory_space.users.include?(current_user)
42
+ end
43
+
44
+ def private_transparent_assembly?
45
+ return unless model.participatory_space.is_a?(Decidim::Assembly)
46
+
47
+ model.participatory_space.private_space? && model.participatory_space.is_transparent?
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,44 @@
1
+ <% if online_meeting_url? %>
2
+ <% if live? || future? %>
3
+ <div class="card card--secondary">
4
+ <div class="card__content text-center">
5
+ <% if live? %>
6
+ <div class="heading1 text-primary">
7
+ <%= icon "audio", class: "heading4" %>
8
+ </div>
9
+ <div>
10
+ <strong class="heading5"><%= t("live_event", scope: "decidim.meetings.meetings.show") %></strong>
11
+ <% unless show_embed? %>
12
+ <p><small><%= t("micro_camera_permissions_warning", scope: "decidim.meetings.meetings.show") %></small></p>
13
+ <% end %>
14
+ </div>
15
+ <% end %>
16
+
17
+ <% if show_embed? && live? %>
18
+ <div class="<%= "margin-top-3" if live? %> absolutes aspect-ratio-16-9">
19
+ <%== embed_code(request.host) %>
20
+ </div>
21
+ <% elsif live? || future? %>
22
+ <div class="absolutes">
23
+ <% if live? %>
24
+ <%= link_to t("join", scope: "decidim.meetings.meetings.show"), live_event_url, target: "_blank", class: "button button--sc" %>
25
+ <% elsif future? %>
26
+ <span><%= t("link_closed", scope: "decidim.meetings.meetings.show") %></span>
27
+ <% end %>
28
+ </div>
29
+ <% end %>
30
+ </div>
31
+ </div>
32
+ <% end %>
33
+ <% else %>
34
+ <div class="card card--secondary">
35
+ <div class="card__content address">
36
+ <div class="address__info">
37
+ <%= icon "timer", role: "img", "aria-hidden": true, remove_icon_class: true, width: 40, height: 70 %>
38
+ <div class="address__details">
39
+ <span><%= t("link_available_soon", scope: "decidim.meetings.meetings.show") %></span>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ <% end %>