mirror of
https://github.com/internetee/registry.git
synced 2025-07-22 02:35:57 +02:00
Basic archiving overhaul
This commit is contained in:
parent
19846a3abf
commit
3b1e21d6eb
12 changed files with 260 additions and 30 deletions
|
@ -1,5 +1,5 @@
|
|||
class Client::DomainVersionsController < ClientController
|
||||
before_action :set_version, only: [:show]
|
||||
before_action :set_domain, only: [:show]
|
||||
|
||||
def index
|
||||
@versions = DomainVersion.registrar_events(current_registrar.id)
|
||||
|
@ -7,13 +7,12 @@ class Client::DomainVersionsController < ClientController
|
|||
end
|
||||
|
||||
def show
|
||||
@event = params[:event]
|
||||
@domain = @version.reify(has_multiple: true) unless @event == 'create'
|
||||
@versions = @domain.versions.reverse
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_version
|
||||
@version = DomainVersion.find(params[:id])
|
||||
def set_domain
|
||||
@domain = Domain.find(params[:id])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,8 +5,6 @@ class Contact < ActiveRecord::Base
|
|||
|
||||
include EppErrors
|
||||
|
||||
#has_one :local_address, dependent: :destroy
|
||||
#has_one :international_address, dependent: :destroy
|
||||
has_one :address, dependent: :destroy
|
||||
has_one :disclosure, class_name: 'ContactDisclosure'
|
||||
|
||||
|
@ -35,6 +33,11 @@ class Contact < ActiveRecord::Base
|
|||
delegate :street, to: :address#, prefix: true
|
||||
delegate :zip, to: :address#, prefix: true
|
||||
|
||||
# callbacks
|
||||
#after_commit :domains_snapshot
|
||||
after_update :domains_snapshot
|
||||
after_destroy :domains_snapshot
|
||||
|
||||
#scopes
|
||||
scope :current_registrars, ->(id) { where(registrar_id: id) }
|
||||
# archiving
|
||||
|
@ -60,6 +63,13 @@ class Contact < ActiveRecord::Base
|
|||
errors.add(:ident, 'bad format') unless code.valid?
|
||||
end
|
||||
|
||||
def domains_snapshot
|
||||
(domains + domains_owned).uniq.each do |domain|
|
||||
next unless domain.is_a?(Domain)
|
||||
domain.touch_with_version # Method from paper_trail
|
||||
end
|
||||
end
|
||||
|
||||
def juridical?
|
||||
ident_type == IDENT_TYPE_ICO
|
||||
end
|
||||
|
@ -124,6 +134,17 @@ class Contact < ActiveRecord::Base
|
|||
name
|
||||
end
|
||||
|
||||
# for archiving
|
||||
def snapshot
|
||||
{
|
||||
name: name,
|
||||
phone: phone,
|
||||
code: code,
|
||||
ident: ident,
|
||||
email: email
|
||||
}
|
||||
end
|
||||
|
||||
class << self
|
||||
# non-EPP
|
||||
|
||||
|
|
|
@ -57,10 +57,31 @@ class Domain < ActiveRecord::Base
|
|||
validate :validate_dnskeys_uniqueness
|
||||
validate :validate_nameserver_ips
|
||||
|
||||
attr_accessor :owner_contact_typeahead
|
||||
attr_accessor :owner_contact_typeahead, :update_me
|
||||
|
||||
# archiving
|
||||
has_paper_trail class_name: 'DomainVersion'
|
||||
has_paper_trail class_name: 'DomainVersion', meta: { snapshot: :create_snapshot }
|
||||
|
||||
# TODO Add touch_with_version hook to the DomainContact as well to track add/delete(?) of contact
|
||||
# Not sure what hook to use since Contact.destroy fires update from here so possibly after_create
|
||||
|
||||
def create_snapshot
|
||||
oc = owner_contact.snapshot if owner_contact.is_a?(Contact)
|
||||
{
|
||||
owner_contact: oc,
|
||||
tech_contacts: tech_contacts.map{ |tc| tc.snapshot },
|
||||
admin_contacts: admin_contacts.map{ |ac| ac.snapshot },
|
||||
nameservers: nameservers.map{ |ns| ns.snapshot },
|
||||
domain: make_snapshot
|
||||
}.to_yaml
|
||||
end
|
||||
|
||||
def make_snapshot
|
||||
{
|
||||
name: name,
|
||||
status: status
|
||||
}
|
||||
end
|
||||
|
||||
def name=(value)
|
||||
value.strip!
|
||||
|
@ -254,4 +275,28 @@ class Domain < ActiveRecord::Base
|
|||
return period.to_i.years if unit == 'y'
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
#for archiving
|
||||
#def version_owner
|
||||
# return nil unless owner_contact
|
||||
# owner_contact.id
|
||||
#end
|
||||
|
||||
#def version_admin_contacts
|
||||
# return nil unless admin_contacts
|
||||
# return admin_contacts.map { |ns| ns.id }
|
||||
#end
|
||||
|
||||
#def version_tech_contacts
|
||||
# return nil unless tech_contacts
|
||||
# return tech_contacts.map { |ns| ns.id }
|
||||
#end
|
||||
|
||||
#def version_nameservers
|
||||
# return nil unless nameservers
|
||||
# return nameservers.map { |ns| ns.id }
|
||||
#end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,4 +5,8 @@ class DomainVersion < PaperTrail::Version
|
|||
|
||||
self.table_name = :domain_versions
|
||||
self.sequence_name = :domain_version_id_seq
|
||||
|
||||
def load_snapshot
|
||||
YAML.load(snapshot)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,6 +27,14 @@ class Nameserver < ActiveRecord::Base
|
|||
}
|
||||
end
|
||||
|
||||
def snapshot
|
||||
{
|
||||
hostname: hostname,
|
||||
ipv4: ipv4,
|
||||
ipv6: ipv6
|
||||
}
|
||||
end
|
||||
|
||||
def to_s
|
||||
hostname
|
||||
end
|
||||
|
|
|
@ -2,23 +2,58 @@
|
|||
.col-sm-6
|
||||
%h2.text-center-xs= t('shared.domains')
|
||||
%hr
|
||||
.row
|
||||
- if @event != 'create'
|
||||
.col-sm-6= render 'client/domains/partials/general'
|
||||
- if @event != 'create' && @domain.owner_contact
|
||||
.col-sm-6= render 'client/domains/partials/owner'
|
||||
- if @event != 'create' && @domain.tech_contacts
|
||||
.col-sm-6= render 'client/domains/partials/tech_contacts'
|
||||
.col-sm-6
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
%h3.panel-title= t('shared.version')
|
||||
.panel-body
|
||||
%dl.dl-horizontal
|
||||
%dt= t('shared.whodunnit')
|
||||
%dd= @version.whodunnit
|
||||
%dt= t('shared.event')
|
||||
%dd= @version.event
|
||||
%dt= t('shared.created_at')
|
||||
%dd= l(@version.created_at, format: :short)
|
||||
|
||||
.row
|
||||
.col-md-12
|
||||
.table-responsive
|
||||
%table.table-hover.table-bordered.table-condensed
|
||||
%thead
|
||||
%tr
|
||||
%th{class: 'col-xs-1'}= 'domain'
|
||||
%th{class: 'col-xs-2'}= 'owner'
|
||||
%th{class: 'col-xs-2'}= 'admins'
|
||||
%th{class: 'col-xs-2'}= 'techs'
|
||||
%th{class: 'col-xs-2'}= 'ns'
|
||||
%th{class: 'col-xs-1'}= 'datetime'
|
||||
%tbody
|
||||
- @versions.each do |version|
|
||||
- children = YAML.load(version.snapshot)
|
||||
- next unless children.is_a?(Hash)
|
||||
- children = HashWithIndifferentAccess.new(children)
|
||||
%tr
|
||||
%td
|
||||
- if children[:domain]
|
||||
= children[:domain][:name]
|
||||
= children[:domain][:status]
|
||||
%td
|
||||
- if children[:owner_contact]
|
||||
%p{:style => "font-size:x-small;"}
|
||||
= children[:owner_contact][:name] + ","
|
||||
= children[:owner_contact][:phone] + ","
|
||||
= children[:owner_contact][:email] + ","
|
||||
= children[:owner_contact][:code]
|
||||
%td
|
||||
- if children[:admin_contacts]
|
||||
- children[:admin_contacts].each do |ac|
|
||||
%p{:style => "font-size:x-small;"}
|
||||
= ac[:name] + ","
|
||||
= ac[:phone] + ","
|
||||
= ac[:email] + ","
|
||||
= ac[:code]
|
||||
%td
|
||||
- if children[:tech_contacts]
|
||||
- children[:tech_contacts].each do |tc|
|
||||
%p{:style => "font-size:x-small;"}
|
||||
= tc[:name] + ","
|
||||
= tc[:phone] + ","
|
||||
= tc[:email] + ","
|
||||
= tc[:code]
|
||||
%td
|
||||
- if children[:nameservers]
|
||||
- children[:nameservers].each do |ns|
|
||||
%p{:style => "font-size:x-small;"}
|
||||
= ns[:hostname] + ","
|
||||
= ns[:ipv4] || ns[:ipv6]
|
||||
|
||||
%td= l(version.created_at, format: :short)
|
||||
|
||||
|
|
|
@ -30,12 +30,14 @@
|
|||
= sort_link(@q, 'owner_contact_name', t('shared.owner'))
|
||||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'valid_to', t('shared.valid_to'))
|
||||
%th{class: 'col-xs-1'}
|
||||
%tbody
|
||||
- @domains.each do |x|
|
||||
%tr
|
||||
%td= link_to(x, client_domain_path(x))
|
||||
%td= link_to(x.owner_contact, [:client, x.owner_contact])
|
||||
%td= l(x.valid_to, format: :short)
|
||||
%td= link_to t('shared.history'), client_domain_version_path(x.id), class: 'btn btn-primary'
|
||||
.row
|
||||
.col-md-12
|
||||
= paginate @domains
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue