decidim-meetings 0.28.3 → 0.29.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) 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/highlighted_meetings_for_component_cell.rb +1 -2
  5. data/app/cells/decidim/meetings/join_meeting_button/remaining_slots.erb +1 -0
  6. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +0 -3
  7. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +0 -3
  8. data/app/cells/decidim/meetings/meeting_cell.rb +0 -1
  9. data/app/cells/decidim/meetings/meeting_l_cell.rb +4 -2
  10. data/app/cells/decidim/meetings/meeting_url/show.erb +5 -5
  11. data/app/cells/decidim/meetings/meeting_url_cell.rb +0 -1
  12. data/app/cells/decidim/meetings/online_meeting_link_cell.rb +0 -2
  13. data/app/cells/decidim/meetings/question_responses/show.erb +7 -3
  14. data/app/cells/decidim/meetings/question_responses_cell.rb +0 -2
  15. data/app/commands/decidim/meetings/admin/copy_meeting.rb +2 -2
  16. data/app/commands/decidim/meetings/admin/create_agenda.rb +9 -37
  17. data/app/commands/decidim/meetings/admin/create_meeting.rb +28 -61
  18. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +4 -33
  19. data/app/commands/decidim/meetings/admin/update_agenda.rb +7 -35
  20. data/app/commands/decidim/meetings/admin/update_meeting.rb +30 -68
  21. data/app/commands/decidim/meetings/admin/update_question_status.rb +1 -1
  22. data/app/commands/decidim/meetings/admin/update_questionnaire.rb +19 -11
  23. data/app/commands/decidim/meetings/admin/update_registrations.rb +20 -46
  24. data/app/commands/decidim/meetings/create_answer.rb +5 -4
  25. data/app/commands/decidim/meetings/create_meeting.rb +38 -62
  26. data/app/commands/decidim/meetings/join_meeting.rb +18 -19
  27. data/app/commands/decidim/meetings/update_meeting.rb +6 -7
  28. data/app/commands/decidim/meetings/withdraw_meeting.rb +1 -1
  29. data/app/controllers/concerns/decidim/meetings/admin/invites/filterable.rb +33 -0
  30. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +1 -1
  31. data/app/controllers/decidim/meetings/admin/invites_controller.rb +6 -6
  32. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +2 -2
  33. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +12 -0
  34. data/app/controllers/decidim/meetings/application_controller.rb +1 -1
  35. data/app/controllers/decidim/meetings/live_events_controller.rb +1 -1
  36. data/app/controllers/decidim/meetings/meetings_controller.rb +3 -33
  37. data/app/controllers/decidim/meetings/polls/answers_controller.rb +10 -2
  38. data/app/controllers/decidim/meetings/registrations_controller.rb +3 -3
  39. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +1 -1
  40. data/app/forms/decidim/meetings/admin/question_form.rb +8 -4
  41. data/app/forms/decidim/meetings/answer_form.rb +4 -4
  42. data/app/forms/decidim/meetings/meeting_form.rb +1 -1
  43. data/app/helpers/decidim/meetings/application_helper.rb +1 -5
  44. data/app/mailers/decidim/meetings/close_meeting_reminder_mailer.rb +1 -1
  45. data/app/models/decidim/meetings/meeting.rb +10 -4
  46. data/app/models/decidim/meetings/poll.rb +8 -0
  47. data/app/models/decidim/meetings/question.rb +1 -0
  48. data/app/models/decidim/meetings/questionnaire.rb +0 -6
  49. data/app/packs/src/decidim/meetings/admin/meetings_form.js +3 -3
  50. data/app/packs/src/decidim/meetings/meetings_form.js +3 -3
  51. data/app/packs/src/decidim/meetings/meetings_polls.js +5 -0
  52. data/app/packs/src/decidim/meetings/poll.component.js +32 -4
  53. data/app/packs/stylesheets/decidim/meetings/_item.scss +109 -1
  54. data/app/packs/stylesheets/decidim/meetings/_live_event.scss +0 -94
  55. data/app/permissions/decidim/meetings/permissions.rb +20 -0
  56. data/app/presenters/decidim/meetings/meeting_presenter.rb +5 -2
  57. data/app/services/decidim/meetings/calendar/component_calendar.rb +1 -1
  58. data/app/services/decidim/meetings/calendar/meeting_to_event.rb +1 -1
  59. data/app/services/decidim/meetings/close_meeting_reminder_generator.rb +1 -1
  60. data/app/services/decidim/meetings/meeting_iframe_embedder.rb +2 -2
  61. data/app/views/decidim/meetings/admin/agenda/_agenda_item.html.erb +3 -3
  62. data/app/views/decidim/meetings/admin/agenda/_agenda_item_child.html.erb +3 -3
  63. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +3 -3
  64. data/app/views/decidim/meetings/admin/invite_join_meeting_mailer/invite.html.erb +3 -1
  65. data/app/views/decidim/meetings/admin/invites/_form.html.erb +4 -4
  66. data/app/views/decidim/meetings/admin/invites/index.html.erb +4 -34
  67. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +8 -8
  68. data/app/views/decidim/meetings/admin/meetings/_service.html.erb +3 -3
  69. data/app/views/decidim/meetings/admin/meetings/index.html.erb +2 -2
  70. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +1 -1
  71. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +1 -1
  72. data/app/views/decidim/meetings/admin/poll/_form.html.erb +26 -25
  73. data/app/views/decidim/meetings/admin/poll/_question.html.erb +18 -16
  74. data/app/views/decidim/meetings/admin/poll/edit.html.erb +4 -6
  75. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +2 -4
  76. data/app/views/decidim/meetings/close_meeting_reminder_mailer/close_meeting_reminder.html.erb +1 -1
  77. data/app/views/decidim/meetings/layouts/live_event.html.erb +1 -15
  78. data/app/views/decidim/meetings/meetings/_datetime.html.erb +4 -4
  79. data/app/views/decidim/meetings/meetings/_form.html.erb +17 -17
  80. data/app/views/decidim/meetings/meetings/_meeting.html.erb +2 -1
  81. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +2 -2
  82. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +3 -1
  83. data/app/views/decidim/meetings/meetings/_meeting_minutes.html.erb +1 -1
  84. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +15 -0
  85. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +6 -10
  86. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +4 -10
  87. data/app/views/decidim/meetings/polls/answers/admin.html.erb +34 -0
  88. data/app/views/decidim/meetings/polls/answers/index.html.erb +36 -0
  89. data/app/views/decidim/meetings/polls/questions/_closed_question.html.erb +8 -2
  90. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +27 -24
  91. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +14 -11
  92. data/app/views/decidim/meetings/polls/questions/_question.html.erb +1 -1
  93. data/app/views/decidim/meetings/polls/questions/index.js.erb +3 -3
  94. data/app/views/decidim/meetings/polls/questions/index_admin.js.erb +3 -3
  95. data/app/views/devise/mailer/join_meeting.html.erb +3 -1
  96. data/app/views/devise/mailer/join_meeting.text.erb +3 -1
  97. data/config/locales/ar.yml +0 -10
  98. data/config/locales/bg.yml +44 -12
  99. data/config/locales/ca.yml +44 -12
  100. data/config/locales/cs.yml +24 -12
  101. data/config/locales/de.yml +44 -12
  102. data/config/locales/el.yml +0 -10
  103. data/config/locales/en.yml +44 -12
  104. data/config/locales/es-MX.yml +44 -12
  105. data/config/locales/es-PY.yml +44 -12
  106. data/config/locales/es.yml +44 -12
  107. data/config/locales/eu.yml +44 -12
  108. data/config/locales/fi-plain.yml +44 -12
  109. data/config/locales/fi.yml +44 -12
  110. data/config/locales/fr-CA.yml +44 -12
  111. data/config/locales/fr.yml +44 -12
  112. data/config/locales/ga-IE.yml +0 -5
  113. data/config/locales/gl.yml +0 -4
  114. data/config/locales/hu.yml +0 -7
  115. data/config/locales/id-ID.yml +0 -3
  116. data/config/locales/is-IS.yml +0 -3
  117. data/config/locales/it.yml +0 -8
  118. data/config/locales/ja.yml +44 -12
  119. data/config/locales/lb.yml +0 -3
  120. data/config/locales/lt.yml +0 -10
  121. data/config/locales/lv.yml +0 -3
  122. data/config/locales/nl.yml +0 -10
  123. data/config/locales/no.yml +0 -9
  124. data/config/locales/pl.yml +44 -12
  125. data/config/locales/pt-BR.yml +17 -12
  126. data/config/locales/pt.yml +0 -8
  127. data/config/locales/ro-RO.yml +0 -10
  128. data/config/locales/ru.yml +0 -3
  129. data/config/locales/sk.yml +0 -3
  130. data/config/locales/sv.yml +3 -14
  131. data/config/locales/tr-TR.yml +0 -4
  132. data/config/locales/uk.yml +0 -3
  133. data/config/locales/zh-CN.yml +0 -4
  134. data/config/locales/zh-TW.yml +0 -10
  135. data/db/migrate/20240130135858_add_withdrawn_fields_on_meetings.rb +23 -0
  136. data/decidim-meetings.gemspec +1 -1
  137. data/lib/decidim/api/meeting_type.rb +3 -0
  138. data/lib/decidim/meetings/component.rb +2 -2
  139. data/lib/decidim/meetings/engine.rb +5 -1
  140. data/lib/decidim/meetings/meeting_serializer.rb +3 -1
  141. data/lib/decidim/meetings/seeds.rb +25 -15
  142. data/lib/decidim/meetings/test/factories.rb +1 -1
  143. data/lib/decidim/meetings/test/notifications_handling.rb +1 -1
  144. data/lib/decidim/meetings/version.rb +1 -1
  145. data/lib/tasks/decidim_meetings.rake +1 -1
  146. metadata +23 -19
  147. data/app/views/decidim/meetings/admin/agenda/show.html.erb +0 -0
@@ -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
  }
@@ -1,7 +1,9 @@
1
1
  <p class="email-greeting"><%= t("devise.mailer.invitation_instructions.hello", email: @resource.name) %></p>
2
2
 
3
3
  <p class="email-instructions">
4
- <%= t("decidim.meetings.admin.invite_join_meeting_mailer.invite.invited_you_to_join_a_meeting", invited_by: @resource.invited_by.name, application: @resource.organization.name) %>
4
+ <%= t("decidim.meetings.admin.invite_join_meeting_mailer.invite.invited_you_to_join_a_meeting",
5
+ invited_by: @resource.invited_by.name,
6
+ application: translated_attribute(@resource.organization.name)) %>
5
7
  </p>
6
8
 
7
9
  <p class="email-button email-button__cta cta-decline"><%= link_to t("devise.mailer.invitation_instructions.decline"), accept_invitation_url(@resource, invitation_token: @token, invite_redirect: Decidim::EngineRouter.main_proxy(@opts[:meeting].component).decline_invitation_meeting_registration_path(meeting_id: @opts[:meeting], participatory_space_id: @opts[:meeting].component.participatory_space), host: @resource.organization.host) %></p>
@@ -1,6 +1,8 @@
1
1
  <%= t("devise.mailer.invitation_instructions.hello", email: @resource.name) %>
2
2
 
3
- <%= t("decidim.meetings.admin.invite_join_meeting_mailer.invite.invited_you_to_join_a_meeting", invited_by: @resource.invited_by.name, application: @resource.organization.name) %>
3
+ <%= t("decidim.meetings.admin.invite_join_meeting_mailer.invite.invited_you_to_join_a_meeting",
4
+ invited_by: @resource.invited_by.name,
5
+ application: translated_attribute(@resource.organization.name)) %>
4
6
 
5
7
  <%= t("devise.mailer.invitation_instructions.decline") %>:
6
8
  <% accept_invitation_url(@resource, invitation_token: @token, invite_redirect: Decidim::EngineRouter.main_proxy(@opts[:meeting].component).decline_invitation_meeting_registration_path(meeting_id: @opts[:meeting], participatory_space_id: @opts[:meeting].component.participatory_space), host: @resource.organization.host) %>
@@ -267,12 +267,8 @@ ar:
267
267
  non_user: مشارك غير موجود
268
268
  select_user: اختر المشارك
269
269
  index:
270
- filter:
271
- all: الكل
272
- sent: أرسلت
273
270
  invite_attendee: دعوة الحضور
274
271
  invites: تدعو
275
- search: بحث
276
272
  meeting_closes:
277
273
  edit:
278
274
  close: قريب
@@ -372,7 +368,6 @@ ar:
372
368
  body: الاجتماع <a href="%{meeting_path}">"%{meeting_title}"</a> في انتظار إغلاقه. الرجاء إضافة تقرير عن الاجتماع باستخدام زر "إغلاق الاجتماع".
373
369
  greetings: تحيات,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>
374
370
  hello: مرحبا %{username}،
375
- subject: يمكنك الآن إغلاق اجتماعك بتقديم تقرير على منصة %{organization_name}
376
371
  conference_venues: أماكن المؤتمر
377
372
  content_blocks:
378
373
  upcoming_meetings:
@@ -389,7 +384,6 @@ ar:
389
384
  iframe_embed_type:
390
385
  embed_in_meeting_page: تضمين في صفحة الاجتماع
391
386
  none: بلا
392
- open_in_live_event_page: فتح في صفحة الحدث المباشر (مع استطلاعات الرأي الاختيارية)
393
387
  open_in_new_tab: فتح عنوان الرابط URL في تبويب جديد
394
388
  last_activity:
395
389
  meeting_updated: 'تم تحديث الاجتماع:'
@@ -397,7 +391,6 @@ ar:
397
391
  layouts:
398
392
  live_event:
399
393
  close: إغلاق
400
- questions: الأسئلة
401
394
  mailer:
402
395
  invite_join_meeting_mailer:
403
396
  invite:
@@ -534,12 +527,9 @@ ar:
534
527
  title: عنوان
535
528
  polls:
536
529
  questions:
537
- closed_question:
538
- question_results: نتائج السؤال
539
530
  index:
540
531
  empty_questions: خلال هذا الاجتماع، سيتم إرسال بعض الأسئلة وسوف تتمكن من الإجابة عليها. سيتم عرضها هنا.
541
532
  index_admin:
542
- admin_dashboard: لوحة المدراء
543
533
  edit: تحرير في لوحة المدراء
544
534
  question: سؤال
545
535
  received_answer: الإجابة المتلقاة