decidim-meetings 0.27.10 → 0.28.0.rc4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 -13
  5. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +2 -2
  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 +6 -4
  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 +11 -59
  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 -28
  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 -12
  89. data/app/presenters/decidim/meetings/admin_log/invite_presenter.rb +2 -2
  90. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +6 -2
  91. data/app/presenters/decidim/meetings/admin_log/questionnaire_presenter.rb +2 -2
  92. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
  93. data/app/presenters/decidim/meetings/log/resource_presenter.rb +18 -0
  94. data/app/presenters/decidim/meetings/meeting_presenter.rb +8 -2
  95. data/app/services/decidim/meetings/calendar/component_calendar.rb +1 -1
  96. data/app/services/decidim/meetings/close_meeting_reminder_generator.rb +7 -13
  97. data/app/services/decidim/meetings/meeting_iframe_embedder.rb +1 -1
  98. data/app/views/decidim/meetings/_calendar_modal.html.erb +19 -21
  99. data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +12 -12
  100. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb +8 -8
  101. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child_template.html.erb +1 -1
  102. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +3 -3
  103. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +54 -50
  104. data/app/views/decidim/meetings/admin/agenda/edit.html.erb +18 -6
  105. data/app/views/decidim/meetings/admin/agenda/new.html.erb +17 -5
  106. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +11 -2
  107. data/app/views/decidim/meetings/admin/invites/_form.html.erb +38 -28
  108. data/app/views/decidim/meetings/admin/invites/index.html.erb +77 -81
  109. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +26 -28
  110. data/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +17 -5
  111. data/app/views/decidim/meetings/admin/meeting_copies/new.html.erb +17 -6
  112. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +76 -83
  113. data/app/views/decidim/meetings/admin/meetings/_service.html.erb +14 -10
  114. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +9 -5
  115. data/app/views/decidim/meetings/admin/meetings/edit.html.erb +17 -7
  116. data/app/views/decidim/meetings/admin/meetings/index.html.erb +133 -129
  117. data/app/views/decidim/meetings/admin/meetings/new.html.erb +16 -6
  118. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +1 -1
  119. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +1 -1
  120. data/app/views/decidim/meetings/admin/poll/_form.html.erb +17 -32
  121. data/app/views/decidim/meetings/admin/poll/_question.html.erb +81 -75
  122. data/app/views/decidim/meetings/admin/poll/edit.html.erb +28 -8
  123. data/app/views/decidim/meetings/admin/registrations/_form.html.erb +32 -55
  124. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +59 -26
  125. data/app/views/decidim/meetings/directory/meetings/index.html.erb +15 -20
  126. data/app/views/decidim/meetings/directory/meetings/index.js.erb +1 -23
  127. data/app/views/decidim/meetings/layouts/_aside_block.html.erb +8 -0
  128. data/app/views/decidim/meetings/layouts/live_event.html.erb +20 -19
  129. data/app/views/decidim/meetings/live_events/show.html.erb +4 -5
  130. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +3 -10
  131. data/app/views/decidim/meetings/meeting_closes/edit.html.erb +17 -21
  132. data/app/views/decidim/meetings/meetings/_actions.html.erb +6 -0
  133. data/app/views/decidim/meetings/meetings/_add_to_calendar_modal.html.erb +17 -0
  134. data/app/views/decidim/meetings/meetings/_form.html.erb +26 -34
  135. data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +3 -22
  136. data/app/views/decidim/meetings/meetings/_meeting.html.erb +74 -0
  137. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +28 -26
  138. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +98 -0
  139. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +23 -36
  140. data/app/views/decidim/meetings/meetings/edit.html.erb +17 -21
  141. data/app/views/decidim/meetings/meetings/index.html.erb +15 -33
  142. data/app/views/decidim/meetings/meetings/index.js.erb +1 -23
  143. data/app/views/decidim/meetings/meetings/new.html.erb +17 -21
  144. data/app/views/decidim/meetings/meetings/show.html.erb +8 -167
  145. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +9 -13
  146. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +4 -4
  147. data/app/views/decidim/meetings/polls/answers/create.js.erb +1 -1
  148. data/app/views/decidim/meetings/polls/questions/_index.html.erb +1 -1
  149. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +5 -5
  150. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +9 -11
  151. data/app/views/decidim/meetings/polls/questions/_question.html.erb +3 -3
  152. data/app/views/decidim/meetings/polls/questions/index_admin.js.erb +1 -1
  153. data/app/views/decidim/meetings/shared/_filters.html.erb +20 -0
  154. data/app/views/decidim/meetings/shared/_index.html.erb +24 -0
  155. data/app/views/decidim/meetings/shared/_index.js.erb +16 -0
  156. data/app/views/decidim/meetings/shared/_meetings.html.erb +33 -0
  157. data/app/views/decidim/meetings/shared/_meetings_aside.html.erb +18 -0
  158. data/app/views/decidim/meetings/versions/show.html.erb +14 -4
  159. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +13 -15
  160. data/config/assets.rb +0 -2
  161. data/config/locales/ar.yml +6 -94
  162. data/config/locales/bg.yml +0 -673
  163. data/config/locales/ca.yml +52 -75
  164. data/config/locales/cs.yml +48 -71
  165. data/config/locales/de.yml +53 -76
  166. data/config/locales/el.yml +48 -51
  167. data/config/locales/en.yml +51 -74
  168. data/config/locales/es-MX.yml +50 -73
  169. data/config/locales/es-PY.yml +48 -71
  170. data/config/locales/es.yml +53 -76
  171. data/config/locales/eu.yml +53 -76
  172. data/config/locales/fi-plain.yml +46 -69
  173. data/config/locales/fi.yml +44 -67
  174. data/config/locales/fr-CA.yml +43 -69
  175. data/config/locales/fr.yml +48 -71
  176. data/config/locales/ga-IE.yml +2 -16
  177. data/config/locales/gl.yml +5 -63
  178. data/config/locales/hu.yml +6 -92
  179. data/config/locales/id-ID.yml +4 -60
  180. data/config/locales/is-IS.yml +1 -22
  181. data/config/locales/it.yml +6 -86
  182. data/config/locales/ja.yml +45 -74
  183. data/config/locales/lb.yml +6 -67
  184. data/config/locales/lt.yml +42 -65
  185. data/config/locales/lv.yml +4 -61
  186. data/config/locales/nl.yml +4 -92
  187. data/config/locales/no.yml +4 -80
  188. data/config/locales/pl.yml +2 -199
  189. data/config/locales/pt-BR.yml +4 -200
  190. data/config/locales/pt.yml +5 -85
  191. data/config/locales/ro-RO.yml +11 -81
  192. data/config/locales/ru.yml +5 -60
  193. data/config/locales/sk.yml +4 -61
  194. data/config/locales/sl.yml +0 -3
  195. data/config/locales/sr-CS.yml +0 -6
  196. data/config/locales/sv.yml +14 -94
  197. data/config/locales/tr-TR.yml +5 -78
  198. data/config/locales/uk.yml +5 -53
  199. data/config/locales/zh-CN.yml +3 -70
  200. data/config/locales/zh-TW.yml +24 -51
  201. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +1 -1
  202. data/db/migrate/20230427105701_change_types_and_registration_types_on_meetings.rb +49 -0
  203. data/lib/decidim/meetings/admin_engine.rb +2 -2
  204. data/lib/decidim/meetings/component.rb +4 -216
  205. data/lib/decidim/meetings/content_blocks/registry_manager.rb +17 -0
  206. data/lib/decidim/meetings/directory_engine.rb +4 -6
  207. data/lib/decidim/meetings/engine.rb +62 -27
  208. data/lib/decidim/meetings/meeting_serializer.rb +3 -3
  209. data/lib/decidim/meetings/seeds.rb +188 -0
  210. data/lib/decidim/meetings/test/factories.rb +124 -54
  211. data/lib/decidim/meetings/test/notifications_handling.rb +3 -3
  212. data/lib/decidim/meetings/test/translated_event.rb +1 -1
  213. data/lib/decidim/meetings/version.rb +1 -1
  214. metadata +58 -58
  215. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/elements.erb +0 -16
  216. data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/heading.erb +0 -1
  217. data/app/cells/decidim/meetings/content_blocks/upcoming_meetings/show.erb +0 -26
  218. data/app/cells/decidim/meetings/content_blocks/upcoming_meetings_cell.rb +0 -63
  219. data/app/cells/decidim/meetings/join_meeting_button/registration_confirm.erb +0 -31
  220. data/app/cells/decidim/meetings/meeting_highlighted_list_item/show.erb +0 -21
  221. data/app/cells/decidim/meetings/meeting_highlighted_list_item_cell.rb +0 -10
  222. data/app/cells/decidim/meetings/meeting_list_item/show.erb +0 -14
  223. data/app/cells/decidim/meetings/meeting_list_item_cell.rb +0 -44
  224. data/app/cells/decidim/meetings/meeting_m/address.erb +0 -5
  225. data/app/cells/decidim/meetings/meeting_m/data.erb +0 -2
  226. data/app/cells/decidim/meetings/meeting_m/date.erb +0 -8
  227. data/app/cells/decidim/meetings/meeting_m/footer.erb +0 -9
  228. data/app/cells/decidim/meetings/meeting_m/multiple_dates.erb +0 -17
  229. data/app/cells/decidim/meetings/meeting_m/single_date.erb +0 -9
  230. data/app/cells/decidim/meetings/meeting_m/tags.erb +0 -1
  231. data/app/cells/decidim/meetings/meeting_m_cell.rb +0 -121
  232. data/app/cells/decidim/meetings/meeting_s/show.erb +0 -27
  233. data/app/controllers/concerns/decidim/meetings/filterable.rb +0 -27
  234. data/app/controllers/decidim/meetings/widgets_controller.rb +0 -30
  235. data/app/packs/stylesheets/decidim/meetings/_header.scss +0 -52
  236. data/app/packs/stylesheets/decidim/meetings/_main.scss +0 -178
  237. data/app/packs/stylesheets/decidim/meetings/_meetings.scss +0 -2
  238. data/app/queries/decidim/meetings/admin/invites.rb +0 -60
  239. data/app/views/decidim/meetings/admin/meeting_closes/proposals_picker.html.erb +0 -1
  240. data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +0 -34
  241. data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +0 -26
  242. data/app/views/decidim/meetings/meeting_closes/proposals_picker.html.erb +0 -1
  243. data/app/views/decidim/meetings/meetings/_calendar_modal.html.erb +0 -26
  244. data/app/views/decidim/meetings/meetings/_filters.html.erb +0 -40
  245. data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +0 -18
  246. data/app/views/decidim/meetings/meetings/_meetings.html.erb +0 -48
  247. data/app/views/decidim/meetings/versions/index.html.erb +0 -8
  248. data/app/views/decidim/participatory_spaces/_upcoming_meeting_for_card.html.erb +0 -4
  249. data/config/locales/he-IL.yml +0 -1
  250. data/decidim-meetings.gemspec +0 -36
  251. data/lib/decidim/meetings/seeds/city.jpeg +0 -0
@@ -1,121 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- # This cell renders the Medium (:m) meeting card
6
- # for an given instance of a Meeting
7
- class MeetingMCell < Decidim::CardMCell
8
- include MeetingCellsHelper
9
-
10
- def has_authors?
11
- true
12
- end
13
-
14
- def render_authorship
15
- cell "decidim/author", author_presenter_for(model.normalized_author)
16
- end
17
-
18
- def date
19
- render
20
- end
21
-
22
- def address
23
- decidim_html_escape(render)
24
- end
25
-
26
- def title
27
- present(model).title(html_escape: true)
28
- end
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
-
48
- private
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
-
82
- def spans_multiple_dates?
83
- start_date != end_date
84
- end
85
-
86
- def meeting_date
87
- return render(:multiple_dates) if spans_multiple_dates?
88
-
89
- render(:single_date)
90
- end
91
-
92
- def formatted_start_time
93
- model.start_time.strftime("%H:%M")
94
- end
95
-
96
- def formatted_end_time
97
- model.end_time.strftime("%H:%M")
98
- end
99
-
100
- def start_date
101
- model.start_time.to_date
102
- end
103
-
104
- def end_date
105
- model.end_time.to_date
106
- end
107
-
108
- def can_join?
109
- model.can_be_joined_by?(current_user)
110
- end
111
-
112
- def show_footer_actions?
113
- options[:show_footer_actions]
114
- end
115
-
116
- def statuses
117
- [:follow, :comments_count]
118
- end
119
- end
120
- end
121
- end
@@ -1,27 +0,0 @@
1
- <div class="card">
2
- <div class="p-s">
3
- <div class="card__header">
4
- <%= link_to meeting_path, class: "card__link" do %>
5
- <span class="card__title">
6
- <%= title %>
7
- </span>
8
- <% end %>
9
- </div>
10
- <div class="card__text">
11
- <div class="row collapse text-medium">
12
- <time datetime="<%= l(model.start_time, format: :long_dashed) %>" class="column medium-4 icon--container">
13
- <%= icon "datetime", class: "primary", role: "img", "aria-hidden": true %>
14
- &nbsp;
15
- <%= l start_date, format: :decidim_with_month_name %>
16
- &nbsp;-&nbsp;
17
- <%= formatted_start_time %>
18
- </time>
19
- <span class="column medium-8">
20
- <%= participatory_space_class_name %>
21
- &nbsp;
22
- <%= link_to participatory_space_title, participatory_space_path %>
23
- </span>
24
- </div>
25
- </div>
26
- </div>
27
- </div>
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/concern"
4
-
5
- module Decidim
6
- module Meetings
7
- # A controller concern to specify default filter parameters for the controller resources.
8
- module Filterable
9
- extend ActiveSupport::Concern
10
-
11
- included do
12
- private
13
-
14
- def default_filter_type_params
15
- %w(all) + Decidim::Meetings::Meeting::TYPE_OF_MEETING
16
- end
17
-
18
- def default_filter_origin_params
19
- filter_origin_params = %w(participants)
20
- filter_origin_params << "official"
21
- filter_origin_params << "user_group" if current_organization.user_groups_enabled?
22
- filter_origin_params
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- class WidgetsController < Decidim::WidgetsController
6
- helper MeetingsHelper
7
- helper Decidim::SanitizeHelper
8
-
9
- def show
10
- enforce_permission_to :embed, :meeting, meeting: model if model
11
-
12
- super
13
- end
14
-
15
- private
16
-
17
- def model
18
- @model ||= Meeting.except_withdrawn.published.not_hidden.where(component: current_component).find(params[:meeting_id])
19
- end
20
-
21
- def iframe_url
22
- @iframe_url ||= meeting_widget_url(model)
23
- end
24
-
25
- def permission_class_chain
26
- [Decidim::Meetings::Permissions]
27
- end
28
- end
29
- end
30
- end
@@ -1,52 +0,0 @@
1
- .meeting-polls{
2
- &__header{
3
- display: flex;
4
- justify-content: space-between;
5
- align-items: center;
6
- padding: 10px;
7
- background-color: #f4f4f4;
8
- border: 1px solid #e8e8e8;
9
- }
10
-
11
- &__button{
12
- @extend .button;
13
- @extend .button--nomargin;
14
- @extend .hollow;
15
- @extend .small;
16
-
17
- background-color: $white;
18
- font-weight: 600;
19
-
20
- &.is-open{
21
- background-color: var(--primary);
22
- color: $white;
23
- }
24
-
25
- & + &{
26
- margin-left: $global-margin * .25;
27
- }
28
- }
29
-
30
- &__close{
31
- display: flex;
32
- justify-content: space-between;
33
- align-items: center;
34
- margin-left: 2 * $global-margin;
35
- cursor: pointer;
36
-
37
- a{
38
- display: flex;
39
- align-items: baseline;
40
- }
41
-
42
- span{
43
- font-size: 2em;
44
- margin-left: $global-margin * .5;
45
- line-height: .5;
46
- }
47
-
48
- svg{
49
- margin-left: .2rem;
50
- }
51
- }
52
- }
@@ -1,178 +0,0 @@
1
- .meeting-polls{
2
- &__main{
3
- flex: 1;
4
- display: flex;
5
- }
6
-
7
- &__iframe{
8
- @extend .bg-muted;
9
-
10
- display: flex;
11
-
12
- > *{
13
- flex: 1;
14
- border: 0;
15
- }
16
- }
17
-
18
- &__aside{
19
- flex: 0;
20
- counter-reset: question;
21
-
22
- & + div{
23
- flex: 1;
24
- }
25
-
26
- &.is-open{
27
- flex: 0 0 20%;
28
-
29
- & + div{
30
- flex: 0 0 80%;
31
- }
32
-
33
- // shrink iframe when there's two panels
34
- & + & + div{
35
- flex: 0 0 60%;
36
- }
37
-
38
- & + &{
39
- border-left: 1px solid #e8e8e8;
40
- }
41
- }
42
- }
43
-
44
- &__question{
45
- background-color: $white;
46
- border-bottom: 1px solid #e8e8e8;
47
-
48
- summary{
49
- @extend .padding-1;
50
-
51
- cursor: pointer;
52
- font-weight: bold;
53
- color: var(--secondary);
54
- transition: background-color .2s ease-in-out;
55
-
56
- &:hover{
57
- background-color: #f4f4f4;
58
- }
59
-
60
- &::after{
61
- counter-increment: question;
62
- content: "#" counter(question);
63
- }
64
-
65
- & ~ *{
66
- padding: 0 1rem 1rem;
67
-
68
- // dynamic content
69
- > :first-child{
70
- font-weight: 600;
71
- line-height: 1.25;
72
- }
73
-
74
- label{
75
- display: flex;
76
- align-items: baseline;
77
- cursor: pointer;
78
- line-height: 1.25;
79
- }
80
-
81
- label + label{
82
- margin-top: $global_margin;
83
- }
84
- // end dynamic content
85
- }
86
- }
87
-
88
- &[open] .meeting-polls__answer--bar > *{
89
- opacity: 1;
90
- transform: translateX(0);
91
- }
92
-
93
- &.is-new{
94
- animation: animateHighlight 5s ease-in-out forwards;
95
- }
96
-
97
- @keyframes animateHighlight{
98
- 0%,
99
- 80%{
100
- background-color: rgba(var(--warning-rgb), .1);
101
- }
102
- }
103
- }
104
-
105
- &__question--admin{
106
- @extend .meeting-polls__question;
107
-
108
- summary ~ *{
109
- border-top: 1px solid #e8e8e8;
110
- background-color: #f6f6f6;
111
- padding: 1rem;
112
-
113
- a{
114
- text-decoration: underline;
115
- margin-bottom: $global_margin;
116
- display: block;
117
- }
118
-
119
- > :first-child{
120
- font-weight: normal;
121
- }
122
- }
123
- }
124
-
125
- &__answer{
126
- display: flex;
127
- align-items: center;
128
-
129
- &--value{
130
- flex: 0 0 15%;
131
- font-weight: bold;
132
- }
133
-
134
- &--bar{
135
- flex: 0 0 85%;
136
- height: 10px;
137
- overflow: hidden;
138
-
139
- > *{
140
- background-color: var(--primary);
141
- height: 100%;
142
- opacity: 0;
143
- }
144
- }
145
- }
146
-
147
- // vertical flow
148
- label + &__answer + label{
149
- margin-top: 1.5 * $global_margin;
150
- }
151
-
152
- &__admin-label{
153
- background-color: #9675ce;
154
- color: $white;
155
- font-weight: bold;
156
- font-size: 14px;
157
- padding: 1rem;
158
- }
159
-
160
- &__admin-action{
161
- border-top: 1px solid #e8e8e8;
162
- padding: .5rem 0;
163
- display: flex;
164
- align-items: center;
165
-
166
- &:last-child{
167
- border-bottom: 1px solid #e8e8e8;
168
- }
169
-
170
- :first-child{
171
- flex: 0 0 40%;
172
- }
173
-
174
- :last-child{
175
- flex: 0 0 60%;
176
- }
177
- }
178
- }
@@ -1,2 +0,0 @@
1
- @import "main";
2
- @import "header";
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- module Admin
6
- # A class used to find the Invites by their status status.
7
- class Invites < Decidim::Query
8
- # Syntactic sugar to initialize the class and return the queried objects.
9
- #
10
- # invites - the initial Invites relation that needs to be filtered.
11
- # query - query to filter invites
12
- # status - invite status to be used as a filter
13
- def self.for(invites, query = nil, status = nil)
14
- new(invites, query, status).query
15
- end
16
-
17
- # Initializes the class.
18
- #
19
- # invites - the initial Invites relation that need to be filtered
20
- # query - query to filter invites
21
- # status - invite status to be used as a filter
22
- def initialize(invites, query = nil, status = nil)
23
- @invites = invites
24
- @query = query
25
- @status = status
26
- end
27
-
28
- # List the invites by the different filters.
29
- def query
30
- @invites = filter_by_search(@invites)
31
- @invites = filter_by_status(@invites)
32
- @invites
33
- end
34
-
35
- private
36
-
37
- def filter_by_search(invites)
38
- return invites if @query.blank?
39
-
40
- invites.joins(:user).where(
41
- User.arel_table[:name].lower.matches("%#{@query}%").or(User.arel_table[:email].lower.matches("%#{@query}%"))
42
- )
43
- end
44
-
45
- def filter_by_status(invites)
46
- case @status
47
- when "accepted"
48
- invites.where.not(accepted_at: nil)
49
- when "rejected"
50
- invites.where.not(rejected_at: nil)
51
- when "sent"
52
- invites.where.not(sent_at: nil).where(accepted_at: nil, rejected_at: nil)
53
- else
54
- invites
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1 +0,0 @@
1
- <%= cell "decidim/proposals/proposals_picker", current_component %>
@@ -1,34 +0,0 @@
1
- <%= render partial: "decidim/shared/filter_form_help", locals: { skip_to_id: "meetings" } %>
2
-
3
- <%= filter_form_for filter do |form| %>
4
- <div class="filters__section">
5
- <div class="filters__search">
6
- <div class="input-group">
7
- <%= form.search_field :title_or_description_cont, label: false, class: "input-group-field", placeholder: t("decidim.meetings.meetings.filters.search"), title: t("decidim.meetings.meetings.filters.search"), "aria-label": t("decidim.meetings.meetings.filters.search"), data: { disable_dynamic_change: true } %>
8
- <div class="input-group-button">
9
- <button type="submit" class="button" aria-controls="meetings">
10
- <%= icon "magnifying-glass", aria_label: t("decidim.meetings.meetings.filters.search"), role: "img" %>
11
- </button>
12
- </div>
13
- </div>
14
- </div>
15
- </div>
16
-
17
- <% unless @forced_past_meetings %>
18
- <%= form.collection_radio_buttons :with_any_date, filter_date_values, :first, :last, legend_title: t("decidim.meetings.meetings.filters.date") %>
19
- <% end %>
20
-
21
- <%= form.check_boxes_tree :with_any_type, filter_type_values, legend_title: t("decidim.meetings.meetings.filters.type") %>
22
-
23
- <%= form.check_boxes_tree :with_any_scope, directory_filter_scopes_values, legend_title: t("decidim.meetings.meetings.filters.scope") %>
24
-
25
- <%= form.check_boxes_tree :with_any_global_category, directory_filter_categories_values, legend_title: t("decidim.meetings.meetings.filters.category") %>
26
-
27
- <%= form.check_boxes_tree :with_any_origin, directory_filter_origin_values, legend_title: t("decidim.meetings.meetings.filters.origin") %>
28
-
29
- <%= form.check_boxes_tree :with_any_space, directory_meeting_spaces_values, legend_title: t("decidim.meetings.directory.meetings.index.space_type") %>
30
-
31
- <% if current_user %>
32
- <%= form.collection_radio_buttons :activity, activity_filter_values, :first, :last, { legend_title: t("decidim.meetings.meetings.filters.activity") }, "aria-controls": "meetings" %>
33
- <% end %>
34
- <% end %>
@@ -1,26 +0,0 @@
1
- <% if meetings.length == 0 %>
2
- <div class="callout warning">
3
- <%= t "decidim.meetings.meetings.meetings.no_meetings_warning" %>
4
- </div>
5
- <% else %>
6
- <div class="row medium-up-2">
7
- <div class="column">
8
- <%= render partial: "decidim/shared/results_per_page" %>
9
- </div>
10
- <div class="column">
11
- <%= render partial: "decidim/meetings/calendar_modal", locals: {
12
- path: short_url(
13
- route_name: "calendar",
14
- params: { filter: params.fetch(:filter, {}).try(:to_unsafe_hash) }
15
- )
16
- } %>
17
- </div>
18
- </div>
19
-
20
- <div class="row small-up-1 medium-up-2 card-grid">
21
- <% meetings.each do |meeting| %>
22
- <%= card_for meeting, context: { show_space: true } %>
23
- <% end %>
24
- </div>
25
- <%= decidim_paginate meetings, order_start_time: params[:order_start_time], with_any_scope: params[:with_any_scope] %>
26
- <% end %>
@@ -1 +0,0 @@
1
- <%= cell "decidim/proposals/proposals_picker", current_component %>
@@ -1,26 +0,0 @@
1
- <div class="text-center">
2
- <button class="share-link link text-center" data-open="calendarShare">
3
- <%= t("add_to_calendar", scope: "decidim.meetings.meetings.calendar_modal" ) %>
4
- <%= icon "calendar", class: "icon--after", role: "img", "aria-hidden": true %>
5
- </button>
6
- </div>
7
-
8
- <div class="reveal" id="calendarShare" data-reveal>
9
- <div class="reveal__header">
10
- <h2 class="reveal__title"><%= t("add_to_calendar", scope: "decidim.meetings.meetings.calendar_modal") %></h2>
11
- <button class="close-button" data-close aria-label="<%= t("close_window", scope: "decidim.meetings.meetings.calendar_modal") %>" type="button">
12
- <span aria-hidden="true">&times;</span>
13
- </button>
14
- </div>
15
- <ul>
16
- <li>
17
- <%= link_to t("outlook", scope: "decidim.meetings.meetings.calendar_modal"), ics_url %>
18
- </li>
19
- <li>
20
- <%= link_to t("apple", scope: "decidim.meetings.meetings.calendar_modal"), ics_url %>
21
- </li>
22
- <li>
23
- <%= link_to t("google", scope: "decidim.meetings.meetings.calendar_modal"), google_url, target: "_blank" %>
24
- </li>
25
- </ul>
26
- </div>
@@ -1,40 +0,0 @@
1
- <%= render partial: "decidim/shared/filter_form_help", locals: { skip_to_id: "meetings" } %>
2
-
3
- <%= filter_form_for filter do |form| %>
4
- <div class="filters__section">
5
- <div class="filters__search">
6
- <div class="input-group">
7
- <%= form.search_field :search_text_cont, label: false, class: "input-group-field", placeholder: t(".search"), title: t(".search"), "aria-label": t(".search"), data: { disable_dynamic_change: true } %>
8
- <div class="input-group-button">
9
- <button type="submit" class="button" aria-controls="meetings">
10
- <%= icon "magnifying-glass", aria_label: t(".search"), role: "img" %>
11
- </button>
12
- </div>
13
- </div>
14
- </div>
15
- </div>
16
-
17
- <%= form.hidden_field "with_availability", value: params.dig("filter", "with_availability") %>
18
-
19
- <% unless @forced_past_meetings %>
20
- <%= form.collection_radio_buttons :with_any_date, filter_date_values, :first, :last, legend_title: t(".date") %>
21
- <% end %>
22
-
23
- <%= form.check_boxes_tree :with_any_type, filter_type_values, legend_title: t(".type") %>
24
-
25
- <% if current_component.has_subscopes? %>
26
- <%= form.check_boxes_tree :with_any_scope, filter_scopes_values, legend_title: t(".scope") %>
27
- <% end %>
28
-
29
- <% if current_component.categories.any? %>
30
- <%= form.check_boxes_tree :with_any_category, filter_categories_values, legend_title: t(".category") %>
31
- <% end %>
32
-
33
- <% if component_settings.creation_enabled_for_participants? %>
34
- <%= form.check_boxes_tree :with_any_origin, filter_origin_values, legend_title: t(".origin") %>
35
- <% end %>
36
-
37
- <% if current_user %>
38
- <%= form.collection_radio_buttons :activity, activity_filter_values, :first, :last, { legend_title: t(".activity") }, "aria-controls": "meetings" %>
39
- <% end %>
40
- <% end %>
@@ -1,18 +0,0 @@
1
- <div class="filters-controls hide-for-mediumlarge">
2
- <button data-open="filter-box" class="filters-controls__trigger" aria-controls="filter-box" aria-haspopup="dialog">
3
- <%= t ".filter" %>
4
- <%= icon "caret-bottom", class: "icon--small float-right", aria_label: t(".unfold"), role: "img" %>
5
- </button>
6
- </div>
7
-
8
- <div class="reveal" id="filter-box" data-reveal role="dialog" aria-modal="true" aria-labelledby="filter-box-label">
9
- <div class="reveal__header">
10
- <h3 id="filter-box-label" class="reveal__title"><%= t ".filter_by" %>:</h3>
11
- <button class="close-button" data-close aria-label="<%= t(".close_modal") %>" type="button">
12
- <span aria-hidden="true">&times;</span>
13
- </button>
14
- </div>
15
- <div class="filters">
16
- <%= render partial: "filters", locals: { type: :small } %>
17
- </div>
18
- </div>