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'