decidim-meetings 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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/attending_organizations_list_cell.rb +32 -0
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +21 -0
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +10 -0
  5. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +36 -0
  6. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings_cell.rb +8 -18
  7. data/app/cells/decidim/meetings/dates_and_map/show.erb +25 -0
  8. data/app/cells/decidim/meetings/dates_and_map/static_map.erb +1 -0
  9. data/app/cells/decidim/meetings/dates_and_map_cell.rb +35 -0
  10. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +32 -30
  11. data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +76 -16
  12. data/app/cells/decidim/meetings/join_meeting_button/registration_modal.erb +25 -0
  13. data/app/cells/decidim/meetings/join_meeting_button/remaining_slots.erb +4 -0
  14. data/app/cells/decidim/meetings/join_meeting_button/show.erb +7 -19
  15. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +3 -7
  16. data/app/cells/decidim/meetings/meeting_activity_cell.rb +1 -12
  17. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +64 -0
  18. data/app/cells/decidim/meetings/meeting_cell.rb +2 -6
  19. data/app/cells/decidim/meetings/meeting_l/image.erb +5 -0
  20. data/app/cells/decidim/meetings/meeting_l_cell.rb +33 -0
  21. data/app/cells/decidim/meetings/meeting_month/show.erb +33 -0
  22. data/app/cells/decidim/meetings/meeting_month_cell.rb +72 -0
  23. data/app/cells/decidim/meetings/meeting_s_cell.rb +5 -37
  24. data/app/cells/decidim/meetings/meetings_map/show.erb +9 -24
  25. data/app/cells/decidim/meetings/meetings_map_cell.rb +1 -1
  26. data/app/cells/decidim/meetings/online_meeting_cell.rb +1 -0
  27. data/app/cells/decidim/meetings/online_meeting_link/show.erb +18 -41
  28. data/app/cells/decidim/meetings/public_participants_list/show.erb +4 -15
  29. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -1
  30. data/app/commands/decidim/meetings/admin/create_meeting.rb +1 -1
  31. data/app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb +5 -5
  32. data/app/commands/decidim/meetings/admin/publish_meeting.rb +1 -1
  33. data/app/commands/decidim/meetings/admin/unpublish_meeting.rb +1 -1
  34. data/app/commands/decidim/meetings/create_meeting.rb +14 -3
  35. data/app/commands/decidim/meetings/decline_invitation.rb +1 -1
  36. data/app/commands/decidim/meetings/join_meeting.rb +5 -5
  37. data/app/commands/decidim/meetings/update_meeting.rb +13 -3
  38. data/app/controllers/concerns/decidim/meetings/component_filterable.rb +4 -4
  39. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +6 -6
  40. data/app/controllers/decidim/meetings/admin/invites_controller.rb +3 -3
  41. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +2 -4
  42. data/app/controllers/decidim/meetings/admin/meeting_copies_controller.rb +3 -3
  43. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +7 -7
  44. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +4 -4
  45. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +6 -6
  46. data/app/controllers/decidim/meetings/application_controller.rb +11 -0
  47. data/app/controllers/decidim/meetings/calendars_controller.rb +0 -1
  48. data/app/controllers/decidim/meetings/directory/application_controller.rb +12 -0
  49. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +5 -30
  50. data/app/controllers/decidim/meetings/live_events_controller.rb +1 -0
  51. data/app/controllers/decidim/meetings/meeting_closes_controller.rb +2 -3
  52. data/app/controllers/decidim/meetings/meetings_controller.rb +75 -7
  53. data/app/controllers/decidim/meetings/polls/answers_controller.rb +2 -2
  54. data/app/controllers/decidim/meetings/polls/questions_controller.rb +1 -1
  55. data/app/controllers/decidim/meetings/registrations_controller.rb +5 -5
  56. data/app/events/decidim/meetings/close_meeting_event.rb +1 -1
  57. data/app/events/decidim/meetings/meeting_event.rb +1 -1
  58. data/app/events/decidim/meetings/meeting_registration_notification_event.rb +3 -3
  59. data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +1 -1
  60. data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +1 -1
  61. data/app/events/decidim/meetings/registration_code_validated_event.rb +1 -1
  62. data/app/forms/decidim/meetings/admin/meeting_form.rb +5 -1
  63. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +2 -2
  64. data/app/forms/decidim/meetings/admin/validate_registration_code_form.rb +1 -1
  65. data/app/forms/decidim/meetings/base_meeting_form.rb +1 -1
  66. data/app/forms/decidim/meetings/meeting_form.rb +3 -3
  67. data/app/helpers/decidim/meetings/admin/application_helper.rb +1 -0
  68. data/app/helpers/decidim/meetings/application_helper.rb +18 -25
  69. data/app/helpers/decidim/meetings/directory/application_helper.rb +10 -58
  70. data/app/helpers/decidim/meetings/map_helper.rb +2 -9
  71. data/app/helpers/decidim/meetings/meetings_helper.rb +6 -5
  72. data/app/jobs/decidim/meetings/hide_all_created_by_author_job.rb +13 -0
  73. data/app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb +1 -1
  74. data/app/mailers/decidim/meetings/registration_mailer.rb +1 -1
  75. data/app/models/decidim/meetings/meeting.rb +11 -32
  76. data/app/models/decidim/meetings/question.rb +1 -1
  77. data/app/packs/entrypoints/decidim_meetings.js +3 -0
  78. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_attended_meetings.svg +42 -1
  79. data/app/packs/src/decidim/meetings/admin/agendas.js +3 -4
  80. data/app/packs/src/decidim/meetings/admin/registrations_form.js +12 -4
  81. data/app/packs/src/decidim/meetings/meetings_form.js +1 -1
  82. data/app/packs/src/decidim/meetings/poll.component.js +1 -1
  83. data/app/packs/stylesheets/decidim/meetings/_calendar.scss +47 -0
  84. data/app/packs/stylesheets/decidim/meetings/_item.scss +177 -0
  85. data/app/packs/stylesheets/decidim/meetings/_list.scss +58 -0
  86. data/app/packs/stylesheets/decidim/meetings/_live_event.scss +128 -0
  87. data/app/packs/stylesheets/decidim/meetings/meetings.scss +4 -0
  88. data/app/permissions/decidim/meetings/permissions.rb +15 -2
  89. data/app/presenters/decidim/meetings/admin_log/invite_presenter.rb +2 -2
  90. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +2 -2
  91. data/app/presenters/decidim/meetings/admin_log/questionnaire_presenter.rb +2 -2
  92. data/app/presenters/decidim/meetings/meeting_presenter.rb +8 -2
  93. data/app/services/decidim/meetings/calendar/component_calendar.rb +1 -1
  94. data/app/services/decidim/meetings/calendar/meeting_to_event.rb +6 -1
  95. data/app/services/decidim/meetings/close_meeting_reminder_generator.rb +2 -2
  96. data/app/services/decidim/meetings/meeting_iframe_embedder.rb +1 -1
  97. data/app/views/decidim/meetings/_calendar_modal.html.erb +19 -21
  98. data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +12 -12
  99. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb +8 -8
  100. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child_template.html.erb +1 -1
  101. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +3 -3
  102. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +54 -50
  103. data/app/views/decidim/meetings/admin/agenda/edit.html.erb +18 -6
  104. data/app/views/decidim/meetings/admin/agenda/new.html.erb +17 -5
  105. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +11 -2
  106. data/app/views/decidim/meetings/admin/invites/_form.html.erb +38 -28
  107. data/app/views/decidim/meetings/admin/invites/index.html.erb +77 -81
  108. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +26 -28
  109. data/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +17 -5
  110. data/app/views/decidim/meetings/admin/meeting_copies/new.html.erb +17 -6
  111. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +76 -83
  112. data/app/views/decidim/meetings/admin/meetings/_service.html.erb +14 -10
  113. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +9 -5
  114. data/app/views/decidim/meetings/admin/meetings/edit.html.erb +17 -7
  115. data/app/views/decidim/meetings/admin/meetings/index.html.erb +133 -129
  116. data/app/views/decidim/meetings/admin/meetings/new.html.erb +16 -6
  117. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +2 -1
  118. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +1 -1
  119. data/app/views/decidim/meetings/admin/poll/_form.html.erb +17 -32
  120. data/app/views/decidim/meetings/admin/poll/_question.html.erb +81 -75
  121. data/app/views/decidim/meetings/admin/poll/edit.html.erb +28 -8
  122. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +32 -55
  123. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +59 -26
  124. data/app/views/decidim/meetings/directory/meetings/index.html.erb +15 -20
  125. data/app/views/decidim/meetings/directory/meetings/index.js.erb +1 -23
  126. data/app/views/decidim/meetings/layouts/_aside_block.html.erb +8 -0
  127. data/app/views/decidim/meetings/layouts/live_event.html.erb +20 -19
  128. data/app/views/decidim/meetings/live_events/show.html.erb +4 -5
  129. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +3 -10
  130. data/app/views/decidim/meetings/meeting_closes/edit.html.erb +17 -21
  131. data/app/views/decidim/meetings/meetings/_actions.html.erb +6 -0
  132. data/app/views/decidim/meetings/meetings/_add_to_calendar_modal.html.erb +17 -0
  133. data/app/views/decidim/meetings/meetings/_form.html.erb +26 -34
  134. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +3 -22
  135. data/app/views/decidim/meetings/meetings/_meeting.html.erb +74 -0
  136. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +28 -26
  137. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +98 -0
  138. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +23 -36
  139. data/app/views/decidim/meetings/meetings/edit.html.erb +17 -21
  140. data/app/views/decidim/meetings/meetings/index.html.erb +15 -33
  141. data/app/views/decidim/meetings/meetings/index.js.erb +1 -23
  142. data/app/views/decidim/meetings/meetings/new.html.erb +17 -21
  143. data/app/views/decidim/meetings/meetings/show.html.erb +8 -164
  144. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +2 -2
  145. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +6 -6
  146. data/app/views/decidim/meetings/polls/answers/create.js.erb +1 -1
  147. data/app/views/decidim/meetings/polls/questions/_index.html.erb +1 -1
  148. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +5 -5
  149. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +7 -9
  150. data/app/views/decidim/meetings/polls/questions/_question.html.erb +3 -3
  151. data/app/views/decidim/meetings/polls/questions/index_admin.js.erb +1 -1
  152. data/app/views/decidim/meetings/shared/_filters.html.erb +20 -0
  153. data/app/views/decidim/meetings/shared/_index.html.erb +24 -0
  154. data/app/views/decidim/meetings/shared/_index.js.erb +16 -0
  155. data/app/views/decidim/meetings/shared/_meetings.html.erb +33 -0
  156. data/app/views/decidim/meetings/shared/_meetings_aside.html.erb +18 -0
  157. data/app/views/decidim/meetings/versions/show.html.erb +13 -3
  158. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +15 -14
  159. data/config/assets.rb +0 -2
  160. data/config/environment.rb +3 -0
  161. data/config/locales/ar.yml +3 -97
  162. data/config/locales/bg.yml +0 -7
  163. data/config/locales/ca.yml +49 -70
  164. data/config/locales/cs.yml +52 -73
  165. data/config/locales/de.yml +52 -70
  166. data/config/locales/el.yml +45 -54
  167. data/config/locales/en.yml +54 -75
  168. data/config/locales/es-MX.yml +50 -68
  169. data/config/locales/es-PY.yml +51 -69
  170. data/config/locales/es.yml +48 -69
  171. data/config/locales/eu.yml +131 -149
  172. data/config/locales/fi-plain.yml +49 -67
  173. data/config/locales/fi.yml +64 -82
  174. data/config/locales/fr-CA.yml +45 -66
  175. data/config/locales/fr.yml +49 -70
  176. data/config/locales/ga-IE.yml +0 -16
  177. data/config/locales/gl.yml +1 -66
  178. data/config/locales/hu.yml +3 -89
  179. data/config/locales/id-ID.yml +1 -63
  180. data/config/locales/is-IS.yml +1 -21
  181. data/config/locales/it.yml +1 -85
  182. data/config/locales/ja.yml +43 -67
  183. data/config/locales/lb.yml +1 -66
  184. data/config/locales/lt.yml +59 -66
  185. data/config/locales/lv.yml +1 -64
  186. data/config/locales/nl.yml +1 -95
  187. data/config/locales/no.yml +1 -80
  188. data/config/locales/pl.yml +10 -83
  189. data/config/locales/pt-BR.yml +1 -86
  190. data/config/locales/pt.yml +1 -85
  191. data/config/locales/ro-RO.yml +8 -82
  192. data/config/locales/ru.yml +1 -62
  193. data/config/locales/sk.yml +1 -64
  194. data/config/locales/sq-AL.yml +1 -0
  195. data/config/locales/sr-CS.yml +0 -6
  196. data/config/locales/sv.yml +7 -88
  197. data/config/locales/th-TH.yml +1 -0
  198. data/config/locales/tr-TR.yml +2 -74
  199. data/config/locales/uk.yml +1 -55
  200. data/config/locales/zh-CN.yml +1 -70
  201. data/config/locales/zh-TW.yml +21 -54
  202. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +1 -1
  203. data/db/migrate/20230427105701_change_types_and_registration_types_on_meetings.rb +49 -0
  204. data/lib/decidim/meetings/admin_engine.rb +2 -2
  205. data/lib/decidim/meetings/component.rb +5 -217
  206. data/lib/decidim/meetings/content_blocks/registry_manager.rb +17 -0
  207. data/lib/decidim/meetings/directory_engine.rb +4 -6
  208. data/lib/decidim/meetings/engine.rb +65 -29
  209. data/lib/decidim/meetings/meeting_serializer.rb +5 -5
  210. data/lib/decidim/meetings/seeds.rb +188 -0
  211. data/lib/decidim/meetings/test/factories.rb +126 -18
  212. data/lib/decidim/meetings/test/notifications_handling.rb +3 -3
  213. data/lib/decidim/meetings/test/translated_event.rb +1 -1
  214. data/lib/decidim/meetings/user_answers_serializer.rb +1 -1
  215. data/lib/decidim/meetings/version.rb +1 -1
  216. metadata +60 -55
  217. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/elements.erb +0 -16
  218. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/heading.erb +0 -1
  219. data/app/cells/decidim/meetings/content_blocks/upcoming_meetings/show.erb +0 -26
  220. data/app/cells/decidim/meetings/content_blocks/upcoming_meetings_cell.rb +0 -55
  221. data/app/cells/decidim/meetings/join_meeting_button/registration_confirm.erb +0 -31
  222. data/app/cells/decidim/meetings/meeting_highlighted_list_item/show.erb +0 -21
  223. data/app/cells/decidim/meetings/meeting_highlighted_list_item_cell.rb +0 -10
  224. data/app/cells/decidim/meetings/meeting_list_item/show.erb +0 -14
  225. data/app/cells/decidim/meetings/meeting_list_item_cell.rb +0 -44
  226. data/app/cells/decidim/meetings/meeting_m/address.erb +0 -5
  227. data/app/cells/decidim/meetings/meeting_m/data.erb +0 -2
  228. data/app/cells/decidim/meetings/meeting_m/date.erb +0 -8
  229. data/app/cells/decidim/meetings/meeting_m/footer.erb +0 -9
  230. data/app/cells/decidim/meetings/meeting_m/multiple_dates.erb +0 -17
  231. data/app/cells/decidim/meetings/meeting_m/single_date.erb +0 -9
  232. data/app/cells/decidim/meetings/meeting_m/tags.erb +0 -1
  233. data/app/cells/decidim/meetings/meeting_m_cell.rb +0 -121
  234. data/app/cells/decidim/meetings/meeting_s/show.erb +0 -27
  235. data/app/controllers/concerns/decidim/meetings/filterable.rb +0 -27
  236. data/app/controllers/decidim/meetings/widgets_controller.rb +0 -20
  237. data/app/packs/stylesheets/decidim/meetings/_header.scss +0 -52
  238. data/app/packs/stylesheets/decidim/meetings/_main.scss +0 -178
  239. data/app/packs/stylesheets/decidim/meetings/_meetings.scss +0 -2
  240. data/app/queries/decidim/meetings/admin/invites.rb +0 -60
  241. data/app/views/decidim/meetings/admin/meeting_closes/proposals_picker.html.erb +0 -1
  242. data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +0 -34
  243. data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +0 -26
  244. data/app/views/decidim/meetings/meeting_closes/proposals_picker.html.erb +0 -1
  245. data/app/views/decidim/meetings/meetings/_calendar_modal.html.erb +0 -26
  246. data/app/views/decidim/meetings/meetings/_filters.html.erb +0 -40
  247. data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +0 -18
  248. data/app/views/decidim/meetings/meetings/_meetings.html.erb +0 -48
  249. data/app/views/decidim/meetings/versions/index.html.erb +0 -8
  250. data/app/views/decidim/participatory_spaces/_upcoming_meeting_for_card.html.erb +0 -4
  251. data/lib/decidim/meetings/seeds/city.jpeg +0 -0
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module Meetings
7
+ # This cell renders the List (:l) meeting card
8
+ # for an instance of a Meeting
9
+ class MeetingLCell < Decidim::CardLCell
10
+ delegate :component_settings, to: :controller
11
+
12
+ alias meeting model
13
+
14
+ def has_image?
15
+ true
16
+ end
17
+
18
+ def extra_class
19
+ "card__calendar-list__reset"
20
+ end
21
+
22
+ def image
23
+ render
24
+ end
25
+
26
+ private
27
+
28
+ def metadata_cell
29
+ "decidim/meetings/meeting_card_metadata"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ <table class="meeting-calendar__month">
2
+ <caption><%= month_name %></caption>
3
+ <thead>
4
+ <% abbr_day_names.each_with_index do |day, i| %>
5
+ <th><abbr title="<%= day_names[i] %>"><%= day %></abbr></th>
6
+ <% end %>
7
+ </thead>
8
+ <tbody>
9
+ <% weeks.each do |days| %>
10
+ <tr>
11
+ <% is_first_day = first_day_of_month?(days.first) %>
12
+
13
+ <% if is_first_day %>
14
+ <% (7 - days.length).times do %>
15
+ <td></td>
16
+ <% end %>
17
+ <% end %>
18
+
19
+ <% days.each do |day| %>
20
+ <%= content_tag :td, class: day_class(day) do %>
21
+ <time datetime="<%= day %>"><%= l(day, format: "%d") %></time>
22
+ <% end %>
23
+ <% end %>
24
+
25
+ <% if !is_first_day %>
26
+ <% (7 - days.length).times do %>
27
+ <td></td>
28
+ <% end %>
29
+ <% end %>
30
+ </tr>
31
+ <% end %>
32
+ </tbody>
33
+ </table>
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ class MeetingMonthCell < Decidim::ViewModel
6
+ alias meetings model
7
+
8
+ delegate :month, to: :start_date
9
+
10
+ def show
11
+ render if meetings_in_this_month?
12
+ end
13
+
14
+ def meetings_in_this_month?
15
+ meetings.collect(&:start_time).map { |date| date.strftime("%m").to_i }.any? month
16
+ end
17
+
18
+ def month_days
19
+ start_date.to_date.all_month
20
+ end
21
+
22
+ def weeks
23
+ month_days.group_by do |day|
24
+ (1 - first_week_date_rotation).days.since(day).cweek
25
+ end.values
26
+ end
27
+
28
+ def month_name
29
+ @month_name ||= I18n.t("date.month_names")[month]
30
+ end
31
+
32
+ def abbr_day_names
33
+ @abbr_day_names ||= I18n.t("date.abbr_day_names").rotate(first_week_date_rotation)
34
+ end
35
+
36
+ def day_names
37
+ @day_names ||= I18n.t("date.day_names").rotate(first_week_date_rotation)
38
+ end
39
+
40
+ def first_day_of_month?(date)
41
+ date.day == 1
42
+ end
43
+
44
+ def day_class(date)
45
+ return "is-today" if date == Date.current
46
+ return if events.exclude?(date)
47
+
48
+ "is-#{date < Date.current ? "past" : "upcoming"}-event"
49
+ end
50
+
51
+ def beginning_of_week
52
+ @beginning_of_week ||= options[:beginning_of_week] || Date.beginning_of_week
53
+ end
54
+
55
+ def start_date
56
+ options[:start_date] || first_meeting.start_time
57
+ end
58
+
59
+ def events
60
+ options[:events] || meetings.select { |meeting| meeting.start_time.month == month }.map { |meeting| meeting.start_time.to_date }
61
+ end
62
+
63
+ def first_meeting
64
+ @first_meeting ||= meetings.first
65
+ end
66
+
67
+ def first_week_date_rotation
68
+ @first_week_date_rotation ||= Date::DAYS_INTO_WEEK[beginning_of_week.to_sym].to_i
69
+ end
70
+ end
71
+ end
72
+ end
@@ -2,45 +2,13 @@
2
2
 
3
3
  module Decidim
4
4
  module Meetings
5
- # This cell renders the Small (:s) meeting card
6
- # for an given instance of a Meeting
7
- class MeetingSCell < MeetingMCell
8
- def meeting_path
9
- resource_locator(model).path
10
- end
11
-
12
- def participatory_space_class_name
13
- model.component.participatory_space.class.model_name.human
14
- end
15
-
16
- def participatory_space_title
17
- translated_attribute model.component.participatory_space.title
18
- end
19
-
20
- def participatory_space_path
21
- resource_locator(model.component.participatory_space).path
22
- end
23
-
5
+ # This cell renders the Search (:s) meeting card
6
+ # for a given instance of a Meeting
7
+ class MeetingSCell < Decidim::CardSCell
24
8
  private
25
9
 
26
- def cache_hash
27
- hash = []
28
- hash << I18n.locale.to_s
29
- hash << model.cache_key_with_version
30
- hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
31
- hash << Digest::MD5.hexdigest(resource_image_path) if resource_image_path
32
- hash << model.comments_count
33
- hash << model.follows_count
34
- hash << render_space? ? 1 : 0
35
-
36
- if current_user
37
- hash << current_user.cache_key_with_version
38
- hash << current_user.follows?(model) ? 1 : 0
39
- end
40
- hash << Digest::MD5.hexdigest(model.author.cache_key_with_version)
41
- hash << (model.must_render_translation?(current_organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
42
-
43
- hash.join(Decidim.cache_key_separator)
10
+ def metadata_cell
11
+ "decidim/meetings/meeting_card_metadata"
44
12
  end
45
13
  end
46
14
  end
@@ -1,31 +1,16 @@
1
1
  <%= dynamic_map_for meetings_data_for_map(geocoded_meetings) do %>
2
2
  <template id="marker-popup">
3
- <div class="map-info__content">
4
- <h3>${title}</h3>
5
- <div id="bodyContent">
6
- <p>{{html description}}</p>
7
- <div class="map__date-address">
8
- <div class="card__datetime">
9
- <div class="card__datetime__date">
10
- ${startTimeDay} <span class="card__datetime__month">${startTimeMonth} ${startTimeYear}</span>
11
- </div>
12
- <div class="card__datetime__time">${starTime}</div>
3
+ <div class="space-y-6">
4
+ <a href="${link}" class="card__list">
5
+ <div class="card__list-content">
6
+ <h3 class="h4 card__list-title">${title}</h3>
7
+ <div class="card__list-metadata">
8
+ {{each JSON.parse(items)}}
9
+ <span>{{html icon}}${text}</span>
10
+ {{/each}}
13
11
  </div>
14
- <div class="address card__extra">
15
- <div class="address__icon">{{html icon}}</div>
16
- <div class="address__details">
17
- <strong>{{html location}}</strong><br>
18
- <span>${address}</span><br>
19
- <span>{{html locationHints}}</span>
20
- </div>
21
- </div>
22
- </div>
23
- <div class="map-info__button">
24
- <a href="${link}" class="button button--sc">
25
- <%= t("decidim.meetings.meetings_map.view_meeting") %>
26
- </a>
27
12
  </div>
28
- </div>
13
+ </a>
29
14
  </div>
30
15
  </template>
31
16
  <% end.html_safe %>
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module Meetings
5
- class MeetingsMapCell < MeetingMCell
5
+ class MeetingsMapCell < MeetingLCell
6
6
  include Decidim::MapHelper
7
7
  include Decidim::Meetings::MapHelper
8
8
 
@@ -11,6 +11,7 @@ module Decidim
11
11
  return if model.iframe_embed_type_none?
12
12
  return unless model.iframe_access_level_allowed_for_user?(current_user)
13
13
  return unless assembly_privacy_allowed?
14
+ return unless live? || future?
14
15
 
15
16
  render
16
17
  end
@@ -1,44 +1,21 @@
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 %>
1
+ <div class="meeting__online">
2
+ <%= icon "broadcast-line", class: "w-14 h-14 fill-current #{live? && online_meeting_url? ? "text-tertiary" : "text-gray"}" %>
16
3
 
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 %>
4
+ <% if !online_meeting_url? %>
5
+ <p><%= t("link_available_soon", scope: "decidim.meetings.meetings.show") %></p>
6
+ <% elsif future? %>
7
+ <p><%= t("link_closed", scope: "decidim.meetings.meetings.show") %></p>
8
+ <% elsif live? %>
9
+ <p class="h3"><%= t("live_event", scope: "decidim.meetings.meetings.show") %></p>
10
+
11
+ <% if show_embed? %>
12
+ <div class="hidden md:block h-[60vh] w-full">
13
+ <%== embed_code(request.host) %>
30
14
  </div>
31
- </div>
15
+ <% else %>
16
+ <p><%= t("micro_camera_permissions_warning", scope: "decidim.meetings.meetings.show") %></p>
17
+ <% end %>
18
+
19
+ <%= link_to t("join_meeting", scope: "decidim.meetings.meetings.meeting"), live_event_url, target: "_blank", class: "button button__xl button__secondary", data: { "external-link": false } %>
32
20
  <% 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 %>
21
+ </div>
@@ -1,16 +1,5 @@
1
- <div id="list-of-public-participants" class="section">
2
- <div class="row">
3
- <div class="columns large-12">
4
- <h4 class="section-heading"><%= t("attending_participants", scope: "decidim.meetings.public_participants_list") %></h4>
5
- </div>
6
- <div class="columns large-12">
7
- <%= cell(
8
- "decidim/collapsible_list",
9
- public_participants,
10
- cell_name: "decidim/author",
11
- cell_options: { extra_classes: ["author-data--small"] },
12
- hidden_elements_count_i18n_key: "decidim.meetings.public_participants_list.hidden_participants_count"
13
- ) %>
14
- </div>
15
- </div>
1
+ <div id="list-of-public-participants" class="meeting__grid">
2
+ <% public_participants.each do |participant| %>
3
+ <%= cell "decidim/author", participant %>
4
+ <% end %>
16
5
  </div>
@@ -18,7 +18,7 @@ module Decidim
18
18
  # Executes the command. Broadcasts these events:
19
19
  #
20
20
  # - :ok when everything is valid.
21
- # - :invalid if the form wasn't valid and we couldn't proceed.
21
+ # - :invalid if the form was not valid and we could not proceed.
22
22
  #
23
23
  # Returns nothing.
24
24
  def call
@@ -73,7 +73,7 @@ module Decidim
73
73
  def create_services!
74
74
  form.services_to_persist.each do |service|
75
75
  Decidim::Meetings::Service.create!(
76
- meeting: meeting,
76
+ meeting:,
77
77
  "title" => service.title,
78
78
  "description" => service.description
79
79
  )
@@ -20,7 +20,7 @@ module Decidim
20
20
  # Executes the command. Broadcasts these events:
21
21
  #
22
22
  # - :ok when everything is valid.
23
- # - :invalid if the form wasn't valid and we couldn't proceed.
23
+ # - :invalid if the form was not valid and we could not proceed.
24
24
  #
25
25
  # Returns nothing.
26
26
  def call
@@ -37,7 +37,7 @@ module Decidim
37
37
 
38
38
  def already_invited?
39
39
  return false unless user.persisted?
40
- return false unless meeting.invites.exists?(user: user)
40
+ return false unless meeting.invites.exists?(user:)
41
41
 
42
42
  form.errors.add(:email, :already_invited)
43
43
  true
@@ -58,8 +58,8 @@ module Decidim
58
58
  Invite,
59
59
  invited_by,
60
60
  {
61
- user: user,
62
- meeting: meeting,
61
+ user:,
62
+ meeting:,
63
63
  sent_at: Time.current
64
64
  },
65
65
  log_info
@@ -98,7 +98,7 @@ module Decidim
98
98
 
99
99
  def invite_user_to_sign_up
100
100
  user.skip_reconfirmation!
101
- user.invite!(invited_by, invitation_instructions: "join_meeting", meeting: meeting)
101
+ user.invite!(invited_by, invitation_instructions: "join_meeting", meeting:)
102
102
  end
103
103
  end
104
104
  end
@@ -18,7 +18,7 @@ module Decidim
18
18
  # Executes the command. Broadcasts these events:
19
19
  #
20
20
  # - :ok when everything is valid.
21
- # - :invalid if the form wasn't valid and we couldn't proceed.
21
+ # - :invalid if the form was not valid and we could not proceed.
22
22
  #
23
23
  # Returns nothing.
24
24
  def call
@@ -18,7 +18,7 @@ module Decidim
18
18
  # Executes the command. Broadcasts these events:
19
19
  #
20
20
  # - :ok when everything is valid.
21
- # - :invalid if the form wasn't valid and we couldn't proceed.
21
+ # - :invalid if the form was not valid and we could not proceed.
22
22
  #
23
23
  # Returns nothing.
24
24
  def call
@@ -15,13 +15,14 @@ module Decidim
15
15
  def call
16
16
  return broadcast(:invalid) if form.invalid?
17
17
 
18
- transaction do
18
+ with_events(with_transaction: true) do
19
19
  create_meeting!
20
- schedule_upcoming_meeting_notification
21
- send_notification
22
20
  end
23
21
 
24
22
  create_follow_form_resource(form.current_user)
23
+ schedule_upcoming_meeting_notification
24
+ send_notification
25
+
25
26
  broadcast(:ok, meeting)
26
27
  end
27
28
 
@@ -29,6 +30,16 @@ module Decidim
29
30
 
30
31
  attr_reader :meeting, :form
31
32
 
33
+ def event_arguments
34
+ {
35
+ resource: meeting,
36
+ extra: {
37
+ event_author: form.current_user,
38
+ locale:
39
+ }
40
+ }
41
+ end
42
+
32
43
  def create_meeting!
33
44
  parsed_title = Decidim::ContentProcessor.parse_with_processor(:hashtag, form.title, current_organization: form.current_organization).rewrite
34
45
  parsed_description = Decidim::ContentProcessor.parse(form.description, current_organization: form.current_organization).rewrite
@@ -38,7 +38,7 @@ module Decidim
38
38
  end
39
39
 
40
40
  def invitation
41
- @invitation ||= meeting.invites.find_by(user: user)
41
+ @invitation ||= meeting.invites.find_by(user:)
42
42
  end
43
43
  end
44
44
  end
@@ -42,7 +42,7 @@ module Decidim
42
42
  attr_reader :meeting, :user, :user_group, :registration, :registration_form
43
43
 
44
44
  def accept_invitation
45
- meeting.invites.find_by(user: user)&.accept!
45
+ meeting.invites.find_by(user:)&.accept!
46
46
  end
47
47
 
48
48
  def answer_questionnaire
@@ -61,9 +61,9 @@ module Decidim
61
61
 
62
62
  def create_registration
63
63
  @registration = Decidim::Meetings::Registration.create!(
64
- meeting: meeting,
65
- user: user,
66
- user_group: user_group,
64
+ meeting:,
65
+ user:,
66
+ user_group:,
67
67
  public_participation: registration_form.public_participation
68
68
  )
69
69
  end
@@ -107,7 +107,7 @@ module Decidim
107
107
  resource: @meeting,
108
108
  affected_users: participatory_space_admins,
109
109
  extra: {
110
- percentage: percentage
110
+ percentage:
111
111
  }
112
112
  )
113
113
  end
@@ -22,12 +22,12 @@ module Decidim
22
22
  def call
23
23
  return broadcast(:invalid) if form.invalid?
24
24
 
25
- transaction do
25
+ with_events(with_transaction: true) do
26
26
  update_meeting!
27
- send_notification if should_notify_followers?
28
- schedule_upcoming_meeting_notification if start_time_changed?
29
27
  end
30
28
 
29
+ send_notification if should_notify_followers?
30
+ schedule_upcoming_meeting_notification if start_time_changed?
31
31
  broadcast(:ok, meeting)
32
32
  end
33
33
 
@@ -35,6 +35,16 @@ module Decidim
35
35
 
36
36
  attr_reader :form, :current_user, :meeting
37
37
 
38
+ def event_arguments
39
+ {
40
+ resource: meeting,
41
+ extra: {
42
+ event_author: form.current_user,
43
+ locale:
44
+ }
45
+ }
46
+ end
47
+
38
48
  def update_meeting!
39
49
  parsed_title = Decidim::ContentProcessor.parse_with_processor(:hashtag, form.title, current_organization: form.current_organization).rewrite
40
50
  parsed_description = Decidim::ContentProcessor.parse(form.description, current_organization: form.current_organization).rewrite
@@ -18,11 +18,11 @@ module Decidim
18
18
  with_any_date: "upcoming",
19
19
  activity: "all",
20
20
  with_availability: "",
21
- with_any_scope: default_filter_scope_params,
22
- with_any_category: default_filter_category_params,
21
+ with_any_scope: nil,
22
+ with_any_category: nil,
23
23
  with_any_state: nil,
24
- with_any_origin: default_filter_origin_params,
25
- with_any_type: default_filter_type_params
24
+ with_any_origin: nil,
25
+ with_any_type: nil
26
26
  }
27
27
  end
28
28
  end
@@ -9,15 +9,15 @@ module Decidim
9
9
  helper_method :meeting, :agenda, :blank_agenda_item, :blank_agenda_item_child
10
10
 
11
11
  def new
12
- enforce_permission_to :create, :agenda, meeting: meeting
12
+ enforce_permission_to(:create, :agenda, meeting:)
13
13
 
14
14
  @form = form(MeetingAgendaForm).instance
15
15
  end
16
16
 
17
17
  def create
18
- enforce_permission_to :create, :agenda, meeting: meeting
18
+ enforce_permission_to(:create, :agenda, meeting:)
19
19
 
20
- @form = form(MeetingAgendaForm).from_params(params, meeting: meeting)
20
+ @form = form(MeetingAgendaForm).from_params(params, meeting:)
21
21
 
22
22
  CreateAgenda.call(@form, meeting) do
23
23
  on(:ok) do
@@ -33,15 +33,15 @@ module Decidim
33
33
  end
34
34
 
35
35
  def edit
36
- enforce_permission_to :update, :agenda, agenda: agenda, meeting: meeting
36
+ enforce_permission_to(:update, :agenda, agenda:, meeting:)
37
37
 
38
38
  @form = form(MeetingAgendaForm).from_model(agenda)
39
39
  end
40
40
 
41
41
  def update
42
- enforce_permission_to :update, :agenda, agenda: agenda, meeting: meeting
42
+ enforce_permission_to(:update, :agenda, agenda:, meeting:)
43
43
 
44
- @form = form(MeetingAgendaForm).from_params(params, meeting: meeting)
44
+ @form = form(MeetingAgendaForm).from_params(params, meeting:)
45
45
 
46
46
  UpdateAgenda.call(@form, agenda) do
47
47
  on(:ok) do
@@ -9,7 +9,7 @@ module Decidim
9
9
  helper_method :invites
10
10
 
11
11
  def index
12
- enforce_permission_to :read_invites, :meeting, meeting: meeting
12
+ enforce_permission_to(:read_invites, :meeting, meeting:)
13
13
 
14
14
  @query = params[:q]
15
15
  @status = params[:status]
@@ -18,7 +18,7 @@ module Decidim
18
18
  end
19
19
 
20
20
  def create
21
- enforce_permission_to :invite_attendee, :meeting, meeting: meeting
21
+ enforce_permission_to(:invite_attendee, :meeting, meeting:)
22
22
 
23
23
  @form = form(MeetingRegistrationInviteForm).from_params(params)
24
24
 
@@ -42,7 +42,7 @@ module Decidim
42
42
  end
43
43
 
44
44
  def invites
45
- @invites ||= Decidim::Meetings::Admin::Invites.for(meeting.invites, @query, @status).page(params[:page]).per(15)
45
+ @invites ||= Decidim::Admin::Invites.for(meeting.invites, @query, @status).page(params[:page]).per(15)
46
46
  end
47
47
  end
48
48
  end
@@ -5,18 +5,16 @@ module Decidim
5
5
  module Admin
6
6
  # This controller allows an admin to manage meetings from a Participatory Process
7
7
  class MeetingClosesController < Admin::ApplicationController
8
- include Decidim::Proposals::Admin::Picker if Decidim::Meetings.enable_proposal_linking
9
-
10
8
  helper_method :meeting
11
9
 
12
10
  def edit
13
- enforce_permission_to :close, :meeting, meeting: meeting
11
+ enforce_permission_to(:close, :meeting, meeting:)
14
12
 
15
13
  @form = form(Admin::CloseMeetingForm).from_model(meeting)
16
14
  end
17
15
 
18
16
  def update
19
- enforce_permission_to :close, :meeting, meeting: meeting
17
+ enforce_permission_to(:close, :meeting, meeting:)
20
18
 
21
19
  @form = form(Admin::CloseMeetingForm).from_params(params.merge(proposals: meeting.sibling_scope(:proposals)))
22
20
 
@@ -9,15 +9,15 @@ module Decidim
9
9
  helper_method :meeting, :blank_service
10
10
 
11
11
  def new
12
- enforce_permission_to :copy, :meeting, meeting: meeting
12
+ enforce_permission_to(:copy, :meeting, meeting:)
13
13
 
14
14
  @form = form(MeetingForm).from_model(meeting)
15
15
  end
16
16
 
17
17
  def create
18
- enforce_permission_to :copy, :meeting, meeting: meeting
18
+ enforce_permission_to(:copy, :meeting, meeting:)
19
19
 
20
- @form = form(MeetingForm).from_params(params, current_component: current_component)
20
+ @form = form(MeetingForm).from_params(params, current_component:)
21
21
 
22
22
  CopyMeeting.call(@form, meeting) do
23
23
  on(:ok) do