decidim-meetings 0.29.4 → 0.30.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 (144) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +1 -1
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +3 -1
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +1 -1
  5. data/app/cells/decidim/meetings/dates_and_map/show.erb +8 -8
  6. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +1 -1
  7. data/app/cells/decidim/meetings/join_meeting_button/show.erb +5 -2
  8. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +3 -3
  9. data/app/cells/decidim/meetings/meeting_l_cell.rb +12 -0
  10. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -2
  11. data/app/commands/decidim/meetings/admin/create_meeting.rb +8 -2
  12. data/app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb +1 -1
  13. data/app/commands/decidim/meetings/admin/update_meeting.rb +8 -2
  14. data/app/commands/decidim/meetings/create_meeting.rb +2 -2
  15. data/app/commands/decidim/meetings/update_meeting.rb +2 -3
  16. data/app/controllers/concerns/decidim/meetings/admin/filterable.rb +9 -5
  17. data/app/controllers/concerns/decidim/meetings/component_filterable.rb +1 -2
  18. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +14 -22
  19. data/app/controllers/decidim/meetings/admin/registration_form_controller.rb +8 -0
  20. data/app/controllers/decidim/meetings/directory/meetings_controller.rb +2 -4
  21. data/app/controllers/decidim/meetings/meetings_controller.rb +42 -7
  22. data/app/forms/decidim/meetings/admin/meeting_form.rb +16 -30
  23. data/app/forms/decidim/meetings/base_meeting_form.rb +6 -0
  24. data/app/forms/decidim/meetings/meeting_form.rb +2 -30
  25. data/app/helpers/decidim/meetings/admin/application_helper.rb +11 -1
  26. data/app/helpers/decidim/meetings/application_helper.rb +35 -1
  27. data/app/helpers/decidim/meetings/directory/application_helper.rb +9 -48
  28. data/app/helpers/decidim/meetings/meetings_helper.rb +5 -0
  29. data/app/models/decidim/meetings/invite.rb +10 -0
  30. data/app/models/decidim/meetings/meeting.rb +28 -1
  31. data/app/models/decidim/meetings/meeting_link.rb +25 -0
  32. data/app/packs/entrypoints/decidim_meetings_admin.js +1 -0
  33. data/app/packs/src/decidim/meetings/admin/meetings_components_form.js +77 -0
  34. data/app/packs/src/decidim/meetings/admin/meetings_form.js +8 -0
  35. data/app/packs/stylesheets/decidim/meetings/_item.scss +2 -2
  36. data/app/permissions/decidim/meetings/admin/permissions.rb +1 -1
  37. data/app/permissions/decidim/meetings/permissions.rb +14 -10
  38. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +1 -1
  39. data/app/presenters/decidim/meetings/meeting_presenter.rb +13 -1
  40. data/app/queries/decidim/meetings/filtered_meetings.rb +2 -2
  41. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +2 -2
  42. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +6 -6
  43. data/app/serializers/decidim/meetings/base_download_your_data_serializer.rb +32 -0
  44. data/app/serializers/decidim/meetings/download_your_data_invite_serializer.rb +6 -26
  45. data/app/serializers/decidim/meetings/download_your_data_meeting_serializer.rb +15 -0
  46. data/app/serializers/decidim/meetings/download_your_data_registration_serializer.rb +6 -24
  47. data/app/serializers/decidim/meetings/registration_serializer.rb +0 -2
  48. data/app/views/decidim/meetings/_calendar_modal.html.erb +2 -2
  49. data/app/views/decidim/meetings/admin/meetings/_component.html.erb +15 -0
  50. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +7 -9
  51. data/app/views/decidim/meetings/admin/meetings/_linked_spaces.html.erb +53 -0
  52. data/app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb +42 -0
  53. data/app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb +70 -0
  54. data/app/views/decidim/meetings/admin/meetings/_meetings-thead.html.erb +26 -0
  55. data/app/views/decidim/meetings/admin/meetings/index.html.erb +16 -142
  56. data/app/views/decidim/meetings/admin/meetings/manage_trash.html.erb +23 -0
  57. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +44 -0
  58. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +1 -0
  59. data/app/views/decidim/meetings/directory/meetings/index.html.erb +1 -2
  60. data/app/views/decidim/meetings/live_events/show.html.erb +5 -5
  61. data/app/views/decidim/meetings/meetings/_form.html.erb +4 -8
  62. data/app/views/decidim/meetings/meetings/_meeting.html.erb +51 -26
  63. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +34 -0
  64. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +20 -59
  65. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +2 -5
  66. data/app/views/decidim/meetings/meetings/_schema_org_event_meeting.html.erb +3 -0
  67. data/app/views/decidim/meetings/meetings/index.html.erb +1 -2
  68. data/app/views/decidim/meetings/meetings/new.html.erb +0 -1
  69. data/app/views/decidim/meetings/meetings/show.html.erb +5 -5
  70. data/app/views/decidim/meetings/polls/answers/index.html.erb +5 -5
  71. data/app/views/decidim/meetings/shared/_filters.html.erb +1 -13
  72. data/app/views/decidim/meetings/shared/_index.html.erb +1 -1
  73. data/app/views/decidim/meetings/shared/_index.js.erb +3 -2
  74. data/app/views/decidim/meetings/shared/_meetings.html.erb +1 -1
  75. data/app/views/decidim/meetings/shared/_meetings_aside.html.erb +2 -2
  76. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +1 -1
  77. data/config/locales/ar.yml +23 -17
  78. data/config/locales/bg.yml +16 -25
  79. data/config/locales/ca.yml +141 -31
  80. data/config/locales/cs.yml +139 -31
  81. data/config/locales/de.yml +152 -74
  82. data/config/locales/el.yml +7 -22
  83. data/config/locales/en.yml +132 -22
  84. data/config/locales/es-MX.yml +145 -35
  85. data/config/locales/es-PY.yml +146 -36
  86. data/config/locales/es.yml +146 -36
  87. data/config/locales/eu.yml +160 -50
  88. data/config/locales/fi-plain.yml +142 -27
  89. data/config/locales/fi.yml +142 -27
  90. data/config/locales/fr-CA.yml +80 -28
  91. data/config/locales/fr.yml +80 -28
  92. data/config/locales/ga-IE.yml +0 -13
  93. data/config/locales/gl.yml +6 -12
  94. data/config/locales/hu.yml +9 -21
  95. data/config/locales/id-ID.yml +6 -13
  96. data/config/locales/is-IS.yml +1 -15
  97. data/config/locales/it.yml +7 -19
  98. data/config/locales/ja.yml +94 -26
  99. data/config/locales/lb.yml +6 -16
  100. data/config/locales/lt.yml +8 -24
  101. data/config/locales/lv.yml +6 -13
  102. data/config/locales/nl.yml +9 -19
  103. data/config/locales/no.yml +6 -16
  104. data/config/locales/pl.yml +17 -22
  105. data/config/locales/pt-BR.yml +8 -22
  106. data/config/locales/pt.yml +7 -17
  107. data/config/locales/ro-RO.yml +33 -20
  108. data/config/locales/ru.yml +6 -13
  109. data/config/locales/sk.yml +7 -14
  110. data/config/locales/sv.yml +126 -78
  111. data/config/locales/tr-TR.yml +7 -19
  112. data/config/locales/uk.yml +6 -15
  113. data/config/locales/zh-CN.yml +7 -18
  114. data/config/locales/zh-TW.yml +7 -21
  115. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +1 -1
  116. data/db/migrate/20200827153856_add_commentable_counter_cache_to_meetings.rb +1 -1
  117. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +1 -1
  118. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +1 -1
  119. data/db/migrate/20240712104245_create_decidim_meetings_meeting_link.rb +12 -0
  120. data/db/migrate/20240828103603_add_deleted_at_to_decidim_meetings_meetings.rb +8 -0
  121. data/decidim-meetings.gemspec +1 -1
  122. data/lib/decidim/api/agenda_item_type.rb +6 -7
  123. data/lib/decidim/api/agenda_type.rb +3 -4
  124. data/lib/decidim/api/meeting_type.rb +33 -41
  125. data/lib/decidim/api/meetings_type.rb +4 -5
  126. data/lib/decidim/api/service_type.rb +1 -1
  127. data/lib/decidim/meetings/admin_engine.rb +9 -1
  128. data/lib/decidim/meetings/component.rb +14 -4
  129. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +13 -7
  130. data/lib/decidim/meetings/engine.rb +1 -6
  131. data/lib/decidim/meetings/meeting_serializer.rb +70 -59
  132. data/lib/decidim/meetings/schema_org_event_meeting_serializer.rb +151 -0
  133. data/lib/decidim/meetings/seeds.rb +2 -4
  134. data/lib/decidim/meetings/test/factories.rb +8 -0
  135. data/lib/decidim/meetings/test/translated_event.rb +3 -3
  136. data/lib/decidim/meetings/version.rb +1 -1
  137. data/lib/decidim/meetings.rb +1 -0
  138. metadata +32 -22
  139. data/app/cells/decidim/meetings/meetings_map/show.erb +0 -16
  140. data/app/cells/decidim/meetings/meetings_map_cell.rb +0 -32
  141. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +0 -21
  142. data/app/helpers/decidim/meetings/map_helper.rb +0 -21
  143. data/app/views/decidim/meetings/meetings/_actions.html.erb +0 -6
  144. data/config/locales/ca-IT.yml +0 -693
@@ -0,0 +1,44 @@
1
+ <% add_decidim_page_title(t("decidim.forms.admin.questionnaires.edit_questions.title")) %>
2
+
3
+ <% if templates_defined? && choose_template? %>
4
+ <%= render partial: "decidim/templates/admin/questionnaire_templates/choose", locals: { target: questionnaire, form_title: t("decidim.forms.admin.questionnaires.edit.title") } %>
5
+ <% else %>
6
+
7
+ <div class="questionnaire-questions">
8
+ <div class="item_show__header">
9
+ <h1 class="item_show__header-title">
10
+ <%= t("decidim.forms.admin.questionnaires.edit_questions.title") %>
11
+ <% if questionnaire.questions_editable? %>
12
+ <button class="button button__sm button__secondary add-question"><%= t("add_question", scope: "decidim.forms.admin.questionnaires.edit_questions") %></button>
13
+ <button class="button button__sm button__secondary add-separator"><%= t("add_separator", scope: "decidim.forms.admin.questionnaires.edit_questions") %></button>
14
+ <button class="button button__sm button__secondary add-title-and-description"><%= t("add_title_and_description", scope: "decidim.forms.admin.questionnaires.edit_questions") %></button>
15
+ <% end %>
16
+ <% if allowed_to? :preview, :questionnaire %>
17
+ <%= link_to t("preview", scope: "decidim.forms.admin.questionnaires.form"), public_url, class: "button button__sm button__transparent-secondary", target: :_blank, data: { "external-link": false } %>
18
+ <% end %>
19
+ <% if questionnaire.answers.any? %>
20
+ <%= export_dropdown(current_component, questionnaire.id) if allowed_to? :export_answers, :questionnaire %>
21
+ <% if allowed_to? :show, :questionnaire_answers %>
22
+ <%= link_to t("actions.show", scope: "decidim.forms.admin.questionnaires"), questionnaire_participants_url, class: "button button__sm button__secondary new whitespace-nowrap" %>
23
+ <% end %>
24
+ <% else %>
25
+ <button class="button button__sm button__secondary whitespace-nowrap" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></button>
26
+ <% end %>
27
+ </h1>
28
+ </div>
29
+ </div>
30
+
31
+ <div class="item__edit item__edit-1col">
32
+ <div class="item__edit-form">
33
+ <%= decidim_form_for(@form, url: update_questions_meeting_registrations_form_path(meeting_id: meeting.id), method: :patch, html: { class: "form-defaults form edit_questions_survey" }) do |form| %>
34
+ <%= render partial: "decidim/forms/admin/questionnaires/questions_form", object: form %>
35
+ <div class="item__edit-sticky">
36
+ <div class="item__edit-sticky-container">
37
+ <%= form.submit t("save", scope: "decidim.forms.admin.questionnaires.edit"), class: "button button__sm button__secondary" %>
38
+ </div>
39
+ </div>
40
+ <% end %>
41
+ </div>
42
+ </div>
43
+
44
+ <% end %>
@@ -20,6 +20,7 @@
20
20
  </div>
21
21
  <% end %>
22
22
  <%= 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__secondary" %>
23
+ <%= 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__secondary" %>
23
24
  </div>
24
25
  </h1>
25
26
  </div>
@@ -6,8 +6,7 @@
6
6
  filter_options: {
7
7
  date: !@forced_past_meetings,
8
8
  type: true,
9
- directory_scopes: true,
10
- directory_categories: true,
9
+ taxonomies: true,
11
10
  origin: true,
12
11
  space_type: true,
13
12
  activity: current_user.present?
@@ -1,10 +1,10 @@
1
1
  <% provide(:title, present(meeting).title) %>
2
2
 
3
- <% add_decidim_meta_tags({
4
- title: present(meeting).title,
5
- description: present(meeting).description,
6
- url: meeting_url(meeting.id)
7
- }) %>
3
+ <% add_decidim_meta_tags(
4
+ title: present(meeting).title,
5
+ description: present(meeting).description,
6
+ url: meeting_url(meeting.id),
7
+ resource: meeting) %>
8
8
 
9
9
  <div class="meeting-polls__iframe">
10
10
  <%== live_meeting_embed_code %>
@@ -53,16 +53,12 @@
53
53
  <%= form.datetime_field :end_time %>
54
54
  </div>
55
55
 
56
- <% if current_participatory_space.has_subscopes? %>
57
- <div>
58
- <%= scopes_select_field form, :decidim_scope_id %>
59
- </div>
56
+ <% if @form.taxonomy_filters&.any? %>
57
+ <% @form.taxonomy_filters.each do |filter| %>
58
+ <%= filter_taxonomy_items_select_field form, :taxonomies, filter %>
59
+ <% end %>
60
60
  <% end %>
61
61
 
62
- <div>
63
- <%= form.categories_select :decidim_category_id, current_participatory_space.categories, prompt: t(".select_a_category"), disable_parents: false %>
64
- </div>
65
-
66
62
  <div class="row column">
67
63
  <%= form.select :registration_type,
68
64
  @form.registration_type_select,
@@ -1,31 +1,48 @@
1
1
  <%= render layout: "layouts/decidim/shared/layout_item" do %>
2
+
3
+ <%= render partial: "schema_org_event_meeting" %>
4
+
2
5
  <section class="layout-main__section layout-main__heading">
3
- <h1 class="h2 decorator"><%= present(meeting).title(links: true, html_escape: true ) %></h1>
4
-
5
- <%= cell "decidim/meetings/dates_and_map", meeting %>
6
- <%= render partial: "meeting_poll_actions", locals: { mobile: true } %>
7
-
8
- <div class="layout-author">
9
- <%= cell "decidim/author", author_presenter_for(meeting.normalized_author), from: meeting, context_actions: nil, layout: :compact %>
10
-
11
- <% if meeting.private_meeting? %>
12
- <span class="<%= meeting_type_badge_css_class("private") %> label">
13
- <%= t("private_meeting", scope: "decidim.meetings.types") %>
14
- </span>
15
- <% end %>
16
- <% if meeting.private_meeting? and meeting.transparent? %>
17
- <span class="<%= meeting_type_badge_css_class("transparent") %> label">
18
- <%= t("transparent", scope: "decidim.meetings.types") %>
19
- </span>
20
- <% end %>
21
- <% if meeting.withdrawn? %>
22
- <span class="<%= meeting_type_badge_css_class("withdraw") %> label">
23
- <%= t("withdraw", scope: "decidim.meetings.types") %>
24
- </span>
25
- <% end %>
6
+ <h1 class="h2 decorator"><%= present(meeting).title(links: true, html_escape: true ) %></h1>
7
+ <%= cell "decidim/meetings/dates_and_map", meeting %>
8
+ <div class="block md:hidden">
9
+ <%= render partial: "meeting_aside", locals: { hide_modal: true } %>
10
+ </div>
11
+
12
+ <%= render partial: "meeting_poll_actions", locals: { mobile: true } %>
13
+
14
+ <% if meeting.private_meeting? || meeting.withdrawn? %>
15
+ <div class="layout-author has_status">
16
+ <% if meeting.private_meeting? %>
17
+ <span class="<%= meeting_type_badge_css_class("private") %> label">
18
+ <%= t("private_meeting", scope: "decidim.meetings.types") %>
19
+ </span>
20
+ <% end %>
21
+ <% if meeting.private_meeting? and meeting.transparent? %>
22
+ <span class="<%= meeting_type_badge_css_class("transparent") %> label">
23
+ <%= t("transparent", scope: "decidim.meetings.types") %>
24
+ </span>
25
+ <% end %>
26
+ <% if meeting.withdrawn? %>
27
+ <span class="<%= meeting_type_badge_css_class("withdraw") %> label">
28
+ <%= t("withdraw", scope: "decidim.meetings.types") %>
29
+ </span>
30
+ <% end %>
31
+ </div>
32
+ <% end %>
33
+
34
+ <div class="layout-author <%= "has_status" if meeting.private_meeting? || meeting.withdrawn? %>">
35
+ <div class="relative flex items-center justify-center w-full">
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 %>
38
+ </div>
39
+ <%= render "decidim/shared/resource_actions", resource: meeting do %>
40
+ <%= render "decidim/meetings/meetings/meeting_actions" %>
41
+ <% end %>
42
+ </div>
26
43
  </div>
27
- </section>
28
44
 
45
+ </section>
29
46
  <section class="layout-main__section">
30
47
  <div class="editor-content">
31
48
  <%= render_meeting_body(@meeting) %>
@@ -52,14 +69,22 @@
52
69
  </section>
53
70
  <% end %>
54
71
 
72
+ <%= cell("decidim/tags", meeting) %>
73
+
55
74
  <section class="layout-main__section layout-main__buttons" data-buttons>
56
- <%= render partial: "actions" %>
75
+ <%= cell "decidim/comments_button", nil %>
76
+
77
+ <div class="ml-auto lg:ml-0">
78
+ <%= cell "decidim/share_widget", meeting %>
79
+ </div>
57
80
  </section>
58
81
 
59
82
  <%= pad_iframe_for meeting %>
60
83
 
61
84
  <% content_for :aside do %>
62
- <%= render partial: "meeting_aside" %>
85
+ <div class="hidden md:block">
86
+ <%= render partial: "meeting_aside" %>
87
+ </div>
63
88
  <% end %>
64
89
 
65
90
  <% content_for :item_footer do %>
@@ -0,0 +1,34 @@
1
+ <% if allowed_to?(:update, :meeting, meeting: meeting) %>
2
+ <li role="menuitem">
3
+ <%= link_to edit_meeting_path(meeting), class: "button button__sm button__text button__text-secondary" do %>
4
+ <span><%= t("edit_meeting", scope: "decidim.meetings.meetings.meeting") %></span>
5
+ <%= icon "pencil-line" %>
6
+ <% end %>
7
+ </li>
8
+ <% end %>
9
+
10
+ <% if allowed_to?(:close, :meeting, meeting: meeting) %>
11
+ <% caption = meeting.closed? ? t("edit_close_meeting", scope: "decidim.meetings.meetings.meeting") : t("close_meeting", scope: "decidim.meetings.meetings.meeting") %>
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 %>
14
+ <span><%= caption %></span>
15
+ <%= icon "lock-line" %>
16
+ <% end %>
17
+ </li>
18
+ <% end %>
19
+
20
+ <% if meeting.withdrawable_by?(current_user) %>
21
+ <li role="menuitem">
22
+ <%= action_authorized_link_to(
23
+ :withdraw,
24
+ withdraw_meeting_path(meeting),
25
+ method: :put,
26
+ class: "button button__sm button__text button__text-secondary" ,
27
+ title: t("withdraw_btn_hint", scope: "decidim.meetings.meetings.show"),
28
+ data: { confirm: t("withdraw_confirmation_html", scope: "decidim.meetings.meetings.show") }
29
+ ) do %>
30
+ <span><%= t("withdraw_meeting", scope:"decidim.meetings.meetings.show") %></span>
31
+ <%= icon "arrow-go-back-line" %>
32
+ <% end %>
33
+ </li>
34
+ <% end %>
@@ -2,40 +2,7 @@
2
2
 
3
3
  <% if meeting.can_be_joined_by?(current_user) || meeting.on_different_platform? %>
4
4
  <section class="layout-aside__section layout-aside__buttons layout-aside__ctas-buttons" data-sticky-buttons>
5
- <%= cell "decidim/meetings/join_meeting_button", meeting, show_remaining_slots: true %>
6
- </section>
7
- <% end %>
8
-
9
- <% if allowed_to?(:update, :meeting, meeting: meeting) || allowed_to?(:close, :meeting, meeting: meeting) || meeting.withdrawable_by?(current_user) %>
10
- <section class="layout-aside__section layout-aside__buttons">
11
- <% if allowed_to?(:update, :meeting, meeting: meeting) %>
12
- <%= link_to edit_meeting_path(meeting), class: "button button__sm button__transparent-secondary w-full" do %>
13
- <span><%= t("edit_meeting", scope: "decidim.meetings.meetings.meeting") %></span>
14
- <%= icon "pencil-line" %>
15
- <% end %>
16
- <% end %>
17
-
18
- <% if allowed_to?(:close, :meeting, meeting: meeting) %>
19
- <% caption = meeting.closed? ? t("edit_close_meeting", scope: "decidim.meetings.meetings.meeting") : t("close_meeting", scope: "decidim.meetings.meetings.meeting") %>
20
-
21
- <%= link_to edit_meeting_meeting_close_path(meeting_id: meeting.id, id: meeting.id), class: "button button__sm button__transparent-secondary w-full" do %>
22
- <span><%= caption %></span>
23
- <%= icon "pencil-line" %>
24
- <% end %>
25
- <% end %>
26
-
27
- <% if meeting.withdrawable_by?(current_user) %>
28
- <%= action_authorized_link_to(
29
- :withdraw,
30
- withdraw_meeting_path(meeting),
31
- method: :put,
32
- class: "button button__sm button__transparent-secondary w-full",
33
- title: t("withdraw_btn_hint", scope: "decidim.meetings.meetings.show"),
34
- data: { confirm: t("withdraw_confirmation_html", scope: "decidim.meetings.meetings.show") }
35
- ) do %>
36
- <span><%= t("withdraw_meeting", scope:"decidim.meetings.meetings.show") %></span>
37
- <% end %>
38
- <% end %>
5
+ <%= cell "decidim/meetings/join_meeting_button", meeting, show_remaining_slots: true, hide_modal: local_assigns[:hide_modal] %>
39
6
  </section>
40
7
  <% end %>
41
8
 
@@ -63,37 +30,31 @@
63
30
  <% meeting.attending_organizations.split("\n").each do |organizations| %>
64
31
  <li><%= organizations %></li>
65
32
  <% end %>
66
- </ul>
33
+ </ul>
34
+ <% end %>
67
35
  <% end %>
68
36
  <% end %>
69
- <% end %>
70
37
 
71
- <% if registration.present? && registration.meeting.component.settings.registration_code_enabled %>
72
- <%= render layout: "decidim/meetings/layouts/aside_block", locals: { emoji: "coupon-line" } do %>
73
- <h3 class="meeting__aside-block__title"><%= registration_code_help_text %></h3>
74
- <div class="meeting__aside-block__large"><%= registration.code %></div>
75
- <% if registration.validated? %>
76
- <div class="label success"><%= t("validated", scope: "decidim.meetings.meetings.show.registration_state") %></div>
77
- <% else %>
78
- <div class="label warning"><%= t("validation_pending", scope: "decidim.meetings.meetings.show.registration_state") %></div>
38
+ <% if registration.present? && registration.meeting.component.settings.registration_code_enabled %>
39
+ <%= 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 %>
79
47
  <% end %>
80
48
  <% end %>
81
- <% end %>
82
49
 
83
- <% if meeting.services.any? %>
84
- <% meeting.services.each do |service| %>
85
- <%= render layout: "decidim/meetings/layouts/aside_block", locals: { emoji: "star-line" } do %>
86
- <h3 class="meeting__aside-block__title"><%= translated_attribute(service["title"]) %></h3>
87
- <div class="meeting__aside-block__text"><%= translated_attribute(service["description"]) %></div>
50
+ <% if meeting.services.any? %>
51
+ <% meeting.services.each do |service| %>
52
+ <%= render layout: "decidim/meetings/layouts/aside_block", locals: { emoji: "star-line" } do %>
53
+ <h3 class="meeting__aside-block__title"><%= translated_attribute(service["title"]) %></h3>
54
+ <div class="meeting__aside-block__text"><%= translated_attribute(service["description"]) %></div>
55
+ <% end %>
88
56
  <% end %>
89
57
  <% end %>
90
- <% end %>
91
- </section>
58
+ <%= cell "decidim/meetings/cancel_registration_meeting_button", meeting, hide_modal: local_assigns[:hide_modal] %>
59
+ </section>
92
60
  <% end %>
93
-
94
- <section class="layout-aside__section actions__secondary">
95
- <%= cell "decidim/meetings/cancel_registration_meeting_button", meeting %>
96
- <%= follow_button_for(meeting) %>
97
- <%= cell "decidim/share_button", nil %>
98
- <%= cell "decidim/report_button", meeting %>
99
- </section>
@@ -1,11 +1,8 @@
1
1
  <% extra_classes = local_assigns.fetch(:mobile, false) ? " block md:hidden" : " hidden md:block" %>
2
2
  <% if meeting.poll&.has_questions? %>
3
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 %>
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 %>
9
6
  <% if !allowed_to?(:reply_poll, :meeting, meeting:) && allowed_to?(:update, :poll, meeting:) %>
10
7
  <%= link_to admin_meeting_polls_answers_path(meeting), class: "button button__sm button__transparent-secondary w-full" do %>
11
8
  <span><%= t("administrate", scope: "decidim.meetings.polls.answers.index") %></span>
@@ -0,0 +1,3 @@
1
+ <script type="application/ld+json">
2
+ <%== render_schema_org_event_meeting(meeting) %>
3
+ </script>
@@ -15,8 +15,7 @@
15
15
  filter_options: {
16
16
  date: !@forced_past_meetings,
17
17
  type: true,
18
- scopes: current_component.has_subscopes?,
19
- categories: current_component.categories.any?,
18
+ taxonomies: true,
20
19
  origin: component_settings.creation_enabled_for_participants?,
21
20
  space_type: false,
22
21
  activity: current_user.present?
@@ -1,4 +1,3 @@
1
- <% add_decidim_page_title(t("title", scope: "decidim.meetings.meetings.new")) %>
2
1
  <%= render layout: "layouts/decidim/shared/layout_center" do %>
3
2
  <div class="text-center py-10">
4
3
  <h1 class="title-decorator inline-block text-left">
@@ -1,10 +1,10 @@
1
1
  <% provide(:title, present(meeting).title) %>
2
2
 
3
- <% add_decidim_meta_tags({
4
- title: present(meeting).title,
5
- description: present(meeting).description,
6
- url: meeting_url(meeting.id)
7
- }) %>
3
+ <% add_decidim_meta_tags(
4
+ title: present(meeting).title,
5
+ description: present(meeting).description,
6
+ url: meeting_url(meeting.id),
7
+ resource: meeting) %>
8
8
 
9
9
  <%
10
10
  edit_link(
@@ -1,8 +1,8 @@
1
- <% add_decidim_meta_tags({
2
- title: present(meeting).title,
3
- description: present(meeting).description,
4
- url: meeting_url(meeting.id)
5
- }) %>
1
+ <% add_decidim_meta_tags(
2
+ title: present(meeting).title,
3
+ description: present(meeting).description,
4
+ url: meeting_url(meeting.id),
5
+ resource: meeting) %>
6
6
 
7
7
  <%= append_javascript_pack_tag "decidim_meetings" %>
8
8
  <%= append_stylesheet_pack_tag "decidim_meetings" %>
@@ -1,16 +1,4 @@
1
- <% filter_sections = [].tap do |f|
2
- f.append(method: :with_any_date, collection: filter_date_values, label_scope: "decidim.meetings.meetings.filters", id: "date", type: :radio_buttons) if filter_options[:date]
3
- f.append(method: :with_any_type, collection: filter_type_values, label_scope: "decidim.meetings.meetings.filters", id: "type") if filter_options[:type]
4
- f.append(method: :with_any_scope, collection: filter_scopes_values, label_scope: "decidim.shared.participatory_space_filters.filters", id: "scope") if filter_options[:scopes]
5
- f.append(method: :with_any_scope, collection: filter_global_scopes_values, label_scope: "decidim.shared.participatory_space_filters.filters", id: "scope") if filter_options[:directory_scopes]
6
- f.append(method: :with_any_category, collection: filter_categories_values, label_scope: "decidim.meetings.meetings.filters", id: "category") if filter_options[:categories]
7
- f.append(method: :with_any_global_category, collection: directory_filter_categories_values, label_scope: "decidim.meetings.meetings.filters", id: "category") if filter_options[:directory_categories]
8
- f.append(method: :with_any_origin, collection: filter_origin_values, label_scope: "decidim.meetings.meetings.filters", id: "origin") if filter_options[:origin]
9
- f.append(method: :with_any_space, collection: directory_meeting_spaces_values, label_scope: "decidim.meetings.directory.meetings.index", id: "space_type") if filter_options[:space_type]
10
- f.append(method: :activity, collection: activity_filter_values, label_scope: "decidim.meetings.meetings.filters", id: "activity", type: :radio_buttons) if filter_options[:activity]
11
- end %>
12
-
13
- <%= render layout: "decidim/shared/filters", locals: { filter_sections:, search_variable:, skip_to_id: "meetings" } do %>
1
+ <%= render layout: "decidim/shared/filters", locals: { filter_sections: filter_sections(**filter_options), search_variable:, skip_to_id: "meetings" } do %>
14
2
  <%= render partial: "decidim/meetings/calendar_modal", locals: {
15
3
  path: short_url(
16
4
  route_name: "calendar",
@@ -10,7 +10,7 @@
10
10
  <%= render layout: "layouts/decidim/shared/layout_two_col" do %>
11
11
  <% if display_map %>
12
12
  <div class="meeting-list__map">
13
- <%= cell "decidim/meetings/meetings_map", search.result %>
13
+ <%= cell "decidim/map", search.result, metadata_card: "decidim/meetings/meeting_card_metadata" %>
14
14
  </div>
15
15
  <% end %>
16
16
 
@@ -7,9 +7,10 @@ $urlCalendarUrl.val("<%= short_url(route_name: "calendar", params: { filter: par
7
7
  var $map = $("#map");
8
8
  var controller = $map.data("map-controller");
9
9
  if (controller) {
10
- var markerData = JSON.parse('<%= escape_javascript meetings_data_for_map(search.result).to_json.html_safe %>');
10
+ var markerData = JSON.parse('<%= escape_javascript cell("decidim/map", search.result, metadata_card: "decidim/meetings/meeting_card_metadata").geocoded_data.to_json.html_safe %>');
11
11
  controller.clearMarkers();
12
- if (markerData.length > 0){
12
+
13
+ if (markerData.length > 0) {
13
14
  controller.addMarkers(markerData);
14
15
  }
15
16
  }
@@ -11,7 +11,7 @@
11
11
  <% if meetings.length.zero? %>
12
12
  <%= cell("decidim/announcement", t("decidim.meetings.meetings.meetings.no_meetings_warning"), callout_class: "warning" ) %>
13
13
  <% else %>
14
- <h2 class="h5 md:h3 decorator" aria-live="polite" aria-atomic="true"><%= t("meetings_count", scope: "decidim.meetings.meetings.count", count: meetings.total_count) %></h2>
14
+ <h2 class="h5 md:h3 decorator"><%= t("meetings_count", scope: "decidim.meetings.meetings.count", count: meetings.total_count) %></h2>
15
15
 
16
16
  <%= cell("decidim/announcement", t("decidim.meetings.meetings.meetings.upcoming_meetings_warning"), callout_class: "warning" ) if @forced_past_meetings %>
17
17
 
@@ -5,8 +5,8 @@
5
5
  <h2 class="title-decorator"><%= t("decidim.components.meetings.name") %></h2>
6
6
  <% end %>
7
7
 
8
- <% if try(:component_settings) && component_settings&.creation_enabled_for_participants? && current_component.participatory_space.can_participate?(current_user) %>
9
- <%= action_authorized_link_to :create, new_meeting_path, class: "button button__xl button__secondary w-full", data: { "redirect_url" => new_meeting_path } do %>
8
+ <% if allowed_to?(:create, :meeting) %>
9
+ <%= action_authorized_link_to :create, new_meeting_path, permissions_holder: current_component, class: "button button__xl button__secondary w-full", data: { "redirect_url" => new_meeting_path } do %>
10
10
  <span><%= t("new_meeting", scope: "decidim.meetings.meetings.index") %></span>
11
11
  <%= icon "add-line" %>
12
12
  <% end %>
@@ -15,7 +15,7 @@
15
15
  <% end %>
16
16
  <% end %>
17
17
  </div>
18
- <%= cell "decidim/meetings/meetings_map", meetings_geocoded %>
18
+ <%= cell "decidim/map", meetings_geocoded, metadata_card: "decidim/meetings/meeting_card_metadata" %>
19
19
  </div>
20
20
  </section>
21
21
  <% end %>
@@ -2,6 +2,8 @@
2
2
  ar:
3
3
  activemodel:
4
4
  attributes:
5
+ answer:
6
+ add_documents: أضف مستندات
5
7
  close_meeting:
6
8
  attendees_count: عدد الحضور
7
9
  attending_organizations: قائمة المنظمات التي حضرت
@@ -85,8 +87,6 @@ ar:
85
87
  admin:
86
88
  filters:
87
89
  meetings:
88
- category_id_eq:
89
- label: الفئة
90
90
  closed_at_present:
91
91
  label: الحالة
92
92
  values:
@@ -97,8 +97,6 @@ ar:
97
97
  values:
98
98
  'false': السابق
99
99
  'true': القادم
100
- scope_id_eq:
101
- label: نطاق
102
100
  with_any_origin:
103
101
  label: الأصل
104
102
  values:
@@ -135,8 +133,6 @@ ar:
135
133
  maps_enabled: تم تمكين الخرائط
136
134
  registration_code_enabled: تم تمكين رمز التسجيل
137
135
  resources_permissions_enabled: يمكن تعيين أذونات الإجراءات لكل اجتماع
138
- scope_id: نطاق
139
- scopes_enabled: النطاقات مفعلة
140
136
  terms_and_conditions_url_for_meeting_creators: أحكام وشروط عناوين URL لمنشئي الاجتماع
141
137
  step:
142
138
  announcement: إعلان
@@ -193,7 +189,7 @@ ar:
193
189
  badges:
194
190
  attended_meetings:
195
191
  conditions:
196
- - سجل للاجتماعات التي تريد حضورها
192
+ - سجل للاجتماعات التي تريد حضورها
197
193
  description: تُمنح هذه الشارة عند حضور العديد من الاجتماعات المباشرة.
198
194
  description_another: حضر هذا المشارك %{score} جلسة.
199
195
  description_own: لقد حضرت %{score} اجتماع.
@@ -205,7 +201,6 @@ ar:
205
201
  attachment_collections: المجلدات
206
202
  attachments: مرفقات
207
203
  close: قريب
208
- destroy: حذف
209
204
  edit: تعديل
210
205
  invalid_destroy:
211
206
  proposals_count:
@@ -273,10 +268,10 @@ ar:
273
268
  close: قريب
274
269
  title: اجتماع قريب
275
270
  meetings:
271
+ component:
272
+ unlink: إلغاء الربط
276
273
  create:
277
274
  success: تم إنشاء الاجتماع بنجاح. لاحظ أن هذا غير منشور حتى الآن، تحتاج إلى نشره بنفسك.
278
- destroy:
279
- success: تم حذف الاجتماع بنجاح
280
275
  edit:
281
276
  title: تعديل الاجتماعات
282
277
  update: تحديث
@@ -290,7 +285,18 @@ ar:
290
285
  select_a_registration_type: الرجاء تحديد نوع التسجيل
291
286
  select_an_iframe_access_level: الرجاء تحديد مستوى الوصول إلى iframe
292
287
  index:
288
+ linked_meeting_warning_html: يجب تعديل هذا الاجتماع من <br><a href="%{href}">%{name}</a>
293
289
  title: اجتماعات
290
+ linked_spaces:
291
+ assign: تعيين
292
+ link_a_space: اربط مساحة
293
+ private_meeting_warning: لم يتم تطبيق المساحات المربوطة إذا كان الاجتماع خاص وغير شفاف.
294
+ private_space_warning: لم يتم تطبيق المساحات المربوطة إذا كان الاجتماع ينتمي إلى مساحه خاصة وغير شفافه.
295
+ select: اختر مساحه
296
+ table:
297
+ actions: الإجراءات
298
+ component: مساحات مربوطة
299
+ title: مساحات مربوطة
294
300
  new:
295
301
  create: إنشاء
296
302
  title: إنشاء اجتماع
@@ -310,6 +316,8 @@ ar:
310
316
  registrations:
311
317
  edit:
312
318
  save: حفظ
319
+ validate: التحقق من صحة
320
+ validate_registration_code: التحقق من صحة رمز التسجيل
313
321
  form:
314
322
  available_slots_help: اتركه إلى 0 إذا كان لديك فتحات غير محدودة المتاحة.
315
323
  invites: دعوات
@@ -328,6 +336,9 @@ ar:
328
336
  update:
329
337
  invalid: حدثت مشكلة أثناء حفظ إعدادات التسجيل.
330
338
  success: تم حفظ إعدادات تسجيل الاجتماع بنجاح.
339
+ validate_registration_code:
340
+ invalid: رمز التسجيل هذا غير صالح.
341
+ success: تم التحقق من صحة رمز التسجيل بنجاح.
331
342
  admin_log:
332
343
  invite:
333
344
  create: "%{user_name} دعا %{attendee_name} للانضمام إلى اجتماع %{resource_name} في الفضاء %{space_name}"
@@ -345,8 +356,6 @@ ar:
345
356
  questionnaire:
346
357
  update: "قام %{user_name} بتحديث الاستبيان للاجتماع %{meeting_name}"
347
358
  application_helper:
348
- filter_category_values:
349
- all: الكل
350
359
  filter_meeting_space_values:
351
360
  all: الكل
352
361
  calendar_modal:
@@ -449,7 +458,6 @@ ar:
449
458
  location_hints_help: 'توضيح حول الموقع: معلومات إضافية. على سبيل المثال: إدراج طابق المبنى في حال كان الاجتماع شخصيا، أو كلمة مرور الاجتماع إذا كان اجتماعا على الإنترنت يحتوي على تقييد الدخول.'
450
459
  online_meeting_url_help: 'الرابط: السماح للمشاركين بالاتصال مباشرة باجتماعك'
451
460
  registration_url_help: 'الرابط: يتيح للمشاركين استخدام الخدمة الخارجية التي تستخدمها للتسجيل'
452
- select_a_category: يُرجى اختيار فئة
453
461
  select_a_meeting_type: الرجاء تحديد نوع الاجتماع
454
462
  select_a_registration_type: الرجاء تحديد نوع التسجيل
455
463
  select_an_iframe_access_level: الرجاء تحديد مستوى الوصول إلى iframe
@@ -459,14 +467,12 @@ ar:
459
467
  see_all: عرض كافة الاجتماعات
460
468
  see_all_withdrawn: عرض جميع الاجتماعات المسحوبة
461
469
  text_banner: أنت تستعرض قائمة الاجتماعات التي تم سحبها من قبل مؤلفيها. %{go_back_link}.
462
- meeting:
463
- close_meeting: اجتماع قريب
464
- edit_meeting: تعديل الاجتماعات
465
470
  meetings:
466
471
  upcoming_meetings_warning: حاليًا ، لا توجد اجتماعات مجدولة ، ولكن يمكنك هنا العثور على جميع الاجتماعات السابقة المدرجة.
467
472
  new:
468
473
  back: العودة
469
474
  create: إنشاء
475
+ title: إنشاء اجتماعك
470
476
  registration_confirm:
471
477
  cancel: إلغاء
472
478
  confirm: تؤكد
@@ -483,6 +489,7 @@ ar:
483
489
  micro_camera_permissions_warning: عند النقر على الزر أدناه، سيتم طلب أذونات الميكروفون و/أو الكاميرا، وسوف تنضم إلى مؤتمر الفيديو
484
490
  no_slots_available: لا فتحات المتاحة
485
491
  organizations: حضور المنظمات
492
+ redirect_notice: هذا الاجتماع جزء من مساحة أخرى، لذلك تم نقلك إلى %{current_space_name}. <br>إذا كنت تفضل، يمكنك العودة إلى <a href="%{previous_space_url}">%{previous_space_name}</a>.
486
493
  registration_code_help_text: رمز التسجيل الخاص بك
487
494
  registration_state:
488
495
  validated: التحقق من صحة
@@ -497,7 +504,6 @@ ar:
497
504
  visit_finished: عرض الاجتماع السابق
498
505
  withdraw_btn_hint: يمكن أن تسحب اجتماعك اذا غيرت رأيك. لا يتم إلغاء الاجتماع بل سيظهر في قائمة الاجتماعات المسحوبة.
499
506
  withdraw_confirmation_html: هل أنت متأكد من أنك تريد سحب هذا الاجتماع؟<br><br><strong>لا يمكن إلغاء هذا الإجراء!</strong>
500
- withdraw_meeting: سحب الاجتماع
501
507
  update:
502
508
  invalid: طرأت مشكلة خلال تحديث الاجتماع.
503
509
  success: لقد قمت بتحديث الاجتماع بنجاح.