decidim-cdtb 0.4.2 → 0.5.2

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.
data/decidim-cdtb.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "A gem to help managing Decidim applications."
13
13
  spec.homepage = "https://github.com/CodiTramuntana/decidim-module-cdtb"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 3.0.7"
15
+ spec.required_ruby_version = ">= 3.1.7"
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
@@ -34,6 +34,5 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency "ruby-progressbar"
35
35
 
36
36
  spec.add_development_dependency "decidim-dev", Decidim::Cdtb::DECIDIM_MIN_VERSION
37
- spec.add_development_dependency "faker"
38
37
  spec.metadata["rubygems_mfa_required"] = "true"
39
38
  end
@@ -7,12 +7,15 @@ module Decidim
7
7
  #
8
8
  class NicknameFixer < ::Decidim::Cdtb::Task
9
9
  def initialize
10
+ regex= Decidim::UserBaseEntity::REGEXP_NICKNAME.source.gsub("\\z", "\\Z")
11
+ @query= Decidim::User.where.not("nickname ~ ?", regex)
12
+
10
13
  progress_bar= { title: "Decidim::User" }
11
- super("FIX NICKNAMES", progress_bar: progress_bar)
14
+ super("FIX NICKNAMES", progress_bar:)
12
15
  end
13
16
 
14
17
  def prepare_execution(_ctx)
15
- @num_users= Decidim::User.count
18
+ @num_users= @query.count
16
19
  log_task_info("Checking #{@num_users} users...")
17
20
  end
18
21
 
@@ -23,7 +26,7 @@ module Decidim
23
26
  def do_execution(context)
24
27
  progress_bar= context[:progress_bar]
25
28
 
26
- Decidim::User.find_each do |user|
29
+ @query.find_each do |user|
27
30
  Decidim::User.validators_on(:nickname).each do |validator|
28
31
  validator.validate_each(user, :nickname, user.nickname)
29
32
  end
@@ -23,7 +23,7 @@ module Decidim
23
23
 
24
24
  def initialize
25
25
  progress_bar= { title: self.class.name }
26
- super("FIX YOUTUBE EMBEDS", progress_bar: progress_bar)
26
+ super("FIX YOUTUBE EMBEDS", progress_bar:)
27
27
  end
28
28
 
29
29
  attr_reader :num_fixed
@@ -13,7 +13,7 @@ module Decidim
13
13
  progress_bar= { title: self.class.name }
14
14
  @processed_models = processed_models
15
15
  @content_block_names = content_block_names
16
- super("ADD CONTENT BLOCKS", progress_bar: progress_bar)
16
+ super("ADD CONTENT BLOCKS", progress_bar:)
17
17
  end
18
18
 
19
19
  attr_reader :num_added
@@ -73,6 +73,7 @@ module Decidim
73
73
 
74
74
  current_content_blocks.each do |content_block|
75
75
  # hero is usually the first content block
76
+ next if content_block.nil?
76
77
  next if content_block == extra_data_content_block || content_block.manifest_name == "hero"
77
78
 
78
79
  content_block.update(weight: content_block.weight + 10)
@@ -18,7 +18,7 @@ module Decidim
18
18
  log_task_step("Adding #{content_block_name} to #{space.slug}[#{space.id}]")
19
19
  Decidim::ContentBlock.create(
20
20
  decidim_organization_id: space.organization.id,
21
- weight: weight,
21
+ weight:,
22
22
  scope_name: scope_name(space),
23
23
  scoped_resource_id: space.id,
24
24
  manifest_name: content_block_name,
@@ -39,7 +39,7 @@ module Decidim
39
39
  end
40
40
 
41
41
  def current_space_content_blocks(scope_name, organization, scoped_resource_id)
42
- Decidim::ContentBlock.for_scope(scope_name, organization: organization).where(scoped_resource_id: scoped_resource_id)
42
+ Decidim::ContentBlock.for_scope(scope_name, organization:).where(scoped_resource_id:)
43
43
  end
44
44
 
45
45
  def manifest_for(resource)
@@ -12,7 +12,7 @@ module Decidim
12
12
  def initialize(processed_models)
13
13
  progress_bar= { title: self.class.name }
14
14
  @processed_models = processed_models
15
- super("MOVING IMAGES...", progress_bar: progress_bar)
15
+ super("MOVING IMAGES...", progress_bar:)
16
16
  end
17
17
 
18
18
  attr_reader :num_added
@@ -7,7 +7,7 @@ module Decidim
7
7
  module Spam
8
8
  # Detect spam behavior in users
9
9
  #
10
- class UserSpamDetector < ::Decidim::Cdtb::Task
10
+ class SpamUsersDetector < ::Decidim::Cdtb::Task
11
11
  # rubocop:disable Style/RedundantRegexpEscape
12
12
  URL_REGEX = %r{(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|
13
13
  www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|
@@ -17,7 +17,7 @@ module Decidim
17
17
  def initialize(organization = nil)
18
18
  @organization = organization
19
19
  progress_bar = { title: "Decidim::User" }
20
- super("SPAM DETECTOR", progress_bar: progress_bar)
20
+ super("SPAM DETECTOR", progress_bar:)
21
21
  end
22
22
 
23
23
  def prepare_execution(_ctx)
@@ -44,7 +44,7 @@ module Decidim
44
44
  filepath= Rails.env.test? ? "tmp/#{filename}" : filename
45
45
  CSV.open(filepath, "w") do |csv|
46
46
  csv_headers = ["ID", "Is suspicious?", "Name", "Email", "Nickname", "Personal URL", "About",
47
- "Organization ID", "Organization Name"]
47
+ "Organization ID", "Organization Name", "Last Sign In At"]
48
48
  csv << csv_headers
49
49
 
50
50
  @users.find_each do |user|
@@ -56,7 +56,7 @@ module Decidim
56
56
  end
57
57
 
58
58
  csv << [user.id, suspicious, user.name, user.email, user.nickname, user.personal_url, user.about,
59
- user.organization.id, user.organization.name]
59
+ user.organization.id, user.organization.name, user.last_sign_in_at&.strftime(Decidim::Cdtb::STRFTIME_FORMAT)]
60
60
 
61
61
  progress_bar.increment
62
62
  end
@@ -11,7 +11,7 @@ module Decidim
11
11
  class LocalSharding < ::Decidim::Cdtb::Task
12
12
  def initialize
13
13
  progress_bar= { title: "ActiveStorage::Blob" }
14
- super("S3 to local: DO SHARDING", progress_bar: progress_bar)
14
+ super("S3 to local: DO SHARDING", progress_bar:)
15
15
  end
16
16
 
17
17
  def prepare_execution(_ctx)
@@ -29,7 +29,7 @@ module Decidim
29
29
  init
30
30
  ctx= {}
31
31
  prepare_execution(ctx)
32
- ctx[:progress_bar]= ProgressBar.create(total: total_items, title: title) if has_progress?
32
+ ctx[:progress_bar]= ProgressBar.create(total: total_items, title:) if has_progress?
33
33
  do_execution(ctx)
34
34
  end_execution(ctx)
35
35
  finish
@@ -8,7 +8,7 @@ require "decidim/cdtb/users/remover"
8
8
  require "decidim/cdtb/multitenants/org_by_host_like"
9
9
  require "decidim/cdtb/participatory_spaces/add_content_blocks"
10
10
  require "decidim/cdtb/participatory_spaces/move_images_to_content_block"
11
- require "decidim/cdtb/spam/user_spam_detector"
11
+ require "decidim/cdtb/spam/spam_users_detector"
12
12
  require "decidim/cdtb/storage/local_sharding"
13
13
  require "decidim/cdtb/storage/set_local_on_blobs"
14
14
  require "decidim/cdtb/upgrades/validate_migrations_task"
@@ -8,7 +8,7 @@ module Decidim
8
8
  class UpgradeModulesTask < ::Decidim::Cdtb::Task
9
9
  def initialize
10
10
  progress_bar= { title: "Modules" }
11
- super("UPGRADE MODULES", progress_bar: progress_bar)
11
+ super("UPGRADE MODULES", progress_bar:)
12
12
  end
13
13
 
14
14
  def prepare_execution(_ctx)
@@ -12,7 +12,7 @@ module Decidim
12
12
 
13
13
  def initialize
14
14
  progress_bar= { title: "Modules" }
15
- super("VALIDATE MODULES MIGRATIONS", progress_bar: progress_bar)
15
+ super("VALIDATE MODULES MIGRATIONS", progress_bar:)
16
16
  end
17
17
 
18
18
  def prepare_execution(_ctx)
@@ -11,7 +11,7 @@ module Decidim
11
11
  @csv_path = csv_path
12
12
  @reporter_user_email = reporter_user_email
13
13
  progress_bar = { title: "Decidim::User" }
14
- super("USER REMOVER", progress_bar: progress_bar)
14
+ super("USER REMOVER", progress_bar:)
15
15
  end
16
16
 
17
17
  def prepare_execution(_ctx); end
@@ -36,7 +36,10 @@ module Decidim
36
36
  organization: user.organization)
37
37
  comments = Decidim::Comments::Comment.where(decidim_author_id: user.id)
38
38
  manage_comments(comments, user, reporter_user) unless comments.empty?
39
- destroy_user(user) if block_user(user, reporter_user)
39
+ if block_user(user, reporter_user)
40
+ remove_action_logs_by(user)
41
+ destroy_user(user)
42
+ end
40
43
  progress_bar.increment
41
44
  end
42
45
  ensure
@@ -53,28 +56,18 @@ module Decidim
53
56
  def disable_email_moderations(users_emails)
54
57
  log_task_step("Disabling email on moderations...")
55
58
 
56
- users = Decidim::User.where(email: users_emails)
57
-
58
- users.find_each do |user|
59
- user.email_on_moderations = false
60
- user.save(validate: false)
61
- end
59
+ Decidim::User.where(email: users_emails).update_all(email_on_moderations: false)
62
60
  end
63
61
 
64
62
  def enable_email_moderations(users_emails)
65
63
  log_task_step("Enabling email on moderations...")
66
64
 
67
- users = Decidim::User.where(email: users_emails)
68
-
69
- users.find_each do |user|
70
- user.email_on_moderations = true
71
- user.save(validate: false)
72
- end
65
+ Decidim::User.where(email: users_emails).update_all(email_on_moderations: true)
73
66
  end
74
67
 
75
68
  def manage_comments(comments, user, reporter_user)
76
69
  comments.find_each do |comment|
77
- report_comment(comment, user, reporter_user)
70
+ report_comment(comment, user, reporter_user) unless comment.reported?
78
71
  hide_comment(comment, user, reporter_user) unless comment.hidden?
79
72
  end
80
73
  end
@@ -163,6 +156,12 @@ module Decidim
163
156
  current_participatory_space: comment.participatory_space
164
157
  }
165
158
  end
159
+
160
+ def remove_action_logs_by(user)
161
+ puts "Removing ActionLog from user #{user.id}..."
162
+
163
+ ActiveRecord::Base.connection.execute("DELETE FROM decidim_action_logs WHERE decidim_user_id = #{user.id}")
164
+ end
166
165
  end
167
166
  # rubocop:enable Metrics/ClassLength
168
167
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module Cdtb
5
- VERSION = "0.4.2"
6
- DECIDIM_MIN_VERSION = ">= 0.27.0"
5
+ VERSION = "0.5.2"
6
+ DECIDIM_MIN_VERSION = ">= 0.28.0"
7
7
  end
8
8
  end
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  services:
21
21
  postgres:
22
- image: postgres:11
22
+ image: postgres:16
23
23
  ports: ["5432:5432"]
24
24
  options: >-
25
25
  --health-cmd pg_isready
@@ -36,7 +36,7 @@ jobs:
36
36
  SECRET_KEY_BASE: "secret_key_base"
37
37
 
38
38
  steps:
39
- - uses: actions/checkout@v2.0.0
39
+ - uses: actions/checkout@v4
40
40
  with:
41
41
  fetch-depth: 1
42
42
  - uses: ruby/setup-ruby@master
@@ -44,7 +44,7 @@ jobs:
44
44
  ruby-version: ${{ env.RUBY_VERSION }}
45
45
  bundler-cache: true
46
46
  - name: Recover Ruby dependency cache
47
- uses: actions/cache@v1
47
+ uses: actions/cache@v4
48
48
  with:
49
49
  path: ./vendor/bundle
50
50
  key: ${{ runner.OS }}-app-rubydeps-${{ hashFiles('Gemfile.lock') }}
@@ -56,7 +56,7 @@ jobs:
56
56
  run: bundle config set --local path 'vendor/bundle'
57
57
 
58
58
  - name: Install Ruby deps
59
- uses: nick-invision/retry@v2
59
+ uses: nick-fields/retry@v3
60
60
  with:
61
61
  timeout_minutes: 10
62
62
  max_attempts: 3
@@ -12,7 +12,7 @@ namespace :cdtb do
12
12
 
13
13
  def with_progress(collection, name:)
14
14
  total = collection.count
15
- progressbar = create_progress_bar(total: total)
15
+ progressbar = create_progress_bar(total:)
16
16
 
17
17
  puts "Anonymizing #{total} #{name}...\n"
18
18
  skip_logs do
@@ -27,7 +27,7 @@ namespace :cdtb do
27
27
  ProgressBar.create(
28
28
  progress_mark: " ",
29
29
  remainder_mark: "\u{FF65}",
30
- total: total,
30
+ total:,
31
31
  format: "%a %e %b\u{15E7}%i %p%% %t"
32
32
  )
33
33
  end
@@ -73,7 +73,7 @@ namespace :cdtb do
73
73
  identity.update_columns(uid: "anonymized-identity-#{identity.id}")
74
74
  end
75
75
 
76
- Decidim::Authorization.where(user: user).find_each do |authorization|
76
+ Decidim::Authorization.where(user:).find_each do |authorization|
77
77
  authorization.update_columns(unique_id: authorization.id)
78
78
  end
79
79
  end
@@ -51,7 +51,7 @@ namespace :cdtb do
51
51
  else
52
52
  Decidim::Organization.find(arguments.first)
53
53
  end
54
- handler.with_context(current_organization: current_organization)
54
+ handler.with_context(current_organization:)
55
55
 
56
56
  credentials= arguments.map { |arg| arg.split(":") }
57
57
  puts "Setting credentials: #{credentials}"
@@ -15,7 +15,7 @@ namespace :cdtb do
15
15
  exit(-1)
16
16
  end
17
17
 
18
- fixer= ::Decidim::Cdtb::Fixes::YouTubeEmbedsFixer.new
18
+ fixer= Decidim::Cdtb::Fixes::YouTubeEmbedsFixer.new
19
19
  fixer.execute!
20
20
  end
21
21
  end
@@ -5,7 +5,7 @@
5
5
  #
6
6
  namespace :cdtb do
7
7
  require "decidim/cdtb/tasks_utils"
8
- include ::Decidim::Cdtb::TasksUtils
8
+ include Decidim::Cdtb::TasksUtils
9
9
 
10
10
  desc <<~EODESC
11
11
  Finds information about the Organization, or Organizations, searching by the :host_term argument ignorecase.
@@ -42,7 +42,7 @@ namespace :cdtb do
42
42
  return "Please, select an option"
43
43
  end
44
44
 
45
- adder = ::Decidim::Cdtb::ParticipatorySpaces::AddContentBlocks.new(processed_models, content_block_names)
45
+ adder = Decidim::Cdtb::ParticipatorySpaces::AddContentBlocks.new(processed_models, content_block_names)
46
46
  adder.execute!
47
47
  end
48
48
 
@@ -81,7 +81,7 @@ namespace :cdtb do
81
81
  return "Please, select an option"
82
82
  end
83
83
 
84
- adder = ::Decidim::Cdtb::ParticipatorySpaces::MoveImagesToContentBlock.new(processed_models)
84
+ adder = Decidim::Cdtb::ParticipatorySpaces::MoveImagesToContentBlock.new(processed_models)
85
85
  adder.execute!
86
86
  end
87
87
  end
data/lib/tasks/spam.rake CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  namespace :cdtb do
4
4
  namespace :spam do
5
- desc "Show a list with users suspected of spam"
5
+ desc "Show a list with users suspicious of being spammers"
6
6
  task :users, %i[org_id] => :environment do |_task, args|
7
7
  organization = args.org_id.present? ? Decidim::Organization.find(args.org_id) : nil
8
8
 
9
- detector = ::Decidim::Cdtb::Spam::UserSpamDetector.new(organization)
9
+ detector = Decidim::Cdtb::Spam::SpamUsersDetector.new(organization)
10
10
  detector.execute!
11
11
  end
12
12
  end
@@ -5,7 +5,7 @@
5
5
  #
6
6
  namespace :cdtb do
7
7
  require "decidim/cdtb/tasks_utils"
8
- include ::Decidim::Cdtb::TasksUtils
8
+ include Decidim::Cdtb::TasksUtils
9
9
  require "decidim/cdtb/storage/local_sharding"
10
10
 
11
11
  # To migrate from S3 to local storage.
@@ -6,13 +6,13 @@
6
6
  namespace :cdtb do
7
7
  namespace :upgrades do
8
8
  require "decidim/cdtb/tasks_utils"
9
- include ::Decidim::Cdtb::TasksUtils
9
+ include Decidim::Cdtb::TasksUtils
10
10
 
11
11
  desc <<~EODESC
12
12
  Validates that migrations from all gems in the Gemfile have been installed.
13
13
  EODESC
14
14
  task validate_migrations: [:environment] do
15
- task= ::Decidim::Cdtb::Upgrades::ValidateMigrationsTask.new
15
+ task= Decidim::Cdtb::Upgrades::ValidateMigrationsTask.new
16
16
  task.execute!
17
17
  raise("There are pending migrations") if task.pending_migrations?
18
18
  end
data/lib/tasks/users.rake CHANGED
@@ -8,7 +8,7 @@ namespace :cdtb do
8
8
  Fix Decidim::User's nicknames.
9
9
  EODESC
10
10
  task fix_nicknames: [:environment] do
11
- fixer= ::Decidim::Cdtb::Fixes::NicknameFixer.new
11
+ fixer= Decidim::Cdtb::Fixes::NicknameFixer.new
12
12
  fixer.execute!
13
13
  end
14
14
 
@@ -16,7 +16,7 @@ namespace :cdtb do
16
16
  Remove Decidim::User's by IDs in a CSV.
17
17
  EODESC
18
18
  task :remove, %i[csv_path reporter_user_email] => [:environment] do |_taks, args|
19
- service = ::Decidim::Cdtb::Users::Remover.new(args.csv_path, args.reporter_user_email)
19
+ service = Decidim::Cdtb::Users::Remover.new(args.csv_path, args.reporter_user_email)
20
20
  service.execute!
21
21
  end
22
22
 
@@ -30,7 +30,7 @@ namespace :cdtb do
30
30
  filename= "admins"
31
31
 
32
32
  if organization_id.present?
33
- query= query.where(organization_id: organization_id)
33
+ query= query.where(organization_id:)
34
34
  filename+= "-org#{organization_id}"
35
35
  end
36
36
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-cdtb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Valls
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-04-24 00:00:00.000000000 Z
11
+ date: 2025-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.27.0
19
+ version: 0.28.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.27.0
26
+ version: 0.28.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,28 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.27.0
61
+ version: 0.28.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 0.27.0
69
- - !ruby/object:Gem::Dependency
70
- name: faker
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: 0.28.0
83
69
  description: A gem to help managing Decidim applications.
84
70
  email:
85
71
  - 199462+tramuntanal@users.noreply.github.com
@@ -110,7 +96,7 @@ files:
110
96
  - lib/decidim/cdtb/participatory_spaces/add_content_blocks.rb
111
97
  - lib/decidim/cdtb/participatory_spaces/manages_content_blocks.rb
112
98
  - lib/decidim/cdtb/participatory_spaces/move_images_to_content_block.rb
113
- - lib/decidim/cdtb/spam/user_spam_detector.rb
99
+ - lib/decidim/cdtb/spam/spam_users_detector.rb
114
100
  - lib/decidim/cdtb/storage/local_sharding.rb
115
101
  - lib/decidim/cdtb/storage/set_local_on_blobs.rb
116
102
  - lib/decidim/cdtb/task.rb
@@ -151,14 +137,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
137
  requirements:
152
138
  - - ">="
153
139
  - !ruby/object:Gem::Version
154
- version: 3.0.7
140
+ version: 3.1.7
155
141
  required_rubygems_version: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - ">="
158
144
  - !ruby/object:Gem::Version
159
145
  version: '0'
160
146
  requirements: []
161
- rubygems_version: 3.2.33
147
+ rubygems_version: 3.3.27
162
148
  signing_key:
163
149
  specification_version: 4
164
150
  summary: CodiTramuntana's Decidim Toolbelt (cdtb).