decidim-meetings 0.29.6 → 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 (146) 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/poll/_form.html.erb +3 -32
  58. data/app/views/decidim/meetings/admin/poll/_question.html.erb +10 -0
  59. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +44 -0
  60. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +1 -0
  61. data/app/views/decidim/meetings/directory/meetings/index.html.erb +1 -2
  62. data/app/views/decidim/meetings/live_events/show.html.erb +5 -5
  63. data/app/views/decidim/meetings/meetings/_form.html.erb +4 -8
  64. data/app/views/decidim/meetings/meetings/_meeting.html.erb +51 -26
  65. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +34 -0
  66. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +20 -59
  67. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +2 -5
  68. data/app/views/decidim/meetings/meetings/_schema_org_event_meeting.html.erb +3 -0
  69. data/app/views/decidim/meetings/meetings/index.html.erb +1 -2
  70. data/app/views/decidim/meetings/meetings/new.html.erb +0 -1
  71. data/app/views/decidim/meetings/meetings/show.html.erb +5 -5
  72. data/app/views/decidim/meetings/polls/answers/index.html.erb +5 -5
  73. data/app/views/decidim/meetings/shared/_filters.html.erb +1 -13
  74. data/app/views/decidim/meetings/shared/_index.html.erb +1 -1
  75. data/app/views/decidim/meetings/shared/_index.js.erb +3 -2
  76. data/app/views/decidim/meetings/shared/_meetings.html.erb +1 -1
  77. data/app/views/decidim/meetings/shared/_meetings_aside.html.erb +2 -2
  78. data/app/views/decidim/participatory_spaces/_conference_venues.html.erb +1 -1
  79. data/config/locales/ar.yml +23 -17
  80. data/config/locales/bg.yml +16 -25
  81. data/config/locales/ca.yml +142 -32
  82. data/config/locales/cs.yml +139 -31
  83. data/config/locales/de.yml +182 -104
  84. data/config/locales/el.yml +7 -22
  85. data/config/locales/en.yml +132 -22
  86. data/config/locales/es-MX.yml +145 -35
  87. data/config/locales/es-PY.yml +146 -36
  88. data/config/locales/es.yml +146 -36
  89. data/config/locales/eu.yml +181 -71
  90. data/config/locales/fi-plain.yml +138 -28
  91. data/config/locales/fi.yml +137 -27
  92. data/config/locales/fr-CA.yml +80 -29
  93. data/config/locales/fr.yml +80 -29
  94. data/config/locales/ga-IE.yml +0 -13
  95. data/config/locales/gl.yml +6 -12
  96. data/config/locales/hu.yml +9 -21
  97. data/config/locales/id-ID.yml +6 -13
  98. data/config/locales/is-IS.yml +1 -15
  99. data/config/locales/it.yml +7 -19
  100. data/config/locales/ja.yml +94 -26
  101. data/config/locales/lb.yml +6 -16
  102. data/config/locales/lt.yml +8 -24
  103. data/config/locales/lv.yml +6 -13
  104. data/config/locales/nl.yml +9 -19
  105. data/config/locales/no.yml +6 -16
  106. data/config/locales/pl.yml +17 -22
  107. data/config/locales/pt-BR.yml +8 -22
  108. data/config/locales/pt.yml +7 -17
  109. data/config/locales/ro-RO.yml +33 -20
  110. data/config/locales/ru.yml +6 -13
  111. data/config/locales/sk.yml +7 -14
  112. data/config/locales/sv.yml +131 -83
  113. data/config/locales/tr-TR.yml +7 -19
  114. data/config/locales/uk.yml +6 -15
  115. data/config/locales/zh-CN.yml +7 -18
  116. data/config/locales/zh-TW.yml +7 -21
  117. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +1 -1
  118. data/db/migrate/20200827153856_add_commentable_counter_cache_to_meetings.rb +1 -1
  119. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +1 -1
  120. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +1 -1
  121. data/db/migrate/20240712104245_create_decidim_meetings_meeting_link.rb +12 -0
  122. data/db/migrate/20240828103603_add_deleted_at_to_decidim_meetings_meetings.rb +8 -0
  123. data/decidim-meetings.gemspec +1 -1
  124. data/lib/decidim/api/agenda_item_type.rb +6 -7
  125. data/lib/decidim/api/agenda_type.rb +3 -4
  126. data/lib/decidim/api/meeting_type.rb +33 -41
  127. data/lib/decidim/api/meetings_type.rb +4 -5
  128. data/lib/decidim/api/service_type.rb +1 -1
  129. data/lib/decidim/meetings/admin_engine.rb +9 -1
  130. data/lib/decidim/meetings/component.rb +14 -4
  131. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +13 -7
  132. data/lib/decidim/meetings/engine.rb +1 -6
  133. data/lib/decidim/meetings/meeting_serializer.rb +70 -59
  134. data/lib/decidim/meetings/schema_org_event_meeting_serializer.rb +151 -0
  135. data/lib/decidim/meetings/seeds.rb +2 -4
  136. data/lib/decidim/meetings/test/factories.rb +8 -0
  137. data/lib/decidim/meetings/test/translated_event.rb +3 -3
  138. data/lib/decidim/meetings/version.rb +1 -1
  139. data/lib/decidim/meetings.rb +1 -0
  140. metadata +32 -22
  141. data/app/cells/decidim/meetings/meetings_map/show.erb +0 -16
  142. data/app/cells/decidim/meetings/meetings_map_cell.rb +0 -32
  143. data/app/commands/decidim/meetings/admin/destroy_meeting.rb +0 -21
  144. data/app/helpers/decidim/meetings/map_helper.rb +0 -21
  145. data/app/views/decidim/meetings/meetings/_actions.html.erb +0 -6
  146. data/config/locales/ca-IT.yml +0 -693
@@ -24,7 +24,7 @@
24
24
  <%= render "decidim/meetings/admin/poll/answer_option_template", form: question_form, editable: true, template_id: "answer-option-template-dummy" %>
25
25
  <% end %>
26
26
 
27
- <div class="questionnaire-questions-list flex flex-col py-6 gap-6 last:pb-0" data-draggable-table data-sort-url="#" id="questionnaire-questions-list">
27
+ <div class="questionnaire-questions-list flex flex-col py-6 gap-6 last:pb-0">
28
28
  <% @form.questions.each_with_index do |question, index| %>
29
29
  <%= fields_for "questionnaire[questions][]", question do |question_form| %>
30
30
  <%= render "decidim/meetings/admin/poll/question",
@@ -44,35 +44,6 @@
44
44
 
45
45
  <script>
46
46
  document.addEventListener("DOMContentLoaded", function () {
47
- window.Decidim.createEditableForm();
48
-
49
- // Function to initialize the sortable functionality
50
- function initializeSortable() {
51
- const container = document.querySelector("#questionnaire-questions-list");
52
- const questionCards = container?.querySelectorAll(".card.questionnaire-question");
53
-
54
- if (!container || !questionCards?.length) return;
55
-
56
- questionCards.forEach(card => {
57
- card.setAttribute("draggable", "true");
58
- card.setAttribute("role", "option");
59
- card.setAttribute("aria-grabbed", "false");
60
- });
61
-
62
- window.Decidim?.createSortableList?.("#questionnaire-questions-list");
63
- }
64
-
65
- // Initialize on load and when new options such as questions etc are added
66
- initializeSortable();
67
-
68
- const observer = new MutationObserver(() => {
69
- clearTimeout(observer.timer);
70
- observer.timer = setTimeout(initializeSortable, 500);
71
- });
72
-
73
- const container = document.querySelector("#questionnaire-questions-list");
74
- if (container) {
75
- observer.observe(container, { childList: true, subtree: true });
76
- }
77
- });
47
+ window.Decidim.createEditableForm()
48
+ })
78
49
  </script>
@@ -24,6 +24,16 @@
24
24
  </span>
25
25
  </button>
26
26
 
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>
31
+
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>
36
+
27
37
  <% if editable %>
28
38
  <button class="button button__sm button__transparent-secondary small alert remove-question button--title">
29
39
  <%= t("remove", scope: "decidim.forms.admin.questionnaires.question") %>
@@ -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 %>