decidim-core 0.28.0 → 0.28.1
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.
- checksums.yaml +4 -4
- data/app/cells/decidim/activity_cell.rb +2 -2
- data/app/cells/decidim/address/online.erb +27 -9
- data/app/cells/decidim/address/show.erb +27 -12
- data/app/cells/decidim/address_cell.rb +29 -0
- data/app/cells/decidim/authorization_modal/show.erb +8 -4
- data/app/cells/decidim/authorization_modal_cell.rb +1 -0
- data/app/cells/decidim/card_metadata_cell.rb +3 -3
- data/app/cells/decidim/coauthorships_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/menu_breadcrumb_last_activity_cell.rb +6 -0
- data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +20 -4
- data/app/cells/decidim/content_blocks/participatory_space_hero_settings_form/show.erb +8 -0
- data/app/cells/decidim/content_blocks/participatory_space_hero_settings_form_cell.rb +13 -0
- data/app/cells/decidim/content_blocks/participatory_space_metadata_cell.rb +1 -1
- data/app/cells/decidim/footer_pages_cell.rb +3 -3
- data/app/cells/decidim/profile/tabs.erb +3 -2
- data/app/cells/decidim/tags_cell.rb +3 -1
- data/app/cells/decidim/upload_modal/modal.erb +2 -2
- data/app/commands/decidim/create_omniauth_registration.rb +1 -3
- data/app/commands/decidim/messaging/reply_to_conversation.rb +3 -0
- data/app/commands/decidim/messaging/start_conversation.rb +3 -0
- data/app/controllers/concerns/decidim/devise_authentication_methods.rb +36 -0
- data/app/controllers/concerns/decidim/paginable.rb +1 -1
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +1 -22
- data/app/controllers/decidim/devise/sessions_controller.rb +1 -24
- data/app/events/decidim/welcome_notification_event.rb +6 -9
- data/app/helpers/decidim/application_helper.rb +0 -18
- data/app/helpers/decidim/cells_paginate_helper.rb +1 -1
- data/app/helpers/decidim/check_boxes_tree_helper.rb +6 -6
- data/app/helpers/decidim/layout_helper.rb +1 -1
- data/app/helpers/decidim/map_helper.rb +1 -1
- data/app/helpers/decidim/menu_helper.rb +2 -0
- data/app/helpers/decidim/newsletters_helper.rb +83 -16
- data/app/helpers/decidim/paginate_helper.rb +1 -1
- data/app/helpers/decidim/sanitize_helper.rb +9 -0
- data/app/helpers/decidim/social_share_button_helper.rb +1 -1
- data/app/helpers/decidim/user_profile_helper.rb +7 -2
- data/app/mailers/decidim/messaging/conversation_mailer.rb +3 -72
- data/app/models/decidim/push_notification_message.rb +38 -0
- data/app/packs/entrypoints/decidim_overrides.scss +2 -0
- data/app/packs/images/decidim/.keep +0 -0
- data/app/packs/src/decidim/a11y.js +1 -1
- data/app/packs/src/decidim/account_form.js +1 -1
- data/app/packs/src/decidim/data_consent/consent_manager.test.js +1 -1
- data/app/packs/src/decidim/data_consent/index.js +1 -1
- data/app/packs/src/decidim/direct_uploads/upload_field.js +1 -1
- data/app/packs/src/decidim/direct_uploads/upload_modal.js +10 -6
- data/app/packs/src/decidim/editor/extensions/hashtag/index.js +1 -1
- data/app/packs/src/decidim/editor/extensions/mention/index.js +1 -1
- data/app/packs/src/decidim/editor/extensions/video_embed/index.js +3 -0
- data/app/packs/src/decidim/editor/test/editor/create.test.js +1 -1
- data/app/packs/src/decidim/editor/test/extensions/bold.test.js +2 -3
- data/app/packs/src/decidim/editor/test/extensions/character_count.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +2 -3
- data/app/packs/src/decidim/editor/test/extensions/dialog.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/emoji.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/hashtag.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/heading.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/image.test.js +4 -4
- data/app/packs/src/decidim/editor/test/extensions/indent.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/link.test.js +3 -3
- data/app/packs/src/decidim/editor/test/extensions/mention.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/ordered_list.test.js +2 -2
- data/app/packs/src/decidim/editor/test/extensions/video_embed.test.js +3 -3
- data/app/packs/src/decidim/editor/test/helpers.js +5 -4
- data/app/packs/src/decidim/editor/test/toolbar/basic.test.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/content.test.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/full.test.js +3 -3
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic.js +6 -6
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_block.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_formatting.js +1 -1
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_indent.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_link.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_list.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_styling.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_content.js +7 -7
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_content_styling.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/context.js +1 -1
- data/app/packs/src/decidim/editor/test/utilities/paste_transform.test.js +2 -2
- data/app/packs/src/decidim/external_domain_warning.js +13 -0
- data/app/packs/src/decidim/external_domain_warning.test.js +1 -1
- data/app/packs/src/decidim/external_link.js +48 -9
- data/app/packs/src/decidim/external_link.test.js +1 -1
- data/app/packs/src/decidim/focus_guard.js +8 -20
- data/app/packs/src/decidim/form_filter.component_for_testing.js +1 -1
- data/app/packs/src/decidim/form_filter.js +3 -3
- data/app/packs/src/decidim/geocoding/attach_input.js +1 -1
- data/app/packs/src/decidim/i18n.test.js +1 -1
- data/app/packs/src/decidim/index.js +4 -1
- data/app/packs/src/decidim/input_hashtags.js +1 -1
- data/app/packs/src/decidim/input_mentions.js +1 -1
- data/app/packs/src/decidim/input_multiple_mentions.js +1 -1
- data/app/packs/src/decidim/sw/index.js +3 -3
- data/app/packs/src/decidim/user_registrations.js +1 -1
- data/app/packs/src/decidim/vizzs/index.js +1 -1
- data/app/packs/stylesheets/decidim/_cards.scss +2 -2
- data/app/packs/stylesheets/decidim/_dropdown.scss +2 -2
- data/app/packs/stylesheets/decidim/_layout.scss +4 -4
- data/app/packs/stylesheets/decidim/application.scss +0 -3
- data/app/packs/stylesheets/decidim/decidim_application.scss +4 -0
- data/app/packs/stylesheets/decidim/legacy/leaflet.scss +88 -107
- data/app/presenters/decidim/admin_log/oauth_application_resource_presenter.rb +1 -1
- data/app/presenters/decidim/log/diff_presenter.rb +1 -1
- data/app/presenters/decidim/notification_to_mailer_presenter.rb +9 -0
- data/app/services/decidim/events_manager.rb +6 -0
- data/app/services/decidim/iframe_disabler.rb +4 -0
- data/app/services/decidim/push_notification_message_sender.rb +40 -0
- data/app/services/decidim/send_push_notification.rb +22 -8
- data/app/uploaders/decidim/background_image_uploader.rb +11 -0
- data/app/views/decidim/application/_collection.html.erb +2 -2
- data/app/views/decidim/application/_document.html.erb +1 -1
- data/app/views/decidim/devise/registrations/new.html.erb +2 -2
- data/app/views/decidim/notifications_digest_mailer/_email_content.html.erb +7 -0
- data/app/views/decidim/offline/show.html.erb +15 -9
- data/app/views/layouts/decidim/_head.html.erb +1 -0
- data/app/views/layouts/decidim/_js_configuration.html.erb +3 -1
- data/app/views/layouts/decidim/footer/_main_social_media_links.html.erb +5 -5
- data/app/views/layouts/decidim/footer/_mini.html.erb +2 -2
- data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
- data/config/assets.rb +1 -0
- data/config/locales/ar.yml +63 -7
- data/config/locales/bg.yml +32 -2
- data/config/locales/ca.yml +29 -24
- data/config/locales/cs.yml +6 -2
- data/config/locales/de.yml +34 -29
- data/config/locales/el.yml +3 -6
- data/config/locales/en.yml +7 -2
- data/config/locales/es-MX.yml +9 -4
- data/config/locales/es-PY.yml +9 -4
- data/config/locales/es.yml +27 -22
- data/config/locales/eu.yml +22 -8
- data/config/locales/fi-plain.yml +8 -3
- data/config/locales/fi.yml +10 -5
- data/config/locales/fr-CA.yml +12 -7
- data/config/locales/fr.yml +12 -7
- data/config/locales/ga-IE.yml +1 -0
- data/config/locales/gl.yml +4 -2
- data/config/locales/he-IL.yml +1 -0
- data/config/locales/hu.yml +264 -7
- data/config/locales/id-ID.yml +0 -2
- data/config/locales/it.yml +2 -5
- data/config/locales/ja.yml +11 -6
- data/config/locales/lb.yml +2 -5
- data/config/locales/lt.yml +0 -10
- data/config/locales/lv.yml +0 -2
- data/config/locales/nl.yml +1 -2
- data/config/locales/no.yml +2 -5
- data/config/locales/pl.yml +581 -2
- data/config/locales/pt-BR.yml +202 -18
- data/config/locales/pt.yml +2 -5
- data/config/locales/ro-RO.yml +2 -5
- data/config/locales/ru.yml +7 -2
- data/config/locales/sk.yml +0 -2
- data/config/locales/sv.yml +24 -5
- data/config/locales/tr-TR.yml +3 -5
- data/config/locales/uk.yml +12 -2
- data/config/locales/zh-CN.yml +0 -5
- data/config/locales/zh-TW.yml +2 -10
- data/decidim-core.gemspec +90 -0
- data/lib/decidim/asset_router/storage.rb +2 -0
- data/lib/decidim/attribute_encryptor.rb +6 -4
- data/lib/decidim/attributes/time_with_zone.rb +1 -1
- data/lib/decidim/core/engine.rb +7 -6
- data/lib/decidim/core/seeds.rb +36 -32
- data/lib/decidim/core/test/factories.rb +296 -89
- data/lib/decidim/core/test/shared_examples/amendable/amendment_created_event_examples.rb +6 -26
- data/lib/decidim/core/test/shared_examples/amendable/amendment_promoted_event_examples.rb +8 -26
- data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +8 -6
- data/lib/decidim/core/test/shared_examples/has_attachments.rb +8 -8
- data/lib/decidim/core/test/shared_examples/has_category.rb +27 -0
- data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
- data/lib/decidim/core/test/shared_examples/has_space_in_mcell_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/map_examples.rb +3 -0
- data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +5 -2
- data/lib/decidim/core/test/shared_examples/resource_locator_presenter_examples.rb +134 -0
- data/lib/decidim/core/test/shared_examples/simple_event.rb +18 -2
- data/lib/decidim/core/test.rb +1 -0
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/core.rb +1 -0
- data/lib/decidim/engine_router.rb +17 -4
- data/lib/decidim/events/base_event.rb +3 -3
- data/lib/decidim/events/simple_event.rb +3 -17
- data/lib/decidim/form_builder.rb +8 -2
- data/lib/decidim/has_category.rb +1 -1
- data/lib/decidim/has_conversations.rb +91 -0
- data/lib/decidim/participable.rb +17 -0
- data/lib/decidim/upgrade/wysiwyg_migrator.rb +7 -0
- data/lib/decidim/view_model.rb +1 -0
- data/lib/decidim/webpacker/webpack/.modernizrrc +9 -0
- data/lib/premailer/adapter/decidim.rb +5 -4
- data/lib/tasks/decidim_reminders_tasks.rake +1 -0
- data/lib/tasks/upgrade/decidim_fix_categorization.rake +15 -0
- metadata +27 -30
- data/app/views/decidim/searches/index.js.erb +0 -7
- data/config/brakeman.ignore +0 -37
- data/config/environment.rb +0 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 800e096eb86537caa7de18236fe0becf73b1c30ee38e4631888025b52e831f3a
|
|
4
|
+
data.tar.gz: 9f05dfffcd55fcc9d4e76163a4b98c5b7e851bbdbcfe317f9a9566cb73a142d9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 97568f03aab3b39a4b75e98421a5b9e43f30f8f1c71b548478f0ee2f73c6303981643948289f9483d9cfbe71af47b872bf3e3c49d39009270e9e3ef72e55bf70
|
|
7
|
+
data.tar.gz: 8fa7ecb28d0d2e8097124330aced622ac52fc96d6cc8d6039e629c897d29af8f79366e8992107a9d8b89c88280c723b667b345ccbc643d2326303f376abd243a
|
|
@@ -1,9 +1,27 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
<ul>
|
|
2
|
+
<li class="mb-4">
|
|
3
|
+
<div class="address__container">
|
|
4
|
+
<%= icon "map-pin-line" %>
|
|
5
|
+
<div class="address">
|
|
6
|
+
<div class="address__location"><%= t(model.type_of_meeting, scope: "decidim.meetings.meetings.filters.type_values") %></div>
|
|
7
|
+
<% if display_online_meeting_url? %>
|
|
8
|
+
<a href="<%= model.online_meeting_url %>" target="_blank" rel="noopener noreferrer" class="address__hints underline break-all">
|
|
9
|
+
<%= model.online_meeting_url %>
|
|
10
|
+
<% end %>
|
|
11
|
+
</a>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</li>
|
|
15
|
+
<% if display_start_and_end_time? %>
|
|
16
|
+
<li>
|
|
17
|
+
<div class="address__container">
|
|
18
|
+
<%= icon "time-line" %>
|
|
19
|
+
<div class="address">
|
|
20
|
+
<div class="address__location">
|
|
21
|
+
<%= start_and_end_time %>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</li>
|
|
26
|
+
<% end %>
|
|
27
|
+
</ul>
|
|
@@ -1,14 +1,29 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<div class="
|
|
6
|
-
|
|
1
|
+
<ul>
|
|
2
|
+
<li class="mb-4">
|
|
3
|
+
<div class="address__container">
|
|
4
|
+
<%= icon "map-pin-line" %>
|
|
5
|
+
<div class="address">
|
|
6
|
+
<% if has_location? %>
|
|
7
|
+
<div class="address__location"><%= location %></div>
|
|
8
|
+
<% end %>
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
<div class="address__address"><%= address %></div>
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
</div>
|
|
12
|
+
<% if has_location_hints? %>
|
|
13
|
+
<div class="address__hints"><%= location_hints %></div>
|
|
14
|
+
<% end %>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</li>
|
|
18
|
+
<% if display_start_and_end_time? %>
|
|
19
|
+
<li>
|
|
20
|
+
<div class="address__container">
|
|
21
|
+
<%= icon "time-line" %>
|
|
22
|
+
<div class="address">
|
|
23
|
+
<div class="address__location">
|
|
24
|
+
<%= start_and_end_time %>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</li>
|
|
28
|
+
<% end %>
|
|
29
|
+
</ul>
|
|
@@ -32,5 +32,34 @@ module Decidim
|
|
|
32
32
|
def address
|
|
33
33
|
decidim_sanitize(translated_attribute(model.address))
|
|
34
34
|
end
|
|
35
|
+
|
|
36
|
+
def display_start_and_end_time?
|
|
37
|
+
model.respond_to?(:start_time) && model.respond_to?(:end_time)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def start_and_end_time
|
|
41
|
+
<<~HTML
|
|
42
|
+
#{with_tooltip(l(model.start_time, format: :tooltip)) { start_time }}
|
|
43
|
+
-
|
|
44
|
+
#{with_tooltip(l(model.end_time, format: :tooltip)) { end_time }}
|
|
45
|
+
HTML
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def display_online_meeting_url?
|
|
49
|
+
return true unless model.respond_to?(:online?)
|
|
50
|
+
return true unless model.respond_to?(:iframe_access_level_allowed_for_user?)
|
|
51
|
+
|
|
52
|
+
model.online? && model.iframe_access_level_allowed_for_user?(current_user)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def start_time
|
|
58
|
+
l model.start_time, format: "%H:%M %p"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def end_time
|
|
62
|
+
l model.end_time, format: "%H:%M %p %Z"
|
|
63
|
+
end
|
|
35
64
|
end
|
|
36
65
|
end
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
<% add_decidim_page_title(title) %>
|
|
2
|
+
|
|
3
|
+
<main data-dialog-container class="text-center mt-8">
|
|
4
|
+
<div class="flex justify-center">
|
|
5
|
+
<%= icon "lock-line", class: "w-20 h-20" %>
|
|
6
|
+
</div>
|
|
7
|
+
<h1 tabindex="-1" class="h1" data-dialog-title><%= title %></h1>
|
|
4
8
|
<div>
|
|
5
9
|
<div class="authorization-modal__verification-container">
|
|
6
10
|
<% verifications.each do |verification| %>
|
|
@@ -25,4 +29,4 @@
|
|
|
25
29
|
<% end %>
|
|
26
30
|
</div>
|
|
27
31
|
</div>
|
|
28
|
-
</
|
|
32
|
+
</main>
|
|
@@ -75,7 +75,7 @@ module Decidim
|
|
|
75
75
|
|
|
76
76
|
{
|
|
77
77
|
cell: "decidim/coauthorships",
|
|
78
|
-
args: [resource, { stack: true }]
|
|
78
|
+
args: [resource, { stack: true, context_actions: [] }]
|
|
79
79
|
}
|
|
80
80
|
end
|
|
81
81
|
|
|
@@ -105,11 +105,11 @@ module Decidim
|
|
|
105
105
|
}
|
|
106
106
|
end
|
|
107
107
|
|
|
108
|
-
def
|
|
108
|
+
def start_date_item
|
|
109
109
|
return if dates_blank?
|
|
110
110
|
|
|
111
111
|
{
|
|
112
|
-
text:
|
|
112
|
+
text: I18n.l(start_date, format: "%H:%M %p %Z"),
|
|
113
113
|
icon: "time-line"
|
|
114
114
|
}
|
|
115
115
|
end
|
|
@@ -5,6 +5,12 @@ module Decidim
|
|
|
5
5
|
# A cell to be rendered as a content block with the latest activities performed
|
|
6
6
|
# in a Decidim Organization.
|
|
7
7
|
class MenuBreadcrumbLastActivityCell < LastActivityCell
|
|
8
|
+
def show
|
|
9
|
+
return if current_user.blank? && current_organization&.force_users_to_authenticate_before_access_organization
|
|
10
|
+
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
8
14
|
private
|
|
9
15
|
|
|
10
16
|
def activities
|
|
@@ -7,19 +7,35 @@ module Decidim
|
|
|
7
7
|
include Decidim::TranslationsHelper
|
|
8
8
|
include Decidim::TwitterSearchHelper
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
delegate :title, :hashtag, :attached_uploader, to: :resource
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
def cta_text
|
|
13
|
+
return unless model
|
|
14
|
+
|
|
15
|
+
@cta_text ||= translated_attribute(model.settings.button_text).presence
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def cta_path
|
|
19
|
+
return unless model
|
|
20
|
+
|
|
21
|
+
@cta_path ||= translated_attribute(model.settings.button_url).presence
|
|
22
|
+
end
|
|
13
23
|
|
|
14
24
|
def title_text
|
|
15
|
-
|
|
25
|
+
decidim_escape_translated(title)
|
|
16
26
|
end
|
|
17
27
|
|
|
18
28
|
def subtitle_text
|
|
19
|
-
|
|
29
|
+
return unless resource.respond_to?(:subtitle)
|
|
30
|
+
|
|
31
|
+
decidim_escape_translated(resource.subtitle)
|
|
20
32
|
end
|
|
21
33
|
|
|
34
|
+
# If it is called from the landing page content block, use the background image defined there
|
|
35
|
+
# Else, use the banner image defined in the space (for assemblies)
|
|
22
36
|
def image_path
|
|
37
|
+
return model.images_container.attached_uploader(:background_image).path if model.respond_to?(:images_container)
|
|
38
|
+
|
|
23
39
|
attached_uploader(:banner_image).path
|
|
24
40
|
end
|
|
25
41
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<% form.fields_for :settings, form.object.settings do |settings_fields| %>
|
|
2
|
+
<%= settings_fields.translated :text_field, :button_text, label: t("decidim.content_blocks.cta_settings_form.button_text") %>
|
|
3
|
+
<%= settings_fields.translated :text_field, :button_url, label: t("decidim.content_blocks.cta_settings_form.button_url") %>
|
|
4
|
+
<% end %>
|
|
5
|
+
|
|
6
|
+
<% form.fields_for :images, form.object.images do |images_fields| %>
|
|
7
|
+
<%= images_fields.upload :background_image, label: t("decidim.content_blocks.cta_settings_form.background_image") %>
|
|
8
|
+
<% end %>
|
|
@@ -11,7 +11,7 @@ module Decidim
|
|
|
11
11
|
|
|
12
12
|
def metadata_valued_items
|
|
13
13
|
metadata_items.filter_map do |item|
|
|
14
|
-
next if (value =
|
|
14
|
+
next if (value = decidim_escape_translated(presented_space.send(item))).blank?
|
|
15
15
|
|
|
16
16
|
{
|
|
17
17
|
title: t(item, scope: translations_scope),
|
|
@@ -42,7 +42,7 @@ module Decidim
|
|
|
42
42
|
.static_pages_accessible_for(current_user)
|
|
43
43
|
.where(show_in_footer: true, topic_id: nil)
|
|
44
44
|
.where.not(slug: "terms-and-conditions").map do |page|
|
|
45
|
-
{ title:
|
|
45
|
+
{ title: decidim_escape_translated(page.title), path: decidim.page_path(page) }
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -51,9 +51,9 @@ module Decidim
|
|
|
51
51
|
next if (topic_pages = topic.accessible_pages_for(current_user).where(show_in_footer: true)).blank?
|
|
52
52
|
|
|
53
53
|
{
|
|
54
|
-
title:
|
|
54
|
+
title: decidim_escape_translated(topic.title),
|
|
55
55
|
pages: topic_pages.map do |page|
|
|
56
|
-
{ title:
|
|
56
|
+
{ title: decidim_escape_translated(page.title), path: decidim.page_path(page) }
|
|
57
57
|
end
|
|
58
58
|
}
|
|
59
59
|
end.compact
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<% tab_items.each do |tab_item| %>
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
<% active_link = is_active_link?(tab_item[:path]) %>
|
|
3
|
+
<li class="profile__tab<%= " is-active" if active_link %>">
|
|
4
|
+
<%= link_to tab_item[:path], title: tab_item[:text], class: "profile__tab-item", aria: { current: active_link ? "page" : nil } do %>
|
|
4
5
|
<%= icon tab_item[:icon] %>
|
|
5
6
|
<span><%= tab_item[:text] %></span>
|
|
6
7
|
<% if tab_item[:count].present? %>
|
|
@@ -9,6 +9,8 @@ module Decidim
|
|
|
9
9
|
# <%= cell("decidim/category", model.category, context: {resource: model}) %>
|
|
10
10
|
#
|
|
11
11
|
class TagsCell < Decidim::ViewModel
|
|
12
|
+
include Decidim::SanitizeHelper
|
|
13
|
+
|
|
12
14
|
def show
|
|
13
15
|
render if category? || scope?
|
|
14
16
|
end
|
|
@@ -69,7 +71,7 @@ module Decidim
|
|
|
69
71
|
end
|
|
70
72
|
|
|
71
73
|
def category_name
|
|
72
|
-
model.category.translated_name
|
|
74
|
+
decidim_html_escape model.category.translated_name
|
|
73
75
|
end
|
|
74
76
|
|
|
75
77
|
def category_path
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
<%= icon "upload-cloud-2-line", class: "w-8 h-8 text-gray fill-current" %>
|
|
38
38
|
<%= t("decidim.forms.upload_help.dropzone") %>
|
|
39
39
|
</span>
|
|
40
|
-
<
|
|
40
|
+
<button class="button button__sm button__secondary" data-select-file-button>
|
|
41
41
|
<span><%= t("decidim.forms.upload.select_file") %></span>
|
|
42
42
|
<%= icon "arrow-right-line", class: "fill-current" %>
|
|
43
|
-
</
|
|
43
|
+
</button>
|
|
44
44
|
</div>
|
|
45
45
|
</div>
|
|
46
46
|
</div>
|
|
@@ -57,13 +57,11 @@ module Decidim
|
|
|
57
57
|
# to be marked confirmed.
|
|
58
58
|
@user.skip_confirmation! if !@user.confirmed? && @user.email == verified_email
|
|
59
59
|
else
|
|
60
|
-
generated_password = SecureRandom.hex
|
|
61
|
-
|
|
62
60
|
@user.email = (verified_email || form.email)
|
|
63
61
|
@user.name = form.name
|
|
64
62
|
@user.nickname = form.normalized_nickname
|
|
65
63
|
@user.newsletter_notifications_at = nil
|
|
66
|
-
@user.password =
|
|
64
|
+
@user.password = SecureRandom.hex
|
|
67
65
|
if form.avatar_url.present?
|
|
68
66
|
url = URI.parse(form.avatar_url)
|
|
69
67
|
filename = File.basename(url.path)
|
|
@@ -54,11 +54,13 @@ module Decidim
|
|
|
54
54
|
notify(manager) do
|
|
55
55
|
ConversationMailer.new_group_message(sender, manager, conversation, message, recipient).deliver_later
|
|
56
56
|
end
|
|
57
|
+
Decidim::PushNotificationMessageSender.new.new_group_message(sender, manager, conversation, message, recipient).deliver
|
|
57
58
|
end
|
|
58
59
|
else
|
|
59
60
|
notify(recipient) do
|
|
60
61
|
ConversationMailer.new_message(sender, recipient, conversation, message).deliver_later
|
|
61
62
|
end
|
|
63
|
+
Decidim::PushNotificationMessageSender.new.new_message(sender, recipient, conversation, message).deliver
|
|
62
64
|
end
|
|
63
65
|
end
|
|
64
66
|
end
|
|
@@ -68,6 +70,7 @@ module Decidim
|
|
|
68
70
|
notify(recipient) do
|
|
69
71
|
ConversationMailer.comanagers_new_message(sender, recipient, conversation, message, form.context.current_user).deliver_later
|
|
70
72
|
end
|
|
73
|
+
Decidim::PushNotificationMessageSender.new.comanagers_new_message(sender, recipient, conversation, message, form.context.current_user).deliver
|
|
71
74
|
end
|
|
72
75
|
end
|
|
73
76
|
|
|
@@ -54,11 +54,13 @@ module Decidim
|
|
|
54
54
|
notify(manager) do
|
|
55
55
|
ConversationMailer.new_group_conversation(originator, manager, conversation, recipient).deliver_later
|
|
56
56
|
end
|
|
57
|
+
Decidim::PushNotificationMessageSender.new.new_group_conversation(originator, manager, conversation, recipient).deliver
|
|
57
58
|
end
|
|
58
59
|
else
|
|
59
60
|
notify(recipient) do
|
|
60
61
|
ConversationMailer.new_conversation(originator, recipient, conversation).deliver_later
|
|
61
62
|
end
|
|
63
|
+
Decidim::PushNotificationMessageSender.new.new_conversation(originator, recipient, conversation).deliver
|
|
62
64
|
end
|
|
63
65
|
end
|
|
64
66
|
end
|
|
@@ -68,6 +70,7 @@ module Decidim
|
|
|
68
70
|
notify(recipient) do
|
|
69
71
|
ConversationMailer.comanagers_new_conversation(originator, recipient, conversation, form.context.current_user).deliver_later
|
|
70
72
|
end
|
|
73
|
+
Decidim::PushNotificationMessageSender.new.comanagers_new_conversation(originator, recipient, conversation, form.context.current_user).deliver
|
|
71
74
|
end
|
|
72
75
|
end
|
|
73
76
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
|
|
5
|
+
module Decidim
|
|
6
|
+
module DeviseAuthenticationMethods
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
include Decidim::UserBlockedChecker
|
|
9
|
+
|
|
10
|
+
included do
|
|
11
|
+
def after_sign_in_path_for(user)
|
|
12
|
+
if user.present? && user.blocked?
|
|
13
|
+
check_user_block_status(user)
|
|
14
|
+
elsif user.needs_password_update?
|
|
15
|
+
change_password_path
|
|
16
|
+
elsif first_login_and_not_authorized?(user) && !user.admin? && !pending_redirect?(user)
|
|
17
|
+
decidim_verifications.first_login_authorizations_path
|
|
18
|
+
else
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Calling the `stored_location_for` method removes the key, so in order
|
|
24
|
+
# to check if there is any pending redirect after login I need to call
|
|
25
|
+
# this method and use the value to set a pending redirect. This is the
|
|
26
|
+
# only way to do this without checking the session directly.
|
|
27
|
+
def pending_redirect?(user)
|
|
28
|
+
store_location_for(user, stored_location_for(user))
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def first_login_and_not_authorized?(user)
|
|
32
|
+
user.is_a?(User) && user.sign_in_count == 1 && current_organization.available_authorizations.any? && user.verifiable?
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -6,6 +6,7 @@ module Decidim
|
|
|
6
6
|
class OmniauthRegistrationsController < ::Devise::OmniauthCallbacksController
|
|
7
7
|
include FormFactory
|
|
8
8
|
include Decidim::DeviseControllers
|
|
9
|
+
include Decidim::DeviseAuthenticationMethods
|
|
9
10
|
|
|
10
11
|
def new
|
|
11
12
|
@form = form(OmniauthRegistrationForm).from_params(params[:user])
|
|
@@ -45,28 +46,6 @@ module Decidim
|
|
|
45
46
|
end
|
|
46
47
|
end
|
|
47
48
|
|
|
48
|
-
def after_sign_in_path_for(user)
|
|
49
|
-
if user.present? && user.blocked?
|
|
50
|
-
check_user_block_status(user)
|
|
51
|
-
elsif !pending_redirect?(user) && first_login_and_not_authorized?(user)
|
|
52
|
-
decidim_verifications.authorizations_path
|
|
53
|
-
else
|
|
54
|
-
super
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Calling the `stored_location_for` method removes the key, so in order
|
|
59
|
-
# to check if there is any pending redirect after login I need to call
|
|
60
|
-
# this method and use the value to set a pending redirect. This is the
|
|
61
|
-
# only way to do this without checking the session directly.
|
|
62
|
-
def pending_redirect?(user)
|
|
63
|
-
store_location_for(user, stored_location_for(user))
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def first_login_and_not_authorized?(user)
|
|
67
|
-
user.is_a?(User) && user.sign_in_count == 1 && Decidim::Verifications.workflows.any? && user.verifiable?
|
|
68
|
-
end
|
|
69
|
-
|
|
70
49
|
def action_missing(action_name)
|
|
71
50
|
return send(:create) if devise_mapping.omniauthable? && current_organization.enabled_omniauth_providers.keys.include?(action_name.to_sym)
|
|
72
51
|
|
|
@@ -5,6 +5,7 @@ module Decidim
|
|
|
5
5
|
# Custom Devise SessionsController to avoid namespace problems.
|
|
6
6
|
class SessionsController < ::Devise::SessionsController
|
|
7
7
|
include Decidim::DeviseControllers
|
|
8
|
+
include Decidim::DeviseAuthenticationMethods
|
|
8
9
|
|
|
9
10
|
before_action :check_sign_in_enabled, only: :create
|
|
10
11
|
|
|
@@ -35,30 +36,6 @@ module Decidim
|
|
|
35
36
|
end
|
|
36
37
|
end
|
|
37
38
|
|
|
38
|
-
def after_sign_in_path_for(user)
|
|
39
|
-
if user.present? && user.blocked?
|
|
40
|
-
check_user_block_status(user)
|
|
41
|
-
elsif user.needs_password_update?
|
|
42
|
-
change_password_path
|
|
43
|
-
elsif first_login_and_not_authorized?(user) && !user.admin? && !pending_redirect?(user)
|
|
44
|
-
decidim_verifications.first_login_authorizations_path
|
|
45
|
-
else
|
|
46
|
-
super
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Calling the `stored_location_for` method removes the key, so in order
|
|
51
|
-
# to check if there is any pending redirect after login I need to call
|
|
52
|
-
# this method and use the value to set a pending redirect. This is the
|
|
53
|
-
# only way to do this without checking the session directly.
|
|
54
|
-
def pending_redirect?(user)
|
|
55
|
-
store_location_for(user, stored_location_for(user))
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def first_login_and_not_authorized?(user)
|
|
59
|
-
user.is_a?(User) && user.sign_in_count == 1 && current_organization.available_authorizations.any? && user.verifiable?
|
|
60
|
-
end
|
|
61
|
-
|
|
62
39
|
def after_sign_out_path_for(user)
|
|
63
40
|
request.referer || super
|
|
64
41
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "mustache"
|
|
4
|
-
|
|
5
3
|
module Decidim
|
|
6
4
|
class WelcomeNotificationEvent < Decidim::Events::BaseEvent
|
|
7
5
|
include Decidim::Events::EmailEvent
|
|
@@ -46,13 +44,12 @@ module Decidim
|
|
|
46
44
|
private
|
|
47
45
|
|
|
48
46
|
def interpolate(template)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
organization
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
).html_safe
|
|
47
|
+
template
|
|
48
|
+
.gsub("{{name}}", user.name)
|
|
49
|
+
.gsub("{{organization}}", organization.name)
|
|
50
|
+
.gsub("{{help_url}}", url_helpers.pages_url(host: organization.host))
|
|
51
|
+
.gsub("{{badges_url}}", url_helpers.gamification_badges_url(host: organization.host))
|
|
52
|
+
.html_safe
|
|
56
53
|
end
|
|
57
54
|
end
|
|
58
55
|
end
|
|
@@ -102,24 +102,6 @@ module Decidim
|
|
|
102
102
|
super(name, model, options, &)
|
|
103
103
|
end
|
|
104
104
|
|
|
105
|
-
# Public: Builds the URL for the step Call To Action. Takes URL params
|
|
106
|
-
# into account.
|
|
107
|
-
#
|
|
108
|
-
# process - a ParticipatoryProcess
|
|
109
|
-
#
|
|
110
|
-
# Returns a String that can be used as a URL.
|
|
111
|
-
def step_cta_url(process)
|
|
112
|
-
return unless respond_to?(:decidim_participatory_processes)
|
|
113
|
-
|
|
114
|
-
base_url, params = decidim_participatory_processes.participatory_process_path(process).split("?")
|
|
115
|
-
|
|
116
|
-
if params.present?
|
|
117
|
-
[base_url, "/", process.active_step.cta_path, "?", params].join
|
|
118
|
-
else
|
|
119
|
-
[base_url, "/", process.active_step.cta_path].join
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
105
|
def prevent_timeout_seconds
|
|
124
106
|
0
|
|
125
107
|
end
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This helper include some methods for rendering a checkboxes tree input.
|
|
5
5
|
module CheckBoxesTreeHelper
|
|
6
|
+
include SanitizeHelper
|
|
7
|
+
|
|
6
8
|
# This method returns a hash with the options for the checkbox and its label
|
|
7
9
|
# used in filters that uses checkboxes trees
|
|
8
10
|
def check_boxes_tree_options(value, label, **options)
|
|
@@ -49,23 +51,21 @@ module Decidim
|
|
|
49
51
|
end
|
|
50
52
|
|
|
51
53
|
def filter_categories_values
|
|
52
|
-
organization = current_participatory_space.organization
|
|
53
|
-
|
|
54
54
|
sorted_main_categories = current_participatory_space.categories.first_class.includes(:subcategories).sort_by do |category|
|
|
55
|
-
[category.weight,
|
|
55
|
+
[category.weight, decidim_escape_translated(category.name)]
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
categories_values = sorted_main_categories.flat_map do |category|
|
|
59
59
|
sorted_descendant_categories = category.descendants.includes(:subcategories).sort_by do |subcategory|
|
|
60
|
-
[subcategory.weight,
|
|
60
|
+
[subcategory.weight, decidim_escape_translated(subcategory.name)]
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
subcategories = sorted_descendant_categories.flat_map do |subcategory|
|
|
64
|
-
TreePoint.new(subcategory.id.to_s,
|
|
64
|
+
TreePoint.new(subcategory.id.to_s, decidim_escape_translated(subcategory.name))
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
TreeNode.new(
|
|
68
|
-
TreePoint.new(category.id.to_s,
|
|
68
|
+
TreePoint.new(category.id.to_s, decidim_escape_translated(category.name)),
|
|
69
69
|
subcategories
|
|
70
70
|
)
|
|
71
71
|
end
|
|
@@ -62,7 +62,7 @@ module Decidim
|
|
|
62
62
|
href = Decidim.cors_enabled ? "" : asset_pack_path("media/images/remixicon.symbol.svg")
|
|
63
63
|
|
|
64
64
|
content_tag :svg, html_properties do
|
|
65
|
-
content_tag :use, nil, "href" => "#{href}#ri-#{name}"
|
|
65
|
+
content_tag :use, nil, "href" => "#{href}#ri-#{name}"
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|