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
@@ -27,7 +27,7 @@ module Decidim
27
27
  Decidim::Meetings::Meeting
28
28
  .published
29
29
  .not_hidden
30
- .except_withdrawn
30
+ .not_withdrawn
31
31
  .where(
32
32
  "decidim_component_id = ? AND end_time >= ? AND end_time <= ? AND closed_at IS NULL",
33
33
  component_id,
@@ -5,7 +5,7 @@ require "cgi"
5
5
  module Decidim
6
6
  module Meetings
7
7
  # This class handles the streaming url to be included in the iframe present
8
- # in the live event. For some services it is required to transforma a bit
8
+ # in the live event. For some services it is required to transform a bit
9
9
  # the structure of the URL.
10
10
  class MeetingIframeEmbedder
11
11
  # Public: Initializes the service.
@@ -55,7 +55,7 @@ module Decidim
55
55
  @embeddable_services ||= Meetings.embeddable_services
56
56
  end
57
57
 
58
- # Youtube transformation consists on:
58
+ # YouTube transformation consists on:
59
59
  # 1. extract the video id from the parameter v
60
60
  # 2. Create a new URL using the domain youtube-nocookie.com, converting it to an embed
61
61
  # and appending the video id
@@ -6,15 +6,15 @@
6
6
  <%== "#{icon("drag-move-2-fill")} #{t(".agenda_item")}" %>
7
7
  </span>
8
8
 
9
- <button class="button button__sm button__transparent-secondary small alert hollow move-up-agenda-item button--title">
9
+ <button class="button button__sm button__transparent-secondary small alert move-up-agenda-item button--title">
10
10
  <%== "#{icon("arrow-up-line")} #{t(".up")}" %>
11
11
  </button>
12
12
 
13
- <button class="button button__sm button__transparent-secondary small alert hollow move-down-agenda-item button--title">
13
+ <button class="button button__sm button__transparent-secondary small alert move-down-agenda-item button--title">
14
14
  <%== "#{icon("arrow-down-line")} #{t(".down")}" %>
15
15
  </button>
16
16
 
17
- <button class="button button__sm button__transparent-secondary small alert hollow remove-agenda-item button--title">
17
+ <button class="button button__sm button__transparent-secondary small alert remove-agenda-item button--title">
18
18
  <%= t(".remove") %>
19
19
  </button>
20
20
  </h2>
@@ -6,15 +6,15 @@
6
6
  <%== "#{icon("drag-move-2-fill")} #{t(".agenda_item_child")}" %>
7
7
  </span>
8
8
 
9
- <button class="button button__sm button__transparent-secondary small alert hollow move-up-agenda-item-child button--title">
9
+ <button class="button button__sm button__transparent-secondary small alert move-up-agenda-item-child button--title">
10
10
  <%== "#{icon("arrow-up-line")} #{t(".up")}" %>
11
11
  </button>
12
12
 
13
- <button class="button button__sm button__transparent-secondary small alert hollow move-down-agenda-item-child button--title">
13
+ <button class="button button__sm button__transparent-secondary small alert move-down-agenda-item-child button--title">
14
14
  <%== "#{icon("arrow-down-line")} #{t(".down")}" %>
15
15
  </button>
16
16
 
17
- <button class="button button__sm button__transparent-secondary small alert hollow remove-agenda-item-child button--title">
17
+ <button class="button button__sm button__transparent-secondary small alert remove-agenda-item-child button--title">
18
18
  <%= t(".remove") %>
19
19
  </button>
20
20
  </h2>
@@ -1,14 +1,14 @@
1
1
  <div class="grid-x">
2
- <div class="cell auto">
2
+ <div class="cell">
3
3
  <%= form.translated :text_field, :title, tabs_id:, aria: { label: :title } %>
4
4
  </div>
5
- <div class="cell small-2">
5
+ <div class="cell">
6
6
  <%= form.number_field :duration, tabs_id:, min: 0 %>
7
7
  </div>
8
8
  </div>
9
9
 
10
10
  <div class="grid-x">
11
- <div class="cell auto">
11
+ <div class="cell">
12
12
  <%= form.translated :editor, :description, tabs_id:, rows: 6, aria: { label: :description } %>
13
13
  </div>
14
14
  </div>
@@ -1,7 +1,9 @@
1
1
  <p class="email-greeting"><%= t("devise.mailer.invitation_instructions.hello", email: @user.name) %></p>
2
2
 
3
3
  <p class="email-instructions">
4
- <%= t ".invited_you_to_join_a_meeting", invited_by: @invited_by.name, application: @user.organization.name %>
4
+ <%= t ".invited_you_to_join_a_meeting",
5
+ invited_by: @invited_by.name,
6
+ application: translated_attribute(@user.organization.name) %>
5
7
  </p>
6
8
 
7
9
  <p class="email-button email-button__cta cta-decline">
@@ -12,7 +12,7 @@
12
12
  <div id="panel-attendee" class="card-section">
13
13
 
14
14
  <div class="row column">
15
- <fieldset class="check-radio-collection">
15
+ <fieldset>
16
16
  <%= form.collection_radio_buttons(:existing_user, [[t(".non_user"), false], [t(".existing_user"), true]], :last, :first) %>
17
17
  </fieldset>
18
18
  </div>
@@ -22,14 +22,14 @@
22
22
  </div>
23
23
 
24
24
  <div class="row column">
25
- <div class="auto cell attendee-fields--new-user">
25
+ <div class="cell attendee-fields--new-user">
26
26
  <%= form.text_field :name, disabled: %>
27
27
  </div>
28
- <div class="auto cell attendee-fields--new-user">
28
+ <div class="cell attendee-fields--new-user">
29
29
  <%= form.text_field :email, disabled: %>
30
30
  </div>
31
31
 
32
- <div class="auto cell attendee-fields--user-picker">
32
+ <div class="cell attendee-fields--user-picker">
33
33
  <% prompt_options = { url: decidim_admin.users_organization_url, placeholder: t(".select_user") } %>
34
34
  <%= form.autocomplete_select(:user_id, form.object.user.presence, { multiple: false, class: "autocomplete-field--results-inline" }, prompt_options) do |user|
35
35
  { value: user.id, label: "#{user.name} (@#{user.nickname})" }
@@ -18,38 +18,8 @@
18
18
  <% end %>
19
19
  <% end %>
20
20
 
21
- <%# NOTE: this old filters section should be refactorized in order to use the shared admin_filter_selector method
22
- it would require the definition of concerns similar to decidim-conferences/app/controllers/concerns/decidim/conferences/admin/filterable.rb %>
23
- <div class="filters__section mt-4">
24
- <div class="fcell">
25
- <ul class="dropdown menu" data-dropdown-menu data-click-open="true" data-close-on-click-inside="false">
26
- <li class="is-dropdown-submenu-parent">
27
- <a href="#" class="dropdown button">
28
- <%= t("filter_label", scope: "decidim.admin.filters") %>
29
- <%= icon "arrow-down-s-line", class: "dropdown-filter-icon" %>
30
- </a>
31
- <ul class="menu is-dropdown-submenu">
32
- <li><%= link_to t(".filter.sent"), url_for(status: "sent", q: @query) %></li>
33
- <li><%= link_to t(".filter.accepted"), url_for(status: "accepted", q: @query) %></li>
34
- <li><%= link_to t(".filter.rejected"), url_for(status: "rejected", q: @query) %></li>
35
- <li><%= link_to t(".filter.all"), url_for(q: @query) %></li>
36
- </ul>
37
- </li>
38
- </ul>
39
- </div>
40
- <div class="fcell search">
41
- <%= form_tag "", method: :get do %>
42
- <div class="input-group">
43
- <%= search_field_tag :q, @query,label: false, class: "input-group-field", placeholder: t(".search") %>
44
- <%= hidden_field_tag :state, @state %>
45
- <div class="input-group-button">
46
- <button type="submit" class="text-secondary" aria-label="<%= t("decidim.search.term_input_placeholder") %>">
47
- <%= icon "search-line", class: "fill-secondary w-4 h-4" %>
48
- </button>
49
- </div>
50
- </div>
51
- <% end %>
52
- </div>
21
+ <div class="mt-4">
22
+ <%= admin_filter_selector %>
53
23
  </div>
54
24
 
55
25
  <div class="card" id="meeting-invites">
@@ -67,7 +37,7 @@
67
37
  </tr>
68
38
  </thead>
69
39
  <tbody>
70
- <% invites.each do |invite| %>
40
+ <% @invites.each do |invite| %>
71
41
  <% presenter = Decidim::Meetings::InvitePresenter.new(invite) %>
72
42
  <tr data-id="<%= invite.id %>">
73
43
  <td>
@@ -90,6 +60,6 @@
90
60
  </table>
91
61
  </div>
92
62
  </div>
93
- <%= decidim_paginate invites %>
63
+ <%= decidim_paginate @invites %>
94
64
  </div>
95
65
  </div>
@@ -1,11 +1,11 @@
1
1
  <div class="form__wrapper">
2
2
  <div class="card pt-4">
3
3
  <div class="card-section">
4
- <div class="row column hashtags__container">
4
+ <div class="row column">
5
5
  <%= form.translated :text_field, :title, autofocus: true, class: "js-hashtags", hashtaggable: true, aria: { label: :title } %>
6
6
  </div>
7
7
 
8
- <div class="row column hashtags__container">
8
+ <div class="row column">
9
9
  <%= form.translated :editor, :description, hashtaggable: true, aria: { label: :description } %>
10
10
  </div>
11
11
 
@@ -16,11 +16,11 @@
16
16
  { multiple: false } %>
17
17
  </div>
18
18
 
19
- <div class="row column field" data-meeting-type="in_person">
19
+ <div class="row column" data-meeting-type="in_person">
20
20
  <%= form.geocoding_field :address, help_text: t(".address_help") %>
21
21
  </div>
22
22
 
23
- <div class="row column field" data-meeting-type="in_person">
23
+ <div class="row column" data-meeting-type="in_person">
24
24
  <%= form.translated :text_area, :location, help_text: t(".location_help") %>
25
25
  </div>
26
26
 
@@ -28,12 +28,12 @@
28
28
  <%= form.translated :text_area, :location_hints, help_text: t(".location_hints_help") %>
29
29
  </div>
30
30
 
31
- <div class="row column field" data-meeting-type="online">
31
+ <div class="row column" data-meeting-type="online">
32
32
  <%= form.text_field :online_meeting_url, help_text: t(".online_meeting_url_help") %>
33
33
  </div>
34
34
 
35
35
  <div class="iframe-fields">
36
- <div class="row column field iframe-fields--embed-type" id="meeting_iframe_embed_type" data-meeting-type="online">
36
+ <div class="row column iframe-fields--embed-type" id="meeting_iframe_embed_type" data-meeting-type="online">
37
37
  <%= form.select :iframe_embed_type,
38
38
  @form.iframe_embed_type_select,
39
39
  {
@@ -42,7 +42,7 @@
42
42
  } %>
43
43
  </div>
44
44
 
45
- <div class="row column field iframe-fields--access-level" data-meeting-type="online-access-level">
45
+ <div class="row column iframe-fields--access-level" data-meeting-type="online-access-level">
46
46
  <%= form.select :iframe_access_level,
47
47
  @form.iframe_access_level_select,
48
48
  { include_blank: t(".select_an_iframe_access_level") },
@@ -80,7 +80,7 @@
80
80
 
81
81
  <div class="row column" id="meeting_registration_url">
82
82
  <%= form.text_field :registration_url, help_text: t(".registration_url_help") %>
83
- <%= cell("decidim/announcement", t(".disclaimer", organization: current_component.organization.name), callout_class: "alert" ) %>
83
+ <%= cell("decidim/announcement", t(".disclaimer", organization: organization_name(current_component.organization)), callout_class: "alert" ) %>
84
84
  </div>
85
85
 
86
86
  <div class="row column" id="private_meeting">
@@ -6,17 +6,17 @@
6
6
  <span><%= t(".service") %></span>
7
7
 
8
8
  <div class="ml-auto flex gap-x-4">
9
- <button class="button button__sm button__transparent-secondary small alert hollow move-up-service button--title">
9
+ <button class="button button__sm button__transparent-secondary small alert move-up-service button--title">
10
10
  <%= icon "arrow-up-line" %>
11
11
  <%= t(".up") %>
12
12
  </button>
13
13
 
14
- <button class="button button__sm button__transparent-secondary small alert hollow move-down-service button--title">
14
+ <button class="button button__sm button__transparent-secondary small alert move-down-service button--title">
15
15
  <%= icon "arrow-down-line" %>
16
16
  <%= t(".down") %>
17
17
  </button>
18
18
 
19
- <button class="button button__sm button__transparent-secondary small alert hollow remove-service button--title">
19
+ <button class="button button__sm button__transparent-secondary small alert remove-service button--title">
20
20
  <%= t(".remove") %>
21
21
  </button>
22
22
  </div>
@@ -37,7 +37,7 @@
37
37
  <%= sort_link(query, :scope_name, t("models.proposal.fields.scope", scope: "decidim.proposals") ) %>
38
38
  </th>
39
39
  <% end %>
40
- <th class="actions"><%= t("actions.title", scope: "decidim.meetings") %></th>
40
+ <th><%= t("actions.title", scope: "decidim.meetings") %></th>
41
41
  </tr>
42
42
  </thead>
43
43
  <tbody>
@@ -138,7 +138,7 @@
138
138
  <% else %>
139
139
  <%=
140
140
  content_tag(:button,
141
- class: ["action-icon", "action-icon--remove", "destroy-meeting-alert"],
141
+ :class => ["action-icon", "action-icon--remove", "destroy-meeting-alert"],
142
142
  "data-invalid-destroy-message" => t("actions.invalid_destroy.proposals_count", count: present(meeting).authored_proposals.size, scope: "decidim.meetings"),
143
143
  "data-proposal-titles" => present(meeting).formatted_proposals_titles) do
144
144
  content_tag(:span,
@@ -5,7 +5,7 @@
5
5
  <h2 class="card-title">
6
6
  <span><%= t("answer_option", scope: "decidim.forms.admin.questionnaires.answer_option") %></span>
7
7
  <% if editable %>
8
- <button class="button button__sm button__transparent-secondary small alert hollow remove-answer-option button--title mb-2">
8
+ <button class="button button__sm button__transparent-secondary small alert remove-answer-option button--title mb-2">
9
9
  <%= icon("delete-bin-line") %>
10
10
  <%= t("remove", scope: "decidim.forms.admin.questionnaires.answer_option") %>
11
11
  </button>
@@ -2,6 +2,6 @@
2
2
 
3
3
  <script type="text/template" class="decidim-answer-option-template decidim-template" id="<%= template_id %>">
4
4
  <%= fields_for "questionnaire[questions][#{question.to_param}][answer_options][]", blank_answer_option do |answer_option_form| %>
5
- <%= render "decidim/meetings/admin/poll/answer_option", form: answer_option_form, question:, editable: %>
5
+ <%= render "decidim/meetings/admin/poll/answer_option", form: answer_option_form, question:, editable: question.editable? %>
6
6
  <% end %>
7
7
  </script>
@@ -4,19 +4,24 @@
4
4
  <button type="button" class="button button__sm button__secondary expand-all"><%= t("expand", scope: "decidim.forms.admin.questionnaires.form") %></button>
5
5
  </div>
6
6
 
7
- <% if questionnaire.questions_editable? %>
8
- <%= fields_for "questionnaire[questions][#{blank_question.to_param}]", blank_question do |question_form| %>
9
- <script type="text/template" class="decidim-question-template decidim-template" id="question-template">
10
- <%= render "decidim/meetings/admin/poll/question",
11
- form: question_form,
12
- id: tabs_id_for_question(blank_question),
13
- editable: questionnaire.questions_editable?,
14
- answer_option_template_selector: "#answer-option-template-dummy" %>
15
- </script>
16
- <%= render "decidim/meetings/admin/poll/answer_option_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "answer-option-template-dummy" %>
17
- <% end %>
18
- <% else %>
19
- <%= cell("decidim/announcement", t("already_answered_warning", scope: "decidim.forms.admin.questionnaires.form"), callout_class: "warning" ) %>
7
+ <% announcement_body = capture do %>
8
+ <ul>
9
+ <% t("announcement_html", admin_link: Decidim::EngineRouter.main_proxy(meeting.component).admin_meeting_polls_answers_path(meeting), scope: "decidim.meetings.admin.poll.form").each do |item| %>
10
+ <li> <%= item %></li>
11
+ <% end %>
12
+ </ul>
13
+ <% end %>
14
+ <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "info") %>
15
+
16
+ <%= fields_for "questionnaire[questions][#{blank_question.to_param}]", blank_question do |question_form| %>
17
+ <script type="text/template" class="decidim-question-template decidim-template" id="question-template">
18
+ <%= render "decidim/meetings/admin/poll/question",
19
+ form: question_form,
20
+ id: tabs_id_for_question(blank_question),
21
+ editable: true,
22
+ answer_option_template_selector: "#answer-option-template-dummy" %>
23
+ </script>
24
+ <%= render "decidim/meetings/admin/poll/answer_option_template", form: question_form, editable: true, template_id: "answer-option-template-dummy" %>
20
25
  <% end %>
21
26
 
22
27
  <div class="questionnaire-questions-list flex flex-col py-6 gap-6 last:pb-0">
@@ -25,24 +30,20 @@
25
30
  <%= render "decidim/meetings/admin/poll/question",
26
31
  form: question_form,
27
32
  id: tabs_id_for_question(question),
28
- editable: questionnaire.questions_editable?,
33
+ editable: question.editable?,
29
34
  answer_option_template_selector: "#answer-option-template-#{index}" %>
30
- <%= render "decidim/meetings/admin/poll/answer_option_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "answer-option-template-#{index}" %>
35
+ <%= render "decidim/meetings/admin/poll/answer_option_template", form: question_form, editable: question.editable?, template_id: "answer-option-template-#{index}" %>
31
36
  <% end %>
32
37
  <% end %>
33
38
  </div>
34
39
 
35
- <% if questionnaire.questions_editable? %>
36
- <button class="button button__sm button__secondary add-question"><%= t("add_question", scope: "decidim.forms.admin.questionnaires.form") %></button>
37
- <% end %>
40
+ <button class="button button__sm button__secondary add-question"><%= t("add_question", scope: "decidim.forms.admin.questionnaires.form") %></button>
38
41
  </div>
39
42
 
40
43
  <%= append_javascript_pack_tag "decidim_forms_admin" %>
41
44
 
42
- <% if questionnaire.questions_editable? %>
43
- <script>
44
- document.addEventListener("DOMContentLoaded", function () {
45
- window.Decidim.createEditableForm()
46
- })
47
- </script>
48
- <% end %>
45
+ <script>
46
+ document.addEventListener("DOMContentLoaded", function () {
47
+ window.Decidim.createEditableForm()
48
+ })
49
+ </script>
@@ -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>