decidim-meetings 0.28.5 → 0.29.0.rc1

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.

Potentially problematic release.


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

Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/attending_organizations_list_cell.rb +1 -1
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +1 -2
  4. data/app/cells/decidim/meetings/dates_and_map/show.erb +3 -5
  5. data/app/cells/decidim/meetings/dates_and_map_cell.rb +1 -1
  6. data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +1 -2
  7. data/app/cells/decidim/meetings/join_meeting_button/remaining_slots.erb +1 -0
  8. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +0 -3
  9. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +0 -3
  10. data/app/cells/decidim/meetings/meeting_cell.rb +0 -1
  11. data/app/cells/decidim/meetings/meeting_l_cell.rb +4 -7
  12. data/app/cells/decidim/meetings/meeting_url/show.erb +5 -5
  13. data/app/cells/decidim/meetings/meeting_url_cell.rb +0 -1
  14. data/app/cells/decidim/meetings/online_meeting_link_cell.rb +0 -2
  15. data/app/cells/decidim/meetings/question_responses/show.erb +7 -3
  16. data/app/cells/decidim/meetings/question_responses_cell.rb +0 -2
  17. data/app/commands/decidim/meetings/admin/copy_meeting.rb +2 -2
  18. data/app/commands/decidim/meetings/admin/create_agenda.rb +9 -37
  19. data/app/commands/decidim/meetings/admin/create_meeting.rb +28 -61
  20. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +4 -33
  21. data/app/commands/decidim/meetings/admin/update_agenda.rb +7 -35
  22. data/app/commands/decidim/meetings/admin/update_meeting.rb +30 -68
  23. data/app/commands/decidim/meetings/admin/update_question_status.rb +1 -1
  24. data/app/commands/decidim/meetings/admin/update_questionnaire.rb +19 -11
  25. data/app/commands/decidim/meetings/admin/update_registrations.rb +20 -46
  26. data/app/commands/decidim/meetings/create_answer.rb +5 -4
  27. data/app/commands/decidim/meetings/create_meeting.rb +38 -62
  28. data/app/commands/decidim/meetings/join_meeting.rb +18 -19
  29. data/app/commands/decidim/meetings/update_meeting.rb +6 -7
  30. data/app/commands/decidim/meetings/withdraw_meeting.rb +1 -1
  31. data/app/controllers/concerns/decidim/meetings/admin/invites/filterable.rb +33 -0
  32. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +1 -1
  33. data/app/controllers/decidim/meetings/admin/invites_controller.rb +6 -6
  34. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +2 -2
  35. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +12 -0
  36. data/app/controllers/decidim/meetings/application_controller.rb +1 -1
  37. data/app/controllers/decidim/meetings/live_events_controller.rb +1 -1
  38. data/app/controllers/decidim/meetings/meetings_controller.rb +3 -33
  39. data/app/controllers/decidim/meetings/polls/answers_controller.rb +10 -2
  40. data/app/controllers/decidim/meetings/registrations_controller.rb +3 -3
  41. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +1 -1
  42. data/app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb +1 -1
  43. data/app/forms/decidim/meetings/admin/meeting_form.rb +1 -1
  44. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +3 -3
  45. data/app/forms/decidim/meetings/admin/question_form.rb +8 -4
  46. data/app/forms/decidim/meetings/answer_form.rb +4 -4
  47. data/app/forms/decidim/meetings/meeting_form.rb +1 -1
  48. data/app/helpers/decidim/meetings/application_helper.rb +1 -5
  49. data/app/mailers/decidim/meetings/close_meeting_reminder_mailer.rb +1 -1
  50. data/app/models/decidim/meetings/meeting.rb +10 -4
  51. data/app/models/decidim/meetings/poll.rb +8 -0
  52. data/app/models/decidim/meetings/question.rb +1 -0
  53. data/app/models/decidim/meetings/questionnaire.rb +0 -6
  54. data/app/packs/src/decidim/meetings/admin/meetings_form.js +3 -3
  55. data/app/packs/src/decidim/meetings/meetings_form.js +3 -3
  56. data/app/packs/src/decidim/meetings/meetings_polls.js +5 -0
  57. data/app/packs/src/decidim/meetings/poll.component.js +32 -4
  58. data/app/packs/stylesheets/decidim/meetings/_item.scss +126 -6
  59. data/app/packs/stylesheets/decidim/meetings/_live_event.scss +0 -94
  60. data/app/permissions/decidim/meetings/permissions.rb +22 -7
  61. data/app/presenters/decidim/meetings/meeting_presenter.rb +10 -3
  62. data/app/services/decidim/meetings/calendar/component_calendar.rb +1 -1
  63. data/app/services/decidim/meetings/calendar/meeting_to_event.rb +1 -1
  64. data/app/services/decidim/meetings/close_meeting_reminder_generator.rb +1 -1
  65. data/app/services/decidim/meetings/meeting_iframe_embedder.rb +2 -2
  66. data/app/views/decidim/meetings/_calendar_modal.html.erb +1 -1
  67. data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +3 -3
  68. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb +3 -3
  69. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +3 -3
  70. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +3 -1
  71. data/app/views/decidim/meetings/admin/invites/_form.html.erb +4 -4
  72. data/app/views/decidim/meetings/admin/invites/index.html.erb +4 -34
  73. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +8 -8
  74. data/app/views/decidim/meetings/admin/meetings/_service.html.erb +3 -3
  75. data/app/views/decidim/meetings/admin/meetings/index.html.erb +2 -2
  76. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +1 -1
  77. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +1 -1
  78. data/app/views/decidim/meetings/admin/poll/_form.html.erb +26 -25
  79. data/app/views/decidim/meetings/admin/poll/_question.html.erb +18 -16
  80. data/app/views/decidim/meetings/admin/poll/edit.html.erb +4 -6
  81. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +2 -4
  82. data/app/views/decidim/meetings/close_meeting_reminder_mailer/close_meeting_reminder.html.erb +1 -1
  83. data/app/views/decidim/meetings/layouts/live_event.html.erb +1 -15
  84. data/app/views/decidim/meetings/meetings/_datetime.html.erb +4 -4
  85. data/app/views/decidim/meetings/meetings/_form.html.erb +17 -17
  86. data/app/views/decidim/meetings/meetings/_meeting.html.erb +2 -1
  87. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +2 -2
  88. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +3 -1
  89. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +1 -1
  90. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +15 -0
  91. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +6 -10
  92. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +4 -10
  93. data/app/views/decidim/meetings/polls/answers/admin.html.erb +34 -0
  94. data/app/views/decidim/meetings/polls/answers/index.html.erb +36 -0
  95. data/app/views/decidim/meetings/polls/questions/_closed_question.html.erb +8 -2
  96. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +27 -24
  97. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +14 -11
  98. data/app/views/decidim/meetings/polls/questions/_question.html.erb +1 -1
  99. data/app/views/decidim/meetings/polls/questions/index.js.erb +3 -3
  100. data/app/views/decidim/meetings/polls/questions/index_admin.js.erb +3 -3
  101. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +1 -1
  102. data/app/views/devise/mailer/join_meeting.html.erb +3 -1
  103. data/app/views/devise/mailer/join_meeting.text.erb +3 -1
  104. data/config/locales/ar.yml +1 -13
  105. data/config/locales/bg.yml +45 -12
  106. data/config/locales/ca.yml +45 -13
  107. data/config/locales/cs.yml +28 -16
  108. data/config/locales/de.yml +114 -82
  109. data/config/locales/el.yml +1 -13
  110. data/config/locales/en.yml +44 -12
  111. data/config/locales/es-MX.yml +47 -15
  112. data/config/locales/es-PY.yml +47 -15
  113. data/config/locales/es.yml +48 -16
  114. data/config/locales/eu.yml +79 -47
  115. data/config/locales/fi-plain.yml +46 -14
  116. data/config/locales/fi.yml +56 -24
  117. data/config/locales/fr-CA.yml +48 -16
  118. data/config/locales/fr.yml +48 -16
  119. data/config/locales/ga-IE.yml +0 -8
  120. data/config/locales/gl.yml +3 -11
  121. data/config/locales/hu.yml +3 -12
  122. data/config/locales/id-ID.yml +1 -12
  123. data/config/locales/is-IS.yml +1 -12
  124. data/config/locales/it.yml +3 -16
  125. data/config/locales/ja.yml +47 -15
  126. data/config/locales/lb.yml +1 -7
  127. data/config/locales/lt.yml +3 -12
  128. data/config/locales/lv.yml +1 -12
  129. data/config/locales/nl.yml +1 -13
  130. data/config/locales/no.yml +1 -12
  131. data/config/locales/pl.yml +45 -12
  132. data/config/locales/pt-BR.yml +23 -17
  133. data/config/locales/pt.yml +1 -14
  134. data/config/locales/ro-RO.yml +2 -15
  135. data/config/locales/ru.yml +1 -12
  136. data/config/locales/sk.yml +1 -12
  137. data/config/locales/sv.yml +108 -206
  138. data/config/locales/tr-TR.yml +2 -17
  139. data/config/locales/uk.yml +1 -12
  140. data/config/locales/zh-CN.yml +1 -15
  141. data/config/locales/zh-TW.yml +1 -13
  142. data/db/migrate/20240130135858_add_withdrawn_fields_on_meetings.rb +23 -0
  143. data/decidim-meetings.gemspec +2 -2
  144. data/lib/decidim/api/meeting_type.rb +3 -12
  145. data/lib/decidim/api/meetings_type.rb +3 -1
  146. data/lib/decidim/meetings/component.rb +2 -2
  147. data/lib/decidim/meetings/engine.rb +5 -3
  148. data/lib/decidim/meetings/meeting_serializer.rb +3 -38
  149. data/lib/decidim/meetings/seeds.rb +13 -18
  150. data/lib/decidim/meetings/test/factories.rb +1 -7
  151. data/lib/decidim/meetings/test/notifications_handling.rb +1 -1
  152. data/lib/decidim/meetings/version.rb +1 -1
  153. data/lib/tasks/decidim_meetings.rake +1 -1
  154. metadata +24 -22
  155. data/app/views/decidim/meetings/admin/agenda/show.html.erb +0 -0
  156. data/config/locales/bn-BD.yml +0 -1
  157. data/config/locales/bs-BA.yml +0 -8
@@ -2,11 +2,13 @@
2
2
  <% is_expanded = question.errors.any? %>
3
3
  <div class="card questionnaire-question" id="<%= id %>-field">
4
4
  <div class="form__wrapper" data-component="accordion">
5
- <div class="card-divider question-divider">
5
+ <div class="card-divider">
6
6
  <h2 class="card-title">
7
7
  <span>
8
8
  <% if editable %>
9
9
  <%== icon("drag-move-2-fill") %>
10
+ <% else %>
11
+ <%== icon("lock-line") %>
10
12
  <% end %>
11
13
  <%= dynamic_title(translated_attribute(question.body), class: "question-title-statement", max_length: 50, omission: "...", placeholder: t("question", scope: "decidim.forms.admin.questionnaires.question")) %>
12
14
  </span>
@@ -22,18 +24,18 @@
22
24
  </span>
23
25
  </button>
24
26
 
25
- <% if editable %>
26
- <button class="button button__sm button__transparent-secondary small alert hollow move-up-question button--title">
27
- <%= icon "arrow-up-line" %>
28
- <span><%= t("up", scope: "decidim.forms.admin.questionnaires.question") %></span>
29
- </button>
27
+ <button class="button button__sm button__transparent-secondary small alert move-up-question button--title">
28
+ <%= icon "arrow-up-line" %>
29
+ <span><%= t("up", scope: "decidim.forms.admin.questionnaires.question") %></span>
30
+ </button>
30
31
 
31
- <button class="button button__sm button__transparent-secondary small alert hollow move-down-question button--title">
32
- <%= icon "arrow-down-line" %>
33
- <span><%= t("down", scope: "decidim.forms.admin.questionnaires.question") %></span>
34
- </button>
32
+ <button class="button button__sm button__transparent-secondary small alert move-down-question button--title">
33
+ <%= icon "arrow-down-line" %>
34
+ <span><%= t("down", scope: "decidim.forms.admin.questionnaires.question") %></span>
35
+ </button>
35
36
 
36
- <button class="button button__sm button__transparent-secondary small alert hollow remove-question button--title">
37
+ <% if editable %>
38
+ <button class="button button__sm button__transparent-secondary small alert remove-question button--title">
37
39
  <%= t("remove", scope: "decidim.forms.admin.questionnaires.question") %>
38
40
  </button>
39
41
  <% end %>
@@ -66,17 +68,17 @@
66
68
  </div>
67
69
 
68
70
  <% if question.persisted? %>
69
- <%= form.hidden_field :id, disabled: !editable %>
71
+ <%= form.hidden_field :id %>
70
72
  <% end %>
71
73
 
72
- <%= form.hidden_field :position, value: question.position || 0, disabled: !editable %>
74
+ <%= form.hidden_field :position, value: question.position || 0 %>
73
75
  <%= form.hidden_field :deleted, disabled: !editable %>
74
76
 
75
- <div class="questionnaire-question-answer-options" data-template="<%= answer_option_template_selector %>">
77
+ <div class="questionnaire-question-answer-options<%= question.editable? ? "" : "-disabled" %>" data-template="<%= answer_option_template_selector %>">
76
78
  <div class="questionnaire-question-answer-options-list">
77
79
  <% question.answer_options.each do |answer_option| %>
78
80
  <%= fields_for "questionnaire[questions][#{question.to_param}][answer_options][]", answer_option do |answer_option_form| %>
79
- <%= render "decidim/meetings/admin/poll/answer_option", form: answer_option_form, question:, editable: %>
81
+ <%= render "decidim/meetings/admin/poll/answer_option", form: answer_option_form, question:, editable: question.editable? %>
80
82
  <% end %>
81
83
  <% end %>
82
84
  </div>
@@ -87,7 +89,7 @@
87
89
  <% end %>
88
90
  </div>
89
91
 
90
- <div class="row column questionnaire-question-max-choices">
92
+ <div class="row column questionnaire-question-max-choices<%= question.editable? ? "" : "-disabled" %>">
91
93
  <%=
92
94
  form.select(
93
95
  :max_choices,
@@ -17,13 +17,11 @@
17
17
  <%= decidim_form_for(@form, url: update_url, method: :put, html: { class: "form-defaults form edit_questionnaire" }) do |form| %>
18
18
  <%= render partial: "decidim/meetings/admin/poll/form", object: form %>
19
19
 
20
- <% if questionnaire.questions_editable? %>
21
- <div class="item__edit-sticky">
22
- <div class="item__edit-sticky-container">
23
- <%= form.submit t("save", scope: "decidim.forms.admin.questionnaires.edit"), class: "button button__sm button__secondary" %>
24
- </div>
20
+ <div class="item__edit-sticky">
21
+ <div class="item__edit-sticky-container">
22
+ <%= form.submit t("save", scope: "decidim.forms.admin.questionnaires.edit"), class: "button button__sm button__secondary" %>
25
23
  </div>
26
- <% end %>
24
+ </div>
27
25
  <% end %>
28
26
  </div>
29
27
  </div>
@@ -5,16 +5,14 @@
5
5
  <div class="flex items-center gap-x-4 ml-auto">
6
6
  <%= link_to t("invites", scope: "decidim.meetings.admin.registrations.form"), meeting_registrations_invites_path(meeting), class: "button button__sm button__secondary #{"disabled" unless allowed_to? :read_invites, :meeting, meeting: meeting}" %>
7
7
  <% if allowed_to? :export_registrations, :meeting, meeting: meeting %>
8
- <span class="exports tiny button button__sm button__secondary button--simple button--title" data-toggle="export-dropdown">
8
+ <span class="exports button button__sm button__secondary button--title" data-toggle="export-dropdown">
9
9
  <%= t "actions.export", scope: "decidim.admin" %>
10
10
  <%= icon "arrow-down-s-line", class: "dropdown-filter-icon" %>
11
11
  </span>
12
12
  <div class="dropdown-pane" id="export-dropdown" data-dropdown data-auto-focus="true" data-close-on-click="true">
13
13
  <ul class="vertical menu add-components">
14
14
  <% %w(CSV JSON Excel).each do |format| %>
15
- <%= link_to export_meeting_registrations_path(meeting_id: meeting, format:) do %>
16
- <li class="exports--format--<%= format.downcase %> exports--registrations"><%= t("decidim.admin.exports.export_as", name: t("decidim.#{current_component.manifest.name}.admin.exports.registrations"), export_format: format) %></li>
17
- <% end %>
15
+ <li class="exports--format--<%= format.downcase %> exports--registrations"><%= link_to t("decidim.admin.exports.export_as", name: t("decidim.#{current_component.manifest.name}.admin.exports.registrations"), export_format: format), export_meeting_registrations_path(meeting_id: meeting, format:) %></li>
18
16
  <% end %>
19
17
  </ul>
20
18
  </div>
@@ -2,4 +2,4 @@
2
2
 
3
3
  <p class="email-instructions"><%= t("decidim.meetings.close_meeting_reminder_mailer.close_meeting_reminder.body", meeting_title: translated_attribute(@meeting.title), meeting_path: @meeting.reported_content_url).html_safe %></p>
4
4
 
5
- <p class="email-closing"><%= t("decidim.meetings.close_meeting_reminder_mailer.close_meeting_reminder.greetings", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
5
+ <p class="email-closing"><%= t("decidim.meetings.close_meeting_reminder_mailer.close_meeting_reminder.greetings", organization_name: translated_attribute(@organization.name), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
@@ -14,20 +14,8 @@
14
14
  <%= render partial: "layouts/decidim/timeout_modal" %>
15
15
 
16
16
  <header class="meeting-polls__header">
17
- <% if current_user && poll %>
18
- <div class="flex gap-2">
19
- <button class="button button__sm button__secondary meeting-polls__action-list">
20
- <%= t("questions", scope: "decidim.meetings.layouts.live_event") %> <span id="visible-questions-count">(<%= questionnaire.questions.visible.count %>)</span>
21
- </button>
22
-
23
- <% if admin_allowed_to?(:update, :poll, meeting: meeting, poll: poll) %>
24
- <button class="button button__sm button__secondary meeting-polls__action-administrate"><%= t("administrate", scope: "decidim.meetings.layouts.live_event") %></button>
25
- <% end %>
26
- </div>
27
- <% end %>
28
-
29
17
  <div>
30
- <strong class="text-secondary"><%= current_organization.name %></strong> / <strong><%= present(meeting).title(links: true, html_escape: true ) %></strong>
18
+ <strong class="text-secondary"><%= current_organization_name %></strong> / <strong><%= present(meeting).title(links: true, html_escape: true ) %></strong>
31
19
  </div>
32
20
 
33
21
  <div class="flex gap-10">
@@ -43,8 +31,6 @@
43
31
  </header>
44
32
 
45
33
  <main class="meeting-polls__main">
46
- <aside class="meeting-polls__aside" id="meeting-poll-aside" data-decidim-meetings-poll='{"questionsUrl":"<%= meeting_polls_questions_path(meeting) %>"}'></aside>
47
- <aside class="meeting-polls__aside" id="admin-meeting-poll-aside" data-decidim-admin-meetings-poll='{"questionsUrl":"<%= meeting_polls_questions_path(meeting, admin: true) %>"}'></aside>
48
34
  <%= yield %>
49
35
  </main>
50
36
 
@@ -1,8 +1,8 @@
1
- <div class="card__datetime">
2
- <div class="card__datetime__date">
3
- <%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B %Y" %></span>
1
+ <div>
2
+ <div>
3
+ <%= l meeting.start_time, format: "%d" %> <span><%= l meeting.start_time, format: "%B %Y" %></span>
4
4
  </div>
5
- <div class="card__datetime__time">
5
+ <div>
6
6
  <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
7
7
  </div>
8
8
  </div>
@@ -1,35 +1,35 @@
1
- <div class="field hashtags__container">
1
+ <div>
2
2
  <%= form.text_field :title, autofocus: true, class: "js-hashtags", hashtaggable: true %>
3
3
  </div>
4
4
 
5
- <div class="field hashtags__container">
5
+ <div>
6
6
  <%= text_editor_for(form, :description, hashtaggable: true) %>
7
7
  </div>
8
8
 
9
- <div class="field">
9
+ <div>
10
10
  <%= form.select :type_of_meeting,
11
11
  @form.type_of_meeting_select,
12
12
  { include_blank: t(".select_a_meeting_type") },
13
13
  { multiple: false } %>
14
14
  </div>
15
15
 
16
- <div class="field" data-meeting-type="in_person">
16
+ <div data-meeting-type="in_person">
17
17
  <%= form.geocoding_field :address, input_html: { required: false }, help_text: t(".address_help") %>
18
18
  </div>
19
19
 
20
- <div class="field" data-meeting-type="in_person">
20
+ <div data-meeting-type="in_person">
21
21
  <%= form.text_area :location, help_text: t(".location_help") %>
22
22
  </div>
23
23
 
24
- <div class="field">
24
+ <div>
25
25
  <%= form.text_area :location_hints, help_text: t(".location_hints_help") %>
26
26
  </div>
27
27
 
28
- <div class="field" data-meeting-type="online">
28
+ <div data-meeting-type="online">
29
29
  <%= form.text_field :online_meeting_url, help_text: t(".online_meeting_url_help") %>
30
30
  </div>
31
31
 
32
- <div class="field" data-meeting-type="online">
32
+ <div data-meeting-type="online">
33
33
  <%= form.select :iframe_embed_type,
34
34
  @form.iframe_embed_type_select,
35
35
  {
@@ -38,28 +38,28 @@
38
38
  } %>
39
39
  </div>
40
40
 
41
- <div class="field iframe-fields--access-level" id="meeting_iframe_embed_type" data-meeting-type="online-access-level">
41
+ <div class="iframe-fields--access-level" id="meeting_iframe_embed_type" data-meeting-type="online-access-level">
42
42
  <%= form.select :iframe_access_level,
43
43
  @form.iframe_access_level_select,
44
44
  { include_blank: t(".select_an_iframe_access_level") },
45
45
  { multiple: false } %>
46
46
  </div>
47
47
 
48
- <div class="field">
48
+ <div>
49
49
  <%= form.datetime_field :start_time %>
50
50
  </div>
51
51
 
52
- <div class="field">
52
+ <div>
53
53
  <%= form.datetime_field :end_time %>
54
54
  </div>
55
55
 
56
56
  <% if current_participatory_space.has_subscopes? %>
57
- <div class="field">
57
+ <div>
58
58
  <%= scopes_select_field form, :decidim_scope_id %>
59
59
  </div>
60
60
  <% end %>
61
61
 
62
- <div class="field">
62
+ <div>
63
63
  <%= form.categories_select :decidim_category_id, current_participatory_space.categories, prompt: t(".select_a_category"), disable_parents: false %>
64
64
  </div>
65
65
 
@@ -74,16 +74,16 @@
74
74
  <%= form.number_field :available_slots, help_text: t(".available_slots_help") %>
75
75
  </div>
76
76
 
77
- <div class="field" id="meeting_registration_terms">
77
+ <div id="meeting_registration_terms">
78
78
  <%= text_editor_for(form, :registration_terms) %>
79
79
  </div>
80
80
 
81
- <div class="field" id="meeting_registration_url">
81
+ <div id="meeting_registration_url">
82
82
  <%= form.text_field :registration_url, help_text: t(".registration_url_help") %>
83
- <label><%= t(".disclaimer", organization: current_component.organization.name) %></label><br>
83
+ <label><%= t(".disclaimer", organization: organization_name(current_component.organization)) %></label><br>
84
84
  </div>
85
85
 
86
- <div class="field">
86
+ <div>
87
87
  <%= form.select(
88
88
  :user_group_id,
89
89
  Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.map { |g| [g.name, g.id] },
@@ -1,8 +1,9 @@
1
- <%= render layout: "layouts/decidim/shared/layout_item", locals: nav_paths do %>
1
+ <%= render layout: "layouts/decidim/shared/layout_item" do %>
2
2
  <section class="layout-main__section layout-main__heading">
3
3
  <h1 class="h2 decorator"><%= present(meeting).title(links: true, html_escape: true ) %></h1>
4
4
 
5
5
  <%= cell "decidim/meetings/dates_and_map", meeting %>
6
+ <%= render partial: "meeting_poll_actions", locals: { mobile: true } %>
6
7
 
7
8
  <div class="layout-author">
8
9
  <%= cell "decidim/author", author_presenter_for(meeting.normalized_author), from: meeting, context_actions: nil, layout: :compact %>
@@ -12,7 +12,7 @@
12
12
  <span><%= display_duration_agenda_items(agenda_item.id, index, agenda_items_times) %></span>
13
13
  </h3>
14
14
 
15
- <div class="meeting__agenda-item__description editor-content"><%= decidim_sanitize(translated_attribute(agenda_item.description)).html_safe %></div>
15
+ <div class="meeting__agenda-item__description editor-content"><%= decidim_sanitize_translated(agenda_item.description).html_safe %></div>
16
16
 
17
17
  <% if agenda_item.agenda_item_children.presence %>
18
18
  <% parent_start_time = agenda_items_times[index][:start_time] %>
@@ -24,7 +24,7 @@
24
24
  <span><%= translated_attribute(agenda_item_child.title) %></span>
25
25
  <span><%= display_duration_agenda_items(agenda_item_child.id, index_child, agenda_item_children_times) %></span>
26
26
  </h4>
27
- <div class="meeting__agenda-item__description"><%= decidim_sanitize(translated_attribute(agenda_item_child.description)).html_safe %></div>
27
+ <div class="meeting__agenda-item__description"><%= decidim_sanitize_translated(agenda_item_child.description).html_safe %></div>
28
28
  </div>
29
29
  <% end %>
30
30
  <% end %>
@@ -1,5 +1,7 @@
1
+ <%= render partial: "meeting_poll_actions" %>
2
+
1
3
  <% if meeting.can_be_joined_by?(current_user) || meeting.on_different_platform? %>
2
- <section class="layout-aside__section layout-aside__buttons">
4
+ <section class="layout-aside__section layout-aside__buttons layout-aside__ctas-buttons" data-sticky-buttons>
3
5
  <%= cell "decidim/meetings/join_meeting_button", meeting, show_remaining_slots: true %>
4
6
  </section>
5
7
  <% end %>
@@ -5,7 +5,7 @@
5
5
  </div>
6
6
 
7
7
  <div class="meeting__agenda-item">
8
- <div class="meeting__agenda-item__description editor-content mb-4"><%= render_meeting_sanitize_field(meeting, :closing_report) %></div>
8
+ <div class="meeting__agenda-item__description editor-content mb-4"><%= decidim_sanitize_editor translated_attribute meeting.closing_report %></div>
9
9
 
10
10
  <% if meeting.video_url.presence %>
11
11
  <div class="flex items-center gap-2 mt-2">
@@ -0,0 +1,15 @@
1
+ <% extra_classes = local_assigns.fetch(:mobile, false) ? " block md:hidden" : " hidden md:block" %>
2
+ <% if meeting.poll&.has_questions? %>
3
+ <section class="layout-aside__section layout-aside__buttons<%= extra_classes %>">
4
+ <%= action_authorized_link_to :reply_poll, meeting_polls_answers_path(meeting), class: "button button__xl button__secondary w-full", data: { "redirect_url" => meeting_polls_answers_path(meeting) }, resource: meeting do %>
5
+ <span>
6
+ <%= meeting.poll.has_open_questions? ? t("reply_poll", scope: "decidim.meetings.meetings.meeting") : t("view_poll", scope: "decidim.meetings.meetings.meeting") %>
7
+ </span>
8
+ <% end %>
9
+ <% if !allowed_to?(:reply_poll, :meeting, meeting:) && allowed_to?(:update, :poll, meeting:) %>
10
+ <%= link_to admin_meeting_polls_answers_path(meeting), class: "button button__sm button__transparent-secondary w-full" do %>
11
+ <span><%= t("administrate", scope: "decidim.meetings.polls.answers.index") %></span>
12
+ <% end %>
13
+ <% end %>
14
+ </section>
15
+ <% end %>
@@ -2,16 +2,12 @@
2
2
  <% question.answer_options.each_with_index do |answer_option, idx| %>
3
3
  <% choice = answer.choices.find { |choice| choice.decidim_answer_option_id == answer_option.id } if answer %>
4
4
 
5
- <div class="js-collection-input">
6
- <%= label_tag do %>
7
- <%= check_box_tag "answer[choices][#{idx}][body]",
8
- translated_attribute(answer_option.body),
9
- choice.present?, disabled: %>
5
+ <%= label_tag "answer[choices][#{answer_option.id}][answer_option_id]", nil, class: "js-collection-input" do %>
6
+ <%= check_box_tag "answer[choices][#{answer_option.id}][answer_option_id]",
7
+ answer_option.id,
8
+ choice.present?, disabled: %>
10
9
 
11
- <%= translated_attribute(answer_option.body) %>
12
-
13
- <%= hidden_field_tag "answer[choices][#{idx}][answer_option_id]", answer_option.id, disabled: %>
14
- <% end %>
15
- </div>
10
+ <%= translated_attribute(answer_option.body) %>
11
+ <% end %>
16
12
  <% end %>
17
13
  </div>
@@ -3,17 +3,11 @@
3
3
  <% question.answer_options.each_with_index do |answer_option, idx| %>
4
4
  <% choice_id = "#{field_id}_choices_#{idx}" %>
5
5
 
6
- <%= label_tag "#{choice_id}_body" do %>
7
- <%= radio_button_tag "answer[choices][#{question.id}][body]",
8
- translated_attribute(answer_option.body),
6
+ <%= label_tag "#{choice_id}_answer_option" do %>
7
+ <%= radio_button_tag "answer[choices][#{question.id}][answer_option_id]",
8
+ answer_option.id,
9
9
  answer_option.id == choice.try(:decidim_answer_option_id),
10
- id: "#{choice_id}_body", disabled: %>
11
-
10
+ id: "#{choice_id}_answer_option", disabled: %>
12
11
  <%= translated_attribute(answer_option.body) %>
13
-
14
- <%= hidden_field_tag "answer[choices][#{question.id}][answer_option_id]",
15
- answer_option.id,
16
- id: "#{choice_id}_answer_option",
17
- disabled: %>
18
12
  <% end %>
19
13
  <% end %>
@@ -0,0 +1,34 @@
1
+ <% add_decidim_meta_tags({
2
+ title: present(meeting).title,
3
+ description: present(meeting).description,
4
+ url: meeting_url(meeting.id)
5
+ }) %>
6
+
7
+ <%= append_javascript_pack_tag "decidim_meetings" %>
8
+ <%= append_stylesheet_pack_tag "decidim_meetings" %>
9
+ <%= append_javascript_pack_tag "decidim_forms" %>
10
+
11
+ <% add_body_classes "meeting-poll__layout" %>
12
+
13
+ <%= render layout: "layouts/decidim/shared/layout_center" do %>
14
+ <div class="meeting-polls__topbar is-admin">
15
+ <%= link_to meeting_path(meeting), class: "button button__sm button__text md:button__text-secondary" do %>
16
+ <%= icon "arrow-left-line" %>
17
+ <%= t("back_to_meeting", scope: "decidim.meetings.polls.answers.index_admin") %>
18
+ <% end %>
19
+
20
+ <%= action_authorized_link_to :reply_poll, meeting_polls_answers_path(meeting), class: "button button__sm button__secondary", data: { "redirect_url" => meeting_polls_answers_path(meeting) }, resource: meeting do %>
21
+ <%= t("view_poll", scope: "decidim.meetings.polls.answers.index_admin") %>
22
+ <% end %>
23
+ </div>
24
+
25
+ <div class="text-center">
26
+ <h1 class="title-decorator inline-block text-left">
27
+ <%= t("title", scope: "decidim.meetings.polls.answers.index_admin") %>
28
+ </h1>
29
+ </div>
30
+
31
+ <div class="meeting-polls" id="admin-meeting-poll" data-decidim-admin-meetings-poll='{"questionsUrl":"<%= meeting_polls_questions_path(meeting, admin: true) %>"}'>
32
+ <%= render partial: "decidim/meetings/polls/questions/index_admin", locals: { open_question: nil } %>
33
+ </div>
34
+ <% end %>
@@ -0,0 +1,36 @@
1
+ <% add_decidim_meta_tags({
2
+ title: present(meeting).title,
3
+ description: present(meeting).description,
4
+ url: meeting_url(meeting.id)
5
+ }) %>
6
+
7
+ <%= append_javascript_pack_tag "decidim_meetings" %>
8
+ <%= append_stylesheet_pack_tag "decidim_meetings" %>
9
+ <%= append_javascript_pack_tag "decidim_forms" %>
10
+
11
+ <% add_body_classes "meeting-poll__layout" %>
12
+
13
+ <%= render layout: "layouts/decidim/shared/layout_center" do %>
14
+ <div class="meeting-polls__topbar">
15
+ <%= link_to meeting_path(meeting), class: "button button__sm button__text-secondary" do %>
16
+ <%= icon "arrow-left-line" %>
17
+ <%= t("back_to_meeting", scope: "decidim.meetings.polls.answers.index_admin") %>
18
+ <% end %>
19
+
20
+ <% if admin_allowed_to?(:update, :poll, meeting: meeting, poll: poll) %>
21
+ <%= link_to admin_meeting_polls_answers_path(meeting), class: "button button__sm button__primary" do %>
22
+ <%= t("administrate", scope: "decidim.meetings.polls.answers.index") %>
23
+ <% end %>
24
+ <% end %>
25
+ </div>
26
+
27
+ <div class="text-center">
28
+ <h1 class="title-decorator inline-block text-left">
29
+ <%= t("title", scope: "decidim.meetings.polls.answers.index") %>
30
+ </h1>
31
+ </div>
32
+
33
+ <div class="meeting-polls" id="meeting-poll" data-decidim-meetings-poll='{"questionsUrl":"<%= meeting_polls_questions_path(meeting) %>"}'>
34
+ <%= render partial: "decidim/meetings/polls/questions/index" %>
35
+ </div>
36
+ <% end %>
@@ -1,7 +1,13 @@
1
- <summary><%= t(".question_results") %></summary>
1
+ <summary>
2
+ <span><%= t(".question") %></span>
3
+ <span><%= t(".question_results") %></span>
4
+ </summary>
2
5
 
3
6
  <div>
4
- <p><%= translated_attribute(question.body) %></p>
7
+ <p class="h3"><%= translated_attribute(question.body) %></p>
8
+ <span id="<%= "closed-announcement-#{question.id}" %>" hidden>
9
+ <%= cell "decidim/announcement", t("announcement", scope: "decidim.meetings.polls.questions.closed_question"), callout_class: "warning" %>
10
+ </span>
5
11
 
6
12
  <%= cell "decidim/meetings/question_responses", question %>
7
13
  </div>
@@ -1,40 +1,43 @@
1
- <div class="meeting-polls__admin-label"><%= t(".admin_dashboard") %></div>
2
-
3
1
  <% questionnaire.questions.includes([:questionnaire]).each do |question| %>
4
2
  <details class="meeting-polls__question meeting-polls__question--admin open" data-question="<%= question.id %>" <%= "open" if open_question == question.id %>>
5
- <summary><%= t(".question") %></summary>
3
+ <summary>
4
+ <span><%= t(".question") %></span>
5
+ <span><%= t(question.status, scope: "decidim.meetings.polls.questions.index_admin.statuses") %></span>
6
+ </summary>
6
7
 
7
8
  <%= form_tag(meeting_polls_question_path(meeting, question), method: :patch, remote: true) do %>
8
- <div>
9
- <p><%= translated_attribute(question.body) %></p>
9
+ <p class="h3"><%= translated_attribute(question.body) %></p>
10
10
 
11
- <%= link_to t(".edit"), Decidim::EngineRouter.admin_proxy(meeting.component).edit_meeting_poll_path(meeting), target: "_blank", rel: "noopener noreferrer" %>
11
+ <% if question.unpublished? %>
12
+ <%= link_to(
13
+ t(".edit"),
14
+ Decidim::EngineRouter.admin_proxy(meeting.component).edit_meeting_poll_path(meeting),
15
+ class: "button button__xs button__secondary mr-auto mt-2",
16
+ target: "_blank",
17
+ rel: "noopener noreferrer"
18
+ ) %>
19
+ <% end %>
12
20
 
21
+ <div>
13
22
  <div class="meeting-polls__admin-action meeting-polls__admin-action-question">
14
- <div><%= t(".question") %></div>
15
- <div>
16
- <% if question.unpublished? %>
17
- <button class="button button__sm button__secondary"><%= t(".send") %></button>
18
- <% else %>
19
- <div><strong><%= t(".sent") %></strong></div>
20
- <div><%= pluralize(question.answers_count, t(".received_answer"), t(".received_answers")) %></div>
21
- <% end %>
22
- </div>
23
+ <div class="h4"><%= t(".question") %><%= " · " + t(".sent") if question.published? %></div>
24
+
25
+ <% if question.unpublished? %>
26
+ <button class="button button__sm button__secondary"><%= t(".send") %></button>
27
+ <% else %>
28
+ <div><%= pluralize(question.answers_count, t(".received_answer"), t(".received_answers")) %></div>
29
+ <% end %>
23
30
  </div>
31
+
24
32
  <div class="meeting-polls__admin-action meeting-polls__admin-action-results">
25
- <div><%= t(".results") %></div>
33
+ <div class="h4"><%= t(".results") %></div>
34
+
35
+ <button class="button button__sm button__secondary" <%= question.published? ? "" : "disabled" %>><%= question.closed? ? t(".sent") : t(".send") %></button>
36
+
26
37
  <div>
27
38
  <% unless question.unpublished? %>
28
39
  <%= cell "decidim/meetings/question_responses", question %>
29
40
  <% end %>
30
-
31
- <% if question.unpublished? %>
32
- <button class="button button__sm button__secondary" disabled><%= t(".send") %></button>
33
- <% elsif question.published? %>
34
- <button class="button button__sm button__secondary"><%= t(".send") %></button>
35
- <% elsif question.closed? %>
36
- <div class="mt-1"><strong><%= t(".sent") %></strong></div>
37
- <% end %>
38
41
  </div>
39
42
  </div>
40
43
  </div>
@@ -1,11 +1,15 @@
1
- <summary><%= t(".question") %></summary>
1
+ <summary>
2
+ <span><%= t(".question") %></span>
3
+ </summary>
2
4
 
3
5
  <div>
4
- <p><%= translated_attribute(question.body) %></p>
5
6
 
6
7
  <% @form = form || Decidim::Meetings::AnswerForm.new(question_id: question.id, current_user:) %>
7
- <%= decidim_form_for(@form, url: meeting_polls_answers_path(meeting), method: :post, remote: true, html: { class: "form-defaults mt-4" }, data: { "safe-path" => meeting_live_event_path(meeting) }) do |form| %>
8
- <div class="answer question" data-max-choices="<%= question.max_choices %>">
8
+
9
+ <p class="h3"><%= @form.label %></p>
10
+
11
+ <%= decidim_form_for(@form, url: meeting_polls_answers_path(meeting), method: :post, remote: true, html: { class: "form-defaults" }, data: { "safe-path" => meeting_live_event_path(meeting) }) do |form| %>
12
+ <div class="meeting-polls__answer" data-max-choices="<%= question.max_choices %>">
9
13
  <p class="form-error max-choices-alert mt-0 mb-4"><%= t(".max_choices_alert") %></p>
10
14
 
11
15
  <%= render partial: "decidim/meetings/polls/answers/#{question.question_type}", locals: { answer: @form.answer, question:, answer_form: form, disabled: question.answered_by?(current_user), field_id: question.id } %>
@@ -15,13 +19,12 @@
15
19
  <% @form.errors.full_messages.each do |msg| %>
16
20
  <small class="form-error is-visible mt-1"><%= msg %></small>
17
21
  <% end %>
22
+
23
+ <% if question.answered_by?(current_user) %>
24
+ <%= cell("decidim/announcement", t(".question_replied"), callout_class: "success" ) %>
25
+ <% else %>
26
+ <button class="ml-auto mt-8 button button__lg button__secondary"><%= t(".reply_question") %></button>
27
+ <% end %>
18
28
  </div>
19
- <% if question.answered_by?(current_user) %>
20
- <%= cell("decidim/announcement", t(".question_replied"), callout_class: "success" ) %>
21
- <% else %>
22
- <div class="text-right">
23
- <button class="ml-auto button button button__sm button__secondary"><%= t(".reply_question") %></button>
24
- </div>
25
- <% end %>
26
29
  <% end %>
27
30
  </div>
@@ -1,4 +1,4 @@
1
- <details class="meeting-polls__question" data-question="<%= question.id %>" <%= "open" if local_assigns.fetch(:open_question, nil) == question %>>
1
+ <details class="meeting-polls__question" data-question="<%= question.id %>" data-status="<%= question.status %>" <%= "open" if local_assigns.fetch(:open_question, nil) == question %>>
2
2
  <% if question.published? %>
3
3
  <%= render partial: "decidim/meetings/polls/questions/published_question", locals: { question:, form: local_assigns.fetch(:form, nil) } %>
4
4
  <% elsif question.closed? %>
@@ -1,5 +1,5 @@
1
- var $aside = $("#meeting-poll-aside");
1
+ var $meetingPoll = $("[data-decidim-meetings-poll]");
2
2
 
3
- if($aside.length){
4
- $aside.html('<%= j(render partial: "decidim/meetings/polls/questions/index").strip.html_safe %>');
3
+ if($meetingPoll.length){
4
+ $meetingPoll.html('<%= j(render partial: "decidim/meetings/polls/questions/index").strip.html_safe %>');
5
5
  }
@@ -1,5 +1,5 @@
1
- var $aside = $("#admin-meeting-poll-aside");
1
+ var $adminMeetingPoll = $("[data-decidim-admin-meetings-poll]");
2
2
 
3
- if($aside.length){
4
- $aside.html('<%= j(render partial: "decidim/meetings/polls/questions/index_admin", locals: { open_question: }).strip.html_safe %>');
3
+ if($adminMeetingPoll.length){
4
+ $adminMeetingPoll.html('<%= j(render partial: "decidim/meetings/polls/questions/index_admin", locals: { open_question: }).strip.html_safe %>');
5
5
  }
@@ -6,5 +6,5 @@
6
6
  <% if @meeting.customize_registration_email? %>
7
7
  <p><%= present(@meeting).registration_email_custom_content %></p>
8
8
  <% end %>
9
- <br>
9
+
10
10
  <p class="email-instructions"><%= t(".details") %></p>