decidim-meetings 0.30.2 → 0.31.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.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +7 -4
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +1 -1
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +36 -0
  5. data/app/cells/decidim/meetings/dates_and_map_cell.rb +1 -1
  6. data/app/cells/decidim/meetings/join_meeting_button/registration_modal.erb +4 -5
  7. data/app/cells/decidim/meetings/join_meeting_button/show.erb +25 -28
  8. data/app/cells/decidim/meetings/join_meeting_button/waitlist_button.erb +22 -0
  9. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +28 -0
  10. data/app/cells/decidim/meetings/question_responses/show.erb +7 -7
  11. data/app/cells/decidim/meetings/question_responses_cell.rb +28 -28
  12. data/app/commands/decidim/meetings/admin/copy_meeting.rb +5 -2
  13. data/app/commands/decidim/meetings/admin/create_agenda.rb +6 -2
  14. data/app/commands/decidim/meetings/admin/create_meeting.rb +7 -3
  15. data/app/commands/decidim/meetings/admin/mark_as_attendee.rb +44 -0
  16. data/app/commands/decidim/meetings/admin/publish_meeting.rb +2 -1
  17. data/app/commands/decidim/meetings/admin/update_agenda.rb +6 -2
  18. data/app/commands/decidim/meetings/admin/update_meeting.rb +15 -6
  19. data/app/commands/decidim/meetings/admin/update_questionnaire.rb +4 -4
  20. data/app/commands/decidim/meetings/admin/update_registrations.rb +19 -7
  21. data/app/commands/decidim/meetings/create_meeting.rb +2 -3
  22. data/app/commands/decidim/meetings/{create_answer.rb → create_response.rb} +11 -11
  23. data/app/commands/decidim/meetings/join_meeting.rb +4 -6
  24. data/app/commands/decidim/meetings/join_waitlist.rb +53 -0
  25. data/app/commands/decidim/meetings/leave_meeting.rb +14 -5
  26. data/app/commands/decidim/meetings/update_meeting.rb +1 -2
  27. data/app/controllers/concerns/decidim/meetings/admin/filterable.rb +1 -1
  28. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +2 -2
  29. data/app/controllers/decidim/meetings/admin/invites_controller.rb +1 -1
  30. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +1 -1
  31. data/app/controllers/decidim/meetings/admin/meeting_copies_controller.rb +1 -1
  32. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +4 -4
  33. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +10 -10
  34. data/app/controllers/decidim/meetings/admin/registrations_attendees_controller.rb +79 -0
  35. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +1 -22
  36. data/app/controllers/decidim/meetings/meeting_closes_controller.rb +1 -1
  37. data/app/controllers/decidim/meetings/meetings_controller.rb +11 -11
  38. data/app/controllers/decidim/meetings/polls/{answers_controller.rb → responses_controller.rb} +7 -7
  39. data/app/controllers/decidim/meetings/registrations_controller.rb +39 -12
  40. data/app/events/decidim/meetings/registration_marked_as_attendee_event.rb +9 -0
  41. data/app/events/decidim/meetings/upcoming_meeting_event.rb +41 -0
  42. data/app/events/decidim/meetings/update_meeting_event.rb +25 -0
  43. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +2 -1
  44. data/app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb +4 -0
  45. data/app/forms/decidim/meetings/admin/meeting_form.rb +28 -3
  46. data/app/forms/decidim/meetings/admin/question_form.rb +3 -3
  47. data/app/forms/decidim/meetings/admin/{answer_option_form.rb → response_option_form.rb} +3 -3
  48. data/app/forms/decidim/meetings/admin/validate_registration_code_form.rb +1 -1
  49. data/app/forms/decidim/meetings/base_meeting_form.rb +0 -2
  50. data/app/forms/decidim/meetings/close_meeting_form.rb +2 -1
  51. data/app/forms/decidim/meetings/join_meeting_form.rb +0 -1
  52. data/app/forms/decidim/meetings/meeting_form.rb +3 -2
  53. data/app/forms/decidim/meetings/response_choice_form.rb +14 -0
  54. data/app/forms/decidim/meetings/{answer_form.rb → response_form.rb} +7 -7
  55. data/app/helpers/decidim/meetings/application_helper.rb +0 -1
  56. data/app/helpers/decidim/meetings/meetings_helper.rb +14 -5
  57. data/app/jobs/decidim/meetings/promote_from_waitlist_job.rb +63 -0
  58. data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +1 -1
  59. data/app/mailers/decidim/meetings/registration_mailer.rb +13 -0
  60. data/app/models/decidim/meetings/agenda_item.rb +5 -0
  61. data/app/models/decidim/meetings/meeting.rb +15 -12
  62. data/app/models/decidim/meetings/question.rb +12 -12
  63. data/app/models/decidim/meetings/questionnaire.rb +1 -1
  64. data/app/models/decidim/meetings/registration.rb +19 -7
  65. data/app/models/decidim/meetings/{answer.rb → response.rb} +6 -6
  66. data/app/models/decidim/meetings/response_choice.rb +15 -0
  67. data/app/models/decidim/meetings/{answer_option.rb → response_option.rb} +5 -5
  68. data/app/packs/src/decidim/meetings/admin/destroy_meeting_alert.js +1 -1
  69. data/app/packs/src/decidim/meetings/admin/meetings_components_form.js +1 -8
  70. data/app/packs/src/decidim/meetings/admin/meetings_form.js +1 -1
  71. data/app/packs/src/decidim/meetings/admin/registrations_form.js +1 -1
  72. data/app/packs/src/decidim/meetings/admin/registrations_invite_form.js +1 -1
  73. data/app/packs/src/decidim/meetings/meetings_form.js +1 -1
  74. data/app/packs/src/decidim/meetings/meetings_polls.js +1 -1
  75. data/app/packs/src/decidim/meetings/poll.component.js +5 -5
  76. data/app/packs/stylesheets/decidim/meetings/_item.scss +5 -1
  77. data/app/packs/stylesheets/decidim/meetings/meetings.scss +4 -4
  78. data/app/permissions/decidim/meetings/admin/agenda_permissions.rb +34 -0
  79. data/app/permissions/decidim/meetings/admin/meeting_permissions.rb +44 -0
  80. data/app/permissions/decidim/meetings/admin/permissions.rb +5 -66
  81. data/app/permissions/decidim/meetings/admin/questionnaire_permissions.rb +30 -0
  82. data/app/permissions/decidim/meetings/meeting_permissions.rb +90 -0
  83. data/app/permissions/decidim/meetings/permissions.rb +9 -105
  84. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
  85. data/app/presenters/decidim/meetings/agenda_item_presenter.rb +29 -0
  86. data/app/presenters/decidim/meetings/meeting_presenter.rb +11 -15
  87. data/app/presenters/decidim/meetings/registration_presenter.rb +24 -0
  88. data/app/queries/decidim/meetings/{questionnaire_user_answers.rb → questionnaire_user_responses.rb} +5 -5
  89. data/app/serializers/decidim/meetings/registration_serializer.rb +5 -6
  90. data/app/services/decidim/meetings/diff_renderer.rb +0 -1
  91. data/app/views/decidim/meetings/_calendar_modal.html.erb +1 -0
  92. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +1 -1
  93. data/app/views/decidim/meetings/admin/invites/_form.html.erb +1 -1
  94. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +1 -1
  95. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +3 -2
  96. data/app/views/decidim/meetings/admin/meetings/_linked_spaces.html.erb +1 -1
  97. data/app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb +11 -8
  98. data/app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb +200 -69
  99. data/app/views/decidim/meetings/admin/meetings/_reminders.html.erb +19 -0
  100. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +1 -1
  101. data/app/views/decidim/meetings/admin/meetings/index.html.erb +7 -5
  102. data/app/views/decidim/meetings/admin/meetings/manage_trash.html.erb +2 -1
  103. data/app/views/decidim/meetings/admin/poll/_form.html.erb +6 -6
  104. data/app/views/decidim/meetings/admin/poll/_question.html.erb +13 -13
  105. data/app/views/decidim/meetings/admin/poll/_response_option.html.erb +35 -0
  106. data/app/views/decidim/meetings/admin/poll/_response_option_template.html.erb +7 -0
  107. data/app/views/decidim/meetings/admin/poll/edit.html.erb +3 -3
  108. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +5 -5
  109. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +19 -39
  110. data/app/views/decidim/meetings/admin/registrations_attendees/index.html.erb +126 -0
  111. data/app/views/decidim/meetings/layouts/live_event.html.erb +1 -1
  112. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +2 -2
  113. data/app/views/decidim/meetings/meetings/_form.html.erb +2 -11
  114. data/app/views/decidim/meetings/meetings/_meeting.html.erb +2 -2
  115. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +3 -3
  116. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +2 -2
  117. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +11 -10
  118. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +3 -3
  119. data/app/views/decidim/meetings/meetings/_registration_code_modal.html.erb +16 -0
  120. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +1 -1
  121. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +5 -5
  122. data/app/views/decidim/meetings/polls/responses/_multiple_option.html.erb +13 -0
  123. data/app/views/decidim/meetings/polls/responses/_single_option.html.erb +13 -0
  124. data/app/views/decidim/meetings/polls/{answers → responses}/admin.html.erb +4 -4
  125. data/app/views/decidim/meetings/polls/{answers → responses}/index.html.erb +4 -4
  126. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +6 -1
  127. data/config/assets.rb +2 -2
  128. data/config/locales/ar.yml +1 -26
  129. data/config/locales/bg.yml +2 -32
  130. data/config/locales/ca-IT.yml +86 -40
  131. data/config/locales/ca.yml +86 -40
  132. data/config/locales/cs.yml +71 -43
  133. data/config/locales/de.yml +87 -41
  134. data/config/locales/el.yml +1 -25
  135. data/config/locales/en.yml +89 -43
  136. data/config/locales/es-MX.yml +87 -41
  137. data/config/locales/es-PY.yml +87 -41
  138. data/config/locales/es.yml +87 -41
  139. data/config/locales/eu.yml +86 -40
  140. data/config/locales/fi-plain.yml +86 -40
  141. data/config/locales/fi.yml +85 -39
  142. data/config/locales/fr-CA.yml +79 -38
  143. data/config/locales/fr.yml +79 -38
  144. data/config/locales/ga-IE.yml +1 -7
  145. data/config/locales/gl.yml +1 -19
  146. data/config/locales/hu.yml +1 -22
  147. data/config/locales/id-ID.yml +0 -16
  148. data/config/locales/is-IS.yml +0 -10
  149. data/config/locales/it.yml +1 -29
  150. data/config/locales/ja.yml +88 -42
  151. data/config/locales/lb.yml +1 -15
  152. data/config/locales/lt.yml +1 -28
  153. data/config/locales/lv.yml +0 -16
  154. data/config/locales/nl.yml +1 -26
  155. data/config/locales/no.yml +1 -28
  156. data/config/locales/pl.yml +2 -32
  157. data/config/locales/pt-BR.yml +1 -28
  158. data/config/locales/pt.yml +1 -28
  159. data/config/locales/ro-RO.yml +56 -29
  160. data/config/locales/ru.yml +0 -16
  161. data/config/locales/sk.yml +0 -16
  162. data/config/locales/sl.yml +0 -4
  163. data/config/locales/sv.yml +85 -39
  164. data/config/locales/tr-TR.yml +0 -20
  165. data/config/locales/uk.yml +0 -12
  166. data/config/locales/zh-CN.yml +0 -19
  167. data/config/locales/zh-TW.yml +1 -26
  168. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +8 -2
  169. data/db/migrate/20200827153856_add_commentable_counter_cache_to_meetings.rb +8 -2
  170. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +8 -2
  171. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +8 -2
  172. data/db/migrate/20250317103343_rename_answer_to_response_in_decidim_meetings.rb +18 -0
  173. data/db/migrate/20250403094034_add_reminder_customization_to_decidim_meetings.rb +9 -0
  174. data/db/migrate/20250408071941_add_status_to_registrations_to_decidim_meetings_registrations.rb +8 -0
  175. data/lib/decidim/api/agenda_item_type.rb +6 -2
  176. data/lib/decidim/api/agenda_type.rb +6 -2
  177. data/lib/decidim/api/linked_resources_interface.rb +1 -1
  178. data/lib/decidim/api/meeting_type.rb +20 -10
  179. data/lib/decidim/api/service_type.rb +3 -0
  180. data/lib/decidim/meetings/admin_engine.rb +9 -1
  181. data/lib/decidim/meetings/component.rb +29 -8
  182. data/lib/decidim/meetings/engine.rb +6 -21
  183. data/lib/decidim/meetings/meeting_serializer.rb +1 -2
  184. data/lib/decidim/meetings/schema_org_event_meeting_serializer.rb +0 -10
  185. data/lib/decidim/meetings/seeds.rb +4 -13
  186. data/lib/decidim/meetings/test/factories.rb +10 -16
  187. data/lib/decidim/meetings/user_responses_serializer.rb +47 -0
  188. data/lib/decidim/meetings/version.rb +1 -1
  189. data/lib/decidim/meetings.rb +7 -9
  190. metadata +49 -35
  191. data/app/cells/decidim/meetings/attending_organizations_list_cell.rb +0 -32
  192. data/app/forms/decidim/meetings/answer_choice_form.rb +0 -14
  193. data/app/models/decidim/meetings/answer_choice.rb +0 -15
  194. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +0 -31
  195. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +0 -48
  196. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +0 -35
  197. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +0 -7
  198. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +0 -13
  199. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +0 -13
  200. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +0 -39
  201. data/lib/decidim/meetings/user_answers_serializer.rb +0 -47
  202. /data/app/views/decidim/meetings/polls/{answers → responses}/create.js.erb +0 -0
@@ -0,0 +1,126 @@
1
+ <% add_decidim_page_title(t("title", scope: "decidim.meetings.admin.registrations_attendees.index")) %>
2
+ <div class="item_show__header">
3
+ <h1 class="item_show__header-title">
4
+ <%= t("title", scope: "decidim.meetings.admin.registrations_attendees.index") %>
5
+ <div class="flex items-center gap-x-4 ml-auto">
6
+ <%= link_to t("invites", scope: "decidim.meetings.admin.registrations.form"), meeting_registrations_invites_path(meeting), class: "button button__sm button__transparent-secondary #{"disabled" unless allowed_to? :read_invites, :meeting, meeting: meeting}" %>
7
+
8
+ <% if allowed_to? :export_registrations, :meeting, meeting: meeting %>
9
+ <div class="relative">
10
+ <button class="exports button button__sm button__transparent-secondary button--title" data-controller="dropdown" data-target="export-dropdown">
11
+ <%= t "actions.export", scope: "decidim.admin" %>
12
+ <%= icon "arrow-down-s-line" %>
13
+ <%= icon "arrow-down-s-line" %>
14
+ </button>
15
+
16
+ <ul class="dropdown dropdown__bottom" id="export-dropdown" aria-hidden="true">
17
+ <% %w(CSV JSON Excel).each do |format| %>
18
+ <li class="dropdown__item">
19
+ <%= link_to export_meeting_registrations_path(meeting_id: meeting, format:), class: "dropdown__button" do %>
20
+ <%= t("decidim.admin.exports.export_as", name: t("decidim.#{current_component.manifest.name}.admin.exports.registrations"), export_format: format) %>
21
+ <% end %>
22
+ </li>
23
+ <% end %>
24
+ </ul>
25
+ </div>
26
+ <% end %>
27
+
28
+ <%= link_to t("registration_form" , scope: "decidim.meetings.admin.registrations.form"), edit_meeting_registrations_form_path(meeting_id: meeting.id), class: "button button__sm button__transparent-secondary" %>
29
+ <%= link_to t("manage_questions" , scope: "decidim.meetings.admin.registrations.form"), edit_questions_meeting_registrations_form_path(meeting_id: meeting.id), class: "button button__sm button__transparent-secondary" %>
30
+ </div>
31
+ </h1>
32
+ </div>
33
+
34
+ <div class="item__edit item__edit-1col">
35
+ <div class="item__edit-form">
36
+ <% if meeting.component.settings.registration_code_enabled %>
37
+ <div class="card mb-4">
38
+ <div class="card-divider">
39
+ <h2 class="card-title">
40
+ <%= t(".validate_registration_code") %>
41
+ </h2>
42
+ </div>
43
+ <div class="card-section">
44
+ <%= decidim_form_for(@validation_form, url: validate_registration_code_meeting_registrations_attendees_path, html: { class: "form form-defaults validate_meeting_registration_code" }) do |f| %>
45
+ <div class="form__wrapper">
46
+ <div class="card-section">
47
+ <div class="row column">
48
+ <div>
49
+ <%= f.label :code %>
50
+ </div>
51
+ <%= f.text_field :code, label: false %>
52
+ </div>
53
+ <div class="row column">
54
+ <%= f.submit t(".validate"), class: "button button__sm button__transparent-secondary" %>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ <% end %>
59
+ </div>
60
+ </div>
61
+ <% end %>
62
+
63
+ <div class="card" id="meeting-invites">
64
+ <div class="table-stacked">
65
+ <table class="table-list">
66
+ <thead>
67
+ <tr>
68
+ <th><%= t("models.registration.fields.name", scope: "decidim.meetings") %></th>
69
+ <th><%= t("models.registration.fields.email", scope: "decidim.meetings") %></th>
70
+ <th><%= t("models.registration.fields.status", scope: "decidim.meetings") %></th>
71
+ <th><%= t("models.registration.actions", scope: "decidim.meetings") %></th>
72
+ </tr>
73
+ </thead>
74
+ <tbody>
75
+ <% registrations.each do |registration| %>
76
+ <% presenter = registration.presenter %>
77
+
78
+ <tr data-id="<%= registration.id %>">
79
+ <td data-label="<%= t("models.registration.fields.name", scope: "decidim.meetings") %>">
80
+ <%= presenter.name %>
81
+ </td>
82
+ <td data-label="<%= t("models.registration.fields.email", scope: "decidim.meetings") %>">
83
+ <%= presenter.email %>
84
+ </td>
85
+ <td class="<%= presenter.status_html_class %>" data-label="<%= t("models.registration.fields.status", scope: "decidim.meetings") %>">
86
+ <strong class="label <%= presenter.status_html_class %>">
87
+ <%= presenter.status %>
88
+ </strong>
89
+ </td>
90
+ <td class="table-list__actions" data-label="<%= t("models.registration.actions", scope: "decidim.meetings") %>">
91
+ <% if allowed_to? :update, :meeting, meeting: meeting %>
92
+ <button type="button" data-controller="dropdown" data-target="actions-meeting-registration-<%= registration.id %>" aria-label="<%= t("actions.actions_label", scope: "decidim.admin", resource: translated_attribute(meeting.title)) %>">
93
+ <%= icon "more-fill", class: "text-secondary" %>
94
+ </button>
95
+
96
+ <div class="inline-block relative">
97
+ <ul id="actions-meeting-registration-<%= registration.id %>" class="dropdown dropdown__action" aria-hidden="true">
98
+ <li class="dropdown__item">
99
+ <% if presenter.validated? %>
100
+ <div class="dropdown__button-disabled">
101
+ <%= with_tooltip t("tooltips.cannot_mark_attendee", scope: "decidim.admin") do %>
102
+ <%= icon "user-follow-line", class: "text-gray" %>
103
+ <span>
104
+ <%= t("actions.mark_as_attendee", scope: "decidim.meetings") %>
105
+ </span>
106
+ <% end %>
107
+ </div>
108
+ <% else %>
109
+ <%= link_to mark_as_attendee_meeting_registrations_attendee_path(id: registration), method: :put, class: "dropdown__button" do %>
110
+ <%= icon "user-follow-line" %>
111
+ <%= t("actions.mark_as_attendee", scope: "decidim.meetings") %>
112
+ <% end %>
113
+ <% end %>
114
+ </li>
115
+ </ul>
116
+ </div>
117
+ <% end %>
118
+ </td>
119
+ </tr>
120
+ <% end %>
121
+ </tbody>
122
+ </table>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ </div>
@@ -15,7 +15,7 @@
15
15
 
16
16
  <header class="meeting-polls__header">
17
17
  <div>
18
- <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(html_escape: true) %></strong>
19
19
  </div>
20
20
 
21
21
  <div class="flex gap-10">
@@ -1,7 +1,7 @@
1
- <%= text_editor_for(form, :closing_report, hashtaggable: true) %>
1
+ <%= text_editor_for(form, :closing_report) %>
2
2
 
3
3
  <%= form.number_field :attendees_count, min: 0, help_text: t("decidim.forms.meetings.attendees_count_help_text") %>
4
4
 
5
- <% if Decidim::Meetings.enable_proposal_linking %>
5
+ <% if Decidim.module_installed?(:proposals) %>
6
6
  <%= render partial: "decidim/proposals/proposals/proposals_picker", locals: { form:, field: :proposals } %>
7
7
  <% end %>
@@ -1,9 +1,9 @@
1
1
  <div>
2
- <%= form.text_field :title, autofocus: true, class: "js-hashtags", hashtaggable: true %>
2
+ <%= form.text_field :title, autofocus: true %>
3
3
  </div>
4
4
 
5
5
  <div>
6
- <%= text_editor_for(form, :description, hashtaggable: true) %>
6
+ <%= text_editor_for(form, :description) %>
7
7
  </div>
8
8
 
9
9
  <div>
@@ -79,13 +79,4 @@
79
79
  <label><%= t(".disclaimer", organization: organization_name(current_component.organization)) %></label><br>
80
80
  </div>
81
81
 
82
- <div>
83
- <%= form.select(
84
- :user_group_id,
85
- Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.map { |g| [g.name, g.id] },
86
- prompt: current_user.name,
87
- label: t(".create_as")
88
- ) %>
89
- </div>
90
-
91
82
  <%= append_javascript_pack_tag "decidim_meetings" %>
@@ -3,7 +3,7 @@
3
3
  <%= render partial: "schema_org_event_meeting" %>
4
4
 
5
5
  <section class="layout-main__section layout-main__heading">
6
- <h1 class="h2 decorator"><%= present(meeting).title(links: true, html_escape: true ) %></h1>
6
+ <h1 class="h2 decorator"><%= present(meeting).title(html_escape: true ) %></h1>
7
7
  <%= cell "decidim/meetings/dates_and_map", meeting %>
8
8
  <div class="block md:hidden">
9
9
  <%= render partial: "meeting_aside", locals: { hide_modal: true } %>
@@ -34,7 +34,7 @@
34
34
  <div class="layout-author <%= "has_status" if meeting.private_meeting? || meeting.withdrawn? %>">
35
35
  <div class="relative flex items-center justify-center w-full">
36
36
  <div class="w-10/12 flex items-center gap-4">
37
- <%= cell "decidim/author", author_presenter_for(meeting.normalized_author), from: meeting, context_actions: nil, layout: :compact %>
37
+ <%= cell "decidim/author", author_presenter_for(meeting.author), from: meeting, context_actions: nil, layout: :compact %>
38
38
  </div>
39
39
  <%= render "decidim/shared/resource_actions", resource: meeting do %>
40
40
  <%= render "decidim/meetings/meetings/meeting_actions" %>
@@ -1,6 +1,6 @@
1
1
  <% if allowed_to?(:update, :meeting, meeting: meeting) %>
2
2
  <li role="menuitem">
3
- <%= link_to edit_meeting_path(meeting), class: "button button__sm button__text button__text-secondary" do %>
3
+ <%= link_to edit_meeting_path(meeting), class: "dropdown__button" do %>
4
4
  <span><%= t("edit_meeting", scope: "decidim.meetings.meetings.meeting") %></span>
5
5
  <%= icon "pencil-line" %>
6
6
  <% end %>
@@ -10,7 +10,7 @@
10
10
  <% if allowed_to?(:close, :meeting, meeting: meeting) %>
11
11
  <% caption = meeting.closed? ? t("edit_close_meeting", scope: "decidim.meetings.meetings.meeting") : t("close_meeting", scope: "decidim.meetings.meetings.meeting") %>
12
12
  <li role="menuitem">
13
- <%= link_to edit_meeting_meeting_close_path(meeting_id: meeting.id, id: meeting.id), class: "button button__sm button__text button__text-secondary" do %>
13
+ <%= link_to edit_meeting_meeting_close_path(meeting_id: meeting.id, id: meeting.id), class: "dropdown__button" do %>
14
14
  <span><%= caption %></span>
15
15
  <%= icon "lock-line" %>
16
16
  <% end %>
@@ -23,7 +23,7 @@
23
23
  :withdraw,
24
24
  withdraw_meeting_path(meeting),
25
25
  method: :put,
26
- class: "button button__sm button__text button__text-secondary" ,
26
+ class: "dropdown__button" ,
27
27
  title: t("withdraw_btn_hint", scope: "decidim.meetings.meetings.show"),
28
28
  data: { confirm: t("withdraw_confirmation_html", scope: "decidim.meetings.meetings.show") }
29
29
  ) do %>
@@ -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(agenda_item.description).html_safe %></div>
15
+ <div class="meeting__agenda-item__description editor-content"><%= render_meeting_sanitize_field(agenda_item, :description) %></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(agenda_item_child.description).html_safe %></div>
27
+ <div class="meeting__agenda-item__description"><%= render_meeting_sanitize_field(agenda_item_child, :description) %></div>
28
28
  </div>
29
29
  <% end %>
30
30
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <%= render partial: "meeting_poll_actions" %>
2
2
 
3
3
  <% if meeting.can_be_joined_by?(current_user) || meeting.on_different_platform? %>
4
- <section class="layout-aside__section layout-aside__buttons layout-aside__ctas-buttons" data-sticky-buttons>
4
+ <section class="layout-aside__section layout-aside__buttons layout-aside__ctas-buttons" data-controller="sticky-buttons">
5
5
  <%= cell "decidim/meetings/join_meeting_button", meeting, show_remaining_slots: true, hide_modal: local_assigns[:hide_modal] %>
6
6
  </section>
7
7
  <% end %>
@@ -35,19 +35,20 @@
35
35
  <% end %>
36
36
  <% end %>
37
37
 
38
- <% if registration.present? && registration.meeting.component.settings.registration_code_enabled %>
38
+ <% if registration.present? %>
39
+ <%= waitlist_status_block(registration) %>
40
+
41
+ <% if registration.meeting.component.settings.registration_code_enabled && registration.registered? %>
42
+ <%= render partial: "registration_code_modal" %>
39
43
  <%= render layout: "decidim/meetings/layouts/aside_block", locals: { emoji: "coupon-line" } do %>
40
- <h3 class="meeting__aside-block__title"><%= registration_code_help_text %></h3>
41
- <div class="meeting__aside-block__large"><%= registration.code %></div>
42
- <% if registration.validated? %>
43
- <div class="label success"><%= t("validated", scope: "decidim.meetings.meetings.show.registration_state") %></div>
44
- <% else %>
45
- <div class="label warning"><%= t("validation_pending", scope: "decidim.meetings.meetings.show.registration_state") %></div>
46
- <% end %>
44
+ <a href="#" class="text-secondary underline font-semibold text-sm" data-dialog-open="RegistrationQRCodeDialog">
45
+ <%= registration_code_help_text %>
46
+ </a>
47
47
  <% end %>
48
48
  <% end %>
49
+ <% end %>
49
50
 
50
- <% if meeting.services.any? %>
51
+ <% if meeting.services.any? %>
51
52
  <% meeting.services.each do |service| %>
52
53
  <%= render layout: "decidim/meetings/layouts/aside_block", locals: { emoji: "star-line" } do %>
53
54
  <h3 class="meeting__aside-block__title"><%= translated_attribute(service["title"]) %></h3>
@@ -2,10 +2,10 @@
2
2
  <% if meeting.poll&.has_questions? %>
3
3
  <section class="layout-aside__section layout-aside__buttons<%= extra_classes %>">
4
4
  <% reply_text = meeting.poll.has_open_questions? ? t("reply_poll", scope: "decidim.meetings.meetings.meeting") : t("view_poll", scope: "decidim.meetings.meetings.meeting") %>
5
- <%= action_authorized_link_to :reply_poll, reply_text, meeting_polls_answers_path(meeting), class: "button button__xl button__secondary w-full", data: { "redirect_url" => meeting_polls_answers_path(meeting) }, resource: meeting %>
5
+ <%= action_authorized_link_to :reply_poll, reply_text, meeting_polls_responses_path(meeting), class: "button button__xl button__secondary w-full", data: { "redirect_url" => meeting_polls_responses_path(meeting) }, resource: meeting %>
6
6
  <% if !allowed_to?(:reply_poll, :meeting, meeting:) && allowed_to?(:update, :poll, meeting:) %>
7
- <%= link_to admin_meeting_polls_answers_path(meeting), class: "button button__sm button__transparent-secondary w-full" do %>
8
- <span><%= t("administrate", scope: "decidim.meetings.polls.answers.index") %></span>
7
+ <%= link_to admin_meeting_polls_responses_path(meeting), class: "button button__sm button__transparent-secondary w-full" do %>
8
+ <span><%= t("administrate", scope: "decidim.meetings.polls.responses.index") %></span>
9
9
  <% end %>
10
10
  <% end %>
11
11
  </section>
@@ -0,0 +1,16 @@
1
+ <%= decidim_modal id: "RegistrationQRCodeDialog", class: "qr-modal" do %>
2
+ <div data-dialog-container>
3
+ <div data-dialog-title>
4
+ <%= icon "qr-code-line" %>
5
+ <h2 class="h4" tabindex="-1"><%= t("registration_and_qr_code", scope: "decidim.meetings.meetings.show") %></h2>
6
+ </div>
7
+ <div class="content">
8
+ <div>
9
+ <img src="data:;base64,<%= registration_qr_code_image %>" alt="<%= t("registration_and_qr_code", scope: "decidim.meetings.meetings.show") %>">
10
+ </div>
11
+ <div class="text-center">
12
+ <h2 class="h4"><%= t("registration_code", code: registration.code, scope: "decidim.meetings.meetings.show") %></h2>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ <% end %>
@@ -25,7 +25,7 @@
25
25
  <% if question.unpublished? %>
26
26
  <button class="button button__sm button__secondary"><%= t(".send") %></button>
27
27
  <% else %>
28
- <div><%= pluralize(question.answers_count, t(".received_answer"), t(".received_answers")) %></div>
28
+ <div><%= pluralize(question.responses_count, t(".received_response"), t(".received_responses")) %></div>
29
29
  <% end %>
30
30
  </div>
31
31
 
@@ -4,15 +4,15 @@
4
4
 
5
5
  <div>
6
6
 
7
- <% @form = form || Decidim::Meetings::AnswerForm.new(question_id: question.id, current_user:) %>
7
+ <% @form = form || Decidim::Meetings::ResponseForm.new(question_id: question.id, current_user:) %>
8
8
 
9
9
  <p class="h3"><%= @form.label %></p>
10
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 %>">
11
+ <%= decidim_form_for(@form, url: meeting_polls_responses_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__response" data-max-choices="<%= question.max_choices %>">
13
13
  <p class="form-error max-choices-alert mt-0 mb-4"><%= t(".max_choices_alert") %></p>
14
14
 
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
+ <%= render partial: "decidim/meetings/polls/responses/#{question.question_type}", locals: { response: @form.response, question:, response_form: form, disabled: question.responded_by?(current_user), field_id: question.id } %>
16
16
 
17
17
  <%= form.hidden_field :question_id %>
18
18
 
@@ -20,7 +20,7 @@
20
20
  <small class="form-error is-visible mt-1"><%= msg %></small>
21
21
  <% end %>
22
22
 
23
- <% if question.answered_by?(current_user) %>
23
+ <% if question.responded_by?(current_user) %>
24
24
  <%= cell("decidim/announcement", t(".question_replied"), callout_class: "success" ) %>
25
25
  <% else %>
26
26
  <button class="ml-auto mt-8 button button__lg button__secondary"><%= t(".reply_question") %></button>
@@ -0,0 +1,13 @@
1
+ <div class="response-questionnaire__single-option js-check-box-collection">
2
+ <% question.response_options.each_with_index do |response_option, idx| %>
3
+ <% choice = response.choices.find { |choice| choice.decidim_response_option_id == response_option.id } if response %>
4
+
5
+ <%= label_tag "response[choices][#{response_option.id}][response_option_id]", nil, class: "js-collection-input" do %>
6
+ <%= check_box_tag "response[choices][#{response_option.id}][response_option_id]",
7
+ response_option.id,
8
+ choice.present?, disabled: %>
9
+
10
+ <%= translated_attribute(response_option.body) %>
11
+ <% end %>
12
+ <% end %>
13
+ </div>
@@ -0,0 +1,13 @@
1
+ <% choice = response.choices.first if response %>
2
+
3
+ <% question.response_options.each_with_index do |response_option, idx| %>
4
+ <% choice_id = "#{field_id}_choices_#{idx}" %>
5
+
6
+ <%= label_tag "#{choice_id}_response_option" do %>
7
+ <%= radio_button_tag "response[choices][#{question.id}][response_option_id]",
8
+ response_option.id,
9
+ response_option.id == choice.try(:decidim_response_option_id),
10
+ id: "#{choice_id}_response_option", disabled: %>
11
+ <%= translated_attribute(response_option.body) %>
12
+ <% end %>
13
+ <% end %>
@@ -14,17 +14,17 @@
14
14
  <div class="meeting-polls__topbar is-admin">
15
15
  <%= link_to meeting_path(meeting), class: "button button__sm button__text md:button__text-secondary" do %>
16
16
  <%= icon "arrow-left-line" %>
17
- <%= t("back_to_meeting", scope: "decidim.meetings.polls.answers.index_admin") %>
17
+ <%= t("back_to_meeting", scope: "decidim.meetings.polls.responses.index_admin") %>
18
18
  <% end %>
19
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") %>
20
+ <%= action_authorized_link_to :reply_poll, meeting_polls_responses_path(meeting), class: "button button__sm button__secondary", data: { "redirect_url" => meeting_polls_responses_path(meeting) }, resource: meeting do %>
21
+ <%= t("view_poll", scope: "decidim.meetings.polls.responses.index_admin") %>
22
22
  <% end %>
23
23
  </div>
24
24
 
25
25
  <div class="text-center">
26
26
  <h1 class="title-decorator inline-block text-left">
27
- <%= t("title", scope: "decidim.meetings.polls.answers.index_admin") %>
27
+ <%= t("title", scope: "decidim.meetings.polls.responses.index_admin") %>
28
28
  </h1>
29
29
  </div>
30
30
 
@@ -14,19 +14,19 @@
14
14
  <div class="meeting-polls__topbar">
15
15
  <%= link_to meeting_path(meeting), class: "button button__sm button__text-secondary" do %>
16
16
  <%= icon "arrow-left-line" %>
17
- <%= t("back_to_meeting", scope: "decidim.meetings.polls.answers.index_admin") %>
17
+ <%= t("back_to_meeting", scope: "decidim.meetings.polls.responses.index_admin") %>
18
18
  <% end %>
19
19
 
20
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") %>
21
+ <%= link_to admin_meeting_polls_responses_path(meeting), class: "button button__sm button__primary" do %>
22
+ <%= t("administrate", scope: "decidim.meetings.polls.responses.index") %>
23
23
  <% end %>
24
24
  <% end %>
25
25
  </div>
26
26
 
27
27
  <div class="text-center">
28
28
  <h1 class="title-decorator inline-block text-left">
29
- <%= t("title", scope: "decidim.meetings.polls.answers.index") %>
29
+ <%= t("title", scope: "decidim.meetings.polls.responses.index") %>
30
30
  </h1>
31
31
  </div>
32
32
 
@@ -1,8 +1,13 @@
1
1
  <p class="email-instructions"><%= t(".confirmed_html", title: present(@meeting).title, url: @locator.url) %></p>
2
2
 
3
- <% if @registration.meeting.component.settings.registration_code_enabled %>
3
+ <% if @registration_code_enabled %>
4
4
  <p><%= t(".registration_code", code: @registration.code) %></p>
5
+
6
+ <center>
7
+ <%= image_tag attachments[@qr_filename].url %>
8
+ </center>
5
9
  <% end %>
10
+
6
11
  <% if @meeting.customize_registration_email? %>
7
12
  <p><%= present(@meeting).registration_email_custom_content %></p>
8
13
  <% end %>
data/config/assets.rb CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  base_path = File.expand_path("..", __dir__)
4
4
 
5
- Decidim::Webpacker.register_path("#{base_path}/app/packs")
6
- Decidim::Webpacker.register_entrypoints(
5
+ Decidim::Shakapacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Shakapacker.register_entrypoints(
7
7
  decidim_meetings: "#{base_path}/app/packs/entrypoints/decidim_meetings.js",
8
8
  decidim_meetings_admin: "#{base_path}/app/packs/entrypoints/decidim_meetings_admin.js"
9
9
  )
@@ -17,7 +17,6 @@ ar:
17
17
  customize_registration_email: تخصيص بريد التسجيل الإلكتروني
18
18
  decidim_category_id: الفئة
19
19
  decidim_scope_id: نطاق
20
- decidim_user_group_id: مجموعة مستخدم
21
20
  description: وصف
22
21
  end_time: وقت الانتهاء
23
22
  id: المعرف ID
@@ -100,7 +99,6 @@ ar:
100
99
  values:
101
100
  official: الرسمي
102
101
  participants: المشارك
103
- user_group: مجموعات المستخدمين
104
102
  with_any_type:
105
103
  label: نوع الاجتماع
106
104
  values:
@@ -129,14 +127,12 @@ ar:
129
127
  default_registration_terms: شروط التسجيل الافتراضية
130
128
  enable_pads_creation: تمكين إنشاء منصات
131
129
  maps_enabled: تم تمكين الخرائط
132
- registration_code_enabled: تم تمكين رمز التسجيل
133
130
  resources_permissions_enabled: يمكن تعيين أذونات الإجراءات لكل اجتماع
134
131
  terms_and_conditions_url_for_meeting_creators: أحكام وشروط عناوين URL لمنشئي الاجتماع
135
132
  step:
136
133
  announcement: إعلان
137
134
  comments_blocked: تم حظر التعليقات
138
135
  creation_enabled_for_participants: تم تمكين إنشاء الاجتماع بواسطة المشاركين
139
- creation_enabled_for_user_groups: تم تمكين إنشاء الاجتماع بواسطة مجموعات المستخدم
140
136
  events:
141
137
  meetings:
142
138
  meeting_closed:
@@ -164,10 +160,8 @@ ar:
164
160
  email_subject: الشقوق المخصصة للاجتماع "%{resource_title}" تتجاوز %{percentage}٪
165
161
  notification_title: تتجاوز الفواصل المخصصة للاجتماع <a href="%{resource_path}">%{resource_title}</a> ٪ %{percentage}.
166
162
  meeting_updated:
167
- email_intro: 'تم تحديث الاجتماع "%{resource_title}". يمكنك قراءة الإصدار الجديد من صفحته:'
168
163
  email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
169
164
  email_subject: تم تحديث الاجتماع "%{resource_title}"
170
- notification_title: تم تحديث الاجتماع <a href="%{resource_path}">%{resource_title}</a>.
171
165
  registration_code_validated:
172
166
  email_intro: تم التحقق من صحة رمز التسجيل "%{registration_code}" الخاص باجتماع "%{resource_title}".
173
167
  email_outro: لقد تلقيت هذا الإشعار لأنه تم التحقق من صحة رمز التسجيل الخاص بالاجتماع "%{resource_title}".
@@ -178,11 +172,6 @@ ar:
178
172
  email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
179
173
  email_subject: لقد مكّن الاجتماع "%{resource_title}" التسجيلات.
180
174
  notification_title: لقد مكّن الاجتماع <a href="%{resource_path}">%{resource_title}</a> التسجيلات.
181
- upcoming_meeting:
182
- email_intro: سيبدأ الاجتماع "%{resource_title}" في أقل من 48 ساعة.
183
- email_outro: لقد تلقيت هذا الإشعار لأنك تتابع اجتماع "%{resource_title}". يمكنك إلغاء تتبعه من الرابط السابق.
184
- email_subject: سيبدأ الاجتماع "%{resource_title}" في أقل من 48 ساعة.
185
- notification_title: سيبدأ الاجتماع <a href="%{resource_path}">%{resource_title}</a> في أقل من 48 ساعة.
186
175
  gamification:
187
176
  badges:
188
177
  attended_meetings:
@@ -196,8 +185,6 @@ ar:
196
185
  meetings:
197
186
  actions:
198
187
  agenda: جدول أعمال
199
- attachment_collections: المجلدات
200
- attachments: مرفقات
201
188
  close: قريب
202
189
  edit: تعديل
203
190
  invalid_destroy:
@@ -238,7 +225,6 @@ ar:
238
225
  create: إنشاء
239
226
  title: جدول أعمال جديد
240
227
  exports:
241
- answers: الأجوبة
242
228
  meeting_comments: التعليقات
243
229
  meetings: اجتماعات
244
230
  registrations: التسجيلات
@@ -317,6 +303,7 @@ ar:
317
303
  form:
318
304
  available_slots_help: اتركه إلى 0 إذا كان لديك فتحات غير محدودة المتاحة.
319
305
  invites: دعوات
306
+ manage_questions: الأسئلة
320
307
  recommendation_message: لأسباب تتعلق بالخصوصية، نوصي بحذف نموذج التسجيل هذا حالما انتهيت منه. ويكون هذا تلقائياً بعد ثلاثة أشهر من انتهاء الاجتماع.
321
308
  registration_email_help: سيظهر هذا النص في منتصف البريد الإلكتروني الخاص بتأكيد التسجيل مباشرة بعد رمز التسجيل.
322
309
  registration_form: إستمارة تسجيل
@@ -446,7 +433,6 @@ ar:
446
433
  form:
447
434
  address_help: 'العنوان: مستخدم من قبل Geocoder للعثور على الموقع'
448
435
  available_slots_help: تركه على 0 إذا كان لديك أعدد غير محدود من الأماكن الشاغرة
449
- create_as: إنشاء الاجتماع ك
450
436
  location_help: 'الموقع: رسالة موجهة إلى المستخدمين تعني مكان للالتقاء به في'
451
437
  location_hints_help: 'توضيح حول الموقع: معلومات إضافية. على سبيل المثال: إدراج طابق المبنى في حال كان الاجتماع شخصيا، أو كلمة مرور الاجتماع إذا كان اجتماعا على الإنترنت يحتوي على تقييد الدخول.'
452
438
  online_meeting_url_help: 'الرابط: السماح للمشاركين بالاتصال مباشرة باجتماعك'
@@ -482,7 +468,6 @@ ar:
482
468
  no_slots_available: لا فتحات المتاحة
483
469
  organizations: حضور المنظمات
484
470
  redirect_notice: هذا الاجتماع جزء من مساحة أخرى، لذلك تم نقلك إلى %{current_space_name}. <br>إذا كنت تفضل، يمكنك العودة إلى <a href="%{previous_space_url}">%{previous_space_name}</a>.
485
- registration_code_help_text: رمز التسجيل الخاص بك
486
471
  registration_state:
487
472
  validated: التحقق من صحة
488
473
  validation_pending: جاري التأكد
@@ -521,13 +506,9 @@ ar:
521
506
  title: عنوان
522
507
  polls:
523
508
  questions:
524
- index:
525
- empty_questions: خلال هذا الاجتماع، سيتم إرسال بعض الأسئلة وسوف تتمكن من الإجابة عليها. سيتم عرضها هنا.
526
509
  index_admin:
527
510
  edit: تحرير في لوحة المدراء
528
511
  question: سؤال
529
- received_answer: الإجابة المتلقاة
530
- received_answers: الإجابات المتلقاة
531
512
  results: النتائج
532
513
  send: إرسال
533
514
  sent: تم الإرسال
@@ -550,7 +531,6 @@ ar:
550
531
  confirmation:
551
532
  confirmed_html: تم تأكيد تسجيلك للاجتماع <a href="%{url}">%{title}</a>.
552
533
  details: ستجد تفاصيل الاجتماع في المرفق.
553
- registration_code: رمز التسجيل الخاص بك هو %{code}.
554
534
  registration_type:
555
535
  on_different_platform: على منصة مختلفة
556
536
  on_this_platform: على هذه المنصة
@@ -572,11 +552,6 @@ ar:
572
552
  private_meeting: اجتماع خاص
573
553
  transparent: شفاف
574
554
  withdraw: تم السحب
575
- metrics:
576
- meetings:
577
- description: عدد الاجتماعات التي تم إنشاؤها
578
- object: اجتماعات
579
- title: اجتماعات
580
555
  participatory_spaces:
581
556
  highlighted_meetings:
582
557
  past_meetings: الاجتماعات السابقة