Merge branch 'story/115762063--show-historical-nested' into staging

# Conflicts:
#	app/models/domain.rb
#	app/views/admin/domains/partials/_version.haml
#	config/locales/en.yml
This commit is contained in:
Vladimir Krylov 2016-03-23 18:30:34 +02:00
commit f69c4ef919
7 changed files with 155 additions and 86 deletions

View file

@ -72,4 +72,15 @@ module ApplicationHelper
link_to(title, url_for(sort: {param_name => order}), class: "sort_link #{order}")
end
def changing_css_class(version, *attrs)
return unless version
css_class = "text-warning"
if attrs.size == 1
version.object_changes.to_h[attrs.first] && css_class
else
version.object_changes.to_h.slice(*attrs).any? && css_class
end
end
end

View file

@ -3,6 +3,7 @@ module Versions
extend ActiveSupport::Concern
included do
attr_accessor :version_loader
has_paper_trail class_name: "#{model_name}Version"
# add creator and updator
@ -55,4 +56,23 @@ module Versions
domains.each(&:touch_with_version)
end
end
module ClassMethods
def all_versions_for(ids, time)
ver_klass = paper_trail_version_class
from_history = ver_klass.where(item_id: ids).
order(:item_id).
preceding(time + 1, true).
select("distinct on (item_id) #{ver_klass.table_name}.*").
map do |ver|
o = new(ver.object)
o.version_loader = ver
ver.object_changes.to_h.each { |k, v| o[k]=v[-1] }
o
end
not_in_history = where(id: (ids - from_history.map(&:id)))
from_history + not_in_history
end
end
end

View file

@ -746,6 +746,7 @@ class Domain < ActiveRecord::Base
log[:dnskeys] = dnskey_ids
log[:legal_documents]= [legal_document_id]
log[:registrant] = [registrant_id]
log[:dnskeys] = dnskeys_ids
log
end

View file

@ -1,4 +1,6 @@
= render 'shared/title', name: @version.reify.name
- contact = Contact.new(@version.object.to_h)
- @version.object_changes.to_h.each{|k,v| contact[k]=v.last}
= render 'shared/title', name: contact.name
.row
.col-md-8
@ -11,55 +13,64 @@
.panel-body
%dl.dl-horizontal
%dt= t(:id)
%dd= @version.reify.code
%dd{class: changing_css_class(@version,"code")}
= contact.code
%dt= t(:statuses)
%dd{class: changing_css_class(@version,"statuses")}
= contact.statuses.join(", ")
%dt= t(:ident)
%dd= ident_for(@version.reify)
%dd{class: changing_css_class(@version,"ident_country_code", "ident_type", "ident")}
= ident_for(contact)
%dt= t(:email)
%dd= @version.reify.email
%dd{class: changing_css_class(@version,"email")}
= contact.email
%dt= t(:phone)
%dd= @version.reify.phone
%dd{class: changing_css_class(@version,"phone")}
= contact.phone
- if @version.reify.fax
- if contact.fax
%dt= t(:fax)
%dd= @version.reify.fax
%dd{class: changing_css_class(@version,"fax")}
= contact.fax
%br
%dt= t(:created)
%dd
= l(@version.reify.created_at, format: :short)
%dd{class: changing_css_class(@version,"created_at")}
= l(contact.created_at, format: :short)
%dt= t(:updated)
%dd
= l(@version.reify.updated_at, format: :short)
%dd{class: changing_css_class(@version,"updated_at")}
= l(contact.updated_at, format: :short)
%dt= t(:registrar)
%dd
- if @version.reify.registrar.present?
= link_to(@version.reify.registrar, admin_registrar_path(@version.reify.registrar))
%dd{class: changing_css_class(@version,"registrar_id")}
- if contact.registrar.present?
= link_to(contact.registrar, admin_registrar_path(contact.registrar))
%dl.dl-horizontal
- if @version.reify.org_name.present?
- if contact.org_name.present?
%dt= t(:org_name)
%dd= @version.reify.org_name
%dd{class: changing_css_class(@version,"org_name")}= contact.org_name
%dt= t(:street)
%dd= @version.reify.street.to_s.gsub("\n", '<br>').html_safe
%dd{class: changing_css_class(@version,"street")}= contact.street.to_s.gsub("\n", '<br>').html_safe
%dt= t(:city)
%dd= @version.reify.city
%dd{class: changing_css_class(@version,"city")}= contact.city
%dt= t(:zip)
%dd= @version.reify.zip
%dd{class: changing_css_class(@version,"zip")}= contact.zip
%dt= t(:state)
%dd= @version.reify.state
%dd{class: changing_css_class(@version,"state")}= contact.state
%dt= t(:country)
%dd= @version.reify.country
%dd{class: changing_css_class(@version,"country_code")}= contact.country
%span{:style => "padding-right:10px; float: right;"}

View file

@ -1,11 +1,13 @@
= render 'shared/title', name: @version.reify.name
- domain = Domain.new(@version.object.to_h)
- @version.object_changes.to_h.each{|k,v| domain[k]=v.last}
- if @version
- children = HashWithIndifferentAccess.new(@version.children)
- nameservers = Nameserver.where(id: children[:nameservers])
- tech_contacts = Contact.where(id: children[:tech_contacts])
- admin_contacts = Contact.where(id: children[:admin_contacts])
- registrant = Contact.where(id: children[:registrant])
- nameservers = Nameserver.all_versions_for(children[:nameservers], @version.created_at)
- tech_contacts = Contact.all_versions_for(children[:tech_contacts], @version.created_at)
- admin_contacts = Contact.all_versions_for(children[:admin_contacts], @version.created_at)
- registrant = Contact.all_versions_for(children[:registrant], @version.created_at)
- event = @version.event
- creator = plain_username(@version.terminator)
@ -21,36 +23,47 @@
.panel-body
%dl.dl-horizontal
%dt= t(:name)
%dd= link_to(@version.reify.name, admin_domain_path(@version.item_id))
%dd= link_to(domain.name, admin_domain_path(@version.item_id))
%dt= t(:statuses)
%dd
- if @version.reify.statuses.present?
- @version.reify.statuses.each do |s|
%dd{class: changing_css_class(@version,"statuses")}
- if domain.statuses.present?
- domain.statuses.each do |s|
= s
%dt= t(:registrant)
%dd
%dd{class: changing_css_class(@version,"registrant_id")}
- registrant.each do |r|
- link = r.version_loader ? admin_contact_version_path(r.version_loader.try(:id)) : admin_contact_path(r.id)
= link_to link, target: "contact_#{r.id}" do
= r[:name]
= r[:phone]
= r[:email]
= r[:code]
%br
%dt= t(:admin_contacts)
%dd
- admin_contacts.each do |r|
- link = r.version_loader ? admin_contact_version_path(r.version_loader.try(:id)) : admin_contact_path(r.id)
= link_to link, target: "contact_#{r.id}" do
= r[:name]
= r[:phone]
= r[:email]
= r[:code]
%br
%dt= t(:tech_contacts)
%dd
- tech_contacts.each do |r|
- link = r.version_loader ? admin_contact_version_path(r.version_loader.try(:id)) : admin_contact_path(r.id)
= link_to link, target: "contact_#{r.id}" do
= r[:name]
= r[:phone]
= r[:email]
= r[:code]
%br
%dt= t(:nameservers)
%dd
- nameservers.each do |ns|
@ -58,8 +71,12 @@
= ns[:ipv4]
= ns[:ipv6]
%br
%dt= t(:registrar)
%dd= @version.reify.registrar.name
%dd{class: changing_css_class(@version,"registrar_id")}
= link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do
= domain.registrar.name
%span{:style => "padding-right:10px; padding-top:40px; float: right; bottom: 10px;"}
- if @version.previous
= link_to(t(:previous),

View file

@ -6,10 +6,10 @@
- if domain.present?
- if version # normal history
- children = HashWithIndifferentAccess.new(version.children)
- nameservers = Nameserver.where(id: children[:nameservers])
- tech_contacts = Contact.where(id: children[:tech_contacts])
- admin_contacts = Contact.where(id: children[:admin_contacts])
- registrant = Contact.where(id: children[:registrant])
- nameservers = Nameserver.all_versions_for(children[:nameservers], version.created_at)
- tech_contacts = Contact.all_versions_for(children[:tech_contacts], version.created_at)
- admin_contacts = Contact.all_versions_for(children[:admin_contacts], version.created_at)
- registrant = Contact.all_versions_for(children[:registrant], version.created_at)
- event = version.event
- creator = plain_username(version.terminator)
- else # pending history
@ -31,7 +31,7 @@
%br
= creator
%td
%td{class: changing_css_class(version,"statuses")}
%p
- if domain.statuses.present?
- domain.statuses.each do |s|
@ -46,7 +46,7 @@
%p
= link_to t(:pending_epp), '#', class: 'js-pending-toggle'
%td
%td{class: changing_css_class(version, "period", "period_unit", "valid_from", "valid_to")}
%p
= "#{domain.period}#{domain.period_unit}"
%br
@ -55,7 +55,9 @@
= "#{l(domain.valid_to, format: :date)}"
%td
- registrant.each do |r|
- Array(registrant).each do |r|
- link = r.version_loader ? admin_contact_version_path(r.version_loader.try(:id)) : admin_contact_path(r.id)
= link_to link, target: "contact_#{r.id}" do
%p
= r[:name]
= r[:phone]
@ -64,7 +66,9 @@
= r[:code]
%td
- admin_contacts.each do |ac|
- Array(admin_contacts).each do |ac|
- link = ac.version_loader ? admin_contact_version_path(ac.version_loader.try(:id)) : admin_contact_path(ac.id)
= link_to link, target: "contact_#{ac.id}" do
%p
= ac[:name]
= ac[:phone]
@ -73,7 +77,9 @@
= ac[:code]
%td
- tech_contacts.each do |tc|
- Array(tech_contacts).each do |tc|
- link = tc.version_loader ? admin_contact_version_path(tc.version_loader.try(:id)) : admin_contact_path(tc.id)
= link_to link, target: "contact_#{tc.id}" do
%p
= tc[:name]
= tc[:phone]
@ -83,14 +89,17 @@
%td
%p
- nameservers.each do |ns|
- Array(nameservers).each do |ns|
= ns[:hostname]
%br
= ns[:ipv4]
= ns[:ipv6]
= ns[:ipv4].presence
= ns[:ipv6].presence
%br
%td
%td{class: changing_css_class(version,"registrar_id")}
- if domain.registrar
%p
= link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do
= domain.registrar.name
- if domain.pending_json.present?

View file

@ -5,7 +5,7 @@
.row
.col-md-12
.table-responsive
%table.table-hover.table-bordered.table-condensed
%table.table.table-bordered.table-condensed
%thead
%tr
%th{class: 'col-xs-1'}= t(:timestap)