decidim-core 0.30.0.rc3 → 0.30.0
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/participatory_space_dropdown_metadata/show.erb +5 -3
- data/app/commands/decidim/create_report.rb +1 -6
- data/app/commands/decidim/search.rb +14 -0
- data/app/controllers/decidim/reports_controller.rb +1 -1
- data/app/forms/decidim/account_form.rb +4 -1
- data/app/mailers/decidim/reported_mailer.rb +1 -0
- data/app/models/decidim/action_log.rb +1 -9
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
- data/app/packs/src/decidim/index.js +4 -2
- data/app/packs/stylesheets/decidim/_content_blocks.scss +4 -0
- data/app/packs/stylesheets/decidim/_header.scss +6 -2
- data/app/presenters/decidim/log/user_presenter.rb +1 -0
- data/app/presenters/decidim/user_presenter.rb +1 -1
- data/app/services/decidim/base_diff_renderer.rb +2 -0
- data/app/views/decidim/reported_mailer/hide.html.erb +17 -1
- data/app/views/decidim/reported_mailer/report.html.erb +1 -1
- data/app/views/decidim/searches/_count.html.erb +1 -1
- data/app/views/decidim/searches/_filters.html.erb +40 -38
- data/app/views/layouts/decidim/footer/_main_legal.html.erb +1 -1
- data/config/locales/ar.yml +3 -3
- data/config/locales/bg.yml +2 -2
- data/config/locales/bs-BA.yml +2 -0
- data/config/locales/ca-IT.yml +2400 -0
- data/config/locales/ca.yml +24 -2
- data/config/locales/cs.yml +10 -2
- data/config/locales/de.yml +13 -4
- data/config/locales/el.yml +2 -2
- data/config/locales/en.yml +22 -0
- data/config/locales/es-MX.yml +25 -3
- data/config/locales/es-PY.yml +25 -3
- data/config/locales/es.yml +23 -1
- data/config/locales/eu.yml +52 -31
- data/config/locales/fi-plain.yml +4 -3
- data/config/locales/fi.yml +4 -3
- data/config/locales/fr-CA.yml +16 -4
- data/config/locales/fr.yml +15 -3
- data/config/locales/ga-IE.yml +2 -0
- data/config/locales/gl.yml +3 -1
- data/config/locales/hu.yml +2 -2
- data/config/locales/id-ID.yml +2 -2
- data/config/locales/it.yml +12 -6
- data/config/locales/ja.yml +71 -9
- data/config/locales/lb.yml +5 -3
- data/config/locales/lv.yml +2 -2
- data/config/locales/nl.yml +2 -0
- data/config/locales/no.yml +2 -0
- data/config/locales/pl.yml +2 -2
- data/config/locales/pt-BR.yml +3 -3
- data/config/locales/pt.yml +2 -0
- data/config/locales/ro-RO.yml +172 -0
- data/config/locales/sk.yml +2 -2
- data/config/locales/sr-CS.yml +2 -0
- data/config/locales/sv.yml +19 -1
- data/config/locales/tr-TR.yml +3 -3
- data/config/locales/zh-CN.yml +2 -2
- data/config/locales/zh-TW.yml +2 -0
- data/lib/decidim/asset_router/storage.rb +7 -2
- data/lib/decidim/attributes/time_with_zone.rb +5 -1
- data/lib/decidim/content_parsers/blob_parser.rb +10 -8
- data/lib/decidim/core/test/shared_examples/reports_examples.rb +8 -15
- data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +26 -0
- data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +26 -0
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/moderation_tools.rb +14 -8
- data/lib/decidim/participatory_space_user.rb +1 -3
- data/lib/decidim/reportable.rb +6 -2
- data/lib/decidim/translatable_attributes.rb +5 -1
- data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +3 -3
- metadata +7 -7
- data/lib/tasks/upgrade/clean_hidden_resources.rake +0 -33
@@ -20,19 +20,19 @@ module Decidim
|
|
20
20
|
# https://github.com/rails/rails/blob/a7e379896552ce43b822385c03c37f2bd47739d3/activestorage/config/routes.rb#L5-L14
|
21
21
|
BLOB_REGEX = %r{
|
22
22
|
# Group 1: Host part
|
23
|
-
(
|
23
|
+
(?<host_part>
|
24
24
|
# Group 2: Domain and subpath part
|
25
|
-
|
25
|
+
#{URI::DEFAULT_PARSER.make_regexp(%w(https http))}
|
26
26
|
)?
|
27
27
|
/rails/active_storage
|
28
28
|
# Group 3: Blob path, representation path or disk service path
|
29
|
-
/(blobs/redirect|blobs/proxy|blobs|representations/redirect|representations/proxy|representations|disk)
|
29
|
+
/(?<type_part>blobs/redirect|blobs/proxy|blobs|representations/redirect|representations/proxy|representations|disk)
|
30
30
|
# Group 4: Signed ID for blobs or encoded key for disk service
|
31
|
-
/([^/]+)
|
31
|
+
/(?<key_part>[^/]+)
|
32
32
|
# Group 5: Variation part (only for representations)
|
33
33
|
(
|
34
34
|
# Group 6: Variation key for representations
|
35
|
-
/([\w.=-]+)
|
35
|
+
/(?<variation_part>[\w.=-]+)
|
36
36
|
)?
|
37
37
|
# Group 7: Filename
|
38
38
|
/([\w.=-]+)
|
@@ -46,8 +46,10 @@ module Decidim
|
|
46
46
|
|
47
47
|
def replace_blobs(text)
|
48
48
|
text.gsub(BLOB_REGEX) do |match|
|
49
|
-
|
50
|
-
|
49
|
+
named_captures = Regexp.last_match.named_captures
|
50
|
+
|
51
|
+
type_part = named_captures["type_part"]
|
52
|
+
key_part = named_captures["key_part"]
|
51
53
|
|
52
54
|
variation_key = nil
|
53
55
|
blob =
|
@@ -59,7 +61,7 @@ module Decidim
|
|
59
61
|
# Representation or blob
|
60
62
|
if type_part.start_with?("representations")
|
61
63
|
# Representation
|
62
|
-
variation_part =
|
64
|
+
variation_part = named_captures["variation_part"]
|
63
65
|
variation_key = generate_variation_key(variation_part)
|
64
66
|
end
|
65
67
|
|
@@ -33,13 +33,6 @@ shared_examples "higher user role hides" do
|
|
33
33
|
before do
|
34
34
|
login_as user, scope: :user
|
35
35
|
end
|
36
|
-
around do |example|
|
37
|
-
previous = Capybara.raise_server_errors
|
38
|
-
|
39
|
-
Capybara.raise_server_errors = false
|
40
|
-
example.run
|
41
|
-
Capybara.raise_server_errors = previous
|
42
|
-
end
|
43
36
|
|
44
37
|
it "reports the resource" do
|
45
38
|
visit reportable_path
|
@@ -54,6 +47,10 @@ shared_examples "higher user role hides" do
|
|
54
47
|
click_on "Hide"
|
55
48
|
end
|
56
49
|
|
50
|
+
sleep(1)
|
51
|
+
|
52
|
+
expect(page).to have_current_path(reportable_index_path, ignore_query: true)
|
53
|
+
|
57
54
|
expect(reportable.reload).to be_hidden
|
58
55
|
end
|
59
56
|
end
|
@@ -67,14 +64,6 @@ shared_examples "higher user role hides resource with comments" do
|
|
67
64
|
login_as user, scope: :user
|
68
65
|
Decidim::Ai::SpamDetection.create_reporting_user!
|
69
66
|
end
|
70
|
-
around do |example|
|
71
|
-
previous = Capybara.raise_server_errors
|
72
|
-
|
73
|
-
# Disabling server errors to that we can test page not found error.
|
74
|
-
Capybara.raise_server_errors = false
|
75
|
-
example.run
|
76
|
-
Capybara.raise_server_errors = previous
|
77
|
-
end
|
78
67
|
|
79
68
|
it "hides the resource" do
|
80
69
|
visit decidim.search_path
|
@@ -96,6 +85,10 @@ shared_examples "higher user role hides resource with comments" do
|
|
96
85
|
click_on "Hide"
|
97
86
|
end
|
98
87
|
|
88
|
+
sleep(1)
|
89
|
+
|
90
|
+
expect(page).to have_current_path(reportable_index_path, ignore_query: true)
|
91
|
+
|
99
92
|
perform_enqueued_jobs
|
100
93
|
|
101
94
|
expect(reportable.reload).to be_hidden
|
@@ -8,6 +8,7 @@ shared_examples "an uncommentable component" do
|
|
8
8
|
manifest:,
|
9
9
|
participatory_space:)
|
10
10
|
end
|
11
|
+
let!(:comment) { create(:comment, commentable: resources.first) }
|
11
12
|
|
12
13
|
it "does not displays comments count" do
|
13
14
|
component.update!(settings: { comments_enabled: false })
|
@@ -18,4 +19,29 @@ shared_examples "an uncommentable component" do
|
|
18
19
|
expect(page).to have_no_link(resource_locator(resource).path)
|
19
20
|
end
|
20
21
|
end
|
22
|
+
|
23
|
+
describe "when search a comment in the global search" do
|
24
|
+
it "does displays the comments" do
|
25
|
+
visit decidim.root_path
|
26
|
+
|
27
|
+
within ".main-bar__search" do
|
28
|
+
fill_in "term", with: comment.body["en"]
|
29
|
+
find("input#input-search").native.send_keys :enter
|
30
|
+
end
|
31
|
+
|
32
|
+
expect(page).to have_content("1 Results for the search")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "does not displays the comment when comments are disable" do
|
36
|
+
component.update!(settings: { comments_enabled: false })
|
37
|
+
visit decidim.root_path
|
38
|
+
|
39
|
+
within ".main-bar__search" do
|
40
|
+
fill_in "term", with: comment.body["en"]
|
41
|
+
find("input#input-search").native.send_keys :enter
|
42
|
+
end
|
43
|
+
|
44
|
+
expect(page).to have_content("0 Results for the search")
|
45
|
+
end
|
46
|
+
end
|
21
47
|
end
|
@@ -2,6 +2,32 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
+
shared_examples "a version of a hidden object" do
|
6
|
+
before do
|
7
|
+
visit resource_path
|
8
|
+
click_on "see other versions"
|
9
|
+
click_on("Version 1 of #{hidden_object.reload.versions.size}")
|
10
|
+
end
|
11
|
+
|
12
|
+
around do |example|
|
13
|
+
previous = Capybara.raise_server_errors
|
14
|
+
|
15
|
+
Capybara.raise_server_errors = false
|
16
|
+
example.run
|
17
|
+
Capybara.raise_server_errors = previous
|
18
|
+
end
|
19
|
+
|
20
|
+
it "shows an error page" do
|
21
|
+
expect(page).to have_content("Changes at")
|
22
|
+
|
23
|
+
create(:moderation, reportable: hidden_object, hidden_at: 1.day.ago)
|
24
|
+
|
25
|
+
visit current_path
|
26
|
+
|
27
|
+
expect(page).to have_content(ActiveRecord::RecordNotFound)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
5
31
|
shared_examples "versions controller" do
|
6
32
|
let(:base_params) do
|
7
33
|
if resource.is_a?(Decidim::Participable)
|
data/lib/decidim/core/version.rb
CHANGED
@@ -60,15 +60,21 @@ module Decidim
|
|
60
60
|
def send_notification_to_author
|
61
61
|
return if affected_users.blank?
|
62
62
|
|
63
|
-
data =
|
64
|
-
|
65
|
-
|
63
|
+
data = if @reportable.moderation.reports.last&.reason == "parent_hidden"
|
64
|
+
{ event: "decidim.events.reports.parent_hidden", event_class: Decidim::ParentHiddenEvent }
|
65
|
+
else
|
66
|
+
{ event: "decidim.events.reports.resource_hidden", event_class: Decidim::ResourceHiddenEvent }
|
67
|
+
end
|
68
|
+
|
69
|
+
data.merge!(
|
66
70
|
resource: @reportable,
|
67
71
|
extra: {
|
68
|
-
report_reasons
|
72
|
+
report_reasons:,
|
73
|
+
force_email: true
|
69
74
|
},
|
70
|
-
affected_users
|
71
|
-
|
75
|
+
affected_users:,
|
76
|
+
force_send: true
|
77
|
+
)
|
72
78
|
|
73
79
|
Decidim::EventsManager.publish(**data)
|
74
80
|
end
|
@@ -95,7 +101,7 @@ module Decidim
|
|
95
101
|
|
96
102
|
if @reportable.is_a?(Decidim::Comments::Commentable)
|
97
103
|
@reportable.comment_threads.each do |comment|
|
98
|
-
Decidim::HideChildResourcesJob.perform_later(comment,
|
104
|
+
Decidim::HideChildResourcesJob.perform_later(comment, current_user.id)
|
99
105
|
end
|
100
106
|
end
|
101
107
|
|
@@ -109,7 +115,7 @@ module Decidim
|
|
109
115
|
end
|
110
116
|
|
111
117
|
def report_reasons
|
112
|
-
@reportable.moderation.reports.
|
118
|
+
[@reportable.moderation.reports.last&.reason]
|
113
119
|
end
|
114
120
|
end
|
115
121
|
end
|
@@ -37,9 +37,7 @@ module Decidim
|
|
37
37
|
raise "Not implemented"
|
38
38
|
end
|
39
39
|
|
40
|
-
def self.ransackable_attributes(
|
41
|
-
return [] unless auth_object&.admin?
|
42
|
-
|
40
|
+
def self.ransackable_attributes(_auth_object = nil)
|
43
41
|
%w(name nickname email invitation_accepted_at last_sign_in_at role)
|
44
42
|
end
|
45
43
|
|
data/lib/decidim/reportable.rb
CHANGED
@@ -53,8 +53,12 @@ module Decidim
|
|
53
53
|
# Public: The reported content url
|
54
54
|
#
|
55
55
|
# Returns String
|
56
|
-
def reported_content_url
|
57
|
-
|
56
|
+
def reported_content_url(options = {})
|
57
|
+
if hidden?
|
58
|
+
ResourceLocatorPresenter.new(self).index(options)
|
59
|
+
else
|
60
|
+
ResourceLocatorPresenter.new(self).url(options)
|
61
|
+
end
|
58
62
|
end
|
59
63
|
|
60
64
|
# Public: The collection of attribute names that are considered
|
@@ -62,7 +62,7 @@ module Decidim
|
|
62
62
|
final = super(value)
|
63
63
|
return unless final # Do not set the `nil` values for the parent hash
|
64
64
|
|
65
|
-
final = value_type.serialize(final) if value_type
|
65
|
+
final = value_type.serialize(final) if value_type && !attachment?(final)
|
66
66
|
|
67
67
|
public_send("#{name}=", field.merge(locale => final))
|
68
68
|
end
|
@@ -127,5 +127,9 @@ module Decidim
|
|
127
127
|
locale.to_s == try(:default_locale).to_s ||
|
128
128
|
locale.to_s == try(:current_organization).try(:default_locale).to_s
|
129
129
|
end
|
130
|
+
|
131
|
+
def attachment?(value)
|
132
|
+
value.is_a?(String) && value.include?(ActiveStorage.routes_prefix)
|
133
|
+
end
|
130
134
|
end
|
131
135
|
end
|
@@ -7,7 +7,7 @@ namespace :decidim do
|
|
7
7
|
logger.info("Fixing user nicknames case...")
|
8
8
|
|
9
9
|
has_changed = []
|
10
|
-
Decidim::
|
10
|
+
Decidim::UserBaseEntity.not_deleted.find_each do |user|
|
11
11
|
user.nickname.downcase!
|
12
12
|
|
13
13
|
begin
|
@@ -15,11 +15,11 @@ namespace :decidim do
|
|
15
15
|
user.save!
|
16
16
|
has_changed << user.id
|
17
17
|
end
|
18
|
-
rescue ActiveRecord::RecordInvalid
|
18
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
|
19
19
|
update_user_nickname(user, Decidim::UserBaseEntity.nicknamize(user.nickname, organization: user.organization))
|
20
20
|
has_changed << user.id
|
21
21
|
rescue ActiveRecord::RecordInvalid # rubocop:disable Lint/DuplicateRescueException
|
22
|
-
logger.warn("User ID (#{
|
22
|
+
logger.warn("User ID (#{user.id}) : #{e}")
|
23
23
|
end
|
24
24
|
end
|
25
25
|
logger.info("Process terminated, #{has_changed.count} users nickname have been updated.")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.30.0
|
4
|
+
version: 0.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josep Jaume Rey Peroy
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2025-
|
13
|
+
date: 2025-04-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: concurrent-ruby
|
@@ -780,28 +780,28 @@ dependencies:
|
|
780
780
|
requirements:
|
781
781
|
- - '='
|
782
782
|
- !ruby/object:Gem::Version
|
783
|
-
version: 0.30.0
|
783
|
+
version: 0.30.0
|
784
784
|
type: :development
|
785
785
|
prerelease: false
|
786
786
|
version_requirements: !ruby/object:Gem::Requirement
|
787
787
|
requirements:
|
788
788
|
- - '='
|
789
789
|
- !ruby/object:Gem::Version
|
790
|
-
version: 0.30.0
|
790
|
+
version: 0.30.0
|
791
791
|
- !ruby/object:Gem::Dependency
|
792
792
|
name: decidim-dev
|
793
793
|
requirement: !ruby/object:Gem::Requirement
|
794
794
|
requirements:
|
795
795
|
- - '='
|
796
796
|
- !ruby/object:Gem::Version
|
797
|
-
version: 0.30.0
|
797
|
+
version: 0.30.0
|
798
798
|
type: :development
|
799
799
|
prerelease: false
|
800
800
|
version_requirements: !ruby/object:Gem::Requirement
|
801
801
|
requirements:
|
802
802
|
- - '='
|
803
803
|
- !ruby/object:Gem::Version
|
804
|
-
version: 0.30.0
|
804
|
+
version: 0.30.0
|
805
805
|
description: Adds core features so other engines can hook into the framework.
|
806
806
|
email:
|
807
807
|
- josepjaume@gmail.com
|
@@ -2199,6 +2199,7 @@ files:
|
|
2199
2199
|
- config/locales/bg.yml
|
2200
2200
|
- config/locales/bn-BD.yml
|
2201
2201
|
- config/locales/bs-BA.yml
|
2202
|
+
- config/locales/ca-IT.yml
|
2202
2203
|
- config/locales/ca.yml
|
2203
2204
|
- config/locales/cs-CZ.yml
|
2204
2205
|
- config/locales/cs.yml
|
@@ -3079,7 +3080,6 @@ files:
|
|
3079
3080
|
- lib/tasks/decidim_taxonomies.rake
|
3080
3081
|
- lib/tasks/decidim_webpacker_tasks.rake
|
3081
3082
|
- lib/tasks/upgrade/clean.rake
|
3082
|
-
- lib/tasks/upgrade/clean_hidden_resources.rake
|
3083
3083
|
- lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake
|
3084
3084
|
- lib/tasks/upgrade/decidim_attachments.rake
|
3085
3085
|
- lib/tasks/upgrade/decidim_content_blocks_tasks.rake
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
namespace :decidim do
|
4
|
-
namespace :upgrade do
|
5
|
-
namespace :clean do
|
6
|
-
desc "Removes all related resources from hidden resource"
|
7
|
-
task hidden_resources: :environment do
|
8
|
-
logger.info("Removing child resources for hidden parents...")
|
9
|
-
Decidim::Moderation.hidden.find_each do |moderation_for_hidden_resource|
|
10
|
-
reportable = moderation_for_hidden_resource.reportable
|
11
|
-
|
12
|
-
current_user = if Decidim.module_installed?(:ai)
|
13
|
-
reportable.organization.users.find_by!(email: Decidim::Ai::SpamDetection.reporting_user_email)
|
14
|
-
else
|
15
|
-
reportable.organization.admins.first
|
16
|
-
end
|
17
|
-
|
18
|
-
tool = Decidim::ModerationTools.new(reportable, current_user)
|
19
|
-
tool.hide!
|
20
|
-
rescue NameError => e
|
21
|
-
log_error "Could not hide child resources for reportable id #{moderation_for_hidden_resource.id} because: #{e.message}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def log_error(msg)
|
28
|
-
puts msg
|
29
|
-
Rails.logger.error(msg)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|