mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 04:37:30 +02:00
Add mail notification on soft force delete
This commit is contained in:
parent
9916ca52cb
commit
c252d801f9
10 changed files with 97 additions and 34 deletions
|
@ -9,17 +9,21 @@ module Admin
|
||||||
domain.registrar.notifications.create!(text: t('force_delete_set_on_domain',
|
domain.registrar.notifications.create!(text: t('force_delete_set_on_domain',
|
||||||
domain_name: domain.name))
|
domain_name: domain.name))
|
||||||
|
|
||||||
if notify_by_email?
|
notify_by_email if notify_by_email?
|
||||||
DomainDeleteMailer.forced(domain: domain,
|
|
||||||
registrar: domain.registrar,
|
|
||||||
registrant: domain.registrant,
|
|
||||||
template_name: params[:template_name]).deliver_now
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to edit_admin_domain_url(domain), notice: t('.scheduled')
|
redirect_to edit_admin_domain_url(domain), notice: t('.scheduled')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def notify_by_email
|
||||||
|
if force_delete_type == :fast_track
|
||||||
|
send_email
|
||||||
|
domain.update(contact_notification_sent_date: Time.zone.today)
|
||||||
|
else
|
||||||
|
domain.update(template_name: params[:template_name])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
authorize! :manage, domain
|
authorize! :manage, domain
|
||||||
domain.cancel_force_delete
|
domain.cancel_force_delete
|
||||||
|
@ -36,6 +40,13 @@ module Admin
|
||||||
ActiveRecord::Type::Boolean.new.cast(params[:notify_by_email])
|
ActiveRecord::Type::Boolean.new.cast(params[:notify_by_email])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def send_email
|
||||||
|
DomainDeleteMailer.forced(domain: domain,
|
||||||
|
registrar: domain.registrar,
|
||||||
|
registrant: domain.registrant,
|
||||||
|
template_name: params[:template_name]).deliver_now
|
||||||
|
end
|
||||||
|
|
||||||
def force_delete_type
|
def force_delete_type
|
||||||
soft_delete? ? :soft : :fast_track
|
soft_delete? ? :soft : :fast_track
|
||||||
end
|
end
|
||||||
|
|
|
@ -76,4 +76,4 @@ class Registrant::DomainsController < RegistrantController
|
||||||
params.require(:q).permit(:name_matches, :registrant_ident_eq, :valid_to_gteq, :valid_to_lteq,
|
params.require(:q).permit(:name_matches, :registrant_ident_eq, :valid_to_gteq, :valid_to_lteq,
|
||||||
:results_per_page)
|
:results_per_page)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,18 @@
|
||||||
module Concerns::Domain::ForceDelete
|
module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
store_accessor :force_delete_data,
|
||||||
|
:force_delete_type,
|
||||||
|
:contact_notification_sent_date,
|
||||||
|
:template_name
|
||||||
|
|
||||||
|
scope :notification_not_sent,
|
||||||
|
lambda {
|
||||||
|
where("(force_delete_data->>'contact_notification_sent_date') is null")
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
class_methods do
|
class_methods do
|
||||||
def force_delete_scheduled
|
def force_delete_scheduled
|
||||||
where('force_delete_start <= ?', Time.zone.now)
|
where('force_delete_start <= ?', Time.zone.now)
|
||||||
|
@ -12,8 +24,8 @@ module Concerns::Domain::ForceDelete
|
||||||
end
|
end
|
||||||
|
|
||||||
def should_notify_on_soft_force_delete?
|
def should_notify_on_soft_force_delete?
|
||||||
force_delete_scheduled? && !statuses.include?(DomainStatus::CLIENT_HOLD) &&
|
force_delete_scheduled? && contact_notification_sent_date.blank? &&
|
||||||
force_delete_start.present? && force_delete_start.to_date == Time.zone.now.to_date
|
force_delete_start.to_date == Time.zone.now.to_date && force_delete_type.to_sym == :soft
|
||||||
end
|
end
|
||||||
|
|
||||||
def client_holdable?
|
def client_holdable?
|
||||||
|
@ -37,9 +49,14 @@ module Concerns::Domain::ForceDelete
|
||||||
type == :fast_track ? force_delete_fast_track : force_delete_soft
|
type == :fast_track ? force_delete_fast_track : force_delete_soft
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_force_delete_type(force_delete_type)
|
||||||
|
self.force_delete_type = force_delete_type
|
||||||
|
end
|
||||||
|
|
||||||
def force_delete_fast_track
|
def force_delete_fast_track
|
||||||
preserve_current_statuses_for_force_delete
|
preserve_current_statuses_for_force_delete
|
||||||
add_force_delete_statuses
|
add_force_delete_statuses
|
||||||
|
add_force_delete_type(:fast)
|
||||||
self.force_delete_date = force_delete_fast_track_start_date + 1.day
|
self.force_delete_date = force_delete_fast_track_start_date + 1.day
|
||||||
self.force_delete_start = Time.zone.today + 1.day
|
self.force_delete_start = Time.zone.today + 1.day
|
||||||
stop_all_pending_actions
|
stop_all_pending_actions
|
||||||
|
@ -50,15 +67,21 @@ module Concerns::Domain::ForceDelete
|
||||||
def force_delete_soft
|
def force_delete_soft
|
||||||
preserve_current_statuses_for_force_delete
|
preserve_current_statuses_for_force_delete
|
||||||
add_force_delete_statuses
|
add_force_delete_statuses
|
||||||
|
add_force_delete_type(:soft)
|
||||||
calculate_soft_delete_date
|
calculate_soft_delete_date
|
||||||
stop_all_pending_actions
|
stop_all_pending_actions
|
||||||
allow_deletion
|
allow_deletion
|
||||||
save(validate: false)
|
save(validate: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def clear_force_delete_data
|
||||||
|
self.force_delete_data = nil
|
||||||
|
end
|
||||||
|
|
||||||
def cancel_force_delete
|
def cancel_force_delete
|
||||||
restore_statuses_before_force_delete
|
restore_statuses_before_force_delete
|
||||||
remove_force_delete_statuses
|
remove_force_delete_statuses
|
||||||
|
clear_force_delete_data
|
||||||
self.force_delete_date = nil
|
self.force_delete_date = nil
|
||||||
self.force_delete_start = nil
|
self.force_delete_start = nil
|
||||||
save(validate: false)
|
save(validate: false)
|
||||||
|
|
28
app/models/concerns/job/force_delete_logging.rb
Normal file
28
app/models/concerns/job/force_delete_logging.rb
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
module Concerns
|
||||||
|
module Job
|
||||||
|
module ForceDeleteLogging
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
class_methods do
|
||||||
|
def log_prepare_client_hold
|
||||||
|
return if Rails.env.test?
|
||||||
|
|
||||||
|
STDOUT << "#{Time.zone.now.utc} - Setting client_hold to domains\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
def log_start_client_hold(domain)
|
||||||
|
return if Rails.env.test?
|
||||||
|
|
||||||
|
STDOUT << "#{Time.zone.now.utc} DomainCron.start_client_hold: ##{domain.id} "\
|
||||||
|
"(#{domain.name}) #{domain.changes}\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
def log_end_end_client_hold(domain)
|
||||||
|
return if Rails.env.test?
|
||||||
|
|
||||||
|
STDOUT << "#{Time.zone.now.utc} - Successfully set client_hold on (#{domain.name})"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,28 +1,9 @@
|
||||||
module Concerns
|
module Concerns
|
||||||
module Job
|
module Job
|
||||||
module ForceDeleteMessages
|
module ForceDeleteNotify
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
class_methods do
|
class_methods do
|
||||||
def log_prepare_client_hold
|
|
||||||
return if Rails.env.test?
|
|
||||||
|
|
||||||
STDOUT << "#{Time.zone.now.utc} - Setting client_hold to domains\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_start_client_hold(domain)
|
|
||||||
return if Rails.env.test?
|
|
||||||
|
|
||||||
STDOUT << "#{Time.zone.now.utc} DomainCron.start_client_hold: ##{domain.id} "\
|
|
||||||
"(#{domain.name}) #{domain.changes}\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_end_end_client_hold(domain)
|
|
||||||
return if Rails.env.test?
|
|
||||||
|
|
||||||
STDOUT << "#{Time.zone.now.utc} - Successfully set client_hold on (#{domain.name})"
|
|
||||||
end
|
|
||||||
|
|
||||||
def notify_client_hold(domain)
|
def notify_client_hold(domain)
|
||||||
domain.registrar.notifications.create!(text: I18n.t('client_hold_set_on_domain',
|
domain.registrar.notifications.create!(text: I18n.t('client_hold_set_on_domain',
|
||||||
domain_name: domain.name,
|
domain_name: domain.name,
|
||||||
|
@ -33,6 +14,15 @@ module Concerns
|
||||||
domain.registrar.notifications.create!(text: I18n.t('grace_period_started_domain',
|
domain.registrar.notifications.create!(text: I18n.t('grace_period_started_domain',
|
||||||
domain_name: domain.name,
|
domain_name: domain.name,
|
||||||
date: domain.force_delete_start))
|
date: domain.force_delete_start))
|
||||||
|
send_mail(domain)
|
||||||
|
domain.update(contact_notification_sent_date: Time.zone.today)
|
||||||
|
end
|
||||||
|
|
||||||
|
def send_mail(domain)
|
||||||
|
DomainDeleteMailer.forced(domain: domain,
|
||||||
|
registrar: domain.registrar,
|
||||||
|
registrant: domain.registrant,
|
||||||
|
template_name: domain.template_name).deliver_now
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,6 +1,7 @@
|
||||||
class DomainCron
|
class DomainCron
|
||||||
include Concerns::Job::ForceDelete
|
include Concerns::Job::ForceDelete
|
||||||
include Concerns::Job::ForceDeleteMessages
|
include Concerns::Job::ForceDeleteLogging
|
||||||
|
include Concerns::Job::ForceDeleteNotify
|
||||||
|
|
||||||
def self.clean_expired_pendings
|
def self.clean_expired_pendings
|
||||||
STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
|
STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddForceDeleteDataToDomains < ActiveRecord::Migration[5.0]
|
||||||
|
def change
|
||||||
|
add_column :domains, :force_delete_data, :hstore
|
||||||
|
end
|
||||||
|
end
|
|
@ -744,7 +744,9 @@ CREATE TABLE public.domains (
|
||||||
up_date timestamp without time zone,
|
up_date timestamp without time zone,
|
||||||
uuid uuid DEFAULT public.gen_random_uuid() NOT NULL,
|
uuid uuid DEFAULT public.gen_random_uuid() NOT NULL,
|
||||||
locked_by_registrant_at timestamp without time zone,
|
locked_by_registrant_at timestamp without time zone,
|
||||||
force_delete_start timestamp without time zone
|
force_delete_start timestamp without time zone,
|
||||||
|
force_delete_data public.hstore
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -4336,6 +4338,7 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||||
('20191206183853'),
|
('20191206183853'),
|
||||||
('20191212133136'),
|
('20191212133136'),
|
||||||
('20191227110904'),
|
('20191227110904'),
|
||||||
('20200113091254');
|
('20200113091254'),
|
||||||
|
('20200115102202');
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,7 @@ class NewDomainForceDeleteTest < ActiveSupport::TestCase
|
||||||
asserted_status = DomainStatus::CLIENT_HOLD
|
asserted_status = DomainStatus::CLIENT_HOLD
|
||||||
@domain.update_columns(valid_to: Time.zone.parse('2010-10-05'),
|
@domain.update_columns(valid_to: Time.zone.parse('2010-10-05'),
|
||||||
force_delete_date: nil)
|
force_delete_date: nil)
|
||||||
|
@domain.update(template_name: 'legal_person')
|
||||||
|
|
||||||
travel_to Time.zone.parse('2010-07-05')
|
travel_to Time.zone.parse('2010-07-05')
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ class AdminAreaDomainForceDeleteTest < ApplicationSystemTestCase
|
||||||
def test_notifies_registrant_and_admin_contacts_by_email_by_default
|
def test_notifies_registrant_and_admin_contacts_by_email_by_default
|
||||||
assert_emails 1 do
|
assert_emails 1 do
|
||||||
visit edit_admin_domain_url(@domain)
|
visit edit_admin_domain_url(@domain)
|
||||||
|
find(:css, '#soft_delete').set(false)
|
||||||
click_link_or_button 'Force delete domain'
|
click_link_or_button 'Force delete domain'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -62,4 +63,4 @@ class AdminAreaDomainForceDeleteTest < ApplicationSystemTestCase
|
||||||
assert_no_button 'Schedule force delete'
|
assert_no_button 'Schedule force delete'
|
||||||
assert_no_link 'Schedule force delete'
|
assert_no_link 'Schedule force delete'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue