mirror of
https://github.com/internetee/registry.git
synced 2025-08-12 12:39:34 +02:00
Fix domain history ordering and current state display
- Ensure "Current state" (pending/current domain) is always shown as the first row in domain history. - Sort post-update domain states by updated_at descending for correct chronological order. - Fix version navigation and sidebar highlighting for current state in domain version show view. - Unify logic for displaying domain and contact data in both history and single version views. - Remove legacy ObjectVersionsParser usage and handle nil @version cases gracefully. - Refactor partials and controller logic to ensure all rows in history reflect the correct post-update state.
This commit is contained in:
parent
0b13cfbe0f
commit
9e5b2743a3
6 changed files with 74 additions and 45 deletions
|
@ -56,14 +56,18 @@ module Admin
|
||||||
|
|
||||||
def show
|
def show
|
||||||
per_page = 7
|
per_page = 7
|
||||||
@version = Version::DomainVersion.find(params[:id])
|
if params[:current]
|
||||||
@versions = Version::DomainVersion.where(item_id: @version.item_id).order(created_at: :desc, id: :desc)
|
@domain = Domain.find(params[:domain_id] || params[:id])
|
||||||
|
@version = nil
|
||||||
|
else
|
||||||
|
@version = Version::DomainVersion.find(params[:id])
|
||||||
|
@domain = Domain.find(@version.item_id)
|
||||||
|
end
|
||||||
|
@versions = Version::DomainVersion.where(item_id: @domain.id).order(created_at: :desc, id: :desc)
|
||||||
@versions_map = @versions.all.map(&:id)
|
@versions_map = @versions.all.map(&:id)
|
||||||
|
|
||||||
# what we do is calc amount of results until needed version
|
|
||||||
# then we cacl which page it is
|
|
||||||
if params[:page].blank?
|
if params[:page].blank?
|
||||||
counter = @versions_map.index(@version.id) + 1
|
counter = @version ? (@versions_map.index(@version.id) + 1) : 1
|
||||||
page = counter / per_page
|
page = counter / per_page
|
||||||
page += 1 if (counter % per_page) != 0
|
page += 1 if (counter % per_page) != 0
|
||||||
params[:page] = page
|
params[:page] = page
|
||||||
|
|
|
@ -54,10 +54,22 @@ module Admin
|
||||||
def versions
|
def versions
|
||||||
@domain = Domain.where(id: params[:domain_id]).includes({ versions: :item }).first
|
@domain = Domain.where(id: params[:domain_id]).includes({ versions: :item }).first
|
||||||
@versions = @domain.versions
|
@versions = @domain.versions
|
||||||
@last_version = @versions.last
|
|
||||||
@old_versions = Kaminari.paginate_array(@versions.not_creates.reverse)
|
@old_versions = Kaminari.paginate_array(@versions.not_creates.reverse)
|
||||||
.page(params[:page])
|
.page(params[:page])
|
||||||
.per(DEFAULT_VERSIONS_PER_PAGE)
|
.per(DEFAULT_VERSIONS_PER_PAGE)
|
||||||
|
|
||||||
|
@post_update_domains = []
|
||||||
|
old_versions_arr = @old_versions.to_a
|
||||||
|
old_versions_arr.each_with_index do |version, idx|
|
||||||
|
next_version = old_versions_arr[idx - 1] # reverse order!
|
||||||
|
if next_version
|
||||||
|
@post_update_domains << (next_version.reify || @domain)
|
||||||
|
else
|
||||||
|
@post_update_domains << @domain
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@post_update_domains.sort_by! { |d| -d.updated_at.to_i }
|
||||||
end
|
end
|
||||||
|
|
||||||
def download
|
def download
|
||||||
|
|
|
@ -90,4 +90,4 @@
|
||||||
= paginate @versions
|
= paginate @versions
|
||||||
.col-md-6.text-right
|
.col-md-6.text-right
|
||||||
.pagination
|
.pagination
|
||||||
= t(:result_count, count: @versions.total_count)
|
= t(:result_count, count: @versions.total_count)
|
|
@ -1,54 +1,64 @@
|
||||||
- domain = ObjectVersionsParser.new(@version).parse
|
|
||||||
|
|
||||||
- if @version
|
- if @version
|
||||||
- children = HashWithIndifferentAccess.new(@version.children)
|
- children = HashWithIndifferentAccess.new(@version.children)
|
||||||
- nameservers = Nameserver.all_versions_for(children[:nameservers], @version.created_at)
|
- nameservers = Nameserver.all_versions_for(children[:nameservers], @domain.updated_at)
|
||||||
- dnskeys = Dnskey.all_versions_for(children[:dnskeys], @version.created_at)
|
- dnskeys = Dnskey.all_versions_for(children[:dnskeys], @domain.updated_at)
|
||||||
- tech_contacts = Contact.all_versions_for(children[:tech_contacts], @version.created_at)
|
- tech_contacts = Contact.all_versions_for(children[:tech_contacts], @domain.updated_at)
|
||||||
- admin_contacts = Contact.all_versions_for(children[:admin_contacts], @version.created_at)
|
- admin_contacts = Contact.all_versions_for(children[:admin_contacts], @domain.updated_at)
|
||||||
- registrant = Contact.all_versions_for(children[:registrant], @version.created_at)
|
- registrant = Contact.all_versions_for(children[:registrant], @domain.updated_at)
|
||||||
- event = @version.event
|
- event = @version.event
|
||||||
- creator = plain_username(@version.terminator)
|
- creator = plain_username(@version.terminator)
|
||||||
|
- else
|
||||||
|
- nameservers = @domain.nameservers
|
||||||
|
- dnskeys = @domain.dnskeys
|
||||||
|
- tech_contacts = @domain.tech_contacts
|
||||||
|
- admin_contacts = @domain.admin_contacts
|
||||||
|
- registrant = [@domain.registrant]
|
||||||
|
- event = t('current_state')
|
||||||
|
- creator = @domain.creator_str
|
||||||
|
|
||||||
= render 'shared/title', name: domain.name
|
= render 'shared/title', name: @domain.name
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-md-8
|
.col-md-8
|
||||||
.panel.panel-default{:style => "min-height:450px;"}
|
.panel.panel-default{:style => "min-height:450px;"}
|
||||||
.panel-heading
|
.panel-heading
|
||||||
%h3.panel-title
|
%h3.panel-title
|
||||||
= l(@version.created_at, format: :short)
|
- if @version
|
||||||
= event
|
= l(@version.created_at, format: :short)
|
||||||
= creator
|
= event
|
||||||
|
= creator
|
||||||
|
- else
|
||||||
|
= t('current_state')
|
||||||
|
= creator
|
||||||
.panel-body
|
.panel-body
|
||||||
%dl.dl-horizontal
|
%dl.dl-horizontal
|
||||||
%dt= t(:name)
|
%dt= t(:name)
|
||||||
- if !domain.name
|
- if !@domain.name
|
||||||
- domain_name = Domain.find(@version.item_id).try(:name)
|
- domain_name = Domain.find(@version.item_id).try(:name)
|
||||||
- else
|
- else
|
||||||
- domain_name = domain.name
|
- domain_name = @domain.name
|
||||||
%dd= link_to(domain_name, admin_domain_path(@version.item_id))
|
%dd= link_to(domain_name, admin_domain_path(@version ? @version.item_id : @domain.id))
|
||||||
|
|
||||||
%dt= t('.created')
|
%dt= t('.created')
|
||||||
%dd
|
%dd
|
||||||
= l(domain.created_at, format: :short)
|
= l(@domain.created_at, format: :short)
|
||||||
|
|
||||||
%dt= t('.updated')
|
%dt= t('.updated')
|
||||||
%dd
|
%dd
|
||||||
= l(domain.updated_at, format: :short)
|
= l(@domain.updated_at, format: :short)
|
||||||
|
|
||||||
%br
|
%br
|
||||||
|
|
||||||
%dt= t(:statuses)
|
%dt= t(:statuses)
|
||||||
%dd{class: changing_css_class(@version,"statuses")}
|
%dd{class: changing_css_class(@version,"statuses")}
|
||||||
- if domain.statuses.present?
|
- if @domain.statuses.present?
|
||||||
- domain.statuses.each do |s|
|
- @domain.statuses.each do |s|
|
||||||
= s
|
= s
|
||||||
|
|
||||||
%dt= "Status notes"
|
%dt= "Status notes"
|
||||||
%dd{class: changing_css_class(@version,"statuses")}
|
%dd{class: changing_css_class(@version,"statuses")}
|
||||||
- if domain.status_notes.present?
|
- if @domain.status_notes.present?
|
||||||
- domain.status_notes.each do |s|
|
- @domain.status_notes.each do |s|
|
||||||
= s
|
= s
|
||||||
|
|
||||||
%dt= t('.registrant')
|
%dt= t('.registrant')
|
||||||
|
@ -102,21 +112,21 @@
|
||||||
\...#{ns[:public_key].to_s[-20,20]}
|
\...#{ns[:public_key].to_s[-20,20]}
|
||||||
%br
|
%br
|
||||||
|
|
||||||
- if domain.registrar
|
- if @domain.registrar
|
||||||
%dt= t(:registrar_name)
|
%dt= t(:registrar_name)
|
||||||
%dd{class: changing_css_class(@version,"registrar_id")}
|
%dd{class: changing_css_class(@version,"registrar_id")}
|
||||||
= link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do
|
= link_to admin_registrar_path(@domain.registrar), target: "registrar_#{@domain.registrar.id}" do
|
||||||
= domain.registrar.name
|
= @domain.registrar.name
|
||||||
%span{:style => "margin: 20px 20px; clear:both;"}
|
%span{:style => "margin: 20px 20px; clear:both;"}
|
||||||
|
|
||||||
- if (prev = @versions_map[(@versions_map.index(@version.id) - 1)]) && @versions_map.index(@version.id) != 0
|
- if @version && (prev = @versions_map[(@versions_map.index(@version.id) - 1)]) && @versions_map.index(@version.id) != 0
|
||||||
= link_to(t(:previous),
|
= link_to(t(:previous),
|
||||||
admin_domain_version_path(prev),
|
admin_domain_version_path(prev),
|
||||||
class: 'btn btn-primary')
|
class: 'btn btn-primary')
|
||||||
- else
|
- else
|
||||||
%a.btn.btn-primary.disabled{:href => "#"}
|
%a.btn.btn-primary.disabled{:href => "#"}
|
||||||
%span= t(:previous)
|
%span= t(:previous)
|
||||||
- if nxt = @versions_map[(@versions_map.index(@version.id) + 1)]
|
- if @version && (nxt = @versions_map[(@versions_map.index(@version.id) + 1)])
|
||||||
= link_to(t(:next),
|
= link_to(t(:next),
|
||||||
admin_domain_version_path(nxt),
|
admin_domain_version_path(nxt),
|
||||||
class: 'btn btn-default')
|
class: 'btn btn-default')
|
||||||
|
@ -127,10 +137,12 @@
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.panel.panel-default{:style => "min-height:450px;"}
|
.panel.panel-default{:style => "min-height:450px;"}
|
||||||
%ul.nav.nav-pills.nav-stacked
|
%ul.nav.nav-pills.nav-stacked
|
||||||
|
%li{class: ('active' if @version.nil?)}
|
||||||
|
= link_to t('current_state'), admin_domain_version_path(current: 1, domain_id: @domain.id)
|
||||||
- @versions.each do |vs|
|
- @versions.each do |vs|
|
||||||
%li{class: (vs.id == @version.id) && :active}
|
%li{class: (@version && vs.id == @version.id) && :active}
|
||||||
= link_to admin_domain_version_path(vs) do
|
= link_to admin_domain_version_path(vs) do
|
||||||
= l(vs.created_at, format: :short)
|
= l(vs.created_at, format: :short)
|
||||||
= vs.event
|
= vs.event
|
||||||
%span{:style => "padding-left:10px; position: absolute; bottom: 10px;"}
|
%span{:style => "padding-left:10px; position: absolute; bottom: 10px;"}
|
||||||
= paginate @versions
|
= paginate @versions
|
|
@ -15,18 +15,19 @@
|
||||||
- event = version.event
|
- event = version.event
|
||||||
- creator = plain_username(version.terminator)
|
- creator = plain_username(version.terminator)
|
||||||
- whodunnit = version.try(:whodunnit)
|
- whodunnit = version.try(:whodunnit)
|
||||||
- else # pending history
|
- else # current version
|
||||||
- epp_req = false
|
- epp_req = false
|
||||||
- nameservers = domain.nameservers
|
- nameservers = domain.nameservers
|
||||||
- dnskeys = domain.dnskeys
|
- dnskeys = domain.dnskeys
|
||||||
- tech_contacts = domain.tech_contacts
|
- if defined?(@last_version) && @last_version
|
||||||
- admin_contacts = domain.admin_contacts
|
- children = HashWithIndifferentAccess.new(@last_version.children)
|
||||||
- registrant = domain.registrant
|
- tech_contacts = Contact.all_versions_for(children[:tech_contacts], @last_version.created_at)
|
||||||
- unless registrant
|
- admin_contacts = Contact.all_versions_for(children[:admin_contacts], @last_version.created_at)
|
||||||
- ver = Version::ContactVersion.where(item_id: domain.registrant_id).where(event: :destroy).last
|
- registrant = Contact.all_versions_for(children[:registrant], @last_version.created_at)
|
||||||
- registrant = ver.reify
|
- else
|
||||||
- registrant.version_loader = ver
|
- tech_contacts = domain.tech_contacts
|
||||||
- registrant = [registrant]
|
- admin_contacts = domain.admin_contacts
|
||||||
|
- registrant = [domain.registrant]
|
||||||
- creator = pending_user.try(:username)
|
- creator = pending_user.try(:username)
|
||||||
- event = 'pending'
|
- event = 'pending'
|
||||||
- whodunnit = false
|
- whodunnit = false
|
||||||
|
|
|
@ -32,10 +32,10 @@
|
||||||
domain: @domain, version: @last_version
|
domain: @domain, version: @last_version
|
||||||
|
|
||||||
-# all other older versions
|
-# all other older versions
|
||||||
- @old_versions.each do |version|
|
- @old_versions.each_with_index do |version, idx|
|
||||||
%tr.small
|
%tr.small
|
||||||
= render 'admin/domains/partials/version',
|
= render 'admin/domains/partials/version',
|
||||||
domain: version.reify, version: version.previous
|
domain: @post_update_domains[idx], version: version
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-md-6
|
.col-md-6
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue