diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb
index 215d6203c..491daf083 100644
--- a/app/controllers/admin/contact_versions_controller.rb
+++ b/app/controllers/admin/contact_versions_controller.rb
@@ -20,7 +20,7 @@ class Admin::ContactVersionsController < AdminController
end
end
- versions = ContactVersion.includes(:item).where(whereS)
+ versions = ContactVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q])
@versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
@@ -29,10 +29,20 @@ class Admin::ContactVersionsController < AdminController
def show
per_page = 7
- @version = ContactVersion.find(params[:id])
- @q = ContactVersion.where(item_id: @version.item_id).order(created_at: :asc).search
- @versions = @q.result.page(params[:page])
- @versions = @versions.per(per_page)
+ @version = ContactVersion.find(params[:id])
+ @versions = ContactVersion.where(item_id: @version.item_id).order(created_at: :desc, id: :desc)
+ @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?
+ counter = @versions_map.index(@version.id) + 1
+ page = counter / per_page
+ page += 1 if (counter % per_page) != 0
+ params[:page] = page
+ end
+
+ @versions = @versions.page(params[:page]).per(per_page)
end
def search
@@ -40,7 +50,7 @@ class Admin::ContactVersionsController < AdminController
end
def create_where_string(key, value)
- " AND object->>'#{key}' ~ '#{value}'"
+ " AND object->>'#{key}' ~* '#{value}'"
end
end
diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb
index 0d85e047f..8e350c247 100644
--- a/app/controllers/admin/domain_versions_controller.rb
+++ b/app/controllers/admin/domain_versions_controller.rb
@@ -8,13 +8,13 @@ class Admin::DomainVersionsController < AdminController
@versions = @q.result.page(params[:page])
search_params = params[:q].deep_dup
- if search_params[:registrant]
- registrant = Contact.find_by(name: search_params[:registrant])
+ if search_params[:registrant].present?
+ registrants = Contact.where("name ilike ?", "%#{search_params[:registrant].strip}%")
search_params.delete(:registrant)
end
- if search_params[:registrar]
- registrar = Registrar.find_by(name: search_params[:registrar])
+ if search_params[:registrar].present?
+ registrars = Registrar.where("name ilike ?", "%#{search_params[:registrar].strip}%")
search_params.delete(:registrar)
end
@@ -25,15 +25,19 @@ class Admin::DomainVersionsController < AdminController
case key
when 'event'
whereS += " AND event = '#{value}'"
+ when 'name'
+ whereS += " AND (object->>'name' ~* '#{value}' OR object_changes->>'name' ~* '#{value}')"
else
whereS += create_where_string(key, value)
end
end
- whereS += " AND object->>'registrant_id' = '#{registrant.id}'" if registrant
- whereS += " AND object->>'registrar_id' = '#{registrar.id}'" if registrar
+ whereS += " AND object->>'registrant_id' IN (#{registrants.map { |r| "'#{r.id.to_s}'" }.join ','})" if registrants.present?
+ whereS += " AND 1=0" if registrants == []
+ whereS += " AND object->>'registrar_id' IN (#{registrars.map { |r| "'#{r.id.to_s}'" }.join ','})" if registrars.present?
+ whereS += " AND 1=0" if registrars == []
- versions = DomainVersion.includes(:item).where(whereS)
+ versions = DomainVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q])
@versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
@@ -43,10 +47,20 @@ class Admin::DomainVersionsController < AdminController
def show
per_page = 7
- @version = DomainVersion.find(params[:id])
- @q = DomainVersion.where(item_id: @version.item_id).order(created_at: :desc).search
- @versions = @q.result.page(params[:page])
- @versions = @versions.per(per_page)
+ @version = DomainVersion.find(params[:id])
+ @versions = DomainVersion.where(item_id: @version.item_id).order(created_at: :desc, id: :desc)
+ @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?
+ counter = @versions_map.index(@version.id) + 1
+ page = counter / per_page
+ page += 1 if (counter % per_page) != 0
+ params[:page] = page
+ end
+
+ @versions = @versions.page(params[:page]).per(per_page)
end
def search
@@ -54,7 +68,7 @@ class Admin::DomainVersionsController < AdminController
end
def create_where_string(key, value)
- " AND object->>'#{key}' ~ '#{value}'"
+ " AND object->>'#{key}' ~* '#{value}'"
end
diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml
index 68e74c547..93699d4e3 100644
--- a/app/views/admin/contact_versions/index.haml
+++ b/app/views/admin/contact_versions/index.haml
@@ -11,21 +11,18 @@
.col-md-3
.form-group
= f.label :id
- = f.search_field :id, value: params[:q][:id], class: 'form-control', placeholder: t(:id)
+ = f.search_field :code, value: params[:q][:code], class: 'form-control', placeholder: t(:id)
.col-md-3
.form-group
= f.label :ident
= f.search_field :ident, value: params[:q][:ident], class: 'form-control', placeholder: t(:ident)
- .col-md-3
- .form-group
- = f.label :phone
- = f.search_field :phone, value: params[:q][:phone], class: 'form-control', placeholder: t(:phone)
- .row
- .col-md-3
.col-md-3
.form-group
= label_tag :action
- = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy']], params[:q][:event]), { include_blank:true, multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' }
+ = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy'], ['Create', 'create']], params[:q][:event]), { include_blank:true, multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' }
+ .row
+ .col-md-3
+ .col-md-3
.col-md-3
.form-group
= label_tag t(:results_per_page)
@@ -52,33 +49,35 @@
= t(:id)
%th{class: 'col-xs-2'}
= t(:ident)
- %th{class: 'col-xs-2'}
- = t(:phone)
%th{class: 'col-xs-2'}
= t(:registrar)
- %th{class: 'col-xs-2'}
- = t(:action_date)
%th{class: 'col-xs-2'}
= t(:action)
+ %th{class: 'col-xs-2'}
+ = t(:created_at)
%tbody
- @versions.each do |version|
- - if version.reify
+ - if version
+ - contact = Contact.new(version.object.to_h)
+ - version.object_changes.to_h.each{|k,v| contact[k]=v.last}
+
%tr
- %td= link_to(version.reify.name, admin_contact_version_path(version.id))
- %td= version.reify.code
- %td= ident_for(version.reify)
- %td= version.reify.phone
+ %td= link_to(contact.name, admin_contact_version_path(version.id))
+ %td= contact.code
+ %td= ident_for(contact)
%td
- - if version.reify.registrar
- = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar))
- %td= l(version.created_at, format: :short)
+ - if contact.registrar
+ = link_to(contact.registrar, admin_registrar_path(contact.registrar))
%td= version.event
+ %td= l(version.created_at, format: :short)
.row
.col-md-6
= paginate @versions
.col-md-6.text-right
+ .pagination
+ = t(:result_count, count: @versions.total_count)
:coffee
diff --git a/app/views/admin/contact_versions/show.haml b/app/views/admin/contact_versions/show.haml
index d6762a8c6..fc5c48352 100644
--- a/app/views/admin/contact_versions/show.haml
+++ b/app/views/admin/contact_versions/show.haml
@@ -24,15 +24,17 @@
%dd{class: changing_css_class(@version,"ident_country_code", "ident_type", "ident")}
= ident_for(contact)
- %dt= t(:email)
- %dd{class: changing_css_class(@version,"email")}
- = contact.email
+ - if contact.email.present?
+ %dt= t(:email)
+ %dd{class: changing_css_class(@version,"email")}
+ = contact.email
- %dt= t(:phone)
- %dd{class: changing_css_class(@version,"phone")}
- = contact.phone
+ - if contact.phone.present?
+ %dt= t(:phone)
+ %dd{class: changing_css_class(@version,"phone")}
+ = contact.phone
- - if contact.fax
+ - if contact.fax.present?
%dt= t(:fax)
%dd{class: changing_css_class(@version,"fax")}
= contact.fax
@@ -57,51 +59,50 @@
%dt= t(:org_name)
%dd{class: changing_css_class(@version,"org_name")}= contact.org_name
- %dt= t(:street)
- %dd{class: changing_css_class(@version,"street")}= contact.street.to_s.gsub("\n", '
').html_safe
+ - if contact.street.present?
+ %dt= t(:street)
+ %dd{class: changing_css_class(@version,"street")}= contact.street.to_s.gsub("\n", '
').html_safe
- %dt= t(:city)
- %dd{class: changing_css_class(@version,"city")}= contact.city
+ - if contact.city.present?
+ %dt= t(:city)
+ %dd{class: changing_css_class(@version,"city")}= contact.city
- %dt= t(:zip)
- %dd{class: changing_css_class(@version,"zip")}= contact.zip
+ - if contact.zip.present?
+ %dt= t(:zip)
+ %dd{class: changing_css_class(@version,"zip")}= contact.zip
- %dt= t(:state)
- %dd{class: changing_css_class(@version,"state")}= contact.state
+ - if contact.state.present?
+ %dt= t(:state)
+ %dd{class: changing_css_class(@version,"state")}= contact.state
- %dt= t(:country)
- %dd{class: changing_css_class(@version,"country_code")}= contact.country
+ - if contact.country.present?
+ %dt= t(:country)
+ %dd{class: changing_css_class(@version,"country_code")}= contact.country
%span{:style => "padding-right:10px; float: right;"}
- - if @version.previous
+ - if (prev = @versions_map[(@versions_map.index(@version.id) - 1)]) && @versions_map.index(@version.id) != 0
= link_to(t(:previous),
- admin_contact_version_path(@version.previous.id),
+ admin_contact_version_path(prev),
class: 'btn btn-primary')
- else
%a.btn.btn-primary.disabled{:href => "#"}
%span= t(:previous)
- - if @version.next
+ - if nxt = @versions_map[(@versions_map.index(@version.id) + 1)]
= link_to(t(:next),
- admin_contact_version_path(@version.next.id),
+ admin_contact_version_path(nxt),
class: 'btn btn-default')
- else
%a.btn.btn-default.disabled{:href => "#"}
%span= t(:next)
.col-md-4
- .panel.panel-default{:style => "min-height:420px;"}
+ .panel.panel-default{:style => "min-height:450px;"}
%ul.nav.nav-pills.nav-stacked
- @versions.each do |vs|
- - if vs.id == @version.id
- %li.active
- = link_to admin_contact_version_path(vs.id) do
- = l(vs.created_at, format: :short)
- = vs.event
- - else
- %li
- = link_to admin_contact_version_path(vs.id) do
- = l(vs.created_at, format: :short)
- = vs.event
+ %li{class: (vs.id == @version.id) && :active}
+ = link_to admin_contact_version_path(vs) do
+ = l(vs.created_at, format: :short)
+ = vs.event
%span{:style => "padding-left:10px; position: absolute; bottom: 10px;"}
- = paginate @versions
\ No newline at end of file
+ = paginate @versions, theme: :admin
\ No newline at end of file
diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml
index f50f18d06..4e06f5ccb 100644
--- a/app/views/admin/domain_versions/archive.haml
+++ b/app/views/admin/domain_versions/archive.haml
@@ -19,7 +19,7 @@
.col-md-3
.form-group
= label_tag :action
- = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy']], params[:q][:event]), { include_blank:true, multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' }
+ = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy'], ['Create', 'create']], params[:q][:event]), { include_blank:true, multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' }
.row
.col-md-3
.col-md-3
@@ -49,29 +49,41 @@
= t(:registrant)
%th{class: 'col-xs-2'}
= t(:registrar)
- %th{class: 'col-xs-2'}
- = t(:action_date)
%th{class: 'col-xs-2'}
= t(:action)
+ %th{class: 'col-xs-2'}
+ = t(:created_at)
%tbody
- @versions.each do |version|
- - if version.reify
+ - if version
+ - domain = Domain.new(version.object.to_h)
+ - version.object_changes.to_h.each{|k,v| domain[k]=v.last}
+
%tr
- %td= link_to(version.reify.name, admin_domain_version_path(version.id))
+ %td= link_to(domain.name, admin_domain_version_path(version.id))
%td
- - if version.reify.registrant
- = link_to(version.reify.registrant, admin_registrant_path(version.reify.registrant))
+ - if domain.registrant
+ = domain.registrant.name
+ - else
+ - contact = Contact.all_versions_for([domain.registrant_id], version.created_at).first
+ - if contact.nil? && ver = ContactVersion.where(item_id: domain.registrant_id).last
+ - contact = Contact.new(ver.object.to_h.merge(ver.object_changes.to_h.each_with_object({}){|(k,v), o| o[k]=v.last } ))
+ = contact.try(:name)
+ = " ".html_safe
+ = "(#{t(:deleted)})"
%td
- - if version.reify.registrar
- = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar))
- %td= l(version.created_at, format: :short)
+ - if domain.registrar
+ = link_to(domain.registrar, admin_registrar_path(domain.registrar))
%td= version.event
+ %td= l(version.created_at, format: :short)
.row
.col-md-6
= paginate @versions
.col-md-6.text-right
+ .pagination
+ = t(:result_count, count: @versions.total_count)
:coffee
diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml
index e413679be..add5920fb 100644
--- a/app/views/admin/domain_versions/show.haml
+++ b/app/views/admin/domain_versions/show.haml
@@ -1,8 +1,6 @@
- domain = Domain.new(@version.object.to_h)
- @version.object_changes.to_h.each{|k,v| domain[k]=v.last}
-= render 'shared/title', name: @version.reify.name
-
- if @version
- children = HashWithIndifferentAccess.new(@version.children)
- nameservers = Nameserver.all_versions_for(children[:nameservers], @version.created_at)
@@ -13,10 +11,11 @@
- event = @version.event
- creator = plain_username(@version.terminator)
+= render 'shared/title', name: domain.name
.row
.col-md-8
- .panel.panel-default{:style => "min-height:400px;"}
+ .panel.panel-default{:style => "min-height:450px;"}
.panel-heading
%h3.panel-title
= l(@version.created_at, format: :short)
@@ -25,7 +24,21 @@
.panel-body
%dl.dl-horizontal
%dt= t(:name)
- %dd= link_to(domain.name, admin_domain_path(@version.item_id))
+ - if !domain.name
+ - domain_name = Domain.find(@version.item_id).try(:name)
+ - else
+ - domain_name = domain.name
+ %dd= link_to(domain_name, admin_domain_path(@version.item_id))
+
+ %dt= t(:created)
+ %dd
+ = l(domain.created_at, format: :short)
+
+ %dt= t(:updated)
+ %dd
+ = l(domain.updated_at, format: :short)
+
+ %br
%dt= t(:statuses)
%dd{class: changing_css_class(@version,"statuses")}
@@ -84,40 +97,35 @@
\...#{ns[:public_key].to_s[-20,20]}
%br
- %dt= t(:registrar)
- %dd{class: changing_css_class(@version,"registrar_id")}
- = link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do
- = domain.registrar.name
+ - if domain.registrar
+ %dt= t(:registrar)
+ %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 => "margin: 20px 20px; clear:both;"}
- %span{:style => "padding-right:10px; padding-top:40px; float: right; bottom: 10px;"}
- - if @version.previous
+ - if (prev = @versions_map[(@versions_map.index(@version.id) - 1)]) && @versions_map.index(@version.id) != 0
= link_to(t(:previous),
- admin_domain_version_path(@version.previous.id),
+ admin_domain_version_path(prev),
class: 'btn btn-primary')
- else
%a.btn.btn-primary.disabled{:href => "#"}
%span= t(:previous)
- - if @version.next
+ - if nxt = @versions_map[(@versions_map.index(@version.id) + 1)]
= link_to(t(:next),
- admin_domain_version_path(@version.next.id),
+ admin_domain_version_path(nxt),
class: 'btn btn-default')
- else
%a.btn.btn-default.disabled{:href => "#"}
%span= t(:next)
.col-md-4
- .panel.panel-default{:style => "min-height:400px;"}
+ .panel.panel-default{:style => "min-height:450px;"}
%ul.nav.nav-pills.nav-stacked
- @versions.each do |vs|
- - if vs.id == @version.id and vs.reify
- %li.active
- = link_to admin_domain_version_path(vs.id) do
- = l(vs.created_at, format: :short)
- = vs.event
- - else
- %li
- = link_to admin_domain_version_path(vs.id) do
- = l(vs.created_at, format: :short)
- = vs.event
+ %li{class: (vs.id == @version.id) && :active}
+ = link_to admin_domain_version_path(vs) do
+ = l(vs.created_at, format: :short)
+ = vs.event
%span{:style => "padding-left:10px; position: absolute; bottom: 10px;"}
- = paginate @versions
+ = paginate @versions, theme: :admin
diff --git a/app/views/kaminari/admin/_first_page.html.haml b/app/views/kaminari/admin/_first_page.html.haml
new file mode 100644
index 000000000..c5bbf13e1
--- /dev/null
+++ b/app/views/kaminari/admin/_first_page.html.haml
@@ -0,0 +1,11 @@
+-# Link to the "First" page
+-# available local variables
+-# url: url to the first page
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+%span.first
+ - param_name = current_page.instance_variable_get("@options")[:param_name] || Kaminari.config.param_name
+ - urlik = url_for( params.merge(param_name => 1, :only_path => true))
+ = link_to_unless current_page.first?, t('views.pagination.first').html_safe, urlik, :remote => remote
diff --git a/app/views/kaminari/admin/_gap.html.haml b/app/views/kaminari/admin/_gap.html.haml
new file mode 100644
index 000000000..dd5789cc1
--- /dev/null
+++ b/app/views/kaminari/admin/_gap.html.haml
@@ -0,0 +1,8 @@
+-# Non-link tag that stands for skipped pages...
+-# available local variables
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+%span.page.gap
+ = t('views.pagination.truncate').html_safe
diff --git a/app/views/kaminari/admin/_last_page.html.haml b/app/views/kaminari/admin/_last_page.html.haml
new file mode 100644
index 000000000..cdddb9e7c
--- /dev/null
+++ b/app/views/kaminari/admin/_last_page.html.haml
@@ -0,0 +1,9 @@
+-# Link to the "Last" page
+-# available local variables
+-# url: url to the last page
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+%span.last
+ = link_to_unless current_page.last?, t('views.pagination.last').html_safe, url, :remote => remote
diff --git a/app/views/kaminari/admin/_next_page.html.haml b/app/views/kaminari/admin/_next_page.html.haml
new file mode 100644
index 000000000..2865dcd0c
--- /dev/null
+++ b/app/views/kaminari/admin/_next_page.html.haml
@@ -0,0 +1,9 @@
+-# Link to the "Next" page
+-# available local variables
+-# url: url to the next page
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+%span.next
+ = link_to_unless current_page.last?, t('views.pagination.next').html_safe, url, :rel => 'next', :remote => remote
diff --git a/app/views/kaminari/admin/_page.html.haml b/app/views/kaminari/admin/_page.html.haml
new file mode 100644
index 000000000..d583c58f1
--- /dev/null
+++ b/app/views/kaminari/admin/_page.html.haml
@@ -0,0 +1,12 @@
+-# Link showing page number
+-# available local variables
+-# page: a page object for "this" page
+-# url: url to this page
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+%span{:class => "page#{' current' if page.current?}"}
+ - param_name = current_page.instance_variable_get("@options")[:param_name] || Kaminari.config.param_name
+ - urlik = url_for( params.merge(param_name => page.to_i, :only_path => true))
+ = link_to_unless page.current?, page, urlik, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil}
diff --git a/app/views/kaminari/admin/_paginator.html.haml b/app/views/kaminari/admin/_paginator.html.haml
new file mode 100644
index 000000000..4f33e2dee
--- /dev/null
+++ b/app/views/kaminari/admin/_paginator.html.haml
@@ -0,0 +1,18 @@
+-# The container tag
+-# available local variables
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+-# paginator: the paginator that renders the pagination tags inside
+= paginator.render do
+ %nav.pagination
+ = first_page_tag unless current_page.first?
+ = prev_page_tag unless current_page.first?
+ - each_page do |page|
+ - if page.left_outer? || page.right_outer? || page.inside_window?
+ = page_tag page
+ - elsif !page.was_truncated?
+ = gap_tag
+ = next_page_tag unless current_page.last?
+ = last_page_tag unless current_page.last?
diff --git a/app/views/kaminari/admin/_prev_page.html.haml b/app/views/kaminari/admin/_prev_page.html.haml
new file mode 100644
index 000000000..3b565fa6f
--- /dev/null
+++ b/app/views/kaminari/admin/_prev_page.html.haml
@@ -0,0 +1,11 @@
+-# Link to the "Previous" page
+-# available local variables
+-# url: url to the previous page
+-# current_page: a page object for the currently displayed page
+-# total_pages: total number of pages
+-# per_page: number of items to fetch per page
+-# remote: data-remote
+%span.prev
+ - param_name = current_page.instance_variable_get("@options")[:param_name] || Kaminari.config.param_name
+ - urlik = url_for( params.merge(param_name => current_page.to_i - 1, :only_path => true))
+ = link_to_unless current_page.first?, t('views.pagination.previous').html_safe, urlik, :rel => 'prev', :remote => remote
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 885e79424..5cc0031af 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -959,4 +959,5 @@ en:
verified_confirm: 'Verified status is for cases when current registrant is the one applying for the update. Legal document signed by the registrant is required. Are you sure this update is properly verified with the registrant?'
verified: 'Verified'
only_estonian_residets_can_signin: "Access currently available only to Estonian citizens and e-residents with Estonian ID-card or Mobile-ID."
+ deleted: 'Deleted'
cant_match_version: 'Impossible match version with request'