From 2fe026715a15fc8de739c6159db616b8061ac867 Mon Sep 17 00:00:00 2001 From: Stas Date: Thu, 10 Dec 2015 11:17:48 +0200 Subject: [PATCH 01/31] 1088869472-methods_for_archive --- .../admin/domain_versions_controller.rb | 14 +-- app/controllers/admin/domains_controller.rb | 5 + .../admin/domains_versions_controller.rb | 7 ++ app/models/ability.rb | 1 + .../admin/domains/partials/_version.haml | 105 ++++++++++++++++++ app/views/admin/domains/versions.haml | 44 ++++++++ app/views/layouts/admin/application.haml | 4 + config/routes.rb | 14 ++- 8 files changed, 186 insertions(+), 8 deletions(-) create mode 100644 app/controllers/admin/domains_versions_controller.rb create mode 100644 app/views/admin/domains/partials/_version.haml create mode 100644 app/views/admin/domains/versions.haml diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 44a2087cd..35fffbaa2 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -1,10 +1,10 @@ -class Admin::DomainVersionsController < AdminController - load_and_authorize_resource +#class Admin::DomainVersionsController < AdminController + #load_and_authorize_resource # rubocop:disable Style/GuardClause - def index - @domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first - @versions = @domain.versions + #def index + # @domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first + # @versions = @domain.versions # Depricated it had to load legal document. We may do it by parsing and adding link. # if @domain.pending_json.present? @@ -13,6 +13,6 @@ class Admin::DomainVersionsController < AdminController # @pending_domain = Epp::Domain.find(@domain.id) # @pending_domain.update(frame, @pending_user, false) # end - end + #end # rubocop:enable Style/GuardClause -end + #end diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index 377912bad..36bdefbff 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -77,6 +77,11 @@ class Admin::DomainsController < AdminController redirect_to [:admin, @domain] end + def versions + @domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first + @versions = @domain.versions + end + private def set_domain diff --git a/app/controllers/admin/domains_versions_controller.rb b/app/controllers/admin/domains_versions_controller.rb new file mode 100644 index 000000000..505ebf2c1 --- /dev/null +++ b/app/controllers/admin/domains_versions_controller.rb @@ -0,0 +1,7 @@ +class Admin::DomainsVersionsController < AdminController + load_and_authorize_resource + + def index + + end +end diff --git a/app/models/ability.rb b/app/models/ability.rb index cf98cb704..07be0af7c 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -95,6 +95,7 @@ class Ability can :manage, ReservedDomain can :manage, ZonefileSetting can :manage, DomainVersion + can :manage, ContactVersion can :manage, Pricelist can :manage, User can :manage, ApiUser diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml new file mode 100644 index 000000000..fd449b4b0 --- /dev/null +++ b/app/views/admin/domains/partials/_version.haml @@ -0,0 +1,105 @@ +- statuses_link ||= false +- version ||= false +- domain ||= false +- pending_user ||= false + +- 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]) + - event = version.event + - creator = plain_username(version.terminator) + - else # pending history + - nameservers = domain.nameservers + - tech_contacts = domain.tech_contacts + - admin_contacts = domain.admin_contacts + - registrant = [domain.registrant] + - creator = pending_user.try(:username) + - event = 'pending' + + %td + %p.nowrap + = l(domain.updated_at, format: :shorts) + - if statuses_link + %br= link_to t(:edit_statuses), edit_admin_domain_path(params[:domain_id]) + + %p.text-right + = event + %br + = creator + + %td + %p + - if domain.statuses.present? + - domain.statuses.each do |s| + = s + - if domain.status_notes.present? + - notes = domain.status_notes[s] + - if notes + %br + %i= notes + %br + - if domain.pending_json.present? + %p + = link_to t(:pending_epp), '#', class: 'js-pending-toggle' + + %td + %p + = "#{domain.period}#{domain.period_unit}" + %br + = "#{l(domain.valid_from, format: :date)}" + %br + = "#{l(domain.valid_to, format: :date)}" + + %td + - registrant.each do |r| + %p + = r[:name] + = r[:phone] + = r[:email] + %p + = r[:code] + + %td + - admin_contacts.each do |ac| + %p + = ac[:name] + = ac[:phone] + = ac[:email] + %p + = ac[:code] + + %td + - tech_contacts.each do |tc| + %p + = tc[:name] + = tc[:phone] + = tc[:email] + %p + = tc[:code] + + %td + %p + - nameservers.each do |ns| + = ns[:hostname] + %br + = ns[:ipv4] + = ns[:ipv6] + + %td + %p + = domain.registrar.name + + - if domain.pending_json.present? + %tr.js-pending{ style: 'display: none;' } + %td{colspan: 8} + = preserve do + %pre + - formatted_req = Nokogiri::XML(domain.pending_json['frame']) + - if formatted_req.errors.none? + = formatted_req + - else + = domain.pending_json['frame'] diff --git a/app/views/admin/domains/versions.haml b/app/views/admin/domains/versions.haml new file mode 100644 index 000000000..5224aa34a --- /dev/null +++ b/app/views/admin/domains/versions.haml @@ -0,0 +1,44 @@ +- content_for :actions do + = link_to(t(:back_to_domain), [:admin, @domain], class: 'btn btn-default') += render 'shared/title', name: "#{t(:history)}: #{@domain.name}" + +.row + .col-md-12 + .table-responsive + %table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-1'}= t(:timestap) + %th{class: 'col-xs-2'}= t(:statuses) + %th{class: 'col-xs-1'}= t(:period) + %th{class: 'col-xs-2'}= t(:registrant) + %th{class: 'col-xs-2'}= t(:admin) + %th{class: 'col-xs-2'}= t(:tech) + %th{class: 'col-xs-2'}= t(:nameservers) + %th{class: 'col-xs-2'}= t(:registrar) + + %tbody + - if @pending_domain.present? + %tr.small + = render 'admin/domains/partials/version', + domain: @pending_domain, pending_user: @pending_user, statuses_link: true + + -# current version + - if @domain.versions.present? + %tr.small + = render 'admin/domains/partials/version', + domain: @domain, version: @domain.versions.last + + -# all other older versions + - @domain.versions.not_creates.reverse.each do |version| + %tr.small + = render 'admin/domains/partials/version', + domain: version.reify, version: version.previous + +:coffee + $(document).on 'click', '.js-pending-toggle', (e) -> + e.preventDefault() + + $(document).on 'mousedown', '.js-pending-toggle', (e) -> + target = $(e.target) + target.parents('tr').next('tr.js-pending').toggle() diff --git a/app/views/layouts/admin/application.haml b/app/views/layouts/admin/application.haml index 6e3257740..a4481d6e6 100644 --- a/app/views/layouts/admin/application.haml +++ b/app/views/layouts/admin/application.haml @@ -57,6 +57,10 @@ %li= link_to t(:invoices), admin_invoices_path %li= link_to t(:account_activities), admin_account_activities_path %li.divider + %li.dropdown-header= t(:archive) + %li= link_to t(:domains_history), admin_domains_versions_path + %li= link_to t(:contacts_history), admin_contacts_versions_path + %li.divider %li.dropdown-header= t(:system) %li= link_to t(:settings), admin_settings_path %li= link_to t(:zonefile), admin_zonefile_settings_path diff --git a/config/routes.rb b/config/routes.rb index c1cc98697..7a5f6cb2a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -192,7 +192,7 @@ Rails.application.routes.draw do end resources :domains do - resources :domain_versions + resources :domain_versions, controller: 'domains', action: 'versions' resources :pending_updates resources :pending_deletes member do @@ -201,6 +201,18 @@ Rails.application.routes.draw do end end + resources :domains_versions do + collection do + get 'search' + end + end + + resources :contacts_versions do + collection do + get 'search' + end + end + resources :settings resources :blocked_domains From f1425398277c501b869490445eb38fb53be7120d Mon Sep 17 00:00:00 2001 From: Stas Date: Fri, 11 Dec 2015 10:58:33 +0200 Subject: [PATCH 02/31] 108869472-templates --- .../admin/contact_versions_controller.rb | 39 ++++++++++++++++++ .../admin/domain_versions_controller.rb | 10 ++--- .../admin/domains_versions_controller.rb | 7 ---- app/views/admin/contact_versions/index.haml | 40 +++++++++++++++++++ app/views/layouts/admin/application.haml | 4 +- config/routes.rb | 4 +- 6 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 app/controllers/admin/contact_versions_controller.rb delete mode 100644 app/controllers/admin/domains_versions_controller.rb create mode 100644 app/views/admin/contact_versions/index.haml diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb new file mode 100644 index 000000000..cd49011a0 --- /dev/null +++ b/app/controllers/admin/contact_versions_controller.rb @@ -0,0 +1,39 @@ +class Admin::ContactVersionsController < AdminController + load_and_authorize_resource + + def index + params[:q] ||= {} + @q = ContactVersion.search(params[:q]) + @versions = @q.result.page(params[:page]) + + versions = ContactVersion.all + + normalize_search_parameters do + @q = versions.search(params[:q]) + @versions = @q.result.page(params[:page]) + end + + @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 + end + + def search + render json: ContactVersion.search_by_query(params[:q]) + end + + def normalize_search_parameters + ca_cache = params[:q][:created_at_lteq] + begin + end_time = params[:q][:created_at_lteq].try(:to_date) + params[:q][:created_at_lteq] = end_time.try(:end_of_day) + end_time = params[:q][:updated_at_gteq].try(:to_date) + params[:q][:updated_at_lteq] = end_time.try(:end_of_day) + rescue + logger.warn('Invalid date') + end + + yield + + params[:q][:created_at_lteq] = ca_cache + end + +end diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 35fffbaa2..985c680f9 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -1,8 +1,8 @@ -#class Admin::DomainVersionsController < AdminController - #load_and_authorize_resource +class Admin::DomainVersionsController < AdminController + load_and_authorize_resource # rubocop:disable Style/GuardClause - #def index + def index # @domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first # @versions = @domain.versions @@ -13,6 +13,6 @@ # @pending_domain = Epp::Domain.find(@domain.id) # @pending_domain.update(frame, @pending_user, false) # end - #end + end # rubocop:enable Style/GuardClause - #end + end diff --git a/app/controllers/admin/domains_versions_controller.rb b/app/controllers/admin/domains_versions_controller.rb deleted file mode 100644 index 505ebf2c1..000000000 --- a/app/controllers/admin/domains_versions_controller.rb +++ /dev/null @@ -1,7 +0,0 @@ -class Admin::DomainsVersionsController < AdminController - load_and_authorize_resource - - def index - - end -end diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml new file mode 100644 index 000000000..e86b56e5b --- /dev/null +++ b/app/views/admin/contact_versions/index.haml @@ -0,0 +1,40 @@ += render 'shared/title', name: t(:contact_versions) + + +%hr +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-2'} + = sort_link(@q, 'name', t(:ID)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'code', t(:item_id)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'ident', t(:event)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'email', t(:object)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'registrar_name', t(:registrar)) + %tbody + - @versions.each do |version| + %tr + %td= 1 + %td= 2 + %td= 3 + %td= 4 + %td= 5 + +.row + .col-md-6 + = paginate @versions + .col-md-6.text-right + .pagination + = t(:result_count, count: @contacts.total_count) + +:coffee + $(".js-reset-form").on "click", (e) -> + e.preventDefault(); + window.location = "#{admin_contact_versions_path}" diff --git a/app/views/layouts/admin/application.haml b/app/views/layouts/admin/application.haml index a4481d6e6..6baef9abf 100644 --- a/app/views/layouts/admin/application.haml +++ b/app/views/layouts/admin/application.haml @@ -58,8 +58,8 @@ %li= link_to t(:account_activities), admin_account_activities_path %li.divider %li.dropdown-header= t(:archive) - %li= link_to t(:domains_history), admin_domains_versions_path - %li= link_to t(:contacts_history), admin_contacts_versions_path + %li= link_to t(:domains_history), admin_domain_versions_path + %li= link_to t(:contacts_history), admin_contact_versions_path %li.divider %li.dropdown-header= t(:system) %li= link_to t(:settings), admin_settings_path diff --git a/config/routes.rb b/config/routes.rb index 7a5f6cb2a..2dfc608cd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -201,13 +201,13 @@ Rails.application.routes.draw do end end - resources :domains_versions do + resources :domain_versions do collection do get 'search' end end - resources :contacts_versions do + resources :contact_versions do collection do get 'search' end From a8ff88771770eaad6b7e44592b3921a3fd0c2e36 Mon Sep 17 00:00:00 2001 From: Stas Date: Thu, 7 Jan 2016 13:07:06 +0200 Subject: [PATCH 03/31] 108869472-template_changes --- app/views/admin/contact_versions/index.haml | 30 ++++++++++++--------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index e86b56e5b..195b90783 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -1,7 +1,6 @@ = render 'shared/title', name: t(:contact_versions) -%hr .row .col-md-12 .table-responsive @@ -9,30 +8,35 @@ %thead %tr %th{class: 'col-xs-2'} - = sort_link(@q, 'name', t(:ID)) + = sort_link(@q, 'name', t(:name)) %th{class: 'col-xs-2'} - = sort_link(@q, 'code', t(:item_id)) + = sort_link(@q, 'code', t(:id)) %th{class: 'col-xs-2'} - = sort_link(@q, 'ident', t(:event)) - %th{class: 'col-xs-2'} - = sort_link(@q, 'email', t(:object)) + = sort_link(@q, 'ident', t(:ident)) %th{class: 'col-xs-2'} = sort_link(@q, 'registrar_name', t(:registrar)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'email', t(:created_at)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'action', t(:action)) %tbody - @versions.each do |version| %tr - %td= 1 - %td= 2 - %td= 3 - %td= 4 - %td= 5 + %td= version.reify.name + %td= version.reify.code + %td= ident_for(version.reify) + %td= l(version.created_at, format: :short) + %td + - if version.reify.registrar + = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) + + %td= version.event .row .col-md-6 = paginate @versions .col-md-6.text-right - .pagination - = t(:result_count, count: @contacts.total_count) + :coffee $(".js-reset-form").on "click", (e) -> From 9278e6703f19529a147ac4f600c94c42d2c55853 Mon Sep 17 00:00:00 2001 From: Stas Date: Tue, 12 Jan 2016 18:37:05 +0200 Subject: [PATCH 04/31] 108869472-archive --- .../admin/contact_versions_controller.rb | 29 +++----- .../admin/domain_versions_controller.rb | 52 ++++++++++--- app/validators/domain_name_validator.rb | 2 +- app/views/admin/contact_versions/index.haml | 54 +++++++++++--- app/views/admin/domain_versions/archive.haml | 73 +++++++++++++++++++ 5 files changed, 171 insertions(+), 39 deletions(-) create mode 100644 app/views/admin/domain_versions/archive.haml diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index cd49011a0..d6c7deb9e 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -3,37 +3,30 @@ class Admin::ContactVersionsController < AdminController def index params[:q] ||= {} + @q = ContactVersion.search(params[:q]) @versions = @q.result.page(params[:page]) - versions = ContactVersion.all + whereS = "1=1" - normalize_search_parameters do - @q = versions.search(params[:q]) - @versions = @q.result.page(params[:page]) + params[:q].each do |key, value| + next if value.empty? + whereS += create_where_string(key, value) end + versions = ContactVersion.includes(:item).where(whereS) + @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 + end def search render json: ContactVersion.search_by_query(params[:q]) end - def normalize_search_parameters - ca_cache = params[:q][:created_at_lteq] - begin - end_time = params[:q][:created_at_lteq].try(:to_date) - params[:q][:created_at_lteq] = end_time.try(:end_of_day) - end_time = params[:q][:updated_at_gteq].try(:to_date) - params[:q][:updated_at_lteq] = end_time.try(:end_of_day) - rescue - logger.warn('Invalid date') - end - - yield - - params[:q][:created_at_lteq] = ca_cache + def create_where_string(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 985c680f9..6aca493ea 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -1,18 +1,48 @@ class Admin::DomainVersionsController < AdminController load_and_authorize_resource - # rubocop:disable Style/GuardClause def index - # @domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first - # @versions = @domain.versions + params[:q] ||= {} + + @q = DomainVersion.includes(:item).search(params[:q]) + @versions = @q.result.page(params[:page]) + search_params = params[:q].deep_dup + + if search_params[:registrant] + registrant = Contact.find_by_name(search_params[:registrant]) + search_params.delete(:registrant) + end + + if search_params[:registrar] + registrar = Registrar.find_by_name(search_params[:registrar]) + search_params.delete(:registrar) + end + + whereS = "1=1" + + search_params.each do |key, value| + next if value.empty? + whereS += create_where_string(key, value) + end + + whereS += " AND object->>'registrant_id' ~ '#{registrant.id}'" if registrant + whereS += " AND object->>'registrar_id' ~ '#{registrar.id}'" if registrar + + versions = DomainVersion.includes(:item).where(whereS) + @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 + render "admin/domain_versions/archive" - # Depricated it had to load legal document. We may do it by parsing and adding link. - # if @domain.pending_json.present? - # frame = Nokogiri::XML(@domain.pending_json['frame']) - # @pending_user = User.find(@domain.pending_json['current_user_id']) - # @pending_domain = Epp::Domain.find(@domain.id) - # @pending_domain.update(frame, @pending_user, false) - # end end - # rubocop:enable Style/GuardClause + + def search + render json: DomainVersion.search_by_query(params[:q]) end + + def create_where_string(key, value) + " AND object->>'#{key}' ~ '#{value}'" + end + + +end diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb index e39437f2b..be83f0835 100644 --- a/app/validators/domain_name_validator.rb +++ b/app/validators/domain_name_validator.rb @@ -38,7 +38,7 @@ class DomainNameValidator < ActiveModel::EachValidator def validate_blocked(value) return true unless value - return false if BlockedDomain.where("names @> ?::varchar[]", "{#{value}}").count > 0 + return false if BlockedDomain.where(name: value).count > 0 ZonefileSetting.where(origin: value).count == 0 end end diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index 195b90783..00cdb53ee 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -1,4 +1,40 @@ -= render 'shared/title', name: t(:contact_versions) += render 'shared/title', name: t(:contacts) + +.row + .col-md-12 + = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f| + .row + .col-md-3 + .form-group + = f.label :name + = f.search_field :name, value: params[:q][:name], class: 'form-control', placeholder: t(:name) + .col-md-3 + .form-group + = f.label :id + = f.search_field :id, value: params[:q][:id], 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 + .col-md-3 + .form-group + = label_tag t(:results_per_page) + = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) + .col-md-3{style: 'padding-top: 25px;'} + %button.btn.btn-primary +   + %span.glyphicon.glyphicon-search +   + %button.btn.btn-default.js-reset-form + = t(:clear_fields) +%hr .row @@ -8,30 +44,30 @@ %thead %tr %th{class: 'col-xs-2'} - = sort_link(@q, 'name', t(:name)) + = t(:name) %th{class: 'col-xs-2'} - = sort_link(@q, 'code', t(:id)) + = t(:id) %th{class: 'col-xs-2'} - = sort_link(@q, 'ident', t(:ident)) + = t(:ident) %th{class: 'col-xs-2'} - = sort_link(@q, 'registrar_name', t(:registrar)) + = t(:phone) %th{class: 'col-xs-2'} - = sort_link(@q, 'email', t(:created_at)) + = t(:registrar) %th{class: 'col-xs-2'} - = sort_link(@q, 'action', t(:action)) + = t(:action) %tbody - @versions.each do |version| %tr %td= version.reify.name %td= version.reify.code %td= ident_for(version.reify) - %td= l(version.created_at, format: :short) + %td= version.reify.phone %td - if version.reify.registrar = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) - %td= version.event + .row .col-md-6 = paginate @versions diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml new file mode 100644 index 000000000..03334ca64 --- /dev/null +++ b/app/views/admin/domain_versions/archive.haml @@ -0,0 +1,73 @@ += render 'shared/title', name: t(:domains) + +.row + .col-md-12 + = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f| + .row + .col-md-3 + .form-group + = label_tag :name + = f.search_field :name, value: params[:q][:name], class: 'form-control', placeholder: t(:name) + .col-md-3 + .form-group + = label_tag :registrant + = f.search_field :registrant, value: params[:q][:registrant], class: 'form-control', placeholder: t(:registrant) + .col-md-3 + .form-group + = label_tag t(:registrar) + = f.search_field :registrar, value: params[:q][:registrar], class: 'form-control', placeholder: t(:registrant) + .col-md-3 + .form-group + = label_tag t(:results_per_page) + = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) + .row + .col-md-3 + .col-md-3 + .col-md-3 + .col-md-3{style: 'padding-top: 25px;'} + %button.btn.btn-primary +   + %span.glyphicon.glyphicon-search +   + %button.btn.btn-default.js-reset-form + = t(:clear_fields) +%hr + + +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-2'} + = t(:name) + %th{class: 'col-xs-2'} + = t(:registrant) + %th{class: 'col-xs-2'} + = t(:registrar) + %th{class: 'col-xs-2'} + = t(:action) + %tbody + - @versions.each do |version| + %tr + %td= version.reify.name + %td + - if version.reify.registrant.ident + = link_to(version.reify.registrant, admin_registrant_path(version.reify.registrant)) + %td + - if version.reify.registrar + = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) + %td= version.event + + +.row + .col-md-6 + = paginate @versions + .col-md-6.text-right + + +:coffee + $(".js-reset-form").on "click", (e) -> + e.preventDefault(); + window.location = "#{admin_domain_versions_path}" From f77e599e2f44f07f953c62ab6216cccb57374964 Mon Sep 17 00:00:00 2001 From: Stas Date: Fri, 12 Feb 2016 18:08:39 +0200 Subject: [PATCH 05/31] 108869472-empty_row_fix --- app/views/admin/domain_versions/archive.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml index 03334ca64..f4b87cbae 100644 --- a/app/views/admin/domain_versions/archive.haml +++ b/app/views/admin/domain_versions/archive.haml @@ -53,7 +53,7 @@ %tr %td= version.reify.name %td - - if version.reify.registrant.ident + - if version.reify.registrant = link_to(version.reify.registrant, admin_registrant_path(version.reify.registrant)) %td - if version.reify.registrar From d3ad01f1a2d98305629dd71c21aca178a42dd725 Mon Sep 17 00:00:00 2001 From: Stas Date: Wed, 2 Mar 2016 14:36:35 +0200 Subject: [PATCH 06/31] 18869472-archive_changes --- .../admin/domain_versions_controller.rb | 11 +++- app/views/admin/contact_versions/index.haml | 3 + app/views/admin/domain_versions/archive.haml | 12 +++- app/views/admin/domain_versions/show.haml | 63 +++++++++++++++++++ 4 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 app/views/admin/domain_versions/show.haml diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 6aca493ea..6a3a89d9f 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -22,7 +22,12 @@ class Admin::DomainVersionsController < AdminController search_params.each do |key, value| next if value.empty? - whereS += create_where_string(key, value) + case key + when 'event' + whereS += " AND event = '#{value}'" + else + whereS += create_where_string(key, value) + end end whereS += " AND object->>'registrant_id' ~ '#{registrant.id}'" if registrant @@ -36,6 +41,10 @@ class Admin::DomainVersionsController < AdminController end + def show + @version = DomainVersion.find(params[:id]) + end + def search render json: DomainVersion.search_by_query(params[:q]) end diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index 00cdb53ee..2384503bd 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -53,6 +53,8 @@ = t(:phone) %th{class: 'col-xs-2'} = t(:registrar) + %th{class: 'col-xs-2'} + = t(:action_date) %th{class: 'col-xs-2'} = t(:action) %tbody @@ -65,6 +67,7 @@ %td - if version.reify.registrar = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) + %td= l(version.created_at, format: :short) %td= version.event diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml index f4b87cbae..94ed66658 100644 --- a/app/views/admin/domain_versions/archive.haml +++ b/app/views/admin/domain_versions/archive.haml @@ -18,12 +18,15 @@ = f.search_field :registrar, value: params[:q][:registrar], class: 'form-control', placeholder: t(:registrant) .col-md-3 .form-group - = label_tag t(:results_per_page) - = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) + = label_tag :action + = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy']], params[:q][:event]), { 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) + = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) .col-md-3{style: 'padding-top: 25px;'} %button.btn.btn-primary   @@ -46,18 +49,21 @@ = t(:registrant) %th{class: 'col-xs-2'} = t(:registrar) + %th{class: 'col-xs-2'} + = t(:action_date) %th{class: 'col-xs-2'} = t(:action) %tbody - @versions.each do |version| %tr - %td= version.reify.name + %td= link_to(version.reify.name, admin_domain_version_path(version.id)) %td - if version.reify.registrant = link_to(version.reify.registrant, admin_registrant_path(version.reify.registrant)) %td - if version.reify.registrar = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) + %td= l(version.created_at, format: :short) %td= version.event diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml new file mode 100644 index 000000000..8e3834e17 --- /dev/null +++ b/app/views/admin/domain_versions/show.haml @@ -0,0 +1,63 @@ += render 'shared/title', name: @version.reify.name + + +- 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]) + - event = @version.event + - creator = plain_username(@version.terminator) + + +.row + .col-md-12 + .panel.panel-default + .panel-heading + %h3.panel-title + = l(@version.reify.updated_at, format: :short) + = event + = creator + .panel-body + %dl.dl-horizontal + %dt= t(:name) + %dd= link_to(@version.reify.name, admin_domain_path(@version.item_id)) + %dt= t(:statuses) + %dd + - if @version.reify.statuses.present? + - @version.reify.statuses.each do |s| + = s + %dt= t(:registrant) + %dd + - registrant.each do |r| + = r[:name] + = r[:phone] + = r[:email] + = r[:code] + %br + %dt= t(:admin_contacts) + %dd + - admin_contacts.each do |r| + = r[:name] + = r[:phone] + = r[:email] + = r[:code] + %br + %dt= t(:tech_contacts) + %dd + - tech_contacts.each do |r| + = r[:name] + = r[:phone] + = r[:email] + = r[:code] + %br + %dt= t(:nameservers) + %dd + - nameservers.each do |ns| + = ns[:hostname] + = ns[:ipv4] + = ns[:ipv6] + %br + %dt= t(:registrar) + %dd= @version.reify.registrar.name \ No newline at end of file From 8f5a73a3ec92261191f724b8df5cf17163162966 Mon Sep 17 00:00:00 2001 From: Stas Date: Mon, 7 Mar 2016 18:07:11 +0200 Subject: [PATCH 07/31] 108869472-navigayion_list_added --- .../admin/domain_versions_controller.rb | 4 +++ app/views/admin/domain_versions/show.haml | 28 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 6a3a89d9f..4a309e9af 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -42,7 +42,11 @@ class Admin::DomainVersionsController < AdminController end def show + per_page = 7 @version = DomainVersion.find(params[:id]) + @q = DomainVersion.where(item_id: @version.item_id).search + @versions = @q.result.page(params[:page]) + @versions = @versions.per(per_page) end def search diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 8e3834e17..81c144c4c 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -1,6 +1,12 @@ +- content_for :actions do + = link_to(t(:previous), admin_domain_path(@version.item_id), class: 'btn btn-primary') + = link_to(t(:next), admin_domain_path(@version.item_id), method: :get, class: 'btn btn btn-default') + = render 'shared/title', name: @version.reify.name + + - if @version - children = HashWithIndifferentAccess.new(@version.children) - nameservers = Nameserver.where(id: children[:nameservers]) @@ -12,8 +18,8 @@ .row - .col-md-12 - .panel.panel-default + .col-md-8 + .panel.panel-default{:style => "min-height:400px;"} .panel-heading %h3.panel-title = l(@version.reify.updated_at, format: :short) @@ -60,4 +66,20 @@ = ns[:ipv6] %br %dt= t(:registrar) - %dd= @version.reify.registrar.name \ No newline at end of file + %dd= @version.reify.registrar.name + .col-md-4 + .panel.panel-default{:style => "min-height:400px;"} + %ul.nav.nav-pills.nav-stacked + - @versions.each do |vs| + - if vs.id == @version.id + %li.active + = link_to admin_domain_version_path(vs.id) do + = l(vs.reify.updated_at, format: :short) + = vs.event + - else + %li + = link_to admin_domain_version_path(vs.id) do + = l(vs.reify.updated_at, format: :short) + = vs.event + %span{:style => "padding-left:10px;position: absolute; bottom: 10px;"} + = paginate @versions From 8867644f169f72f1e0a16bd0da96e91f6ea78ee9 Mon Sep 17 00:00:00 2001 From: Stas Date: Sun, 13 Mar 2016 15:08:03 +0200 Subject: [PATCH 08/31] 108869472-styles --- app/views/admin/domain_versions/show.haml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 81c144c4c..1ccc89912 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -1,12 +1,5 @@ -- content_for :actions do - = link_to(t(:previous), admin_domain_path(@version.item_id), class: 'btn btn-primary') - = link_to(t(:next), admin_domain_path(@version.item_id), method: :get, class: 'btn btn btn-default') - = render 'shared/title', name: @version.reify.name - - - - if @version - children = HashWithIndifferentAccess.new(@version.children) - nameservers = Nameserver.where(id: children[:nameservers]) @@ -67,6 +60,14 @@ %br %dt= t(:registrar) %dd= @version.reify.registrar.name + %span{:style => "padding-right:10px; float: right; bottom: 10px;"} + = link_to(t(:previous), + admin_domain_path(@version.item_id), + class: 'btn btn-primary') + = link_to(t(:next), + admin_domain_path(@version.item_id), + class: 'btn btn-default') + .col-md-4 .panel.panel-default{:style => "min-height:400px;"} %ul.nav.nav-pills.nav-stacked @@ -81,5 +82,5 @@ = link_to admin_domain_version_path(vs.id) do = l(vs.reify.updated_at, format: :short) = vs.event - %span{:style => "padding-left:10px;position: absolute; bottom: 10px;"} + %span{:style => "padding-left:10px; position: absolute; bottom: 10px;"} = paginate @versions From a42049e17060980350019d7d1b4f8fb50a7f81d9 Mon Sep 17 00:00:00 2001 From: Stas Date: Mon, 14 Mar 2016 13:54:00 +0200 Subject: [PATCH 09/31] 108869472-template_changes --- .../admin/contact_versions_controller.rb | 18 +++- app/views/admin/contact_versions/index.haml | 5 +- app/views/admin/contact_versions/show.haml | 96 +++++++++++++++++++ app/views/admin/domain_versions/archive.haml | 2 +- app/views/admin/domain_versions/show.haml | 22 +++-- config/locales/en.yml | 2 + 6 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 app/views/admin/contact_versions/show.haml diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index d6c7deb9e..59aedfcac 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -6,12 +6,18 @@ class Admin::ContactVersionsController < AdminController @q = ContactVersion.search(params[:q]) @versions = @q.result.page(params[:page]) + search_params = params[:q].deep_dup whereS = "1=1" - params[:q].each do |key, value| + search_params.each do |key, value| next if value.empty? - whereS += create_where_string(key, value) + case key + when 'event' + whereS += " AND event = '#{value}'" + else + whereS += create_where_string(key, value) + end end versions = ContactVersion.includes(:item).where(whereS) @@ -21,6 +27,14 @@ class Admin::ContactVersionsController < AdminController end + def show + per_page = 7 + @version = ContactVersion.find(params[:id]) + @q = ContactVersion.where(item_id: @version.item_id).search + @versions = @q.result.page(params[:page]) + @versions = @versions.per(per_page) + end + def search render json: ContactVersion.search_by_query(params[:q]) end diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index 2384503bd..f7602c565 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -23,6 +23,9 @@ .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' } .col-md-3 .form-group = label_tag t(:results_per_page) @@ -60,7 +63,7 @@ %tbody - @versions.each do |version| %tr - %td= version.reify.name + %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 diff --git a/app/views/admin/contact_versions/show.haml b/app/views/admin/contact_versions/show.haml new file mode 100644 index 000000000..13aeb327a --- /dev/null +++ b/app/views/admin/contact_versions/show.haml @@ -0,0 +1,96 @@ += render 'shared/title', name: @version.reify.name + +.row + .col-md-8 + .panel.panel-default{:style => "min-height:420px;"} + .panel-heading + %h3.panel-title + = l(@version.reify.updated_at, format: :short) + = @version.event + = plain_username(@version.terminator) + .panel-body + %dl.dl-horizontal + %dt= t(:id) + %dd= @version.reify.code + + %dt= t(:ident) + %dd= ident_for(@version.reify) + + %dt= t(:email) + %dd= @version.reify.email + + %dt= t(:phone) + %dd= @version.reify.phone + + - if @version.reify.fax + %dt= t(:fax) + %dd= @version.reify.fax + + %br + + %dt= t(:created) + %dd + = l(@version.reify.created_at, format: :short) + + %dt= t(:updated) + %dd + = l(@version.reify.updated_at, format: :short) + + %dt= t(:registrar) + %dd + - if @version.reify.registrar.present? + = link_to(@version.reify.registrar, admin_registrar_path(@version.reify.registrar)) + + %dl.dl-horizontal + - if @version.reify.org_name.present? + %dt= t(:org_name) + %dd= @version.reify.org_name + + %dt= t(:street) + %dd= @version.reify.street.to_s.gsub("\n", '
').html_safe + + %dt= t(:city) + %dd= @version.reify.city + + %dt= t(:zip) + %dd= @version.reify.zip + + %dt= t(:state) + %dd= @version.reify.state + + %dt= t(:country) + %dd= @version.reify.country + + + %span{:style => "padding-right:10px; float: right;"} + - if @version.previous + = link_to(t(:previous), + admin_contact_version_path(@version.previous.id), + class: 'btn btn-primary') + - else + %a.btn.btn-primary.disabled{:href => "#"} + %span= t(:previous) + - if @version.next + = link_to(t(:next), + admin_contact_version_path(@version.next.id), + class: 'btn btn-default') + - else + %a.btn.btn-default.disabled{:href => "#"} + %span= t(:next) + + .col-md-4 + .panel.panel-default{:style => "min-height:420px;"} + %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.reify.updated_at, format: :short) + = vs.event + - else + %li + = link_to admin_contact_version_path(vs.id) do + = l(vs.reify.updated_at, format: :short) + = vs.event + %span{:style => "padding-left:10px; position: absolute; bottom: 10px;"} + = paginate @versions \ 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 94ed66658..6a8df123c 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]), { multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' } + = 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' } .row .col-md-3 .col-md-3 diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 1ccc89912..5b11d15fb 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -60,13 +60,21 @@ %br %dt= t(:registrar) %dd= @version.reify.registrar.name - %span{:style => "padding-right:10px; float: right; bottom: 10px;"} - = link_to(t(:previous), - admin_domain_path(@version.item_id), - class: 'btn btn-primary') - = link_to(t(:next), - admin_domain_path(@version.item_id), - class: 'btn btn-default') + %span{:style => "padding-right:10px; padding-top:40px; float: right; bottom: 10px;"} + - if @version.previous + = link_to(t(:previous), + admin_domain_version_path(@version.previous.id), + class: 'btn btn-primary') + - else + %a.btn.btn-primary.disabled{:href => "#"} + %span= t(:previous) + - if @version.next + = link_to(t(:next), + admin_domain_version_path(@version.next.id), + class: 'btn btn-default') + - else + %a.btn.btn-default.disabled{:href => "#"} + %span= t(:next) .col-md-4 .panel.panel-default{:style => "min-height:400px;"} diff --git a/config/locales/en.yml b/config/locales/en.yml index 16e643b16..a5d441e2e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -926,3 +926,5 @@ en: if_auth_info_is_left_empty_it_will_be_auto_generated: 'If auth info is left empty, it will be auto generated.' each_domain_name_must_end_with_colon_sign: 'Each domain name must end with colon (:) sign.' expiration_remind_subject: 'The %{name} domain has expired' + next: 'Next' + previous: 'Previous' From 518b7139f0f235a17b33399aba1b5f1397b7c498 Mon Sep 17 00:00:00 2001 From: Stas Date: Wed, 16 Mar 2016 11:46:47 +0200 Subject: [PATCH 10/31] 108869472-conditions_for_corrupted --- app/views/admin/contact_versions/index.haml | 21 ++++++++++---------- app/views/admin/domain_versions/archive.haml | 21 ++++++++++---------- app/views/admin/domain_versions/show.haml | 2 +- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index f7602c565..68e74c547 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -62,16 +62,17 @@ = t(:action) %tbody - @versions.each do |version| - %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 - - if version.reify.registrar - = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) - %td= l(version.created_at, format: :short) - %td= version.event + - if version.reify + %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 + - if version.reify.registrar + = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) + %td= l(version.created_at, format: :short) + %td= version.event .row diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml index 6a8df123c..f50f18d06 100644 --- a/app/views/admin/domain_versions/archive.haml +++ b/app/views/admin/domain_versions/archive.haml @@ -55,16 +55,17 @@ = t(:action) %tbody - @versions.each do |version| - %tr - %td= link_to(version.reify.name, admin_domain_version_path(version.id)) - %td - - if version.reify.registrant - = link_to(version.reify.registrant, admin_registrant_path(version.reify.registrant)) - %td - - if version.reify.registrar - = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) - %td= l(version.created_at, format: :short) - %td= version.event + - if version.reify + %tr + %td= link_to(version.reify.name, admin_domain_version_path(version.id)) + %td + - if version.reify.registrant + = link_to(version.reify.registrant, admin_registrant_path(version.reify.registrant)) + %td + - if version.reify.registrar + = link_to(version.reify.registrar, admin_registrar_path(version.reify.registrar)) + %td= l(version.created_at, format: :short) + %td= version.event .row diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 5b11d15fb..eeabed897 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -80,7 +80,7 @@ .panel.panel-default{:style => "min-height:400px;"} %ul.nav.nav-pills.nav-stacked - @versions.each do |vs| - - if vs.id == @version.id + - if vs.id == @version.id and vs.reify %li.active = link_to admin_domain_version_path(vs.id) do = l(vs.reify.updated_at, format: :short) From 7ba760a884ddb579eace7b78b8e048062db4d143 Mon Sep 17 00:00:00 2001 From: Stas Date: Wed, 16 Mar 2016 18:09:53 +0200 Subject: [PATCH 11/31] 108869472-changes_for_real_data --- app/controllers/admin/contact_versions_controller.rb | 2 +- app/controllers/admin/domain_versions_controller.rb | 10 +++++----- app/views/admin/contact_versions/show.haml | 6 +++--- app/views/admin/domain_versions/show.haml | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index 59aedfcac..215d6203c 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -30,7 +30,7 @@ class Admin::ContactVersionsController < AdminController def show per_page = 7 @version = ContactVersion.find(params[:id]) - @q = ContactVersion.where(item_id: @version.item_id).search + @q = ContactVersion.where(item_id: @version.item_id).order(created_at: :asc).search @versions = @q.result.page(params[:page]) @versions = @versions.per(per_page) end diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 4a309e9af..0d85e047f 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -9,12 +9,12 @@ class Admin::DomainVersionsController < AdminController search_params = params[:q].deep_dup if search_params[:registrant] - registrant = Contact.find_by_name(search_params[:registrant]) + registrant = Contact.find_by(name: search_params[:registrant]) search_params.delete(:registrant) end if search_params[:registrar] - registrar = Registrar.find_by_name(search_params[:registrar]) + registrar = Registrar.find_by(name: search_params[:registrar]) search_params.delete(:registrar) end @@ -30,8 +30,8 @@ class Admin::DomainVersionsController < AdminController 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' = '#{registrant.id}'" if registrant + whereS += " AND object->>'registrar_id' = '#{registrar.id}'" if registrar versions = DomainVersion.includes(:item).where(whereS) @q = versions.search(params[:q]) @@ -44,7 +44,7 @@ class Admin::DomainVersionsController < AdminController def show per_page = 7 @version = DomainVersion.find(params[:id]) - @q = DomainVersion.where(item_id: @version.item_id).search + @q = DomainVersion.where(item_id: @version.item_id).order(created_at: :desc).search @versions = @q.result.page(params[:page]) @versions = @versions.per(per_page) end diff --git a/app/views/admin/contact_versions/show.haml b/app/views/admin/contact_versions/show.haml index 13aeb327a..555c301dc 100644 --- a/app/views/admin/contact_versions/show.haml +++ b/app/views/admin/contact_versions/show.haml @@ -5,7 +5,7 @@ .panel.panel-default{:style => "min-height:420px;"} .panel-heading %h3.panel-title - = l(@version.reify.updated_at, format: :short) + = l(@version.created_at, format: :short) = @version.event = plain_username(@version.terminator) .panel-body @@ -85,12 +85,12 @@ - if vs.id == @version.id %li.active = link_to admin_contact_version_path(vs.id) do - = l(vs.reify.updated_at, format: :short) + = l(vs.created_at, format: :short) = vs.event - else %li = link_to admin_contact_version_path(vs.id) do - = l(vs.reify.updated_at, format: :short) + = 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 diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index eeabed897..e6076a3db 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -15,7 +15,7 @@ .panel.panel-default{:style => "min-height:400px;"} .panel-heading %h3.panel-title - = l(@version.reify.updated_at, format: :short) + = l(@version.created_at, format: :short) = event = creator .panel-body @@ -83,12 +83,12 @@ - if vs.id == @version.id and vs.reify %li.active = link_to admin_domain_version_path(vs.id) do - = l(vs.reify.updated_at, format: :short) + = l(vs.created_at, format: :short) = vs.event - else %li = link_to admin_domain_version_path(vs.id) do - = l(vs.reify.updated_at, format: :short) + = l(vs.created_at, format: :short) = vs.event %span{:style => "padding-left:10px; position: absolute; bottom: 10px;"} = paginate @versions From 779a47c80fe00b263e82d330a6407ba286f9a52f Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 22 Mar 2016 11:43:24 +0200 Subject: [PATCH 12/31] Story#105842700 - found some way how to load historical objects. Data will be extracted --- .../admin/domain_versions_controller.rb | 12 +-- app/views/admin/domain_versions/_version.haml | 78 +++++++++---------- 2 files changed, 39 insertions(+), 51 deletions(-) diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 44a2087cd..9f8823d58 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -1,18 +1,8 @@ class Admin::DomainVersionsController < AdminController load_and_authorize_resource - # rubocop:disable Style/GuardClause def index - @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 - - # Depricated it had to load legal document. We may do it by parsing and adding link. - # if @domain.pending_json.present? - # frame = Nokogiri::XML(@domain.pending_json['frame']) - # @pending_user = User.find(@domain.pending_json['current_user_id']) - # @pending_domain = Epp::Domain.find(@domain.id) - # @pending_domain.update(frame, @pending_user, false) - # end end - # rubocop:enable Style/GuardClause end diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml index 321e9abda..53d97059e 100644 --- a/app/views/admin/domain_versions/_version.haml +++ b/app/views/admin/domain_versions/_version.haml @@ -5,20 +5,21 @@ - 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]) - - event = version.event - - creator = plain_username(version.terminator) + - children = HashWithIndifferentAccess.new(version.children) + - nameservers = NameserverVersion.where(item_id: children[:nameservers]).order(:item_id).preceding(version.created_at + 1, true).select("distinct on (item_id) #{NameserverVersion.table_name}.*").map{|ver| o=Nameserver.new(ver.object); ver.object_changes.to_h.each{|k,v| o[k]=v[-1] };o } + -#- nameservers = children[:nameservers].map{|id| Nameserver.new(id: id).safe_version_at(version.created_at)} + - tech_contacts = Contact.where(id: children[:tech_contacts]).map{|o| o.safe_version_at(version.created_at)} + - admin_contacts = Contact.where(id: children[:admin_contacts]).map{|o| o.safe_version_at(version.created_at)} + - registrant = Contact.where(id: children[:registrant]).map{|o| o.safe_version_at(version.created_at)} + - event = version.event + - creator = plain_username(version.terminator) - else # pending history - nameservers = domain.nameservers - tech_contacts = domain.tech_contacts - admin_contacts = domain.admin_contacts - - registrant = [domain.registrant] - - creator = pending_user.try(:username) - - event = 'pending' + - registrant = [domain.registrant] + - creator = pending_user.try(:username) + - event = 'pending' %td %p.nowrap @@ -55,43 +56,40 @@ = "#{l(domain.valid_to, format: :date)}" %td - - if registrant - - registrant.each do |r| - %p - = r[:name] - = r[:phone] - = r[:email] - %p - = r[:code] + - Array(registrant).each do |r| + %p + = r[:name] + = r[:phone] + = r[:email] + %p + = r[:code] %td - - if admin_contacts - - admin_contacts.each do |ac| - %p - = ac[:name] - = ac[:phone] - = ac[:email] - %p - = ac[:code] + - Array(admin_contacts).each do |ac| + %p + = ac[:name] + = ac[:phone] + = ac[:email] + %p + = ac[:code] %td - - if tech_contacts - - tech_contacts.each do |tc| - %p - = tc[:name] - = tc[:phone] - = tc[:email] - %p - = tc[:code] + - Array(tech_contacts).each do |tc| + %p + = tc[:name] + = tc[:phone] + = tc[:email] + %p + = tc[:code] %td %p - - if nameservers - - nameservers.each do |ns| - = ns[:hostname] - %br - = ns[:ipv4] - = ns[:ipv6] + - Array(nameservers).each do |ns| + = ns[:hostname] + %br + = ns[:ipv4] + = ns[:ipv6] + %br %td %p From 028aa31232ce6ca8c244703edd6ce179e010a097 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 22 Mar 2016 15:17:36 +0200 Subject: [PATCH 13/31] Story#115762063 - all contacts are using the same versions logic --- app/models/concerns/versions.rb | 18 ++++++++++++++++++ app/views/admin/domain_versions/_version.haml | 13 ++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/models/concerns/versions.rb b/app/models/concerns/versions.rb index 768cf021e..9af2b3640 100644 --- a/app/models/concerns/versions.rb +++ b/app/models/concerns/versions.rb @@ -55,4 +55,22 @@ 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) + 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 diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml index 53d97059e..47a2e597b 100644 --- a/app/views/admin/domain_versions/_version.haml +++ b/app/views/admin/domain_versions/_version.haml @@ -6,11 +6,10 @@ - if domain.present? - if version # normal history - children = HashWithIndifferentAccess.new(version.children) - - nameservers = NameserverVersion.where(item_id: children[:nameservers]).order(:item_id).preceding(version.created_at + 1, true).select("distinct on (item_id) #{NameserverVersion.table_name}.*").map{|ver| o=Nameserver.new(ver.object); ver.object_changes.to_h.each{|k,v| o[k]=v[-1] };o } - -#- nameservers = children[:nameservers].map{|id| Nameserver.new(id: id).safe_version_at(version.created_at)} - - tech_contacts = Contact.where(id: children[:tech_contacts]).map{|o| o.safe_version_at(version.created_at)} - - admin_contacts = Contact.where(id: children[:admin_contacts]).map{|o| o.safe_version_at(version.created_at)} - - registrant = Contact.where(id: children[:registrant]).map{|o| o.safe_version_at(version.created_at)} + - 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 @@ -87,8 +86,8 @@ - Array(nameservers).each do |ns| = ns[:hostname] %br - = ns[:ipv4] - = ns[:ipv6] + = ns[:ipv4].presence + = ns[:ipv6].presence %br %td From 92b64d6268f167de88d9391fae772b9464d1c1f8 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 22 Mar 2016 15:53:47 +0200 Subject: [PATCH 14/31] Story#115762063 - add links to versions list --- app/views/admin/domain_versions/_version.haml | 49 ++++++++++--------- app/views/admin/domain_versions/index.haml | 4 +- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml index 47a2e597b..7ef1dc182 100644 --- a/app/views/admin/domain_versions/_version.haml +++ b/app/views/admin/domain_versions/_version.haml @@ -31,7 +31,7 @@ %br = creator - %td + %td{class: version && version.object_changes.to_h["statuses"] && "warning"} %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: version && version.object_changes.to_h.slice("period", "period_unit", "valid_from", "valid_to").any? && "warning"} %p = "#{domain.period}#{domain.period_unit}" %br @@ -56,30 +56,33 @@ %td - Array(registrant).each do |r| - %p - = r[:name] - = r[:phone] - = r[:email] - %p - = r[:code] + = link_to admin_contact_path(r.id), target: "contact_#{r.id}" do + %p + = r[:name] + = r[:phone] + = r[:email] + %p + = r[:code] %td - Array(admin_contacts).each do |ac| - %p - = ac[:name] - = ac[:phone] - = ac[:email] - %p - = ac[:code] + = link_to admin_contact_path(ac.id), target: "contact_#{ac.id}" do + %p + = ac[:name] + = ac[:phone] + = ac[:email] + %p + = ac[:code] %td - Array(tech_contacts).each do |tc| - %p - = tc[:name] - = tc[:phone] - = tc[:email] - %p - = tc[:code] + = link_to admin_contact_path(tc.id), target: "contact_#{tc.id}" do + %p + = tc[:name] + = tc[:phone] + = tc[:email] + %p + = tc[:code] %td %p @@ -91,8 +94,10 @@ %br %td - %p - = domain.registrar.name if domain.registrar + - 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? %tr.js-pending{ style: 'display: none;' } diff --git a/app/views/admin/domain_versions/index.haml b/app/views/admin/domain_versions/index.haml index d948d53df..7717d16de 100644 --- a/app/views/admin/domain_versions/index.haml +++ b/app/views/admin/domain_versions/index.haml @@ -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) @@ -26,7 +26,7 @@ -# current version - if @domain.versions.present? %tr.small - = render 'admin/domain_versions/version', + = render 'admin/domain_versions/version', domain: @domain, version: @domain.versions.last -# all other older versions From 0dc1442c1a50462026ae20392a30de444323d662 Mon Sep 17 00:00:00 2001 From: Stas Date: Tue, 22 Mar 2016 18:37:19 +0200 Subject: [PATCH 15/31] 10886972-dublicate_view_deleted --- app/views/admin/domain_versions/_version.haml | 105 ------------------ 1 file changed, 105 deletions(-) delete mode 100644 app/views/admin/domain_versions/_version.haml diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml deleted file mode 100644 index fd449b4b0..000000000 --- a/app/views/admin/domain_versions/_version.haml +++ /dev/null @@ -1,105 +0,0 @@ -- statuses_link ||= false -- version ||= false -- domain ||= false -- pending_user ||= false - -- 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]) - - event = version.event - - creator = plain_username(version.terminator) - - else # pending history - - nameservers = domain.nameservers - - tech_contacts = domain.tech_contacts - - admin_contacts = domain.admin_contacts - - registrant = [domain.registrant] - - creator = pending_user.try(:username) - - event = 'pending' - - %td - %p.nowrap - = l(domain.updated_at, format: :shorts) - - if statuses_link - %br= link_to t(:edit_statuses), edit_admin_domain_path(params[:domain_id]) - - %p.text-right - = event - %br - = creator - - %td - %p - - if domain.statuses.present? - - domain.statuses.each do |s| - = s - - if domain.status_notes.present? - - notes = domain.status_notes[s] - - if notes - %br - %i= notes - %br - - if domain.pending_json.present? - %p - = link_to t(:pending_epp), '#', class: 'js-pending-toggle' - - %td - %p - = "#{domain.period}#{domain.period_unit}" - %br - = "#{l(domain.valid_from, format: :date)}" - %br - = "#{l(domain.valid_to, format: :date)}" - - %td - - registrant.each do |r| - %p - = r[:name] - = r[:phone] - = r[:email] - %p - = r[:code] - - %td - - admin_contacts.each do |ac| - %p - = ac[:name] - = ac[:phone] - = ac[:email] - %p - = ac[:code] - - %td - - tech_contacts.each do |tc| - %p - = tc[:name] - = tc[:phone] - = tc[:email] - %p - = tc[:code] - - %td - %p - - nameservers.each do |ns| - = ns[:hostname] - %br - = ns[:ipv4] - = ns[:ipv6] - - %td - %p - = domain.registrar.name - - - if domain.pending_json.present? - %tr.js-pending{ style: 'display: none;' } - %td{colspan: 8} - = preserve do - %pre - - formatted_req = Nokogiri::XML(domain.pending_json['frame']) - - if formatted_req.errors.none? - = formatted_req - - else - = domain.pending_json['frame'] From 7eeb889b2253f6e36880ebca9c53a29b8b5be7b3 Mon Sep 17 00:00:00 2001 From: Stas Date: Tue, 22 Mar 2016 21:45:25 +0200 Subject: [PATCH 16/31] 108869472-old_template_delete --- app/views/admin/domain_versions/index.haml | 44 ---------------------- 1 file changed, 44 deletions(-) delete mode 100644 app/views/admin/domain_versions/index.haml diff --git a/app/views/admin/domain_versions/index.haml b/app/views/admin/domain_versions/index.haml deleted file mode 100644 index d948d53df..000000000 --- a/app/views/admin/domain_versions/index.haml +++ /dev/null @@ -1,44 +0,0 @@ -- content_for :actions do - = link_to(t(:back_to_domain), [:admin, @domain], class: 'btn btn-default') -= render 'shared/title', name: "#{t(:history)}: #{@domain.name}" - -.row - .col-md-12 - .table-responsive - %table.table-hover.table-bordered.table-condensed - %thead - %tr - %th{class: 'col-xs-1'}= t(:timestap) - %th{class: 'col-xs-2'}= t(:statuses) - %th{class: 'col-xs-1'}= t(:period) - %th{class: 'col-xs-2'}= t(:registrant) - %th{class: 'col-xs-2'}= t(:admin) - %th{class: 'col-xs-2'}= t(:tech) - %th{class: 'col-xs-2'}= t(:nameservers) - %th{class: 'col-xs-2'}= t(:registrar) - - %tbody - - if @pending_domain.present? - %tr.small - = render 'admin/domain_versions/version', - domain: @pending_domain, pending_user: @pending_user, statuses_link: true - - -# current version - - if @domain.versions.present? - %tr.small - = render 'admin/domain_versions/version', - domain: @domain, version: @domain.versions.last - - -# all other older versions - - @domain.versions.not_creates.reverse.each do |version| - %tr.small - = render 'admin/domain_versions/version', - domain: version.reify, version: version.previous - -:coffee - $(document).on 'click', '.js-pending-toggle', (e) -> - e.preventDefault() - - $(document).on 'mousedown', '.js-pending-toggle', (e) -> - target = $(e.target) - target.parents('tr').next('tr.js-pending').toggle() From ffe2ddd02c075bc32163d2f0fbf795376721dff8 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 22 Mar 2016 23:51:21 +0200 Subject: [PATCH 17/31] Merge remote-tracking branch 'origin/108869472-objects_archive' into story/115762063--show-historical-nested # Conflicts: # app/views/admin/domain_versions/_version.haml # app/views/admin/domain_versions/index.haml --- app/models/concerns/versions.rb | 2 + .../admin/domains/partials/_version.haml | 85 ++++++++++--------- app/views/admin/domains/versions.haml | 2 +- 3 files changed, 50 insertions(+), 39 deletions(-) diff --git a/app/models/concerns/versions.rb b/app/models/concerns/versions.rb index 9af2b3640..779bd781a 100644 --- a/app/models/concerns/versions.rb +++ b/app/models/concerns/versions.rb @@ -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 @@ -65,6 +66,7 @@ module Versions 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 diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index fd449b4b0..e4b4c3c03 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -5,20 +5,20 @@ - 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]) - - event = version.event - - creator = plain_username(version.terminator) + - children = HashWithIndifferentAccess.new(version.children) + - 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 - nameservers = domain.nameservers - tech_contacts = domain.tech_contacts - admin_contacts = domain.admin_contacts - - registrant = [domain.registrant] - - creator = pending_user.try(:username) - - event = 'pending' + - registrant = [domain.registrant] + - creator = pending_user.try(:username) + - event = 'pending' %td %p.nowrap @@ -31,7 +31,7 @@ %br = creator - %td + %td{class: version && version.object_changes.to_h["statuses"] && "warning"} %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: version && version.object_changes.to_h.slice("period", "period_unit", "valid_from", "valid_to").any? && "warning"} %p = "#{domain.period}#{domain.period_unit}" %br @@ -55,43 +55,52 @@ = "#{l(domain.valid_to, format: :date)}" %td - - registrant.each do |r| - %p - = r[:name] - = r[:phone] - = r[:email] - %p - = r[:code] + - 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] + = r[:email] + %p + = r[:code] %td - - admin_contacts.each do |ac| - %p - = ac[:name] - = ac[:phone] - = ac[:email] - %p - = ac[:code] + - 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] + = ac[:email] + %p + = ac[:code] %td - - tech_contacts.each do |tc| - %p - = tc[:name] - = tc[:phone] - = tc[:email] - %p - = tc[:code] + - 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] + = tc[:email] + %p + = tc[:code] %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 - %p - = domain.registrar.name + - 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? %tr.js-pending{ style: 'display: none;' } diff --git a/app/views/admin/domains/versions.haml b/app/views/admin/domains/versions.haml index 5224aa34a..175b0be02 100644 --- a/app/views/admin/domains/versions.haml +++ b/app/views/admin/domains/versions.haml @@ -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) From 306819eeaf0aa973d0a7707e0589cd27d470c6ab Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Wed, 23 Mar 2016 00:05:55 +0200 Subject: [PATCH 18/31] story#115762063 - add links to just domain version view --- app/views/admin/domain_versions/show.haml | 58 ++++++++++++++--------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index e6076a3db..ffd2b359a 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -2,12 +2,13 @@ - 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) + - domain = @version.reify .row @@ -22,35 +23,46 @@ %dl.dl-horizontal %dt= t(:name) %dd= link_to(@version.reify.name, admin_domain_path(@version.item_id)) + %dt= t(:statuses) - %dd + %dd{class: @version.object_changes.to_h["statuses"] && "text-warning"} - if @version.reify.statuses.present? - @version.reify.statuses.each do |s| = s + %dt= t(:registrant) - %dd + %dd{class: @version.object_changes.to_h["registrant_id"] && "text-warning"} - registrant.each do |r| - = r[:name] - = r[:phone] - = r[:email] - = r[:code] - %br + - 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| - = r[:name] - = r[:phone] - = r[:email] - = r[:code] - %br + - 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| - = r[:name] - = r[:phone] - = r[:email] - = r[:code] - %br + - 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| @@ -59,7 +71,9 @@ = ns[:ipv6] %br %dt= t(:registrar) - %dd= @version.reify.registrar.name + %dd{class: @version.object_changes.to_h["registrar_id"] && "text-warning"} + = link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do + = @version.reify.registrar.name %span{:style => "padding-right:10px; padding-top:40px; float: right; bottom: 10px;"} - if @version.previous = link_to(t(:previous), From bcc8e7b6f81309e8c75f13e78b064bbdcd7316ee Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Wed, 23 Mar 2016 18:28:40 +0200 Subject: [PATCH 19/31] story#115762063 - use special helper method to generate class name --- app/helpers/application_helper.rb | 11 ++++ app/models/domain.rb | 3 +- app/views/admin/contact_versions/show.haml | 53 +++++++++++-------- app/views/admin/domain_versions/show.haml | 19 ++++--- .../admin/domains/partials/_version.haml | 6 +-- 5 files changed, 59 insertions(+), 33 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 098c10d9b..7cee5b69e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -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 diff --git a/app/models/domain.rb b/app/models/domain.rb index ff51f6f08..dded56a3f 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -731,7 +731,8 @@ class Domain < ActiveRecord::Base log[:tech_contacts] = tech_contact_ids log[:nameservers] = nameserver_ids log[:registrant] = [registrant_id] - log[:domain_statuses] = domain_status_ids + log[:domain_statuses]= domain_status_ids + log[:dnskeys] = dnskeys_ids log end diff --git a/app/views/admin/contact_versions/show.haml b/app/views/admin/contact_versions/show.haml index 555c301dc..d6762a8c6 100644 --- a/app/views/admin/contact_versions/show.haml +++ b/app/views/admin/contact_versions/show.haml @@ -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", '
').html_safe + %dd{class: changing_css_class(@version,"street")}= contact.street.to_s.gsub("\n", '
').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;"} diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index ffd2b359a..6244e60f0 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -1,4 +1,6 @@ = 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) @@ -8,7 +10,6 @@ - registrant = Contact.all_versions_for(children[:registrant], @version.created_at) - event = @version.event - creator = plain_username(@version.terminator) - - domain = @version.reify .row @@ -22,16 +23,16 @@ .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{class: @version.object_changes.to_h["statuses"] && "text-warning"} - - 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{class: @version.object_changes.to_h["registrant_id"] && "text-warning"} + %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 @@ -70,10 +71,12 @@ = ns[:ipv4] = ns[:ipv6] %br + %dt= t(:registrar) - %dd{class: @version.object_changes.to_h["registrar_id"] && "text-warning"} + %dd{class: changing_css_class(@version,"registrar_id")} = link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do - = @version.reify.registrar.name + = domain.registrar.name + %span{:style => "padding-right:10px; padding-top:40px; float: right; bottom: 10px;"} - if @version.previous = link_to(t(:previous), diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index e4b4c3c03..15768ea16 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -31,7 +31,7 @@ %br = creator - %td{class: version && version.object_changes.to_h["statuses"] && "warning"} + %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{class: version && version.object_changes.to_h.slice("period", "period_unit", "valid_from", "valid_to").any? && "warning"} + %td{class: changing_css_class(version, "period", "period_unit", "valid_from", "valid_to")} %p = "#{domain.period}#{domain.period_unit}" %br @@ -96,7 +96,7 @@ = 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 From 2b2e2e52543b641ec51743021d00641aad58b372 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Thu, 24 Mar 2016 15:47:07 +0200 Subject: [PATCH 20/31] Story#115762063 - typo --- app/models/domain.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index dded56a3f..29a53ead3 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -732,7 +732,7 @@ class Domain < ActiveRecord::Base log[:nameservers] = nameserver_ids log[:registrant] = [registrant_id] log[:domain_statuses]= domain_status_ids - log[:dnskeys] = dnskeys_ids + log[:dnskeys] = dnskey_ids log end From 44e5f10c38aaeb102e25a4ae1557318c17a38f72 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 29 Mar 2016 18:05:46 +0300 Subject: [PATCH 21/31] story#115762063 - show all dnskey attributes in history --- app/views/admin/domains/partials/_version.haml | 10 ++++++++++ app/views/admin/domains/versions.haml | 1 + 2 files changed, 11 insertions(+) diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index 15768ea16..31619dbbc 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -7,6 +7,7 @@ - if version # normal history - children = HashWithIndifferentAccess.new(version.children) - nameservers = Nameserver.all_versions_for(children[:nameservers], version.created_at) + - dnskeys = Dnskey.all_versions_for(children[:dnskeys], 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) @@ -14,6 +15,7 @@ - creator = plain_username(version.terminator) - else # pending history - nameservers = domain.nameservers + - dnskeys = domain.dnskeys - tech_contacts = domain.tech_contacts - admin_contacts = domain.admin_contacts - registrant = [domain.registrant] @@ -95,6 +97,14 @@ = ns[:ipv4].presence = ns[:ipv6].presence %br + %td + - Array(dnskeys).each do |ns| + %p + = ns.flags + = ns.protocol + = ns.alg + %br + = ns.attributes.except("id", "domain_id", "updated_at", "legacy_domain_id") %td{class: changing_css_class(version,"registrar_id")} - if domain.registrar diff --git a/app/views/admin/domains/versions.haml b/app/views/admin/domains/versions.haml index 175b0be02..63d318236 100644 --- a/app/views/admin/domains/versions.haml +++ b/app/views/admin/domains/versions.haml @@ -15,6 +15,7 @@ %th{class: 'col-xs-2'}= t(:admin) %th{class: 'col-xs-2'}= t(:tech) %th{class: 'col-xs-2'}= t(:nameservers) + %th{class: 'col-xs-2'}= t(:dnskeys) %th{class: 'col-xs-2'}= t(:registrar) %tbody From da0f11d47ffd924e2e09d6496a36a36f8c5a2779 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 29 Mar 2016 18:08:31 +0300 Subject: [PATCH 22/31] story#115762063 - render link to pure history --- app/views/admin/domains/partials/_version.haml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index 31619dbbc..c7f4862cf 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -32,6 +32,9 @@ = event %br = creator + - if version + %p.text-right + = link_to "Pure history", admin_domain_version_path(version) %td{class: changing_css_class(version,"statuses")} %p From f873b14214de8f1817ef53febf516fb9f5210efd Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Wed, 30 Mar 2016 17:07:27 +0300 Subject: [PATCH 23/31] story#115762063 - children log method doesn't save ids marked for destruction --- app/models/domain.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index 29a53ead3..a7815c9ce 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -725,14 +725,18 @@ class Domain < ActiveRecord::Base # rubocop: enable Metrics/CyclomaticComplexity # rubocop: enable Metrics/PerceivedComplexity + + # small optimization that we'are using to_a if it was done already + # otherwise just getting ids def children_log - log = HashWithIndifferentAccess.new - log[:admin_contacts] = admin_contact_ids - log[:tech_contacts] = tech_contact_ids - log[:nameservers] = nameserver_ids + log = HashWithIndifferentAccess.new + types = %i(admin_contacts tech_contacts nameservers dnskeys domain_statuses) + + types.each do |rel| + ids = send(rel).loaded? ? send(rel).reject(&:marked_for_destruction?).map(&:id) : send(rel).pluck(:id) + log[rel] = ids + end log[:registrant] = [registrant_id] - log[:domain_statuses]= domain_status_ids - log[:dnskeys] = dnskey_ids log end From fb330ad87a134e51e98742eb8f83e644020eef26 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Wed, 30 Mar 2016 17:37:37 +0300 Subject: [PATCH 24/31] story#115762063 - not always we have all the data in log_children table --- app/models/concerns/versions.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/concerns/versions.rb b/app/models/concerns/versions.rb index 779bd781a..49c4298f2 100644 --- a/app/models/concerns/versions.rb +++ b/app/models/concerns/versions.rb @@ -60,7 +60,7 @@ module Versions module ClassMethods def all_versions_for(ids, time) ver_klass = paper_trail_version_class - from_history = ver_klass.where(item_id: ids). + from_history = ver_klass.where(item_id: ids.to_a). order(:item_id). preceding(time + 1, true). select("distinct on (item_id) #{ver_klass.table_name}.*"). @@ -70,7 +70,7 @@ module Versions ver.object_changes.to_h.each { |k, v| o[k]=v[-1] } o end - not_in_history = where(id: (ids - from_history.map(&:id))) + not_in_history = where(id: (ids.to_a - from_history.map(&:id))) from_history + not_in_history end From 3052e3dc16dc71c1a43b91207875fd30e67702d5 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 5 Apr 2016 09:10:00 +0300 Subject: [PATCH 25/31] story#115762063 - render in domain history publickey's only meaning numbers --- app/views/admin/domains/partials/_version.haml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index c7f4862cf..b7a790e7c 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -106,8 +106,7 @@ = ns.flags = ns.protocol = ns.alg - %br - = ns.attributes.except("id", "domain_id", "updated_at", "legacy_domain_id") + = ns.public_key.to_s[-20,20] %td{class: changing_css_class(version,"registrar_id")} - if domain.registrar From d5da0f88815afa8fd1ab2a79479bc73e51f6d498 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 5 Apr 2016 09:15:24 +0300 Subject: [PATCH 26/31] story#115762063 - render in domain history publickey's only meaning numbers --- app/views/admin/domain_versions/show.haml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 6244e60f0..0f99d4c4c 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -5,6 +5,7 @@ - if @version - children = HashWithIndifferentAccess.new(@version.children) - nameservers = Nameserver.all_versions_for(children[:nameservers], @version.created_at) + - dnskeys = Dnskey.all_versions_for(children[:dnskeys], @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) @@ -72,6 +73,15 @@ = ns[:ipv6] %br + %dt= t(:dnskeys) + %dd + - dnskeys.each do |ns| + = ns[:flags] + = ns[:protocol] + = ns[:alg] + = 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 From e4cdd23248321ae966ba9b5a6853b2d463fdb489 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Thu, 7 Apr 2016 16:05:52 +0300 Subject: [PATCH 27/31] story#115762063 - revert how children ids are saved --- app/models/domain.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index a7815c9ce..86b6d4a60 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -729,13 +729,12 @@ class Domain < ActiveRecord::Base # small optimization that we'are using to_a if it was done already # otherwise just getting ids def children_log - log = HashWithIndifferentAccess.new - types = %i(admin_contacts tech_contacts nameservers dnskeys domain_statuses) - - types.each do |rel| - ids = send(rel).loaded? ? send(rel).reject(&:marked_for_destruction?).map(&:id) : send(rel).pluck(:id) - log[rel] = ids - end + log = HashWithIndifferentAccess.new + log[:admin_contacts] = admin_contact_ids + log[:tech_contacts] = tech_contact_ids + log[:nameservers] = nameserver_ids + log[:domain_statuses]= domain_status_ids + log[:dnskeys] = dnskey_ids log[:registrant] = [registrant_id] log end From 6545ac2ae639c4a678864d3e4def227afbff10d9 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 12 Apr 2016 09:59:44 +0300 Subject: [PATCH 28/31] Story#115762063 - preload name --- app/views/admin/domain_versions/show.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 0f99d4c4c..3e1fd14b9 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -1,7 +1,8 @@ -= 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} += render 'shared/title', name: @version.reify.name + - if @version - children = HashWithIndifferentAccess.new(@version.children) - nameservers = Nameserver.all_versions_for(children[:nameservers], @version.created_at) From 8b25a2d30e3189e096172e27926210033892ff3b Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Wed, 13 Apr 2016 09:53:15 +0300 Subject: [PATCH 29/31] Story#115762063 - add double scroll --- app/assets/javascripts/admin-manifest.coffee | 1 + .../javascripts/admin/application.coffee | 32 +++++ app/views/admin/domains/versions.haml | 2 +- .../assets/javascripts/jquery.doubleScroll.js | 126 ++++++++++++++++++ 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 vendor/assets/javascripts/jquery.doubleScroll.js diff --git a/app/assets/javascripts/admin-manifest.coffee b/app/assets/javascripts/admin-manifest.coffee index 759e78c5a..51bc5f419 100644 --- a/app/assets/javascripts/admin-manifest.coffee +++ b/app/assets/javascripts/admin-manifest.coffee @@ -9,5 +9,6 @@ #= require shared/jquery.validate.bootstrap #= require jquery-ui/datepicker #= require select2 +#= require jquery.doubleScroll #= require shared/general #= require admin/application diff --git a/app/assets/javascripts/admin/application.coffee b/app/assets/javascripts/admin/application.coffee index 256d2e0fa..bdc1a74bb 100644 --- a/app/assets/javascripts/admin/application.coffee +++ b/app/assets/javascripts/admin/application.coffee @@ -16,3 +16,35 @@ $(document).on 'page:change', -> $(this).validate() $('[data-toggle="popover"]').popover() + + + + + # doublescroll + $('[data-doublescroll]').doubleScroll({ + onlyIfScroll: false, + scrollCss: + 'overflow-x': 'auto' + 'overflow-y': 'hidden' + contentCss: + 'overflow-x': 'auto' + 'overflow-y': 'hidden' + resetOnWindowResize: true + }) + + positionSlider = -> + for scroll in document.querySelectorAll('[data-doublescroll]') + wrapper = scroll.previousSibling + if $(scroll).offset().top < $(window).scrollTop() + wrapper.style.position = 'fixed' + wrapper.style.top = '-5px' + else + wrapper.style.position = 'relative' + wrapper.style.top = '0' + return + + positionSlider() + $(window).scroll(positionSlider).resize positionSlider + #due .report-table width: auto top scrollbar appears after resize so we do fake resize action + $(window).resize() + diff --git a/app/views/admin/domains/versions.haml b/app/views/admin/domains/versions.haml index 63d318236..b803808aa 100644 --- a/app/views/admin/domains/versions.haml +++ b/app/views/admin/domains/versions.haml @@ -4,7 +4,7 @@ .row .col-md-12 - .table-responsive + .table-responsive{data: {doublescroll: true}} %table.table.table-bordered.table-condensed %thead %tr diff --git a/vendor/assets/javascripts/jquery.doubleScroll.js b/vendor/assets/javascripts/jquery.doubleScroll.js new file mode 100644 index 000000000..45ff0642f --- /dev/null +++ b/vendor/assets/javascripts/jquery.doubleScroll.js @@ -0,0 +1,126 @@ +/* + * @name DoubleScroll + * @desc displays scroll bar on top and on the bottom of the div + * @requires jQuery + * + * @author Pawel Suwala - http://suwala.eu/ + * @author Antoine Vianey - http://www.astek.fr/ + * @version 0.5 (11-11-2015) + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Usage: + * https://github.com/avianey/jqDoubleScroll + */ +(function( $ ) { + + jQuery.fn.doubleScroll = function(userOptions) { + + // Default options + var options = { + contentElement: undefined, // Widest element, if not specified first child element will be used + scrollCss: { + 'overflow-x': 'auto', + 'overflow-y': 'hidden' + }, + contentCss: { + 'overflow-x': 'auto', + 'overflow-y': 'hidden' + }, + onlyIfScroll: true, // top scrollbar is not shown if the bottom one is not present + resetOnWindowResize: false, // recompute the top ScrollBar requirements when the window is resized + timeToWaitForResize: 30 // wait for the last update event (usefull when browser fire resize event constantly during ressing) + }; + + $.extend(true, options, userOptions); + + // do not modify + // internal stuff + $.extend(options, { + topScrollBarMarkup: '
', + topScrollBarWrapperSelector: '.doubleScroll-scroll-wrapper', + topScrollBarInnerSelector: '.doubleScroll-scroll' + }); + + var _showScrollBar = function($self, options) { + + if (options.onlyIfScroll && $self.get(0).scrollWidth <= $self.width()) { + // content doesn't scroll + // remove any existing occurrence... + $self.prev(options.topScrollBarWrapperSelector).remove(); + return; + } + + // add div that will act as an upper scroll only if not already added to the DOM + var $topScrollBar = $self.prev(options.topScrollBarWrapperSelector); + + if ($topScrollBar.length == 0) { + + // creating the scrollbar + // added before in the DOM + $topScrollBar = $(options.topScrollBarMarkup); + $self.before($topScrollBar); + + // apply the css + $topScrollBar.css(options.scrollCss); + $self.css(options.contentCss); + + // bind upper scroll to bottom scroll + $topScrollBar.bind('scroll.doubleScroll', function() { + $self.scrollLeft($topScrollBar.scrollLeft()); + }); + + // bind bottom scroll to upper scroll + var selfScrollHandler = function() { + $topScrollBar.scrollLeft($self.scrollLeft()); + }; + $self.bind('scroll.doubleScroll', selfScrollHandler); + } + + // find the content element (should be the widest one) + var $contentElement; + + if (options.contentElement !== undefined && $self.find(options.contentElement).length !== 0) { + $contentElement = $self.find(options.contentElement); + } else { + $contentElement = $self.find('>:first-child'); + } + + // set the width of the wrappers + $(options.topScrollBarInnerSelector, $topScrollBar).width($contentElement.outerWidth()); + $topScrollBar.width($self.width()); + $topScrollBar.scrollLeft($self.scrollLeft()); + + } + + return this.each(function() { + + var $self = $(this); + + _showScrollBar($self, options); + + // bind the resize handler + // do it once + if (options.resetOnWindowResize) { + + var id; + var handler = function(e) { + _showScrollBar($self, options); + }; + + $(window).bind('resize.doubleScroll', function() { + // adding/removing/replacing the scrollbar might resize the window + // so the resizing flag will avoid the infinite loop here... + clearTimeout(id); + id = setTimeout(handler, options.timeToWaitForResize); + }); + + } + + }); + + } + +}( jQuery )); From 0c738a5cba6981c17290a7aa29ac2ed824afda08 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 19 Apr 2016 11:57:20 +0300 Subject: [PATCH 30/31] Story#115762063 - add dots before secure code in history --- app/views/admin/domains/partials/_version.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index b7a790e7c..8e018a392 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -106,7 +106,8 @@ = ns.flags = ns.protocol = ns.alg - = ns.public_key.to_s[-20,20] + - if ns.public_key.present? + ...#{ns.public_key.to_s[-20,20]} %td{class: changing_css_class(version,"registrar_id")} - if domain.registrar From 17765cbf1454b76ad651585c7bacc37708d729a2 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Fri, 22 Apr 2016 11:12:07 +0300 Subject: [PATCH 31/31] Story#115762063 - escape dots for haml --- app/views/admin/domain_versions/show.haml | 5 +++-- app/views/admin/domains/partials/_version.haml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 3e1fd14b9..e413679be 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -80,8 +80,9 @@ = ns[:flags] = ns[:protocol] = ns[:alg] - = ns[:public_key].to_s[-20,20] - %br + - if ns[:public_key].present? + \...#{ns[:public_key].to_s[-20,20]} + %br %dt= t(:registrar) %dd{class: changing_css_class(@version,"registrar_id")} diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml index 8e018a392..7cd9a497e 100644 --- a/app/views/admin/domains/partials/_version.haml +++ b/app/views/admin/domains/partials/_version.haml @@ -107,7 +107,7 @@ = ns.protocol = ns.alg - if ns.public_key.present? - ...#{ns.public_key.to_s[-20,20]} + \...#{ns.public_key.to_s[-20,20]} %td{class: changing_css_class(version,"registrar_id")} - if domain.registrar