decidim-meetings 0.29.1 → 0.30.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) 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 +6 -4
  6. data/app/cells/decidim/meetings/dates_and_map_cell.rb +1 -1
  7. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +1 -1
  8. data/app/cells/decidim/meetings/join_meeting_button/show.erb +5 -2
  9. data/app/cells/decidim/meetings/meeting_card_metadata_cell.rb +3 -3
  10. data/app/cells/decidim/meetings/meeting_l_cell.rb +17 -0
  11. data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -2
  12. data/app/commands/decidim/meetings/admin/create_meeting.rb +8 -2
  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 +40 -6
  22. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +1 -1
  23. data/app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb +1 -1
  24. data/app/forms/decidim/meetings/admin/meeting_form.rb +17 -31
  25. data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +2 -2
  26. data/app/forms/decidim/meetings/base_meeting_form.rb +6 -0
  27. data/app/forms/decidim/meetings/meeting_form.rb +2 -30
  28. data/app/helpers/decidim/meetings/admin/application_helper.rb +11 -1
  29. data/app/helpers/decidim/meetings/application_helper.rb +35 -1
  30. data/app/helpers/decidim/meetings/directory/application_helper.rb +9 -48
  31. data/app/helpers/decidim/meetings/meetings_helper.rb +5 -0
  32. data/app/models/decidim/meetings/invite.rb +10 -0
  33. data/app/models/decidim/meetings/meeting.rb +23 -1
  34. data/app/models/decidim/meetings/meeting_link.rb +25 -0
  35. data/app/packs/entrypoints/decidim_meetings_admin.js +1 -0
  36. data/app/packs/src/decidim/meetings/admin/meetings_components_form.js +77 -0
  37. data/app/packs/src/decidim/meetings/admin/meetings_form.js +8 -0
  38. data/app/packs/stylesheets/decidim/meetings/_item.scss +5 -17
  39. data/app/permissions/decidim/meetings/admin/permissions.rb +1 -1
  40. data/app/permissions/decidim/meetings/permissions.rb +20 -11
  41. data/app/presenters/decidim/meetings/admin_log/meeting_presenter.rb +1 -1
  42. data/app/presenters/decidim/meetings/meeting_presenter.rb +14 -6
  43. data/app/queries/decidim/meetings/filtered_meetings.rb +2 -2
  44. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +2 -2
  45. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +6 -6
  46. data/app/serializers/decidim/meetings/base_download_your_data_serializer.rb +32 -0
  47. data/app/serializers/decidim/meetings/download_your_data_invite_serializer.rb +6 -26
  48. data/app/serializers/decidim/meetings/download_your_data_meeting_serializer.rb +15 -0
  49. data/app/serializers/decidim/meetings/download_your_data_registration_serializer.rb +6 -24
  50. data/app/views/decidim/meetings/admin/meetings/_component.html.erb +15 -0
  51. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +7 -9
  52. data/app/views/decidim/meetings/admin/meetings/_linked_spaces.html.erb +53 -0
  53. data/app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb +42 -0
  54. data/app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb +70 -0
  55. data/app/views/decidim/meetings/admin/meetings/_meetings-thead.html.erb +26 -0
  56. data/app/views/decidim/meetings/admin/meetings/index.html.erb +16 -142
  57. data/app/views/decidim/meetings/admin/meetings/manage_trash.html.erb +23 -0
  58. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +44 -0
  59. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +1 -0
  60. data/app/views/decidim/meetings/directory/meetings/index.html.erb +1 -2
  61. data/app/views/decidim/meetings/live_events/show.html.erb +5 -5
  62. data/app/views/decidim/meetings/meetings/_form.html.erb +4 -8
  63. data/app/views/decidim/meetings/meetings/_meeting.html.erb +51 -26
  64. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +34 -0
  65. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +20 -59
  66. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +2 -5
  67. data/app/views/decidim/meetings/meetings/_schema_org_event_meeting.html.erb +3 -0
  68. data/app/views/decidim/meetings/meetings/index.html.erb +10 -2
  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/registration_mailer/confirmation.html.erb +1 -1
  72. data/app/views/decidim/meetings/shared/_filters.html.erb +1 -13
  73. data/app/views/decidim/meetings/shared/_index.html.erb +1 -1
  74. data/app/views/decidim/meetings/shared/_index.js.erb +5 -5
  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 +17 -15
  78. data/config/locales/bg.yml +5 -26
  79. data/config/locales/bn-BD.yml +1 -0
  80. data/config/locales/bs-BA.yml +8 -0
  81. data/config/locales/ca.yml +137 -25
  82. data/config/locales/cs.yml +139 -28
  83. data/config/locales/de.yml +172 -92
  84. data/config/locales/el.yml +1 -20
  85. data/config/locales/en.yml +133 -21
  86. data/config/locales/es-MX.yml +137 -25
  87. data/config/locales/es-PY.yml +137 -25
  88. data/config/locales/es.yml +137 -25
  89. data/config/locales/eu.yml +167 -55
  90. data/config/locales/fi-plain.yml +138 -26
  91. data/config/locales/fi.yml +150 -38
  92. data/config/locales/fr-CA.yml +79 -26
  93. data/config/locales/fr.yml +79 -26
  94. data/config/locales/ga-IE.yml +0 -10
  95. data/config/locales/gl.yml +1 -8
  96. data/config/locales/hu.yml +1 -17
  97. data/config/locales/id-ID.yml +1 -5
  98. data/config/locales/is-IS.yml +0 -4
  99. data/config/locales/it.yml +1 -12
  100. data/config/locales/ja.yml +96 -26
  101. data/config/locales/lb.yml +0 -8
  102. data/config/locales/lt.yml +1 -24
  103. data/config/locales/lv.yml +1 -5
  104. data/config/locales/nl.yml +1 -15
  105. data/config/locales/no.yml +1 -14
  106. data/config/locales/pl.yml +5 -22
  107. data/config/locales/pt-BR.yml +1 -22
  108. data/config/locales/pt.yml +1 -12
  109. data/config/locales/ro-RO.yml +32 -16
  110. data/config/locales/ru.yml +1 -5
  111. data/config/locales/sk.yml +1 -5
  112. data/config/locales/sv.yml +74 -26
  113. data/config/locales/tr-TR.yml +1 -8
  114. data/config/locales/uk.yml +0 -4
  115. data/config/locales/zh-CN.yml +1 -8
  116. data/config/locales/zh-TW.yml +1 -19
  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 +2 -2
  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 +44 -40
  127. data/lib/decidim/api/meetings_type.rb +5 -8
  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 +2 -0
  133. data/lib/decidim/meetings/meeting_serializer.rb +86 -38
  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 +14 -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 +35 -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
@@ -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>
@@ -1,3 +1,12 @@
1
+ <% add_decidim_meta_tags(
2
+ description: translated_attribute(current_component.participatory_space.try(:description)),
3
+ title: t("decidim.components.pagination.page_title",
4
+ component_name: translated_attribute(current_component.name),
5
+ current_page: meetings.current_page,
6
+ total_pages: meetings.total_pages ),
7
+ url: meetings_url,
8
+ resource: current_component) %>
9
+
1
10
  <%= render partial: "decidim/meetings/shared/index", locals: {
2
11
  display_map: Decidim::Map.available?(:geocoding, :dynamic) && current_component.settings.maps_enabled? && search.result.not_online.exists?,
3
12
  display_announcement: true,
@@ -6,8 +15,7 @@
6
15
  filter_options: {
7
16
  date: !@forced_past_meetings,
8
17
  type: true,
9
- scopes: current_component.has_subscopes?,
10
- categories: current_component.categories.any?,
18
+ taxonomies: true,
11
19
  origin: component_settings.creation_enabled_for_participants?,
12
20
  space_type: false,
13
21
  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
  <%
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" %>
@@ -6,5 +6,5 @@
6
6
  <% if @meeting.customize_registration_email? %>
7
7
  <p><%= present(@meeting).registration_email_custom_content %></p>
8
8
  <% end %>
9
-
9
+ <br>
10
10
  <p class="email-instructions"><%= t(".details") %></p>
@@ -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
 
@@ -4,13 +4,13 @@ $meetings.html('<%= j(render partial: "decidim/meetings/shared/meetings", locals
4
4
  var $urlCalendarUrl = $('#urlCalendarUrl');
5
5
  $urlCalendarUrl.val("<%= short_url(route_name: "calendar", params: { filter: params.fetch(:filter, {}).try(:to_unsafe_hash) }) %>");
6
6
 
7
- var meeting_frame = document.getElementById("meeting_frame");
8
- meeting_frame.dataset.filteredPath = "<%= request.fullpath %>"
9
-
10
7
  var $map = $("#map");
11
8
  var controller = $map.data("map-controller");
12
9
  if (controller) {
13
- 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 %>');
14
11
  controller.clearMarkers();
15
- controller.addMarkers(markerData);
12
+
13
+ if (markerData.length > 0) {
14
+ controller.addMarkers(markerData);
15
+ }
16
16
  }
@@ -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,8 +201,6 @@ ar:
205
201
  attachment_collections: المجلدات
206
202
  attachments: مرفقات
207
203
  close: قريب
208
- confirm_destroy: هل أنت متأكد أنك تريد حذف هذا الاجتماع؟
209
- destroy: حذف
210
204
  edit: تعديل
211
205
  invalid_destroy:
212
206
  proposals_count:
@@ -274,10 +268,10 @@ ar:
274
268
  close: قريب
275
269
  title: اجتماع قريب
276
270
  meetings:
271
+ component:
272
+ unlink: إلغاء الربط
277
273
  create:
278
274
  success: تم إنشاء الاجتماع بنجاح. لاحظ أن هذا غير منشور حتى الآن، تحتاج إلى نشره بنفسك.
279
- destroy:
280
- success: تم حذف الاجتماع بنجاح
281
275
  edit:
282
276
  title: تعديل الاجتماعات
283
277
  update: تحديث
@@ -291,7 +285,18 @@ ar:
291
285
  select_a_registration_type: الرجاء تحديد نوع التسجيل
292
286
  select_an_iframe_access_level: الرجاء تحديد مستوى الوصول إلى iframe
293
287
  index:
288
+ linked_meeting_warning_html: يجب تعديل هذا الاجتماع من <br><a href="%{href}">%{name}</a>
294
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: مساحات مربوطة
295
300
  new:
296
301
  create: إنشاء
297
302
  title: إنشاء اجتماع
@@ -351,8 +356,6 @@ ar:
351
356
  questionnaire:
352
357
  update: "قام %{user_name} بتحديث الاستبيان للاجتماع %{meeting_name}"
353
358
  application_helper:
354
- filter_category_values:
355
- all: الكل
356
359
  filter_meeting_space_values:
357
360
  all: الكل
358
361
  calendar_modal:
@@ -455,7 +458,6 @@ ar:
455
458
  location_hints_help: 'توضيح حول الموقع: معلومات إضافية. على سبيل المثال: إدراج طابق المبنى في حال كان الاجتماع شخصيا، أو كلمة مرور الاجتماع إذا كان اجتماعا على الإنترنت يحتوي على تقييد الدخول.'
456
459
  online_meeting_url_help: 'الرابط: السماح للمشاركين بالاتصال مباشرة باجتماعك'
457
460
  registration_url_help: 'الرابط: يتيح للمشاركين استخدام الخدمة الخارجية التي تستخدمها للتسجيل'
458
- select_a_category: يُرجى اختيار فئة
459
461
  select_a_meeting_type: الرجاء تحديد نوع الاجتماع
460
462
  select_a_registration_type: الرجاء تحديد نوع التسجيل
461
463
  select_an_iframe_access_level: الرجاء تحديد مستوى الوصول إلى iframe
@@ -487,6 +489,7 @@ ar:
487
489
  micro_camera_permissions_warning: عند النقر على الزر أدناه، سيتم طلب أذونات الميكروفون و/أو الكاميرا، وسوف تنضم إلى مؤتمر الفيديو
488
490
  no_slots_available: لا فتحات المتاحة
489
491
  organizations: حضور المنظمات
492
+ redirect_notice: هذا الاجتماع جزء من مساحة أخرى، لذلك تم نقلك إلى %{current_space_name}. <br>إذا كنت تفضل، يمكنك العودة إلى <a href="%{previous_space_url}">%{previous_space_name}</a>.
490
493
  registration_code_help_text: رمز التسجيل الخاص بك
491
494
  registration_state:
492
495
  validated: التحقق من صحة
@@ -501,7 +504,6 @@ ar:
501
504
  visit_finished: عرض الاجتماع السابق
502
505
  withdraw_btn_hint: يمكن أن تسحب اجتماعك اذا غيرت رأيك. لا يتم إلغاء الاجتماع بل سيظهر في قائمة الاجتماعات المسحوبة.
503
506
  withdraw_confirmation_html: هل أنت متأكد من أنك تريد سحب هذا الاجتماع؟<br><br><strong>لا يمكن إلغاء هذا الإجراء!</strong>
504
- withdraw_meeting: سحب الاجتماع
505
507
  update:
506
508
  invalid: طرأت مشكلة خلال تحديث الاجتماع.
507
509
  success: لقد قمت بتحديث الاجتماع بنجاح.