decidim-core 0.30.0.rc2 → 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/amendable/amendments/show.erb +1 -1
- data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +5 -3
- data/app/cells/decidim/profile_actions/show.erb +1 -1
- data/app/cells/decidim/report_button/already_reported_modal.erb +2 -2
- data/app/cells/decidim/report_button/flag_modal.erb +13 -27
- data/app/cells/decidim/report_button_cell.rb +2 -8
- data/app/cells/decidim/report_user_button/already_reported_modal.erb +11 -0
- data/app/cells/decidim/report_user_button/flag_modal.erb +46 -0
- data/app/cells/decidim/report_user_button/show.erb +2 -0
- data/app/cells/decidim/report_user_button_cell.rb +59 -0
- data/app/cells/decidim/resource_types_filter/show.erb +1 -1
- data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
- data/app/cells/decidim/user_activity/show.erb +1 -1
- data/app/commands/decidim/create_omniauth_registration.rb +14 -8
- data/app/commands/decidim/create_report.rb +1 -6
- data/app/commands/decidim/search.rb +14 -0
- data/app/controllers/decidim/profiles_controller.rb +2 -2
- data/app/controllers/decidim/reports_controller.rb +1 -1
- data/app/controllers/decidim/user_activities_controller.rb +1 -1
- data/app/forms/decidim/account_form.rb +5 -2
- data/app/jobs/decidim/hide_child_resources_job.rb +3 -3
- data/app/jobs/decidim/migrate/paper_trail_job.rb +33 -0
- data/app/mailers/decidim/reported_mailer.rb +1 -0
- data/app/models/decidim/action_log.rb +1 -9
- data/app/models/decidim/user.rb +0 -4
- data/app/models/decidim/user_base_entity.rb +4 -0
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
- data/app/packs/src/decidim/index.js +4 -2
- data/app/packs/src/decidim/sticky_footer.js +19 -0
- data/app/packs/stylesheets/decidim/_cards.scss +4 -0
- data/app/packs/stylesheets/decidim/_content_blocks.scss +5 -1
- data/app/packs/stylesheets/decidim/_header.scss +6 -2
- data/app/packs/stylesheets/decidim/_login.scss +4 -0
- data/app/packs/stylesheets/decidim/_modal_authorization.scss +1 -1
- data/app/packs/stylesheets/decidim/_profile.scss +1 -1
- data/app/presenters/decidim/log/user_presenter.rb +1 -0
- data/app/presenters/decidim/user_presenter.rb +1 -1
- data/app/resolvers/decidim/meta_image_url_resolver.rb +1 -0
- data/app/services/decidim/base_diff_renderer.rb +2 -0
- data/app/services/decidim/static_map_generator.rb +1 -1
- data/app/views/decidim/devise/registrations/new.html.erb +1 -1
- data/app/views/decidim/devise/sessions/new.html.erb +1 -1
- data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +1 -1
- data/app/views/decidim/last_activities/index.html.erb +1 -1
- data/app/views/decidim/open_data/index.html.erb +1 -1
- 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 +15 -28
- data/config/locales/bg.yml +10 -24
- data/config/locales/bs-BA.yml +2 -0
- data/config/locales/ca-IT.yml +2400 -0
- data/config/locales/ca.yml +43 -35
- data/config/locales/cs.yml +25 -32
- data/config/locales/de.yml +19 -25
- data/config/locales/el.yml +10 -15
- data/config/locales/en.yml +24 -16
- data/config/locales/eo.yml +2 -0
- data/config/locales/es-MX.yml +39 -31
- data/config/locales/es-PY.yml +44 -36
- data/config/locales/es.yml +42 -34
- data/config/locales/eu.yml +104 -98
- data/config/locales/fi-plain.yml +14 -28
- data/config/locales/fi.yml +15 -29
- data/config/locales/fr-CA.yml +74 -24
- data/config/locales/fr.yml +73 -23
- data/config/locales/ga-IE.yml +4 -4
- data/config/locales/gl.yml +25 -14
- data/config/locales/hu.yml +9 -23
- data/config/locales/id-ID.yml +24 -15
- data/config/locales/is-IS.yml +10 -0
- data/config/locales/it.yml +34 -26
- data/config/locales/ja.yml +188 -27
- data/config/locales/lb.yml +24 -22
- data/config/locales/lt.yml +5 -17
- data/config/locales/lv.yml +18 -15
- data/config/locales/nl.yml +22 -17
- data/config/locales/no.yml +18 -16
- data/config/locales/pl.yml +6 -20
- data/config/locales/pt-BR.yml +11 -24
- data/config/locales/pt.yml +18 -16
- data/config/locales/ro-RO.yml +187 -20
- data/config/locales/ru.yml +23 -8
- data/config/locales/sk.yml +29 -18
- data/config/locales/sr-CS.yml +2 -0
- data/config/locales/sv.yml +30 -26
- data/config/locales/tr-TR.yml +24 -23
- data/config/locales/uk.yml +12 -1
- data/config/locales/zh-CN.yml +18 -15
- data/config/locales/zh-TW.yml +8 -16
- data/db/migrate/20240722215500_change_object_changes_on_versions.rb +4 -24
- 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/content_parsers/user_parser.rb +1 -1
- 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/map/provider/static_map/here.rb +34 -0
- data/lib/decidim/moderation_tools.rb +14 -8
- data/lib/decidim/nicknamizable.rb +1 -1
- 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 +23 -20
- metadata +12 -14
- data/app/cells/decidim/author/flag.erb +0 -6
- data/app/cells/decidim/author/flag_user.erb +0 -14
- data/app/cells/decidim/flag_modal/flag_user.erb +0 -34
- data/app/cells/decidim/flag_modal/show.erb +0 -52
- data/app/cells/decidim/flag_modal_cell.rb +0 -56
- data/app/cells/decidim/profile_sidebar/show.erb +0 -167
- data/app/cells/decidim/profile_sidebar_cell.rb +0 -68
- 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
|
|
@@ -49,7 +49,7 @@ module Decidim
|
|
49
49
|
|
50
50
|
def existing_mentionables
|
51
51
|
@existing_mentionables ||= mentionable_class.where(
|
52
|
-
"decidim_organization_id = ? AND
|
52
|
+
"decidim_organization_id = ? AND nickname IN (?)",
|
53
53
|
current_organization.id,
|
54
54
|
content_nicknames
|
55
55
|
)
|
@@ -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
@@ -6,8 +6,42 @@ module Decidim
|
|
6
6
|
module StaticMap
|
7
7
|
# The static map utility class for the HERE maps service
|
8
8
|
class Here < ::Decidim::Map::StaticMap
|
9
|
+
def url(latitude:, longitude:, options: {})
|
10
|
+
map_url = configuration.fetch(:url, nil)
|
11
|
+
return super unless map_url
|
12
|
+
|
13
|
+
return super unless map_url.include?("mia/v3")
|
14
|
+
|
15
|
+
w = options[:width] || Decidim::Map::StaticMap::DEFAULT_SIZE
|
16
|
+
h = options[:height] || Decidim::Map::StaticMap::DEFAULT_SIZE
|
17
|
+
|
18
|
+
params = {
|
19
|
+
apiKey: configuration[:api_key],
|
20
|
+
overlay: "point:#{latitude},#{longitude};icon=cp;size=large|#{latitude},#{longitude};style=circle;width=50m;color=%231B9D2C60"
|
21
|
+
}
|
22
|
+
|
23
|
+
URI.parse("#{map_url}:radius=90/#{w}x#{h}/png8").tap do |uri|
|
24
|
+
uri.query = URI.encode_www_form(params)
|
25
|
+
end.to_s
|
26
|
+
end
|
27
|
+
|
9
28
|
# @See Decidim::Map::StaticMap#url_params
|
10
29
|
def url_params(latitude:, longitude:, options: {})
|
30
|
+
ActiveSupport::Deprecation.warn(
|
31
|
+
<<~DEPRECATION.strip
|
32
|
+
Please use a V3 version HERE maps.
|
33
|
+
For further information, see:
|
34
|
+
https://www.here.com/docs/bundle/map-image-migration-guide-v3/page/README.html
|
35
|
+
Also make sure your Decidim.maps configurations are using the
|
36
|
+
up to date format.
|
37
|
+
You need to change:
|
38
|
+
static_url = "https://image.maps.ls.hereapi.com/mia/1.6/mapview" if static_provider == "here" && static_url.blank?
|
39
|
+
to:
|
40
|
+
static_url = "https://image.maps.hereapi.com/mia/v3/base/mc/overlay" if static_provider == "here"
|
41
|
+
in your config/initializers/decidim.rb file.
|
42
|
+
DEPRECATION
|
43
|
+
)
|
44
|
+
|
11
45
|
params = {
|
12
46
|
c: "#{latitude}, #{longitude}",
|
13
47
|
z: options[:zoom] || Decidim::Map::StaticMap::DEFAULT_ZOOM,
|
@@ -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
|
@@ -52,7 +52,7 @@ module Decidim
|
|
52
52
|
candidate = name
|
53
53
|
|
54
54
|
2.step do |n|
|
55
|
-
return candidate if Decidim::UserBaseEntity.where(
|
55
|
+
return candidate if Decidim::UserBaseEntity.where(nickname: candidate.downcase).where(scope).empty?
|
56
56
|
|
57
57
|
candidate = numbered_variation_of(name, n)
|
58
58
|
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
|
@@ -2,37 +2,40 @@
|
|
2
2
|
|
3
3
|
namespace :decidim do
|
4
4
|
namespace :upgrade do
|
5
|
-
desc "Modifies
|
6
|
-
task
|
7
|
-
logger
|
8
|
-
logger.info("Updating conflicting user nicknames...")
|
5
|
+
desc "Modifies nickname of the user to lower case"
|
6
|
+
task :fix_nickname_casing => :environment do
|
7
|
+
logger.info("Fixing user nicknames case...")
|
9
8
|
|
10
|
-
# list of users already changed in the process
|
11
9
|
has_changed = []
|
10
|
+
Decidim::UserBaseEntity.not_deleted.find_each do |user|
|
11
|
+
user.nickname.downcase!
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
.where("nickname ILIKE ?", user.nickname.downcase)
|
18
|
-
.where.not(id: has_changed + [user.id])
|
19
|
-
.not_deleted
|
20
|
-
.order(:created_at)
|
21
|
-
.each do |similar_user|
|
22
|
-
# change her nickname to the lowercased one with numbers if needed
|
23
|
-
begin
|
24
|
-
update_user_nickname(similar_user, Decidim::UserBaseEntity.nicknamize(similar_user.nickname, organization: similar_user.organization))
|
25
|
-
rescue ActiveRecord::RecordInvalid => e
|
26
|
-
logger.warn("User ID (#{similar_user.id}) : #{e}")
|
13
|
+
begin
|
14
|
+
if user.nickname_changed?
|
15
|
+
user.save!
|
16
|
+
has_changed << user.id
|
27
17
|
end
|
28
|
-
|
18
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
|
19
|
+
update_user_nickname(user, Decidim::UserBaseEntity.nicknamize(user.nickname, organization: user.organization))
|
20
|
+
has_changed << user.id
|
21
|
+
rescue ActiveRecord::RecordInvalid # rubocop:disable Lint/DuplicateRescueException
|
22
|
+
logger.warn("User ID (#{user.id}) : #{e}")
|
29
23
|
end
|
30
24
|
end
|
31
25
|
logger.info("Process terminated, #{has_changed.count} users nickname have been updated.")
|
32
26
|
end
|
33
27
|
|
28
|
+
desc "Modifies nicknames with random numbers when exists similar ones case-insensitively"
|
29
|
+
task :fix_nickname_uniqueness => :environment do
|
30
|
+
Rake::Task["decidim:upgrade:fix_nickname_casing"].execute
|
31
|
+
end
|
32
|
+
|
34
33
|
private
|
35
34
|
|
35
|
+
def logger
|
36
|
+
@logger ||= Logger.new($stdout)
|
37
|
+
end
|
38
|
+
|
36
39
|
def send_notification_to(user)
|
37
40
|
Decidim::EventsManager.publish(
|
38
41
|
event: "decidim.events.nickname_event",
|
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
|
@@ -843,8 +843,6 @@ files:
|
|
843
843
|
- app/cells/decidim/author/contact.erb
|
844
844
|
- app/cells/decidim/author/date.erb
|
845
845
|
- app/cells/decidim/author/endorsements.erb
|
846
|
-
- app/cells/decidim/author/flag.erb
|
847
|
-
- app/cells/decidim/author/flag_user.erb
|
848
846
|
- app/cells/decidim/author/name.erb
|
849
847
|
- app/cells/decidim/author/profile_minicard.erb
|
850
848
|
- app/cells/decidim/author/show.erb
|
@@ -996,9 +994,6 @@ files:
|
|
996
994
|
- app/cells/decidim/endorsers_list/full.erb
|
997
995
|
- app/cells/decidim/endorsers_list/show.erb
|
998
996
|
- app/cells/decidim/endorsers_list_cell.rb
|
999
|
-
- app/cells/decidim/flag_modal/flag_user.erb
|
1000
|
-
- app/cells/decidim/flag_modal/show.erb
|
1001
|
-
- app/cells/decidim/flag_modal_cell.rb
|
1002
997
|
- app/cells/decidim/follow_button/content.erb
|
1003
998
|
- app/cells/decidim/follow_button/show.erb
|
1004
999
|
- app/cells/decidim/follow_button_cell.rb
|
@@ -1074,8 +1069,6 @@ files:
|
|
1074
1069
|
- app/cells/decidim/profile_actions/show.erb
|
1075
1070
|
- app/cells/decidim/profile_actions_cell.rb
|
1076
1071
|
- app/cells/decidim/profile_cell.rb
|
1077
|
-
- app/cells/decidim/profile_sidebar/show.erb
|
1078
|
-
- app/cells/decidim/profile_sidebar_cell.rb
|
1079
1072
|
- app/cells/decidim/progress_bar/show.erb
|
1080
1073
|
- app/cells/decidim/progress_bar_cell.rb
|
1081
1074
|
- app/cells/decidim/public_participation/show.erb
|
@@ -1084,6 +1077,10 @@ files:
|
|
1084
1077
|
- app/cells/decidim/report_button/flag_modal.erb
|
1085
1078
|
- app/cells/decidim/report_button/show.erb
|
1086
1079
|
- app/cells/decidim/report_button_cell.rb
|
1080
|
+
- app/cells/decidim/report_user_button/already_reported_modal.erb
|
1081
|
+
- app/cells/decidim/report_user_button/flag_modal.erb
|
1082
|
+
- app/cells/decidim/report_user_button/show.erb
|
1083
|
+
- app/cells/decidim/report_user_button_cell.rb
|
1087
1084
|
- app/cells/decidim/reported_content/show.erb
|
1088
1085
|
- app/cells/decidim/reported_content_cell.rb
|
1089
1086
|
- app/cells/decidim/represent_user_group/show.erb
|
@@ -1421,6 +1418,7 @@ files:
|
|
1421
1418
|
- app/jobs/decidim/machine_translation_resource_job.rb
|
1422
1419
|
- app/jobs/decidim/machine_translation_save_job.rb
|
1423
1420
|
- app/jobs/decidim/metric_job.rb
|
1421
|
+
- app/jobs/decidim/migrate/paper_trail_job.rb
|
1424
1422
|
- app/jobs/decidim/newsletters_opt_in_job.rb
|
1425
1423
|
- app/jobs/decidim/notification_generator_for_recipient_job.rb
|
1426
1424
|
- app/jobs/decidim/notification_generator_job.rb
|
@@ -2201,6 +2199,7 @@ files:
|
|
2201
2199
|
- config/locales/bg.yml
|
2202
2200
|
- config/locales/bn-BD.yml
|
2203
2201
|
- config/locales/bs-BA.yml
|
2202
|
+
- config/locales/ca-IT.yml
|
2204
2203
|
- config/locales/ca.yml
|
2205
2204
|
- config/locales/cs-CZ.yml
|
2206
2205
|
- config/locales/cs.yml
|
@@ -3081,7 +3080,6 @@ files:
|
|
3081
3080
|
- lib/tasks/decidim_taxonomies.rake
|
3082
3081
|
- lib/tasks/decidim_webpacker_tasks.rake
|
3083
3082
|
- lib/tasks/upgrade/clean.rake
|
3084
|
-
- lib/tasks/upgrade/clean_hidden_resources.rake
|
3085
3083
|
- lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake
|
3086
3084
|
- lib/tasks/upgrade/decidim_attachments.rake
|
3087
3085
|
- lib/tasks/upgrade/decidim_content_blocks_tasks.rake
|
@@ -1,6 +0,0 @@
|
|
1
|
-
<button type="button" data-open="<%= current_user.present? ? "flagModal" : "loginModal" %>" title="<%= t("report", scope: "decidim.shared.flag_modal" ) %>" aria-controls="<%= current_user.present? ? "flagModal" : "loginModal" %>" aria-haspopup="true" tabindex="0">
|
2
|
-
<%= icon "flag", aria_hidden: true, class: "icon--small", role: "img", "aria-hidden": true %>
|
3
|
-
<span>
|
4
|
-
<%= t("report", scope: "decidim.shared.flag_modal" ) %>
|
5
|
-
</span>
|
6
|
-
</button>
|
@@ -1,14 +0,0 @@
|
|
1
|
-
<% if user_flaggable? && model.try(:id) != current_user.try(:id) %>
|
2
|
-
<%= cell(
|
3
|
-
"decidim/button",
|
4
|
-
{ icon: "flag-line", text: t("decidim.shared.flag_modal.report") },
|
5
|
-
button_classes: "button button__sm button__text-secondary only:m-auto",
|
6
|
-
html_options: {
|
7
|
-
"data-open" => current_user.present? ? "flagUserModal" : "loginModal",
|
8
|
-
"aria-controls" => current_user.present? ? "flagUserModal" : "loginModal",
|
9
|
-
"aria-haspopup" => "dialog"
|
10
|
-
}
|
11
|
-
) %>
|
12
|
-
|
13
|
-
<%= cell("decidim/flag_modal", model).flag_user %>
|
14
|
-
<% end %>
|
@@ -1,34 +0,0 @@
|
|
1
|
-
<div class="flag-modal hidden" id="flagUserModal" data-reveal role="dialog" aria-modal="true" aria-labelledby="flagUserModal-label">
|
2
|
-
<div>
|
3
|
-
<h3 id="flagUserModal-label"><%= t("decidim.shared.flag_user_modal.title") %></h3>
|
4
|
-
<button class="close-button" data-close aria-label="<%= t("decidim.shared.flag_user_modal.close") %>" type="button">
|
5
|
-
<span aria-hidden="true">×</span>
|
6
|
-
</button>
|
7
|
-
</div>
|
8
|
-
<% if model.reported_by? current_user %>
|
9
|
-
<p><%= t("decidim.shared.flag_user_modal.already_reported") %></p>
|
10
|
-
<% else %>
|
11
|
-
<p><%= t("decidim.shared.flag_user_modal.description") %></p>
|
12
|
-
<%= decidim_form_for report_form, url: decidim.report_user_path(sgid: model.to_sgid.to_s), method: :post do |f| %>
|
13
|
-
<%= f.collection_radio_buttons :reason, [
|
14
|
-
[:spam, t("decidim.shared.flag_user_modal.spam")],
|
15
|
-
[:offensive, t("decidim.shared.flag_user_modal.offensive")],
|
16
|
-
[:does_not_belong, t("decidim.shared.flag_user_modal.does_not_belong", organization_name: current_organization.name)]
|
17
|
-
], :first, :last do |builder| %>
|
18
|
-
<%= builder.label { builder.radio_button + builder.text } %>
|
19
|
-
<% end %>
|
20
|
-
<%= f.text_area :details, rows: 4 %>
|
21
|
-
<% if current_user&.admin? %>
|
22
|
-
<%= f.check_box :block, label: t("decidim.shared.flag_user_modal.block"),
|
23
|
-
include_hidden: false,
|
24
|
-
data: {
|
25
|
-
label_action: t("decidim.shared.flag_user_modal.block"),
|
26
|
-
label_report: t("decidim.shared.flag_user_modal.report"),
|
27
|
-
block: "true"
|
28
|
-
} %>
|
29
|
-
<%= f.check_box :hide, label: t("decidim.shared.flag_user_modal.hide"), label_options: { id: "block_and_hide" } %>
|
30
|
-
<% end %>
|
31
|
-
<%= f.submit t("decidim.shared.flag_user_modal.report") %>
|
32
|
-
<% end %>
|
33
|
-
<% end %>
|
34
|
-
</div>
|
@@ -1,52 +0,0 @@
|
|
1
|
-
<%= decidim_modal id: modal_id do %>
|
2
|
-
<%= decidim_form_for report_form, url: decidim.report_path(sgid: model.to_sgid.to_s), method: :post, html: { id: nil, class: "modal__report form-defaults" } do |f| %>
|
3
|
-
<div data-dialog-container>
|
4
|
-
<%= icon "flag-line", class: "inline-block align-middle" %>
|
5
|
-
<h3 data-dialog-title id="dialog-title-<%= modal_id %>">
|
6
|
-
<%= t("decidim.shared.flag_modal.title") %>
|
7
|
-
</h3>
|
8
|
-
|
9
|
-
<% if model.reported_by? current_user %>
|
10
|
-
<div>
|
11
|
-
<p class="modal__report-text">
|
12
|
-
<%= t("decidim.shared.flag_modal.already_reported") %>
|
13
|
-
</p>
|
14
|
-
</div>
|
15
|
-
<% else %>
|
16
|
-
<div>
|
17
|
-
<p class="modal__report-text">
|
18
|
-
<%= t("decidim.shared.flag_modal.description") %>
|
19
|
-
</p>
|
20
|
-
<fieldset>
|
21
|
-
<legend><%= t("decidim.shared.flag_modal.reason") %></legend>
|
22
|
-
<%= f.collection_radio_buttons :reason, [
|
23
|
-
[:spam, t("decidim.shared.flag_modal.spam")],
|
24
|
-
[:offensive, t("decidim.shared.flag_modal.offensive")],
|
25
|
-
[:does_not_belong, t("decidim.shared.flag_modal.does_not_belong", organization_name: current_organization.name)]
|
26
|
-
], :first, :last do |builder| %>
|
27
|
-
<div class="modal__report-container__radio">
|
28
|
-
<%= builder.radio_button(id: builder.value) %>
|
29
|
-
<label for="<%= builder.value %>">
|
30
|
-
<%= builder.text %>
|
31
|
-
</label>
|
32
|
-
</div>
|
33
|
-
<% end %>
|
34
|
-
</fieldset>
|
35
|
-
<% unless model.reported_by? current_user %>
|
36
|
-
<%= f.text_area :details, class: "w-full rounded border min-h-[160px] border-text-gray-2 mt-2", id: "#{modal_id}_details", label_options: { for: "#{modal_id}_details", class: "text-gray-2" } %>
|
37
|
-
<% end %>
|
38
|
-
</div>
|
39
|
-
<% end %>
|
40
|
-
</div>
|
41
|
-
<div data-dialog-actions>
|
42
|
-
<% unless model.reported_by? current_user %>
|
43
|
-
<button type="submit" class="button button__lg button__secondary">
|
44
|
-
<span>
|
45
|
-
<%= t("decidim.shared.flag_modal.report") %>
|
46
|
-
</span>
|
47
|
-
<%= icon "arrow-right-line" %>
|
48
|
-
</button>
|
49
|
-
<% end %>
|
50
|
-
</div>
|
51
|
-
<% end %>
|
52
|
-
<% end %>
|