decidim-cleaner 3.0.0 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b548444c799a42e64b8c0e6e382f98d51738eb48ba9b7d29bc25f637b65b0ad
4
- data.tar.gz: 222adf9a1210f66f8521273aa5351b46fac2ca57393883c5eb817c30ce7130b4
3
+ metadata.gz: 7dda43559128f10de066d98d4ffc56eb53c6b46e3a49d4d49373cf62e054fcb3
4
+ data.tar.gz: a22f580ae6fde675ca5c572005b224ac17d9546c861b343432ee919e67400420
5
5
  SHA512:
6
- metadata.gz: 8118d7e5d0b4334fc7bbf82ca9ffe74283b611c5f47cdeccc543a277dad15d1b4ab21206e440f91cf61aa8246d2faea020bcc7cbebd62af58d045fe8464255d4
7
- data.tar.gz: 607dd023747be3edfcb94cdc3888a6aec98d7b3ca84d3523f25fbceee00b1e6072ff12945f278a0019be232062aa36387773e271e25d2ef7d4953be33d27f370
6
+ metadata.gz: 746f6a5f4048779b2fa841a8911c7d8596c5a1c6363472f3bb0ede9b648d555f09d3069f22ee1fad1c514aef8409a5cf86447a7f25b6ab6684843dd9cf6b82c1
7
+ data.tar.gz: 6a1fd5e673054d0ffad860b6bb1441c4d5a91986bff9f2611d7d45d24d0df0e8b1d68db0ca0024774e322f4e7fb7a1da35351e9cb4e07742a900d812c2264656
data/README.md CHANGED
@@ -22,6 +22,19 @@ bundle exec rails decidim_cleaner:install:migrations
22
22
  bundle exec rails db:migrate
23
23
  ```
24
24
 
25
+ You can then modify the default values of the cleaner in your .ENV with the following variables:
26
+
27
+ ```bash
28
+ # Delay until a user is considered inactive and receive a warning email (in days)
29
+ DECIDIM_CLEANER_INACTIVE_USERS_MAIL=
30
+
31
+ # Delay until a user is deleted after receiving an email (in days)
32
+ DECIDIM_CLEANER_DELETE_INACTIVE_USERS=
33
+
34
+ # Delay until an admin log is deleted (in days)
35
+ DECIDIM_CLEANER_DELETE_ADMIN_LOGS=
36
+ ```
37
+
25
38
  ### Sidekiq Scheduler
26
39
  [Further documentation](https://github.com/sidekiq-scheduler/sidekiq-scheduler)
27
40
 
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Cleaner
5
+ module DelaysHelper
6
+ def email_inactive_after(organization)
7
+ organization.delete_inactive_users_email_after || Decidim::Cleaner.delete_inactive_users_email_after
8
+ end
9
+
10
+ def delete_inactive_after(organization)
11
+ organization.delete_inactive_users_after || Decidim::Cleaner.delete_inactive_users_after
12
+ end
13
+ end
14
+ end
15
+ end
@@ -10,10 +10,16 @@ module Decidim
10
10
  next unless organization.delete_admin_logs?
11
11
 
12
12
  Decidim::ActionLog.where(organization: organization)
13
- .where("created_at < ?", Time.zone.now - (organization.delete_admin_logs_after || 365).days)
13
+ .where("created_at < ?", delete_admin_logs_before_date(organization))
14
14
  .delete_all
15
15
  end
16
16
  end
17
+
18
+ private
19
+
20
+ def delete_admin_logs_before_date(organization)
21
+ Time.zone.now - (organization.delete_admin_logs_after || Decidim::Cleaner.delete_admin_logs_after).days
22
+ end
17
23
  end
18
24
  end
19
25
  end
@@ -12,25 +12,31 @@ module Decidim
12
12
  send_warning(Decidim::User.where(organization: organization)
13
13
  .not_deleted
14
14
  .where.not(email: "")
15
- .where("last_sign_in_at < ?", Time.zone.now - (organization.delete_inactive_users_email_after || 365).days)
16
- .where("last_sign_in_at > ?", Time.zone.now - (organization.delete_inactive_users_email_after || 365).days - 1.day))
17
-
15
+ .where("last_sign_in_at < ?", email_inactive_before_date(organization)))
18
16
  delete_user_and_send_email(Decidim::User.where(organization: organization)
19
17
  .not_deleted
20
18
  .where.not(email: "")
21
- .where("last_sign_in_at < ?", Time.zone.now - (organization.delete_inactive_users_after || 390).days))
19
+ .where("warning_date < ?", delete_inactive_before_date(organization)))
22
20
  end
23
21
  end
24
22
 
25
23
  def send_warning(users)
26
24
  users.find_each do |user|
27
- InactiveUsersMailer.warning_inactive(user).deliver_now
25
+ next if user.warning_date.present?
26
+
27
+ user.update!(warning_date: Time.zone.now) if InactiveUsersMailer.warning_inactive(user).deliver_now
28
28
  Rails.logger.info "Inactive warning sent to #{user.email}"
29
29
  end
30
30
  end
31
31
 
32
32
  def delete_user_and_send_email(users)
33
33
  users.find_each do |user|
34
+ if user.last_sign_in_at > user.warning_date
35
+ user.update!(warning_date: nil)
36
+ Rails.logger.info "User with id #{user.id} has logged in again, warning date reset"
37
+ next
38
+ end
39
+
34
40
  InactiveUsersMailer.warning_deletion(user).deliver_now
35
41
  Rails.logger.info "Deletion warning sent to #{user.email}"
36
42
 
@@ -38,6 +44,16 @@ module Decidim
38
44
  Rails.logger.info "User with id #{user.id} destroyed"
39
45
  end
40
46
  end
47
+
48
+ private
49
+
50
+ def email_inactive_before_date(organization)
51
+ Time.zone.now - (organization.delete_inactive_users_email_after || Decidim::Cleaner.delete_inactive_users_email_after).days
52
+ end
53
+
54
+ def delete_inactive_before_date(organization)
55
+ Time.zone.now - (organization.delete_inactive_users_after || Decidim::Cleaner.delete_inactive_users_after).days
56
+ end
41
57
  end
42
58
  end
43
59
  end
@@ -5,6 +5,7 @@ module Decidim
5
5
  # A custom mailer for Decidim so we can notify users
6
6
  # when their account was blocked
7
7
  class InactiveUsersMailer < Decidim::ApplicationMailer
8
+ helper Decidim::Cleaner::DelaysHelper
8
9
  def warning_inactive(user)
9
10
  with_user(user) do
10
11
  @user = user
@@ -1,6 +1,6 @@
1
1
  <p class="email-greeting"><%= t ".hello" %></p>
2
2
 
3
- <p class="email-instructions"><%= t(".body_1", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host), days: @organization.delete_inactive_users_after||390).html_safe %></p>
3
+ <p class="email-instructions"><%= t(".body_1", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host), days: email_inactive_after(@organization) + delete_inactive_after(@organization)).html_safe %></p>
4
4
 
5
5
  <p class="email-instructions"><%= t ".body_2" %></p>
6
6
 
@@ -1,7 +1,7 @@
1
1
  <p class="email-greeting"><%= t ".hello" %></p>
2
2
 
3
- <p class="email-instructions"><%= t ".body_1", organization_name: h(@organization.name), days: @organization.delete_inactive_users_email_after %></p>
3
+ <p class="email-instructions"><%= t ".body_1", organization_name: h(@organization.name), days: email_inactive_after(@organization) %></p>
4
4
 
5
- <p class="email-instructions"><%= t(".body_2", remaining_days: (@organization.delete_inactive_users_after||390) - (@organization.delete_inactive_users_email_after||365), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
5
+ <p class="email-instructions"><%= t(".body_2", remaining_days: delete_inactive_after(@organization), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
6
6
 
7
7
  <p class="email-closing"><%= t(".greetings", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
@@ -6,7 +6,8 @@ en:
6
6
  delete_admin_logs: Enable admin logs deletion
7
7
  delete_admin_logs_after: Delete admin logs after (days, default 365)
8
8
  delete_inactive_users: Enable inactive users deletion
9
- delete_inactive_users_after: Delete inactive users after (days, default 390)
9
+ delete_inactive_users_after: Delete inactive users x days after the mail(days,
10
+ default 30)
10
11
  delete_inactive_users_email_after: Send email to inactive users before deletion
11
12
  (days, default 365)
12
13
  decidim:
@@ -7,8 +7,8 @@ fr:
7
7
  delete_admin_logs_after: Supprimer l'historique d'administration après (jours,
8
8
  par défaut 365)
9
9
  delete_inactive_users: Activer la suppression des utilisateurs inactifs
10
- delete_inactive_users_after: Supprimer les utilisateurs inactifs après (jours,
11
- par défaut 390)
10
+ delete_inactive_users_after: Supprimer les utilisateurs inactifs au bout de
11
+ x jours après le courriel (jours, par défaut 30)
12
12
  delete_inactive_users_email_after: Envoyer un courriel aux utilisateurs inactifs
13
13
  avant la suppression (jours, par défaut 365)
14
14
  decidim:
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddWarningDateToUsers < ActiveRecord::Migration[6.1]
4
+ def change
5
+ add_column :decidim_users, :warning_date, :datetime
6
+ end
7
+ end
@@ -5,7 +5,7 @@ module Decidim
5
5
  # This holds the decidim-meetings version.
6
6
  module Cleaner
7
7
  def self.version
8
- "3.0.0"
8
+ "3.1.0"
9
9
  end
10
10
 
11
11
  def self.compatible_decidim_version
@@ -7,5 +7,18 @@ require "decidim/cleaner/admin_engine"
7
7
  module Decidim
8
8
  # This namespace holds the logic of the `Cleaner` module.
9
9
  module Cleaner
10
+ include ActiveSupport::Configurable
11
+
12
+ config_accessor :delete_admin_logs_after do
13
+ ENV.fetch("DECIDIM_CLEANER_DELETE_ADMIN_LOGS", "365").to_i
14
+ end
15
+
16
+ config_accessor :delete_inactive_users_after do
17
+ ENV.fetch("DECIDIM_CLEANER_DELETE_INACTIVE_USERS", "30").to_i
18
+ end
19
+
20
+ config_accessor :delete_inactive_users_email_after do
21
+ ENV.fetch("DECIDIM_CLEANER_INACTIVE_USERS_MAIL", "365").to_i
22
+ end
10
23
  end
11
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-cleaner
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Quentinchampenois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-29 00:00:00.000000000 Z
11
+ date: 2023-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-core
@@ -66,6 +66,7 @@ files:
66
66
  - app/controllers/decidim/cleaner/admin/application_controller.rb
67
67
  - app/controllers/decidim/cleaner/admin/organization_cleaner_controller.rb
68
68
  - app/forms/decidim/cleaner/admin/organization_cleaner_form.rb
69
+ - app/helpers/decidim/cleaner/delays_helper.rb
69
70
  - app/jobs/decidim/cleaner/clean_admin_logs_job.rb
70
71
  - app/jobs/decidim/cleaner/clean_inactive_users_job.rb
71
72
  - app/mailers/decidim/cleaner/inactive_users_mailer.rb
@@ -80,6 +81,7 @@ files:
80
81
  - config/routes.rb
81
82
  - db/migrate/20230106105014_add_delete_admin_logs_to_organization.rb
82
83
  - db/migrate/20230110150032_add_delete_inactive_users_to_organization.rb
84
+ - db/migrate/20230328094652_add_warning_date_to_users.rb
83
85
  - lib/decidim/cleaner.rb
84
86
  - lib/decidim/cleaner/admin.rb
85
87
  - lib/decidim/cleaner/admin_engine.rb