decidim-meetings 0.25.2 → 0.26.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/cells/decidim/meetings/content_blocks/highlighted_meetings/heading.erb +1 -1
- data/app/cells/decidim/meetings/content_blocks/highlighted_meetings_cell.rb +1 -1
- data/app/cells/decidim/meetings/content_blocks/{upcoming_events → upcoming_meetings}/show.erb +6 -6
- data/app/cells/decidim/meetings/content_blocks/{upcoming_events_cell.rb → upcoming_meetings_cell.rb} +11 -10
- data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +1 -1
- data/app/cells/decidim/meetings/join_meeting_button_cell.rb +1 -1
- data/app/cells/decidim/meetings/meeting_list_item_cell.rb +10 -0
- data/app/cells/decidim/meetings/meeting_m_cell.rb +48 -0
- data/app/cells/decidim/meetings/meeting_s_cell.rb +22 -0
- data/app/cells/decidim/meetings/meetings_map_cell.rb +6 -0
- data/app/cells/decidim/meetings/online_meeting_cell.rb +23 -8
- data/app/cells/decidim/meetings/online_meeting_link/show.erb +2 -2
- data/app/cells/decidim/meetings/online_meeting_link_cell.rb +1 -5
- data/app/cells/decidim/meetings/public_participants_list_cell.rb +1 -0
- data/app/cells/decidim/meetings/question_responses_cell.rb +1 -1
- data/app/commands/decidim/meetings/admin/create_meeting.rb +11 -1
- data/app/commands/decidim/meetings/admin/publish_meeting.rb +3 -1
- data/app/commands/decidim/meetings/admin/update_meeting.rb +8 -2
- data/app/commands/decidim/meetings/create_meeting.rb +14 -2
- data/app/commands/decidim/meetings/update_meeting.rb +5 -2
- data/app/commands/decidim/meetings/withdraw_meeting.rb +39 -0
- data/app/controllers/concerns/decidim/meetings/filterable.rb +33 -0
- data/app/controllers/decidim/meetings/directory/application_controller.rb +16 -0
- data/app/controllers/decidim/meetings/directory/meetings_controller.rb +31 -20
- data/app/controllers/decidim/meetings/live_events_controller.rb +7 -1
- data/app/controllers/decidim/meetings/meetings_controller.rb +19 -17
- data/app/events/decidim/meetings/close_meeting_event.rb +1 -3
- data/app/events/decidim/meetings/create_meeting_event.rb +2 -4
- data/app/events/decidim/meetings/meeting_event.rb +37 -0
- data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +1 -3
- data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +2 -4
- data/app/events/decidim/meetings/registration_code_validated_event.rb +2 -4
- data/app/events/decidim/meetings/upcoming_meeting_event.rb +1 -3
- data/app/events/decidim/meetings/update_meeting_event.rb +1 -3
- data/app/forms/decidim/meetings/admin/close_meeting_form.rb +1 -1
- data/app/forms/decidim/meetings/admin/meeting_copy_form.rb +4 -13
- data/app/forms/decidim/meetings/admin/meeting_form.rb +34 -46
- data/app/forms/decidim/meetings/base_meeting_form.rb +59 -0
- data/app/forms/decidim/meetings/close_meeting_form.rb +6 -6
- data/app/forms/decidim/meetings/meeting_form.rb +30 -46
- data/app/helpers/decidim/meetings/application_helper.rb +13 -1
- data/app/helpers/decidim/meetings/directory/application_helper.rb +150 -0
- data/app/helpers/decidim/meetings/meeting_cells_helper.rb +4 -1
- data/app/helpers/decidim/meetings/meetings_helper.rb +3 -0
- data/app/models/decidim/meetings/meeting.rb +53 -1
- data/app/packs/src/decidim/meetings/admin/meetings_form.js +27 -11
- data/app/packs/src/decidim/meetings/meetings_form.js +19 -0
- data/app/packs/src/decidim/meetings/meetings_polls.js +31 -26
- data/app/permissions/decidim/meetings/permissions.rb +9 -1
- data/app/presenters/decidim/meetings/meeting_edition_presenter.rb +14 -0
- data/app/presenters/decidim/meetings/meeting_presenter.rb +13 -6
- data/app/services/decidim/meetings/directory/meeting_search.rb +53 -0
- data/app/services/decidim/meetings/meeting_iframe_embedder.rb +1 -1
- data/app/services/decidim/meetings/meeting_search.rb +15 -2
- data/app/views/decidim/meetings/admin/meeting_copies/_form.html.erb +16 -1
- data/app/views/decidim/meetings/admin/meeting_copies/new.html.erb +1 -1
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +15 -3
- data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +34 -0
- data/app/views/decidim/meetings/directory/meetings/index.html.erb +1 -18
- data/app/views/decidim/meetings/meetings/_filters.html.erb +2 -0
- data/app/views/decidim/meetings/meetings/_filters_small_view.html.erb +3 -3
- data/app/views/decidim/meetings/meetings/_form.html.erb +14 -3
- data/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/_meetings.html.erb +18 -0
- data/app/views/decidim/meetings/meetings/index.html.erb +1 -0
- data/app/views/decidim/meetings/meetings/show.html.erb +10 -4
- data/config/locales/ar.yml +2 -7
- data/config/locales/ca.yml +3 -15
- data/config/locales/cs.yml +41 -13
- data/config/locales/de.yml +2 -9
- data/config/locales/el.yml +2 -7
- data/config/locales/en.yml +41 -13
- data/config/locales/es-MX.yml +2 -15
- data/config/locales/es-PY.yml +2 -15
- data/config/locales/es.yml +40 -12
- data/config/locales/eu.yml +19 -15
- data/config/locales/fi-plain.yml +40 -13
- data/config/locales/fi.yml +41 -13
- data/config/locales/fr-CA.yml +32 -15
- data/config/locales/fr.yml +42 -24
- data/config/locales/ga-IE.yml +2 -7
- data/config/locales/gl.yml +28 -7
- data/config/locales/hu.yml +2 -7
- data/config/locales/id-ID.yml +2 -7
- data/config/locales/is-IS.yml +0 -7
- data/config/locales/it.yml +3 -15
- data/config/locales/ja.yml +44 -17
- data/config/locales/lb-LU.yml +210 -0
- data/config/locales/lb.yml +2 -6
- data/config/locales/lv.yml +2 -7
- data/config/locales/nl.yml +33 -9
- data/config/locales/no.yml +2 -9
- data/config/locales/pl.yml +14 -9
- data/config/locales/pt-BR.yml +3 -10
- data/config/locales/pt.yml +2 -15
- data/config/locales/ro-RO.yml +31 -15
- data/config/locales/ru.yml +0 -7
- data/config/locales/sk.yml +2 -7
- data/config/locales/sv.yml +23 -15
- data/config/locales/tr-TR.yml +2 -9
- data/config/locales/uk.yml +0 -9
- data/config/locales/val-ES.yml +1 -0
- data/config/locales/zh-CN.yml +2 -9
- data/db/migrate/20210519133705_add_comments_availability_columns_to_meetings_table.rb +14 -0
- data/db/migrate/20210727085318_add_state_field_to_meeting.rb +7 -0
- data/db/migrate/20210903143040_add_iframe_access_level_to_decidim_meetings.rb +7 -0
- data/db/migrate/20210922140454_transform_show_embedded_iframe_column.rb +15 -0
- data/db/migrate/20210928095036_rename_upcoming_events_content_block_to_upcoming_meetings.rb +13 -0
- data/lib/decidim/api/meeting_type.rb +2 -1
- data/lib/decidim/meetings/component.rb +13 -5
- data/lib/decidim/meetings/directory_engine.rb +3 -3
- data/lib/decidim/meetings/engine.rb +4 -1
- data/lib/decidim/meetings/meeting_serializer.rb +2 -2
- data/lib/decidim/meetings/test/factories.rb +24 -3
- data/lib/decidim/meetings/test/notifications_handling.rb +39 -0
- data/lib/decidim/meetings/test/translated_event.rb +22 -0
- data/lib/decidim/meetings/version.rb +1 -1
- data/lib/decidim/meetings.rb +5 -0
- metadata +36 -19
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
#
|
6
|
+
# Decorator for meetings in users context
|
7
|
+
#
|
8
|
+
class MeetingEditionPresenter < MeetingPresenter
|
9
|
+
def sanitized(content)
|
10
|
+
organization.rich_text_editor_in_public_views? ? decidim_sanitize_editor(content) : decidim_sanitize(content)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -7,6 +7,7 @@ module Decidim
|
|
7
7
|
#
|
8
8
|
class MeetingPresenter < Decidim::ResourcePresenter
|
9
9
|
include Decidim::ResourceHelper
|
10
|
+
include Decidim::SanitizeHelper
|
10
11
|
|
11
12
|
def meeting
|
12
13
|
__getobj__
|
@@ -18,13 +19,15 @@ module Decidim
|
|
18
19
|
super meeting.title, links, html_escape, all_locales
|
19
20
|
end
|
20
21
|
|
21
|
-
def description(links: false, all_locales: false)
|
22
|
+
def description(links: false, extras: true, strip_tags: false, all_locales: false)
|
22
23
|
return unless meeting
|
23
24
|
|
24
|
-
handle_locales(meeting.description, all_locales) do |content|
|
25
|
-
renderer = Decidim::ContentRenderers::HashtagRenderer.new(
|
25
|
+
new_description = handle_locales(meeting.description, all_locales) do |content|
|
26
|
+
renderer = Decidim::ContentRenderers::HashtagRenderer.new(sanitized(content))
|
26
27
|
renderer.render(links: links).html_safe
|
27
28
|
end
|
29
|
+
|
30
|
+
content_handle_locale(new_description, all_locales, extras, links, strip_tags)
|
28
31
|
end
|
29
32
|
|
30
33
|
def location(all_locales: false)
|
@@ -55,7 +58,7 @@ module Decidim
|
|
55
58
|
return unless meeting
|
56
59
|
|
57
60
|
handle_locales(meeting.closing_report, all_locales) do |content|
|
58
|
-
renderer = Decidim::ContentRenderers::HashtagRenderer.new(
|
61
|
+
renderer = Decidim::ContentRenderers::HashtagRenderer.new(sanitized(content))
|
59
62
|
renderer.render(links: links).html_safe
|
60
63
|
end
|
61
64
|
end
|
@@ -64,7 +67,7 @@ module Decidim
|
|
64
67
|
return unless meeting
|
65
68
|
|
66
69
|
handle_locales(meeting.registration_email_custom_content, all_locales) do |content|
|
67
|
-
renderer = Decidim::ContentRenderers::HashtagRenderer.new(
|
70
|
+
renderer = Decidim::ContentRenderers::HashtagRenderer.new(sanitized(content))
|
68
71
|
renderer.render(links: links).html_safe
|
69
72
|
end
|
70
73
|
end
|
@@ -97,7 +100,7 @@ module Decidim
|
|
97
100
|
resource_locator(meeting).path
|
98
101
|
end
|
99
102
|
|
100
|
-
def avatar_url
|
103
|
+
def avatar_url(_variant = nil)
|
101
104
|
ActionController::Base.helpers.asset_pack_path("media/images/decidim_meetings.svg")
|
102
105
|
end
|
103
106
|
|
@@ -125,6 +128,10 @@ module Decidim
|
|
125
128
|
|
126
129
|
proposals.map.with_index { |proposal, index| "#{index + 1}) #{proposal.title}\n" }
|
127
130
|
end
|
131
|
+
|
132
|
+
def sanitized(content)
|
133
|
+
decidim_sanitize_editor(content)
|
134
|
+
end
|
128
135
|
end
|
129
136
|
end
|
130
137
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
module Directory
|
6
|
+
class MeetingSearch < Decidim::Meetings::MeetingSearch
|
7
|
+
text_search_fields :title, :description
|
8
|
+
|
9
|
+
def search_space
|
10
|
+
return query if options[:space].blank? || options[:space] == "all"
|
11
|
+
|
12
|
+
query.joins(:component).where(decidim_components: { participatory_space_type: options[:space].collect(&:classify) })
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# Private: Creates an array of category ids.
|
18
|
+
# It contains categories' subcategories ids as well.
|
19
|
+
def all_category_ids
|
20
|
+
cat_ids = fetch_category_ids
|
21
|
+
|
22
|
+
component.flat_map do |comp|
|
23
|
+
comp
|
24
|
+
.categories
|
25
|
+
.where(id: cat_ids)
|
26
|
+
.or(comp.categories.where(parent_id: cat_ids))
|
27
|
+
.pluck(:id).tap { |ids| ids.prepend(nil) if category_ids.include?("without") }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# take a param list like ["2", "10", "Decidim__Assembly4", "Decidim__Assembly2"]
|
32
|
+
# return a param list like [47, 48, 43, 44, 45, 46, 41, 42, 27, 28, 32, 31, 29, 30, 26, 25]
|
33
|
+
def fetch_category_ids
|
34
|
+
cat_ids = category_ids.without("without")
|
35
|
+
|
36
|
+
additional_ids = cat_ids.select { |a| a =~ /Decidim__/ }
|
37
|
+
|
38
|
+
additional_ids = parse_category_ids(additional_ids)
|
39
|
+
cat_ids.collect(&:to_i).without(0).push(*additional_ids)
|
40
|
+
end
|
41
|
+
|
42
|
+
# this function expects an array of the following format : [ "Decidim__Assembly4", "Decidim__Assembly2"]
|
43
|
+
# It will transform each parameter into an array of class_name and id [["Decidim::Assembly", "4"], ["Decidim::Assembly", "2"]]
|
44
|
+
# After we rebuild the find query and retrun the category_ids for each participatory space
|
45
|
+
def parse_category_ids(additional_ids)
|
46
|
+
additional_ids = additional_ids.map { |a| a.gsub("__", "::").gsub(/(\d+)/, '.\1').split(".") }
|
47
|
+
additional_ids = additional_ids.map { |v| v.first.safe_constantize.send(:find, v.last.to_i).category_ids }
|
48
|
+
additional_ids.flatten
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -13,8 +13,10 @@ module Decidim
|
|
13
13
|
# page - The page number to paginate the results.
|
14
14
|
# per_page - The number of meetings to return per page.
|
15
15
|
def initialize(options = {})
|
16
|
-
scope = options.fetch(:scope, Meeting.published)
|
17
|
-
|
16
|
+
options[:scope] = options.fetch(:scope, Meeting.published)
|
17
|
+
options[:scope] = options[:state] == "withdrawn" ? options[:scope].withdrawn : options[:scope].except_withdrawn
|
18
|
+
options[:scope] = options[:scope].includes(:component, :attachments)
|
19
|
+
super(options[:scope], options)
|
18
20
|
end
|
19
21
|
|
20
22
|
# Handle the date filter
|
@@ -47,6 +49,17 @@ module Decidim
|
|
47
49
|
query
|
48
50
|
end
|
49
51
|
end
|
52
|
+
|
53
|
+
# Handle the state filter
|
54
|
+
def search_state
|
55
|
+
return query.withdrawn if state == "withdrawn"
|
56
|
+
|
57
|
+
query.except_withdrawn
|
58
|
+
end
|
59
|
+
|
60
|
+
def results
|
61
|
+
super.includes(attachments: :file_attachment, component: { participatory_space: :organization })
|
62
|
+
end
|
50
63
|
end
|
51
64
|
end
|
52
65
|
end
|
@@ -13,10 +13,17 @@
|
|
13
13
|
</div>
|
14
14
|
|
15
15
|
<div class="row column">
|
16
|
+
<%= form.select :type_of_meeting,
|
17
|
+
@form.type_of_meeting_select,
|
18
|
+
{ include_blank: t(".select_a_meeting_type") },
|
19
|
+
{ multiple: false } %>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class="row column field" data-meeting-type="in_person">
|
16
23
|
<%= form.geocoding_field :address %>
|
17
24
|
</div>
|
18
25
|
|
19
|
-
<div class="row column">
|
26
|
+
<div class="row column field" data-meeting-type="in_person">
|
20
27
|
<%= form.translated :text_area, :location %>
|
21
28
|
</div>
|
22
29
|
|
@@ -24,6 +31,14 @@
|
|
24
31
|
<%= form.translated :text_area, :location_hints %>
|
25
32
|
</div>
|
26
33
|
|
34
|
+
<div class="row column field" data-meeting-type="online">
|
35
|
+
<%= form.text_field :online_meeting_url %>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div class="row column field" data-meeting-type="online">
|
39
|
+
<%= form.check_box :show_embedded_iframe %>
|
40
|
+
</div>
|
41
|
+
|
27
42
|
<div class="row">
|
28
43
|
<div class="columns xlarge-6">
|
29
44
|
<%= form.datetime_field :start_time %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= decidim_form_for(@form, url: meeting_copies_path(meeting), method: :post, html: { class: "form copy_meetings" }) do |f| %>
|
1
|
+
<%= decidim_form_for(@form, url: meeting_copies_path(meeting), method: :post, html: { class: "form copy_meetings " }) do |f| %>
|
2
2
|
<%= render partial: "form", object: f, locals: { title: t("meeting_copies.new.title", scope: "decidim.admin"), select: t("meeting_copies.new.select", scope: "decidim.admin") } %>
|
3
3
|
|
4
4
|
<div class="button--double form-general-submit">
|
@@ -38,9 +38,20 @@
|
|
38
38
|
<p class="help-text"><%= t(".online_meeting_url_help") %></p>
|
39
39
|
</div>
|
40
40
|
|
41
|
-
<div class="
|
42
|
-
|
43
|
-
|
41
|
+
<div class="iframe-fields">
|
42
|
+
<div class="row column field iframe-fields--embed-type" id="meeting_iframe_embed_type" data-meeting-type="online">
|
43
|
+
<%= form.select :iframe_embed_type,
|
44
|
+
@form.iframe_embed_type_select,
|
45
|
+
{ multiple: false } %>
|
46
|
+
<p class="help-text"><%= t(".show_embedded_iframe_help") %></p>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class="row column field iframe-fields--access-level" data-meeting-type="online-access-level">
|
50
|
+
<%= form.select :iframe_access_level,
|
51
|
+
@form.iframe_access_level_select,
|
52
|
+
{ include_blank: t(".select_an_iframe_access_level") },
|
53
|
+
{ multiple: false } %>
|
54
|
+
</div>
|
44
55
|
</div>
|
45
56
|
|
46
57
|
<div class="row">
|
@@ -99,6 +110,7 @@
|
|
99
110
|
<p class="help-text"><%= t(".registration_email_help") %></p>
|
100
111
|
</div>
|
101
112
|
|
113
|
+
<%= render partial: "decidim/comments/admin/shared/availability_fields", locals: { form: form } %>
|
102
114
|
</div>
|
103
115
|
</div>
|
104
116
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<%= render partial: "decidim/shared/filter_form_help", locals: { skip_to_id: "meetings" } %>
|
2
|
+
|
3
|
+
<%= filter_form_for filter do |form| %>
|
4
|
+
<div class="filters__section">
|
5
|
+
<div class="filters__search">
|
6
|
+
<div class="input-group">
|
7
|
+
<%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t("decidim.meetings.meetings.filters.search"), title: t("decidim.meetings.meetings.filters.search"), "aria-label": t("decidim.meetings.meetings.filters.search"), data: { disable_dynamic_change: true } %>
|
8
|
+
<div class="input-group-button">
|
9
|
+
<button type="submit" class="button" aria-controls="meetings">
|
10
|
+
<%= icon "magnifying-glass", aria_label: t("decidim.meetings.meetings.filters.search"), role: "img" %>
|
11
|
+
</button>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<% unless @forced_past_meetings %>
|
18
|
+
<%= form.check_boxes_tree :date, filter_date_values, legend_title: t("decidim.meetings.meetings.filters.date") %>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<%= form.check_boxes_tree :type, filter_type_values, legend_title: t("decidim.meetings.meetings.filters.type") %>
|
22
|
+
|
23
|
+
<%= form.check_boxes_tree :scope_id, directory_filter_scopes_values, legend_title: t("decidim.meetings.meetings.filters.scope") %>
|
24
|
+
|
25
|
+
<%= form.check_boxes_tree :category_id, directory_filter_categories_values, legend_title: t("decidim.meetings.meetings.filters.category") %>
|
26
|
+
|
27
|
+
<%= form.check_boxes_tree :origin, directory_filter_origin_values, legend_title: t("decidim.meetings.meetings.filters.origin") %>
|
28
|
+
|
29
|
+
<%= form.check_boxes_tree :space, directory_meeting_spaces_values, legend_title: t("decidim.meetings.directory.meetings.index.space_type") %>
|
30
|
+
|
31
|
+
<% if current_user %>
|
32
|
+
<%= form.collection_radio_buttons :activity, activity_filter_values, :first, :last, { legend_title: t("decidim.meetings.meetings.filters.activity") }, "aria-controls": "meetings" %>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
@@ -10,24 +10,7 @@
|
|
10
10
|
|
11
11
|
<div class="columns mediumlarge-4 large-3">
|
12
12
|
<div class="card card--secondary show-for-mediumlarge">
|
13
|
-
|
14
|
-
<%= filter_form_for filter, meetings_directory.root_path do |form| %>
|
15
|
-
<div class="filters__section">
|
16
|
-
<div class="filters__search">
|
17
|
-
<div class="input-group">
|
18
|
-
<%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t(".search"), title: t(".search"), "aria-label": t(".search") %>
|
19
|
-
<div class="input-group-button">
|
20
|
-
<button type="submit" class="button">
|
21
|
-
<%= icon "magnifying-glass", aria_label: t(".search"), role: "img" %>
|
22
|
-
</button>
|
23
|
-
</div>
|
24
|
-
</div>
|
25
|
-
</div>
|
26
|
-
</div>
|
27
|
-
|
28
|
-
<%= form.collection_radio_buttons :date, [["upcoming", t(".upcoming")], ["past", t(".past")]], :first, :last, legend_title: t(".date") %>
|
29
|
-
<%= form.collection_radio_buttons :space, @meeting_spaces, :first, :last, legend_title: t(".space_type") %>
|
30
|
-
<% end %>
|
13
|
+
<%= render partial: "filters" %>
|
31
14
|
</div>
|
32
15
|
</div>
|
33
16
|
<div id="meetings" class="columns mediumlarge-8 large-9">
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<div class="filters-controls hide-for-mediumlarge">
|
2
|
-
<button data-open="filter-box" class="filters-controls__trigger">
|
2
|
+
<button data-open="filter-box" class="filters-controls__trigger" aria-controls="filter-box" aria-haspopup="dialog">
|
3
3
|
<%= t ".filter" %>
|
4
4
|
<%= icon "caret-bottom", class: "icon--small float-right", aria_label: t(".unfold"), role: "img" %>
|
5
5
|
</button>
|
6
6
|
</div>
|
7
7
|
|
8
|
-
<div class="reveal" id="filter-box" data-reveal>
|
8
|
+
<div class="reveal" id="filter-box" data-reveal role="dialog" aria-modal="true" aria-labelledby="filter-box-label">
|
9
9
|
<div class="reveal__header">
|
10
|
-
<h3 class="reveal__title"><%= t ".filter_by" %>:</h3>
|
10
|
+
<h3 id="filter-box-label" class="reveal__title"><%= t ".filter_by" %>:</h3>
|
11
11
|
<button class="close-button" data-close aria-label="<%= t(".close_modal") %>" type="button">
|
12
12
|
<span aria-hidden="true">×</span>
|
13
13
|
</button>
|
@@ -33,9 +33,20 @@
|
|
33
33
|
<p class="help-text"><%= t(".online_meeting_url_help") %></p>
|
34
34
|
</div>
|
35
35
|
|
36
|
-
<div class="
|
37
|
-
|
38
|
-
|
36
|
+
<div class="iframe-fields">
|
37
|
+
<div class="field" data-meeting-type="online">
|
38
|
+
<%= form.select :iframe_embed_type,
|
39
|
+
@form.iframe_embed_type_select,
|
40
|
+
{ multiple: false } %>
|
41
|
+
<p class="help-text"><%= t(".show_embedded_iframe_help") %></p>
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div class="field iframe-fields--access-level" id="meeting_iframe_embed_type" data-meeting-type="online-access-level">
|
45
|
+
<%= form.select :iframe_access_level,
|
46
|
+
@form.iframe_access_level_select,
|
47
|
+
{ include_blank: t(".select_an_iframe_access_level") },
|
48
|
+
{ multiple: false } %>
|
49
|
+
</div>
|
39
50
|
</div>
|
40
51
|
|
41
52
|
<div class="field">
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
|
-
<%=
|
17
|
+
<%= decidim_sanitize_editor(present(meeting).description) %>
|
18
18
|
</div>
|
19
19
|
</div>
|
20
20
|
</div>
|
@@ -1,3 +1,11 @@
|
|
1
|
+
<% if params.dig("filter", "state").present? && params["filter"]["state"] == "withdrawn" %>
|
2
|
+
<div class="callout warning">
|
3
|
+
<%= t("decidim.meetings.meetings.index.text_banner",
|
4
|
+
go_back_link: link_to(t("decidim.meetings.meetings.index.click_here"), meetings_path("filter[state]" => nil)),
|
5
|
+
).html_safe %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
8
|
+
|
1
9
|
<% if @forced_past_meetings %>
|
2
10
|
<div class="callout warning">
|
3
11
|
<%= t ".upcoming_meetings_warning" %>
|
@@ -23,3 +31,13 @@
|
|
23
31
|
<% end %>
|
24
32
|
</div>
|
25
33
|
<%= decidim_paginate meetings, order_start_time: params[:order_start_time], scope_id: params[:scope_id] %>
|
34
|
+
|
35
|
+
<div class="row">
|
36
|
+
<div class="text-right">
|
37
|
+
<% if params.dig("filter", "state").present? && params["filter"]["state"] == "withdrawn" %>
|
38
|
+
<%= link_to t("decidim.meetings.meetings.index.see_all"), meetings_path("filter[state]" => nil) %>
|
39
|
+
<% else %>
|
40
|
+
<%= link_to t("decidim.meetings.meetings.index.see_all_withdrawn"), meetings_path("filter[state]" => "withdrawn") %>
|
41
|
+
<% end %>
|
42
|
+
</div>
|
43
|
+
</div>
|
@@ -37,7 +37,8 @@ edit_link(
|
|
37
37
|
<% end %>
|
38
38
|
|
39
39
|
<% if allowed_to?(:close, :meeting, meeting: meeting) %>
|
40
|
-
|
40
|
+
<% caption = meeting.closed? ? t(".edit_close_meeting") : t(".close_meeting") %>
|
41
|
+
<%= link_to caption, edit_meeting_meeting_close_path(meeting_id: meeting.id, id: meeting.id), class: "button hollow expanded button-sc button--icon follow-button" %>
|
41
42
|
<% end %>
|
42
43
|
|
43
44
|
<div class="card extra">
|
@@ -118,13 +119,18 @@ edit_link(
|
|
118
119
|
<%= t("transparent", scope: "decidim.meetings.types") %>
|
119
120
|
</span>
|
120
121
|
<% end %>
|
121
|
-
|
122
|
+
<% if meeting.withdrawn? %>
|
123
|
+
<span class="<%= meeting_type_badge_css_class("withdraw") %> label proposal-status">
|
124
|
+
<%= t("withdraw", scope: "decidim.meetings.types") %>
|
125
|
+
</span>
|
126
|
+
<% end %>
|
127
|
+
<%= render_meeting_body(@meeting) %>
|
122
128
|
|
123
129
|
<% if meeting.maps_enabled? && !meeting.online_meeting? %>
|
124
130
|
<%= render partial: "decidim/shared/static_map", locals: { icon_name: "meetings", geolocalizable: meeting } %>
|
125
131
|
<% end %>
|
126
132
|
|
127
|
-
<% unless meeting.in_person_meeting? %>
|
133
|
+
<% unless meeting.in_person_meeting? || meeting.withdrawn? %>
|
128
134
|
<%= cell "decidim/meetings/online_meeting_link", meeting %>
|
129
135
|
<% end %>
|
130
136
|
|
@@ -156,7 +162,7 @@ edit_link(
|
|
156
162
|
<% if meeting.closed? && meeting.closing_visible? %>
|
157
163
|
<div class="section">
|
158
164
|
<h3 class="section-heading"><%= t(".meeting_minutes") %></h3>
|
159
|
-
<%=
|
165
|
+
<%= decidim_sanitize_editor translated_attribute meeting.closing_report %>
|
160
166
|
</div>
|
161
167
|
<% end %>
|
162
168
|
|
data/config/locales/ar.yml
CHANGED
@@ -305,17 +305,12 @@ ar:
|
|
305
305
|
export_calendar: تصدير التقويم
|
306
306
|
conference_venues: أماكن المؤتمر
|
307
307
|
content_blocks:
|
308
|
-
|
309
|
-
|
310
|
-
upcoming_events: الاجتماعات القادمة
|
311
|
-
view_all_events: عرض الكل
|
308
|
+
upcoming_meetings:
|
309
|
+
view_all_meetings: عرض الكل
|
312
310
|
directory:
|
313
311
|
meetings:
|
314
312
|
index:
|
315
|
-
all: الكل
|
316
|
-
date: تاريخ
|
317
313
|
meetings: اجتماعات
|
318
|
-
search: بحث
|
319
314
|
space_type: الفضاء التشاركي
|
320
315
|
last_activity:
|
321
316
|
new_meeting_at_html: "<span>اجتماع جديد في %{link}</span>"
|
data/config/locales/ca.yml
CHANGED
@@ -42,10 +42,6 @@ ca:
|
|
42
42
|
type_of_meeting: Tipus
|
43
43
|
errors:
|
44
44
|
models:
|
45
|
-
meeting:
|
46
|
-
attributes:
|
47
|
-
show_embedded_iframe:
|
48
|
-
not_embeddable: Aquest URL no es pot incrustar
|
49
45
|
meeting_agenda:
|
50
46
|
attributes:
|
51
47
|
base:
|
@@ -309,7 +305,6 @@ ca:
|
|
309
305
|
registration_url_help: 'Enllaç: permetre a les participants anar al servei extern que estàs utilitzant per a les inscripcions'
|
310
306
|
select_a_meeting_type: Si us plau selecciona un tipus de trobada
|
311
307
|
select_a_registration_type: Si us plau selecciona un tipus d'inscripció
|
312
|
-
show_embedded_iframe_help: Incrustar o no un iframe per a aquesta URL de videoconferència. Només alguns serveis permeten la incrustació (per exemple, Youtube, Twitch, etc.)
|
313
308
|
index:
|
314
309
|
title: Trobades
|
315
310
|
new:
|
@@ -385,20 +380,13 @@ ca:
|
|
385
380
|
export_calendar: Exporta el calendari
|
386
381
|
conference_venues: Seus de les jornades
|
387
382
|
content_blocks:
|
388
|
-
|
389
|
-
|
390
|
-
upcoming_events: Properes trobades
|
391
|
-
view_all_events: Veure-ho tot
|
383
|
+
upcoming_meetings:
|
384
|
+
view_all_meetings: Veure-ho tot
|
392
385
|
directory:
|
393
386
|
meetings:
|
394
387
|
index:
|
395
|
-
all: Totes
|
396
|
-
date: Data
|
397
388
|
meetings: Trobades
|
398
|
-
past: Passades
|
399
|
-
search: Cerca
|
400
389
|
space_type: Espai participatiu
|
401
|
-
upcoming: Properes
|
402
390
|
last_activity:
|
403
391
|
meeting_updated_at_html: "<span>Trobada actualitzada el %{link}</span>"
|
404
392
|
new_meeting_at_html: "<span>Nova trobada a %{link}</span>"
|
@@ -481,7 +469,6 @@ ca:
|
|
481
469
|
select_a_category: Si us plau, selecciona una categoria
|
482
470
|
select_a_meeting_type: Si us plau selecciona un tipus de trobada
|
483
471
|
select_a_registration_type: Si us plau selecciona un tipus d'inscripció
|
484
|
-
show_embedded_iframe_help: Incrustar o no un iframe per a aquesta URL de videoconferència. Només alguns serveis permeten la incrustació (per exemple, Youtube, Twitch, etc.)
|
485
472
|
index:
|
486
473
|
new_meeting: Nova trobada
|
487
474
|
meeting_minutes:
|
@@ -502,6 +489,7 @@ ca:
|
|
502
489
|
close_meeting: Tancar trobada
|
503
490
|
contributions: Nombre d'aportacions
|
504
491
|
date: Data
|
492
|
+
edit_close_meeting: Editeu l'informe de la reunió
|
505
493
|
edit_meeting: Editar la trobada
|
506
494
|
going: T'has inscrit en aquesta trobada
|
507
495
|
join: Inscriu-te a la trobada
|
data/config/locales/cs.yml
CHANGED
@@ -44,8 +44,8 @@ cs:
|
|
44
44
|
models:
|
45
45
|
meeting:
|
46
46
|
attributes:
|
47
|
-
|
48
|
-
not_embeddable: Tato adresa URL nemůže být vložena
|
47
|
+
iframe_embed_type:
|
48
|
+
not_embeddable: Tato adresa URL nemůže být vložena do stránky schůzky nebo živé události
|
49
49
|
meeting_agenda:
|
50
50
|
attributes:
|
51
51
|
base:
|
@@ -290,6 +290,9 @@ cs:
|
|
290
290
|
edit:
|
291
291
|
close: Zavřít
|
292
292
|
title: Zavřete schůzku
|
293
|
+
meeting_copies:
|
294
|
+
form:
|
295
|
+
select_a_meeting_type: Vyberte prosím typ schůzky
|
293
296
|
meetings:
|
294
297
|
close:
|
295
298
|
invalid: Při setkání došlo k problému
|
@@ -319,7 +322,8 @@ cs:
|
|
319
322
|
registration_url_help: 'Odkaz: umožnit účastníkům jít na externí službu, kterou používáte pro registrace'
|
320
323
|
select_a_meeting_type: Vyberte prosím typ schůzky
|
321
324
|
select_a_registration_type: Vyberte prosím typ registrace
|
322
|
-
|
325
|
+
select_an_iframe_access_level: Vyberte prosím úroveň přístupu iframe
|
326
|
+
show_embedded_iframe_help: Pouze pár služeb umožňuje vložení do schůzky nebo živé události (YouTube, Twitch a Jitsi)
|
323
327
|
index:
|
324
328
|
title: Setkání
|
325
329
|
new:
|
@@ -391,26 +395,37 @@ cs:
|
|
391
395
|
value_types:
|
392
396
|
organizer_presenter:
|
393
397
|
not_found: 'Organizátor nebyl nalezen v databázi (ID: %{id})'
|
398
|
+
application_helper:
|
399
|
+
filter_category_values:
|
400
|
+
all: Vše
|
401
|
+
filter_meeting_space_values:
|
402
|
+
all: Vše
|
403
|
+
filter_scope_values:
|
404
|
+
all: Vše
|
394
405
|
calendar_modal:
|
395
406
|
calendar_url: Adresa URL kalendáře
|
396
407
|
close_window: Zavřete okno
|
397
408
|
export_calendar: Exportovat kalendář
|
398
409
|
conference_venues: Konferenční prostory
|
399
410
|
content_blocks:
|
400
|
-
|
401
|
-
name:
|
402
|
-
|
403
|
-
|
411
|
+
upcoming_meetings:
|
412
|
+
name: Nadcházející schůzky
|
413
|
+
upcoming_meetings: Nadcházející schůzky
|
414
|
+
view_all_meetings: Zobrazit vše
|
404
415
|
directory:
|
405
416
|
meetings:
|
406
417
|
index:
|
407
|
-
all: Vše
|
408
|
-
date: Datum
|
409
418
|
meetings: Setkání
|
410
|
-
past: Minulé
|
411
|
-
search: Vyhledávání
|
412
419
|
space_type: Účastní prostor
|
413
|
-
|
420
|
+
iframe_access_level:
|
421
|
+
all: Všichni návštěvníci
|
422
|
+
registered: Registrovaní účastníci této schůzky
|
423
|
+
signed_in: Pouze přihlášení účastníci
|
424
|
+
iframe_embed_type:
|
425
|
+
embed_in_meeting_page: Vložit do stránky schůzky
|
426
|
+
none: Žádný
|
427
|
+
open_in_live_event_page: Otevřít na stránce živé události (s volitelnými anketami)
|
428
|
+
open_in_new_tab: Otevřít URL v nové kartě
|
414
429
|
last_activity:
|
415
430
|
meeting_updated_at_html: "<span>Schůzka aktualizována na %{link}</span>"
|
416
431
|
new_meeting_at_html: "<span>Nové setkání v %{link}</span>"
|
@@ -495,9 +510,14 @@ cs:
|
|
495
510
|
select_a_category: Vyberte prosím kategorii
|
496
511
|
select_a_meeting_type: Vyberte prosím typ schůzky
|
497
512
|
select_a_registration_type: Vyberte prosím typ registrace
|
498
|
-
|
513
|
+
select_an_iframe_access_level: Vyberte prosím úroveň přístupu iframe
|
514
|
+
show_embedded_iframe_help: Pouze pár služeb umožňuje vložení do schůzky nebo živé události (YouTube, Twitch a Jitsi)
|
499
515
|
index:
|
516
|
+
click_here: Zobrazit všechny schůzky
|
500
517
|
new_meeting: Nová schůzka
|
518
|
+
see_all: Zobrazit všechny schůzky
|
519
|
+
see_all_withdrawn: Zobrazit všechny stažené schůzky
|
520
|
+
text_banner: Zobrazujete seznam schůzek stažených jejich autory. %{go_back_link}.
|
501
521
|
meeting_minutes:
|
502
522
|
related_information: Související informace
|
503
523
|
meetings:
|
@@ -516,6 +536,7 @@ cs:
|
|
516
536
|
close_meeting: Ukončit schůzku
|
517
537
|
contributions: Počet příspěvků
|
518
538
|
date: Datum
|
539
|
+
edit_close_meeting: Upravit zprávu schůzky
|
519
540
|
edit_meeting: Upravit schůzku
|
520
541
|
going: Přihlásili jste se k této schůzce
|
521
542
|
join: Připojte se k setkání
|
@@ -539,6 +560,9 @@ cs:
|
|
539
560
|
other: "%{count} zbývajících bloků"
|
540
561
|
view: Zobrazit
|
541
562
|
visit_finished: Zobrazit minulou schůzku
|
563
|
+
withdraw_btn_hint: Schůzku můžete stáhnout, pokud změníte názor. Schůzka není smazána, objeví se v seznamu stažených schůzek.
|
564
|
+
withdraw_confirmation_html: Opravdu chcete tuto schůzku stáhnout?<br><br><strong>Tuto akci nelze zrušit!</strong>
|
565
|
+
withdraw_meeting: Stažení schůzky
|
542
566
|
update:
|
543
567
|
invalid: Při aktualizaci schůzky došlo k chybě.
|
544
568
|
success: Úspěšně jste aktualizovali schůzku.
|
@@ -618,8 +642,12 @@ cs:
|
|
618
642
|
types:
|
619
643
|
private_meeting: Privátní setkání
|
620
644
|
transparent: Průhledný
|
645
|
+
withdraw: Staženo
|
621
646
|
versions:
|
622
647
|
back_to_resource: Přejít zpět na schůzku
|
648
|
+
withdraw:
|
649
|
+
error: Došlo k chybě při stahování schůzky
|
650
|
+
success: Schůzka byla úspěšně stažena
|
623
651
|
metrics:
|
624
652
|
meetings:
|
625
653
|
description: Počet vytvořených schůzek
|