From 6077f6c36d67f0d5d93dd0611c966d47aad07435 Mon Sep 17 00:00:00 2001 From: Stas Date: Tue, 1 Dec 2015 15:21:40 +0200 Subject: [PATCH 1/7] 105842700-portal --- .../registrant/domains_controller.rb | 40 +++++++++++- .../registrant/registrars_controller.rb | 64 +++++++++++++++++++ .../registrant/sessions_controller.rb | 2 + .../registrant/whois_controller.rb | 4 ++ app/views/registrant/domains/index.haml | 61 ++++++++++++++---- .../domains/partials/_admin_contacts.haml | 22 +++++++ .../registrant/domains/partials/_dnskeys.haml | 25 ++++++++ .../registrant/domains/partials/_general.haml | 32 ++++++++++ .../domains/partials/_keyrelays.haml | 20 ++++++ .../domains/partials/_legal_documents.haml | 14 ++++ .../domains/partials/_nameservers.haml | 23 +++++++ .../registrant/domains/partials/_owner.haml | 19 ++++++ .../domains/partials/_statuses.haml | 18 ++++++ .../domains/partials/_tech_contacts.haml | 22 +++++++ app/views/registrant/domains/show.haml | 24 +++++++ app/views/registrant/whois/index.haml | 4 +- 16 files changed, 378 insertions(+), 16 deletions(-) create mode 100644 app/controllers/registrant/registrars_controller.rb create mode 100644 app/views/registrant/domains/partials/_admin_contacts.haml create mode 100644 app/views/registrant/domains/partials/_dnskeys.haml create mode 100644 app/views/registrant/domains/partials/_general.haml create mode 100644 app/views/registrant/domains/partials/_keyrelays.haml create mode 100644 app/views/registrant/domains/partials/_legal_documents.haml create mode 100644 app/views/registrant/domains/partials/_nameservers.haml create mode 100644 app/views/registrant/domains/partials/_owner.haml create mode 100644 app/views/registrant/domains/partials/_statuses.haml create mode 100644 app/views/registrant/domains/partials/_tech_contacts.haml create mode 100644 app/views/registrant/domains/show.haml diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb index 4bba945a8..81e99cd54 100644 --- a/app/controllers/registrant/domains_controller.rb +++ b/app/controllers/registrant/domains_controller.rb @@ -1,5 +1,41 @@ class Registrant::DomainsController < RegistrantController + def index - authorize! :view, :registrant_domains + + authorize! :view, :registrant_domains + params[:q] ||= {} + + domains = Domain.includes(:registrar, :registrant).where(registrant_id: 76246) + + normalize_search_parameters do + @q = domains.search(params[:q]) + @domains = @q.result.page(params[:page]) end -end + @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 + end + + def show + @domain = Domain.find(params[:id]) + @domain.valid? + end + + def set_domain + @domain = Domain.find(params[:id]) + end + + def normalize_search_parameters + + ca_cache = params[:q][:valid_to_lteq] + begin + end_time = params[:q][:valid_to_lteq].try(:to_date) + params[:q][:valid_to_lteq] = end_time.try(:end_of_day) + rescue + logger.warn('Invalid date') + end + + yield + + params[:q][:valid_to_lteq] = ca_cache + end + +end \ No newline at end of file diff --git a/app/controllers/registrant/registrars_controller.rb b/app/controllers/registrant/registrars_controller.rb new file mode 100644 index 000000000..ca34ed176 --- /dev/null +++ b/app/controllers/registrant/registrars_controller.rb @@ -0,0 +1,64 @@ +class Registrar::RegistrarsController < RegistrartController + load_and_authorize_resource + + + def search + render json: Registrar.search_by_query(params[:q]) + end + + def index + @q = Registrar.ordered.search(params[:q]) + @registrars = @q.result.page(params[:page]) + end + + def new + @registrar = Registrar.new + end + + def create + @registrar = Registrar.new(registrar_params) + + if @registrar.save + flash[:notice] = I18n.t('registrar_added') + redirect_to [:admin, @registrar] + else + flash.now[:alert] = I18n.t('failed_to_add_registrar') + render 'new' + end + end + + def edit; end + + def update + if @registrar.update(registrar_params) + flash[:notice] = I18n.t('registrar_updated') + redirect_to [:admin, @registrar] + else + flash.now[:alert] = I18n.t('failed_to_update_registrar') + render 'edit' + end + end + + def destroy + if @registrar.destroy + flash[:notice] = I18n.t('registrar_deleted') + redirect_to admin_registrars_path + else + flash.now[:alert] = I18n.t('failed_to_delete_registrar') + render 'show' + end + end + + private + + def set_registrar + @registrar = Registrar.find(params[:id]) + end + + def registrar_params + params.require(:registrar).permit( + :name, :reg_no, :vat_no, :street, :city, :state, :zip, :billing_address, + :country_code, :email, :phone, :billing_email, :code + ) + end +end diff --git a/app/controllers/registrant/sessions_controller.rb b/app/controllers/registrant/sessions_controller.rb index f0a292137..4acdbc613 100644 --- a/app/controllers/registrant/sessions_controller.rb +++ b/app/controllers/registrant/sessions_controller.rb @@ -2,6 +2,8 @@ class Registrant::SessionsController < Devise::SessionsController layout 'registrant/application' def login + @user = RegistrantUser.find_by_username('registrar1') + sign_in(@user, event: :authentication) end # rubocop: disable Metrics/AbcSize diff --git a/app/controllers/registrant/whois_controller.rb b/app/controllers/registrant/whois_controller.rb index 71d29dd76..b44a0bb67 100644 --- a/app/controllers/registrant/whois_controller.rb +++ b/app/controllers/registrant/whois_controller.rb @@ -1,5 +1,9 @@ class Registrant::WhoisController < RegistrantController def index authorize! :view, :registrant_whois + + if params[:domain_name].present? + @domain = WhoisRecord.find_by(name: params[:domain_name]); + end end end diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml index 8b71cefca..5ce325efe 100644 --- a/app/views/registrant/domains/index.haml +++ b/app/views/registrant/domains/index.haml @@ -1,5 +1,42 @@ = render 'shared/title', name: t(:domains) +.row + .col-md-12 + = search_form_for [:registrant, @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_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name) + .col-md-3 + .form-group + = f.label t(:registrant_ident) + = f.search_field :registrant_ident_eq, class: 'form-control', placeholder: t(:registrant_ident) + .col-md-3 + .form-group + = f.label t(:nameserver_hostname) + = f.search_field :nameservers_hostname_eq, class: 'form-control', placeholder: t(:nameserver_hostname) + .row + .col-md-3 + .form-group + = f.label t(:valid_to_from) + = f.search_field :valid_to_gteq, value: params[:q][:valid_to_gteq], class: 'form-control datepicker', placeholder: t(:valid_to_from) + .col-md-3 + .form-group + = f.label t(:valid_to_until) + = f.search_field :valid_to_lteq, value: params[:q][:valid_to_lteq], class: 'form-control datepicker', placeholder: t(:valid_to_until) + .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 .col-md-12 @@ -8,20 +45,20 @@ %thead %tr %th{class: 'col-xs-2'} - = t(:name) + = sort_link(@q, 'name') %th{class: 'col-xs-2'} - = t(:registrant) + = sort_link(@q, 'registrant_name', t(:registrant)) %th{class: 'col-xs-2'} - = t(:valid_to) + = sort_link(@q, 'valid_to', t(:valid_to)) %th{class: 'col-xs-2'} - = t(:registrar) + = sort_link(@q, 'registrar_name', t(:registrar)) %tbody - -# - @domains.each do |x| - -# %tr - -# %td= link_to(x, admin_domain_path(x)) - -# %td - -# - if x.registrant - -# = link_to(x.registrant, [:admin, x.registrant]) + - @domains.each do |x| + %tr + %td= link_to(x, registrant_domain_path(x)) + %td + - if x.registrant + = link_to(x.registrant, [:admin, x.registrant]) - -# %td= l(x.valid_to, format: :short) - -# %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar + %td= l(x.valid_to, format: :short) + %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar diff --git a/app/views/registrant/domains/partials/_admin_contacts.haml b/app/views/registrant/domains/partials/_admin_contacts.haml new file mode 100644 index 000000000..0db8f6e32 --- /dev/null +++ b/app/views/registrant/domains/partials/_admin_contacts.haml @@ -0,0 +1,22 @@ +- panel_class = @domain.errors.messages[:admin_contacts] ? 'panel-danger' : 'panel-default' +.panel{class: panel_class} + .panel-heading.clearfix + = t(:admin_contacts) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-4'}= t(:name) + %th{class: 'col-xs-4'}= t(:id) + %th{class: 'col-xs-4'}= t(:email) + %tbody + - @domain.admin_contacts.each do |ac| + %tr + %td= link_to(ac, admin_contact_path(ac)) + %td= ac.code + %td= ac.email + - if @domain.errors.messages[:admin_contacts] + %tfoot + - @domain.errors.messages[:admin_contacts].each do |x| + %tr + %td{colspan: 4}= x diff --git a/app/views/registrant/domains/partials/_dnskeys.haml b/app/views/registrant/domains/partials/_dnskeys.haml new file mode 100644 index 000000000..6d5759e65 --- /dev/null +++ b/app/views/registrant/domains/partials/_dnskeys.haml @@ -0,0 +1,25 @@ +- panel_class = @domain.errors.messages[:dnskeys] ? 'panel-danger' : 'panel-default' +#dnskeys.panel{class: panel_class} + .panel-heading.clearfix + = t(:dnskeys) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-1'}= t(:flag) + %th{class: 'col-xs-1'}= t(:protocol) + %th{class: 'col-xs-1'}= t(:algorithm) + %th{class: 'col-xs-9'}= t(:public_key) + %tbody + - @domain.dnskeys.each do |x| + %tr + %td= x.flags + %td= x.protocol + %td= x.alg + %td= x.public_key + - if @domain.errors.messages[:dnskeys] + %tfoot + - @domain.errors.messages[:dnskeys].each do |x| + %tr + %td{colspan: 4}= x + diff --git a/app/views/registrant/domains/partials/_general.haml b/app/views/registrant/domains/partials/_general.haml new file mode 100644 index 000000000..d433a1302 --- /dev/null +++ b/app/views/registrant/domains/partials/_general.haml @@ -0,0 +1,32 @@ +.panel.panel-default + .panel-heading + %h3.panel-title= t(:general) + .panel-body + %dl.dl-horizontal + %dt= t(:name) + %dd= @domain.name + + %dt= t(:registered_at) + %dd= l(@domain.registered_at) + + %dt= t(:registrar) + %dd= link_to(@domain.registrar, admin_registrar_path(@domain.registrar)) + + %dt= t(:password) + %dd + = text_field_tag :password, @domain.auth_info, readonly: true, class: 'partially-hidden' + + %dt= t(:valid_from) + %dd= l(@domain.valid_from) + + %dt= t(:valid_to) + %dd= l(@domain.valid_to) + + %dt= t(:outzone_at) + %dd= l(@domain.outzone_at) + + %dt= t(:delete_at) + %dd= l(@domain.delete_at) + + %dt= t(:force_delete_at) + %dd= l(@domain.force_delete_at) diff --git a/app/views/registrant/domains/partials/_keyrelays.haml b/app/views/registrant/domains/partials/_keyrelays.haml new file mode 100644 index 000000000..43d099383 --- /dev/null +++ b/app/views/registrant/domains/partials/_keyrelays.haml @@ -0,0 +1,20 @@ +.panel{class: 'panel-default'} + .panel-heading.clearfix + = t(:keyrelays) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-4'}= t(:uploaded_at) + %th{class: 'col-xs-3'}= t(:expiry) + %th{class: 'col-xs-2'}= t(:requester) + %th{class: 'col-xs-2'}= t(:accepter) + %th{class: 'col-xs-1'}= t(:status) + %tbody + - @domain.keyrelays.includes([:requester, :accepter]).order(pa_date: :desc).each do |x| + %tr + %td= link_to(x.pa_date, [:admin, x]) + %td= x.expiry + %td= link_to(x.requester, [:admin, x.requester]) + %td= link_to(x.accepter, [:admin, x.accepter]) + %td= x.status diff --git a/app/views/registrant/domains/partials/_legal_documents.haml b/app/views/registrant/domains/partials/_legal_documents.haml new file mode 100644 index 000000000..900a9784a --- /dev/null +++ b/app/views/registrant/domains/partials/_legal_documents.haml @@ -0,0 +1,14 @@ +.panel.panel-default + .panel-heading.clearfix + = t(:legal_documents) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-8'}= t(:created_at) + %th{class: 'col-xs-4'}= t(:type) + %tbody + - legal_documents.each do |x| + %tr + %td= link_to(x.created_at, [:admin, x]) + %td= x.document_type diff --git a/app/views/registrant/domains/partials/_nameservers.haml b/app/views/registrant/domains/partials/_nameservers.haml new file mode 100644 index 000000000..db3ca759a --- /dev/null +++ b/app/views/registrant/domains/partials/_nameservers.haml @@ -0,0 +1,23 @@ +- panel_class = @domain.errors.messages[:nameservers] ? 'panel-danger' : 'panel-default' +#nameservers.panel{class: panel_class} + .panel-heading.clearfix + = t(:nameservers) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-4'}= t(:hostname) + %th{class: 'col-xs-4'}= t(:ipv4) + %th{class: 'col-xs-4'}= t(:ipv6) + %tbody + - @domain.nameservers.each do |x| + %tr + %td= x + %td= x.ipv4 + %td= x.ipv6 + - if @domain.errors.messages[:nameservers] + %tfoot + - @domain.errors.messages[:nameservers].each do |x| + %tr + %td{colspan: 3}= x + diff --git a/app/views/registrant/domains/partials/_owner.haml b/app/views/registrant/domains/partials/_owner.haml new file mode 100644 index 000000000..7f499f86b --- /dev/null +++ b/app/views/registrant/domains/partials/_owner.haml @@ -0,0 +1,19 @@ +.panel.panel-default + .panel-heading + %h3.panel-title= t(:registrant) + .panel-body + %dl.dl-horizontal + %dt= t(:name) + %dd= link_to(@domain.registrant, [:admin, @domain.registrant]) + + %dt= t(:id) + %dd= @domain.registrant_code + + %dt= t(:identity_code) + %dd= @domain.registrant_ident + + %dt= t(:email) + %dd= @domain.registrant_email + + %dt= t(:phone) + %dd= @domain.registrant_phone diff --git a/app/views/registrant/domains/partials/_statuses.haml b/app/views/registrant/domains/partials/_statuses.haml new file mode 100644 index 000000000..ab8e55e6c --- /dev/null +++ b/app/views/registrant/domains/partials/_statuses.haml @@ -0,0 +1,18 @@ +#domain_statuses.panel.panel-default + .panel-heading.clearfix + = t(:statuses) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-6'}= t(:status) + %th{class: 'col-xs-6'}= t(:notes) + %tbody + - @domain.statuses.each do |status| + %tr + %td + - if @domain.pending_json.present? && [DomainStatus::PENDING_UPDATE, DomainStatus::PENDING_DELETE].include?(status) + = link_to status, admin_domain_domain_versions_path(@domain.id) + - else + = status + %td= @domain.status_notes[status] diff --git a/app/views/registrant/domains/partials/_tech_contacts.haml b/app/views/registrant/domains/partials/_tech_contacts.haml new file mode 100644 index 000000000..20badbea8 --- /dev/null +++ b/app/views/registrant/domains/partials/_tech_contacts.haml @@ -0,0 +1,22 @@ +- panel_class = @domain.errors.messages[:tech_contacts] ? 'panel-danger' : 'panel-default' +#tech_contacts.panel{class: panel_class} + .panel-heading.clearfix + = t(:tech_contacts) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-4'}= t(:name) + %th{class: 'col-xs-4'}= t(:id) + %th{class: 'col-xs-4'}= t(:email) + %tbody + - @domain.tech_contacts.each do |tc| + %tr + %td= link_to(tc, admin_contact_path(tc)) + %td= tc.code + %td= tc.email + - if @domain.errors.messages[:tech_contacts] + %tfoot + - @domain.errors.messages[:tech_contacts].each do |x| + %tr + %td{colspan: 4}= x diff --git a/app/views/registrant/domains/show.haml b/app/views/registrant/domains/show.haml new file mode 100644 index 000000000..17a85b841 --- /dev/null +++ b/app/views/registrant/domains/show.haml @@ -0,0 +1,24 @@ +- content_for :actions do + = link_to(t(:edit_statuses), edit_admin_domain_path(@domain), class: 'btn btn-primary') + = link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary') + += render 'shared/title', name: @domain.name + +.row + .col-md-6= render 'admin/domains/partials/general' + .col-md-6= render 'admin/domains/partials/owner' +.row + .col-md-12= render 'admin/domains/partials/tech_contacts' +.row + .col-md-12= render 'admin/domains/partials/admin_contacts' +.row + .col-md-12= render 'admin/domains/partials/statuses' +.row + .col-md-12= render 'admin/domains/partials/nameservers' +.row + .col-md-12= render 'admin/domains/partials/dnskeys' +.row + .col-md-12= render 'admin/domains/partials/keyrelays' +.row + .col-md-12 + = render 'admin/domains/partials/legal_documents', legal_documents: @domain.legal_documents diff --git a/app/views/registrant/whois/index.haml b/app/views/registrant/whois/index.haml index 3e390eaf3..3d95af638 100644 --- a/app/views/registrant/whois/index.haml +++ b/app/views/registrant/whois/index.haml @@ -17,5 +17,5 @@ %span.glyphicon.glyphicon-search   %hr - - if @results - = @results + - if @domain + %pre= @domain.body \ No newline at end of file From da910bc6606967f65738a021e46941edec86922e Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 1 Dec 2015 18:15:27 +0200 Subject: [PATCH 2/7] Story#105842700 - Login user with ID card --- app/controllers/registrant/domains_controller.rb | 2 +- app/controllers/registrant/sessions_controller.rb | 13 +++---------- app/models/registrant_user.rb | 14 +++++++++++--- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb index 81e99cd54..cec5be34e 100644 --- a/app/controllers/registrant/domains_controller.rb +++ b/app/controllers/registrant/domains_controller.rb @@ -5,7 +5,7 @@ class Registrant::DomainsController < RegistrantController authorize! :view, :registrant_domains params[:q] ||= {} - domains = Domain.includes(:registrar, :registrant).where(registrant_id: 76246) + domains = current_user.domains normalize_search_parameters do @q = domains.search(params[:q]) diff --git a/app/controllers/registrant/sessions_controller.rb b/app/controllers/registrant/sessions_controller.rb index 4acdbc613..91589d510 100644 --- a/app/controllers/registrant/sessions_controller.rb +++ b/app/controllers/registrant/sessions_controller.rb @@ -2,21 +2,14 @@ class Registrant::SessionsController < Devise::SessionsController layout 'registrant/application' def login - @user = RegistrantUser.find_by_username('registrar1') - sign_in(@user, event: :authentication) end # rubocop: disable Metrics/AbcSize def id - if Rails.env.development? - sign_in(RegistrantUser.find_or_create_by_idc_data('test'), event: :authentication) - return redirect_to registrant_root_url - end + id_code, id_issuer = request.env['SSL_CLIENT_S_DN'], request.env['SSL_CLIENT_I_DN_O'] + id_code, id_issuer = 'test', RegistrantUser::ACCEPTED_ISSUER if Rails.env.development? - logger.error request.env['SSL_CLIENT_S_DN'] - logger.error request.env['SSL_CLIENT_S_DN'].encoding - logger.error request.env['SSL_CLIENT_I_DN_O'] - @user = RegistrantUser.find_or_create_by_idc_data(request.env['SSL_CLIENT_S_DN'], request.env['SSL_CLIENT_I_DN_O']) + @user = RegistrantUser.find_or_create_by_idc_data(id_code, id_issuer) if @user sign_in(@user, event: :authentication) redirect_to registrant_root_url diff --git a/app/models/registrant_user.rb b/app/models/registrant_user.rb index 9a69e8acb..6fac517af 100644 --- a/app/models/registrant_user.rb +++ b/app/models/registrant_user.rb @@ -1,4 +1,5 @@ class RegistrantUser < User + ACCEPTED_ISSUER = 'AS Sertifitseerimiskeskus' attr_accessor :idc_data def ability @@ -6,6 +7,15 @@ class RegistrantUser < User end delegate :can?, :cannot?, to: :ability + def ident + registrant_ident.to_s.split("-").last + end + + def domains + Domain.includes(:registrar, :registrant).where(contacts: {ident: ident}) + end + + def to_s username end @@ -13,11 +23,9 @@ class RegistrantUser < User class << self def find_or_create_by_idc_data(idc_data, issuer_organization) return false if idc_data.blank? - return false if issuer_organization != 'AS Sertifitseerimiskeskus' + return false if issuer_organization != ACCEPTED_ISSUER idc_data.force_encoding('UTF-8') - logger.error(idc_data) - logger.error(idc_data.encoding) identity_code = idc_data.scan(/serialNumber=(\d+)/).flatten.first country = idc_data.scan(/^\/C=(.{2})/).flatten.first first_name = idc_data.scan(%r{/GN=(.+)/serialNumber}).flatten.first From 2748f3be5527d061c5dabebf438ed16a738e2cd5 Mon Sep 17 00:00:00 2001 From: Stas Date: Sun, 6 Dec 2015 20:47:34 +0200 Subject: [PATCH 3/7] 105842700-download_list_added --- .../registrant/domains_controller.rb | 27 +++++--- .../registrant/registrars_controller.rb | 64 ++----------------- app/models/ability.rb | 4 +- app/models/domain.rb | 9 +++ .../registrant/domains/download_list.haml | 0 app/views/registrant/domains/index.haml | 35 ++++++++-- app/views/registrant/domains/show.haml | 21 +++--- app/views/registrant/registrars/index.haml | 22 +++++++ app/views/registrant/registrars/show.haml | 53 +++++++++++++++ config/application.rb | 2 + config/routes.rb | 14 ++++ 11 files changed, 163 insertions(+), 88 deletions(-) create mode 100644 app/views/registrant/domains/download_list.haml create mode 100644 app/views/registrant/registrars/index.haml create mode 100644 app/views/registrant/registrars/show.haml diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb index cec5be34e..4fab83787 100644 --- a/app/controllers/registrant/domains_controller.rb +++ b/app/controllers/registrant/domains_controller.rb @@ -1,12 +1,9 @@ class Registrant::DomainsController < RegistrantController def index - authorize! :view, :registrant_domains params[:q] ||= {} - domains = current_user.domains - normalize_search_parameters do @q = domains.search(params[:q]) @domains = @q.result.page(params[:page]) @@ -16,15 +13,32 @@ class Registrant::DomainsController < RegistrantController def show @domain = Domain.find(params[:id]) - @domain.valid? + if !(current_user.domains.include?(@domain) || @domain.valid?) + redirect_to registrant_domains_path + end + authorize! :read, @domain end def set_domain @domain = Domain.find(params[:id]) end - def normalize_search_parameters + def download_list + authorize! :view, :registrant_domains + params[:q] ||= {} + domains = current_user.domains + normalize_search_parameters do + @q = domains.search(params[:q]) + @domains = @q + end + respond_to do |format| + format.html + format.csv { render text: @domains.to_csv } + end + end + + def normalize_search_parameters ca_cache = params[:q][:valid_to_lteq] begin end_time = params[:q][:valid_to_lteq].try(:to_date) @@ -32,10 +46,7 @@ class Registrant::DomainsController < RegistrantController rescue logger.warn('Invalid date') end - yield - params[:q][:valid_to_lteq] = ca_cache end - end \ No newline at end of file diff --git a/app/controllers/registrant/registrars_controller.rb b/app/controllers/registrant/registrars_controller.rb index ca34ed176..36ab9bb2a 100644 --- a/app/controllers/registrant/registrars_controller.rb +++ b/app/controllers/registrant/registrars_controller.rb @@ -1,64 +1,8 @@ -class Registrar::RegistrarsController < RegistrartController - load_and_authorize_resource +class Registrant::RegistrarsController < RegistrantController - - def search - render json: Registrar.search_by_query(params[:q]) - end - - def index - @q = Registrar.ordered.search(params[:q]) - @registrars = @q.result.page(params[:page]) - end - - def new - @registrar = Registrar.new - end - - def create - @registrar = Registrar.new(registrar_params) - - if @registrar.save - flash[:notice] = I18n.t('registrar_added') - redirect_to [:admin, @registrar] - else - flash.now[:alert] = I18n.t('failed_to_add_registrar') - render 'new' - end - end - - def edit; end - - def update - if @registrar.update(registrar_params) - flash[:notice] = I18n.t('registrar_updated') - redirect_to [:admin, @registrar] - else - flash.now[:alert] = I18n.t('failed_to_update_registrar') - render 'edit' - end - end - - def destroy - if @registrar.destroy - flash[:notice] = I18n.t('registrar_deleted') - redirect_to admin_registrars_path - else - flash.now[:alert] = I18n.t('failed_to_delete_registrar') - render 'show' - end - end - - private - - def set_registrar + def show @registrar = Registrar.find(params[:id]) - end - - def registrar_params - params.require(:registrar).permit( - :name, :reg_no, :vat_no, :street, :city, :state, :zip, :billing_address, - :country_code, :email, :phone, :billing_email, :code - ) + authorize! :read, @registrar + @registrar.valid? end end diff --git a/app/models/ability.rb b/app/models/ability.rb index cf98cb704..61f1edb2e 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -16,7 +16,7 @@ class Ability @user.roles.each { |role| send(role) } if @user.roles when 'ApiUser' @user.roles.each { |role| send(role) } if @user.roles - when 'RegistrantUser' + when 'RegistrantUser' static_registrant end @@ -117,9 +117,11 @@ class Ability end def static_registrant + customer_service can :manage, :registrant_domains can :manage, :registrant_whois can :manage, Depp::Domain + can :manage, Domain end def user diff --git a/app/models/domain.rb b/app/models/domain.rb index 9845e8ac8..ca988dc4d 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -774,5 +774,14 @@ class Domain < ActiveRecord::Base status_notes[status] = notes[i] end end + + def self.to_csv + CSV.generate do |csv| + csv << column_names + all.each do |domain| + csv << domain.attributes.values_at(*column_names) + end + end + end end # rubocop: enable Metrics/ClassLength diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml index 5ce325efe..b79b921bd 100644 --- a/app/views/registrant/domains/index.haml +++ b/app/views/registrant/domains/index.haml @@ -12,10 +12,6 @@ .form-group = f.label t(:registrant_ident) = f.search_field :registrant_ident_eq, class: 'form-control', placeholder: t(:registrant_ident) - .col-md-3 - .form-group - = f.label t(:nameserver_hostname) - = f.search_field :nameservers_hostname_eq, class: 'form-control', placeholder: t(:nameserver_hostname) .row .col-md-3 .form-group @@ -36,6 +32,20 @@   %button.btn.btn-default.js-reset-form = t(:clear_fields) + .row + .col-md-3 + .btn-group{:role => "group"} + %button.btn.btn-default.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :type => "button"} + Download + %span.caret + %ul.dropdown-menu + %li= link_to 'PDF', download_list_registrant_domain_path(params[:q], format: "pdf") + %li= link_to 'CSV', download_list_registrant_domain_path(params[:q], format: "csv") + .col-md-3 + .col-md-3 + .col-md-3 + + %hr .row @@ -58,7 +68,20 @@ %td= link_to(x, registrant_domain_path(x)) %td - if x.registrant - = link_to(x.registrant, [:admin, x.registrant]) + = link_to(x.registrant, [:registrant, x.registrant]) if x.registrant %td= l(x.valid_to, format: :short) - %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar + %td= link_to(x.registrar, registrant_registrar_path(x.registrar)) if x.registrar + + .row + .col-md-6 + = paginate @domains + .col-md-6.text-right + .pagination + = t(:result_count, count: @domains.total_count) + +:coffee + $(".js-reset-form").on "click", (e) -> + e.preventDefault(); + window.location = "#{registrant_domains_path}" + diff --git a/app/views/registrant/domains/show.haml b/app/views/registrant/domains/show.haml index 17a85b841..50c0409b2 100644 --- a/app/views/registrant/domains/show.haml +++ b/app/views/registrant/domains/show.haml @@ -1,24 +1,19 @@ - content_for :actions do - = link_to(t(:edit_statuses), edit_admin_domain_path(@domain), class: 'btn btn-primary') - = link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary') + -#= link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary') = render 'shared/title', name: @domain.name .row - .col-md-6= render 'admin/domains/partials/general' - .col-md-6= render 'admin/domains/partials/owner' + .col-md-6= render 'registrant/domains/partials/general' .row - .col-md-12= render 'admin/domains/partials/tech_contacts' + .col-md-12= render 'registrant/domains/partials/tech_contacts' .row - .col-md-12= render 'admin/domains/partials/admin_contacts' + .col-md-12= render 'registrant/domains/partials/admin_contacts' .row - .col-md-12= render 'admin/domains/partials/statuses' + .col-md-12= render 'registrant/domains/partials/statuses' .row - .col-md-12= render 'admin/domains/partials/nameservers' + .col-md-12= render 'registrant/domains/partials/nameservers' .row - .col-md-12= render 'admin/domains/partials/dnskeys' + .col-md-12= render 'registrant/domains/partials/dnskeys' .row - .col-md-12= render 'admin/domains/partials/keyrelays' -.row - .col-md-12 - = render 'admin/domains/partials/legal_documents', legal_documents: @domain.legal_documents + .col-md-12= render 'registrant/domains/partials/keyrelays' diff --git a/app/views/registrant/registrars/index.haml b/app/views/registrant/registrars/index.haml new file mode 100644 index 000000000..a2604dbec --- /dev/null +++ b/app/views/registrant/registrars/index.haml @@ -0,0 +1,22 @@ +- content_for :actions do + = link_to(t(:new), new_admin_registrar_path, class: 'btn btn-primary') += render 'shared/title', name: t(:registrars) + +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-6'} + = sort_link(@q, 'name') + %th{class: 'col-xs-6'} + = sort_link(@q, 'reg_no', t(:reg_no)) + %tbody + - @registrars.each do |x| + %tr + %td= link_to(x, [:admin, x]) + %td= x.reg_no +.row + .col-md-12 + = paginate @registrars diff --git a/app/views/registrant/registrars/show.haml b/app/views/registrant/registrars/show.haml new file mode 100644 index 000000000..ed5c72b29 --- /dev/null +++ b/app/views/registrant/registrars/show.haml @@ -0,0 +1,53 @@ += render 'shared/title', name: @registrar.name + +- if @registrar.errors.any? + - @registrar.errors.each do |attr, err| + = err + %br +- if @registrar.errors.any? + %hr +.row + .col-md-6 + .panel.panel-default + .panel-heading + %h3.panel-title= t(:general) + .panel-body + %dl.dl-horizontal + %dt= t(:name) + %dd= @registrar.name + + %dt= t(:reg_no) + %dd= @registrar.reg_no + + %dt= t(:vat_no) + %dd= @registrar.vat_no + + %dt= t(:reference_no) + %dd= @registrar.reference_no + + %dt= t(:id) + %dd= @registrar.code + + .col-md-6 + .panel.panel-default + .panel-heading + %h3.panel-title= t(:contact) + .panel-body + %dl.dl-horizontal + %dt= t(:country) + %dd= @registrar.country + + %dt= t(:address) + %dd= @registrar.address + + %dt= t(:contact_phone) + %dd= @registrar.phone + + %dt= t(:contact_email) + %dd= @registrar.email + + %dt= t(:billing_address) + %dd= @registrar.billing_address + + %dt= t(:billing_email) + %dd= @registrar.billing_email diff --git a/config/application.rb b/config/application.rb index 7734cc6e9..2121039dc 100644 --- a/config/application.rb +++ b/config/application.rb @@ -7,6 +7,8 @@ require 'action_controller/railtie' require 'action_mailer/railtie' require 'action_view/railtie' require 'sprockets/railtie' +require 'csv' +require 'rails/all' # require "rails/test_unit/railtie" # Require the gems listed in Gemfile, including any gems diff --git a/config/routes.rb b/config/routes.rb index f5b81e8b5..8abef6c2c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -102,6 +102,12 @@ Rails.application.routes.draw do namespace :registrant do root 'domains#index' + resources :domains do + member do + get :download_list + end + end + # resources :invoices do # member do # get 'download_pdf' @@ -140,6 +146,14 @@ Rails.application.routes.draw do end end + resources :registrars do + resources :api_users + resources :white_ips + collection do + get :search + end + end + resources :whois # resources :contacts do # member do From cd8feaf55300e49e32244e40696218a9b4e2163b Mon Sep 17 00:00:00 2001 From: Stas Date: Mon, 7 Dec 2015 17:29:57 +0200 Subject: [PATCH 4/7] 105842700-file_generation_changed --- app/controllers/registrant/domains_controller.rb | 11 +++++++---- app/models/domain.rb | 5 +++++ app/views/registrant/domains/index.haml | 4 ++-- config/routes.rb | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb index 4fab83787..2e17f9039 100644 --- a/app/controllers/registrant/domains_controller.rb +++ b/app/controllers/registrant/domains_controller.rb @@ -32,11 +32,14 @@ class Registrant::DomainsController < RegistrantController @domains = @q end - respond_to do |format| - format.html - format.csv { render text: @domains.to_csv } + respond_to do |format| + format.csv { render text: @domains.result.to_csv } + format.pdf do + pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false)) + send_data pdf, filename: 'domains' + end + end end - end def normalize_search_parameters ca_cache = params[:q][:valid_to_lteq] diff --git a/app/models/domain.rb b/app/models/domain.rb index ca988dc4d..4d29d4032 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -783,5 +783,10 @@ class Domain < ActiveRecord::Base end end end + + def self.pdf(html) + kit = PDFKit.new(html) + kit.to_pdf + end end # rubocop: enable Metrics/ClassLength diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml index b79b921bd..efc399ebf 100644 --- a/app/views/registrant/domains/index.haml +++ b/app/views/registrant/domains/index.haml @@ -39,8 +39,8 @@ Download %span.caret %ul.dropdown-menu - %li= link_to 'PDF', download_list_registrant_domain_path(params[:q], format: "pdf") - %li= link_to 'CSV', download_list_registrant_domain_path(params[:q], format: "csv") + %li= link_to 'PDF', download_list_registrant_domains_path(params[:q], format: "pdf") + %li= link_to 'CSV', download_list_registrant_domains_path(params[:q], format: "csv") .col-md-3 .col-md-3 .col-md-3 diff --git a/config/routes.rb b/config/routes.rb index 8abef6c2c..69e6c9680 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -103,7 +103,7 @@ Rails.application.routes.draw do root 'domains#index' resources :domains do - member do + collection do get :download_list end end From ce209b317d04347e16dbbd53b59b1bf3bf084d65 Mon Sep 17 00:00:00 2001 From: Stas Date: Wed, 9 Dec 2015 15:29:28 +0200 Subject: [PATCH 5/7] 105842700-redirect_fix_and template --- app/controllers/application_controller.rb | 2 +- .../registrant/domains_controller.rb | 2 +- .../registrant/domains/download_list.haml | 22 +++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 318923e3d..a79be9aca 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -32,7 +32,7 @@ class ApplicationController < ActionController::Base if registrar_request? registrar_root_url elsif registrant_request? - registrant_root_url + registrant_login_url elsif admin_request? admin_root_url end diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb index 2e17f9039..eb5388662 100644 --- a/app/controllers/registrant/domains_controller.rb +++ b/app/controllers/registrant/domains_controller.rb @@ -36,7 +36,7 @@ class Registrant::DomainsController < RegistrantController format.csv { render text: @domains.result.to_csv } format.pdf do pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false)) - send_data pdf, filename: 'domains' + send_data pdf, filename: 'domains.pdf' end end end diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml index e69de29bb..f8fc70fd9 100644 --- a/app/views/registrant/domains/download_list.haml +++ b/app/views/registrant/domains/download_list.haml @@ -0,0 +1,22 @@ +.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(:valid_to) + %th{class: 'col-xs-2'} + =t(:registrar) + %tbody + - @domains.result.each do |x| + %tr + %td= x.name + %td= x.registrant + %td= l(x.valid_to, format: :short) + %td= x.registrar + .row + .col-md-6 From c315c1717809c67082a97223fdc512545163d849 Mon Sep 17 00:00:00 2001 From: Stas Date: Thu, 10 Dec 2015 15:56:29 +0200 Subject: [PATCH 6/7] 105842700-encoding_fix --- .../registrant/domains/download_list.haml | 48 +++++++++++-------- app/views/registrant/domains/index.haml | 4 +- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml index f8fc70fd9..40212812c 100644 --- a/app/views/registrant/domains/download_list.haml +++ b/app/views/registrant/domains/download_list.haml @@ -1,22 +1,28 @@ -.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(:valid_to) - %th{class: 'col-xs-2'} - =t(:registrar) - %tbody - - @domains.result.each do |x| +!!! +%html + %head + %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"} + %title Contacts + %body + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead %tr - %td= x.name - %td= x.registrant - %td= l(x.valid_to, format: :short) - %td= x.registrar - .row - .col-md-6 + %th{class: 'col-xs-2'} + =t(:name) + %th{class: 'col-xs-2'} + =t(:registrant) + %th{class: 'col-xs-2'} + =t(:valid_to) + %th{class: 'col-xs-2'} + =t(:registrar) + %tbody + - @domains.result.each do |x| + %tr + %td= x.name + %td= x.registrant + %td= l(x.valid_to, format: :short) + %td= x.registrar + .row + .col-md-6 diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml index efc399ebf..776b7878d 100644 --- a/app/views/registrant/domains/index.haml +++ b/app/views/registrant/domains/index.haml @@ -39,8 +39,8 @@ Download %span.caret %ul.dropdown-menu - %li= link_to 'PDF', download_list_registrant_domains_path(params[:q], format: "pdf") - %li= link_to 'CSV', download_list_registrant_domains_path(params[:q], format: "csv") + %li= link_to 'PDF', download_list_registrant_domains_path(q: params[:q], format: "pdf") + %li= link_to 'CSV', download_list_registrant_domains_path(q: params[:q], format: "csv") .col-md-3 .col-md-3 .col-md-3 From 2b186e9c933c0633950faa2d141b864adf9c1aac Mon Sep 17 00:00:00 2001 From: Stas Date: Fri, 11 Dec 2015 17:33:28 +0200 Subject: [PATCH 7/7] 105842700-translation_and_link_fix --- .../registrant/registrants_controller.rb | 8 ++ .../registrant/registrars_controller.rb | 1 - .../registrant/domains/partials/_general.haml | 2 +- app/views/registrant/registrants/index.haml | 112 ++++++++++++++++++ app/views/registrant/registrants/show.haml | 75 ++++++++++++ config/routes.rb | 2 + 6 files changed, 198 insertions(+), 2 deletions(-) create mode 100644 app/controllers/registrant/registrants_controller.rb create mode 100644 app/views/registrant/registrants/index.haml create mode 100644 app/views/registrant/registrants/show.haml diff --git a/app/controllers/registrant/registrants_controller.rb b/app/controllers/registrant/registrants_controller.rb new file mode 100644 index 000000000..adc1e0b82 --- /dev/null +++ b/app/controllers/registrant/registrants_controller.rb @@ -0,0 +1,8 @@ +class Registrant::RegistrantsController < RegistrantController + + def show + @contact = Registrant.find(params[:id]) + authorize! :read, @contact + @contact.valid? + end +end diff --git a/app/controllers/registrant/registrars_controller.rb b/app/controllers/registrant/registrars_controller.rb index 36ab9bb2a..d0630b73a 100644 --- a/app/controllers/registrant/registrars_controller.rb +++ b/app/controllers/registrant/registrars_controller.rb @@ -3,6 +3,5 @@ class Registrant::RegistrarsController < RegistrantController def show @registrar = Registrar.find(params[:id]) authorize! :read, @registrar - @registrar.valid? end end diff --git a/app/views/registrant/domains/partials/_general.haml b/app/views/registrant/domains/partials/_general.haml index d433a1302..d1a17c1cc 100644 --- a/app/views/registrant/domains/partials/_general.haml +++ b/app/views/registrant/domains/partials/_general.haml @@ -12,7 +12,7 @@ %dt= t(:registrar) %dd= link_to(@domain.registrar, admin_registrar_path(@domain.registrar)) - %dt= t(:password) + %dt= t(:authinfo_pw) %dd = text_field_tag :password, @domain.auth_info, readonly: true, class: 'partially-hidden' diff --git a/app/views/registrant/registrants/index.haml b/app/views/registrant/registrants/index.haml new file mode 100644 index 000000000..b8e7850e6 --- /dev/null +++ b/app/views/registrant/registrants/index.haml @@ -0,0 +1,112 @@ += 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_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name) + .col-md-3 + .form-group + = f.label t(:id) + = f.search_field :code_eq, class: 'form-control', placeholder: t(:id) + .col-md-3 + .form-group + = f.label t(:ident) + = f.search_field :ident_matches, class: 'form-control', placeholder: t(:ident) + .col-md-3 + .form-group + = label_tag t(:ident_type) + = select_tag '[q][ident_type_eq]', options_for_select(Contact::IDENT_TYPES, params[:q][:ident_type_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' } + .row + .col-md-3 + .form-group + = f.label t(:email) + = f.search_field :email_matches, class: 'form-control', placeholder: t(:email) + .col-md-3 + .form-group + = label_tag t(:country) + = select_tag '[q][country_code_eq]', SortedCountry.all_options(params[:q][:country_code_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' } + .col-md-3 + .form-group + = f.label t(:is_registrant) + %div + = f.check_box :registrant_domains_id_not_null + .col-md-3 + .form-group + = label_tag t(:contact_type) + = select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' } + .row + .col-md-3 + .form-group + = f.label t(:registrar) + = f.select :registrar_id_eq, Registrar.all.map { |x| [x, x.id] }, { include_blank: true }, class: 'form-control selectize', placeholder: t(:choose) + .col-md-3 + .form-group + = f.label t(:created_at_from) + = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_at_from) + .col-md-3 + .form-group + = f.label t(:created_at_until) + = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_at_until) + .col-md-3 + .form-group + = f.label t(:updated_at) + = f.search_field :updated_at_gteq, value: params[:q][:updated_at_gteq], class: 'form-control datepicker', placeholder: t(:updated_at) + .row + .col-md-6 + .form-group + = label_tag t(:status) + = select_tag :statuses_contains, options_for_select(Contact::STATUSES, params[:statuses_contains]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' } + .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 + .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(:name)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'code', t(:id)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'ident', t(:ident)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'email', t(:created_at)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'registrar_name', t(:registrar)) + %tbody + - @contacts.each do |contact| + %tr + %td= link_to(contact, admin_contact_path(contact)) + %td= contact.code + %td= ident_for(contact) + %td= l(contact.created_at, format: :short) + %td + - if contact.registrar + = link_to(contact.registrar, admin_registrar_path(contact.registrar)) + +.row + .col-md-6 + = paginate @contacts + .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_contacts_path}" diff --git a/app/views/registrant/registrants/show.haml b/app/views/registrant/registrants/show.haml new file mode 100644 index 000000000..5b2a527ca --- /dev/null +++ b/app/views/registrant/registrants/show.haml @@ -0,0 +1,75 @@ += render 'shared/title', name: @contact.name + +.row + .col-md-6 + .panel.panel-default + .panel-heading + %h3.panel-title= t(:general) + .panel-body + %dl.dl-horizontal + %dt= t(:id) + %dd= @contact.code + + %dt= t(:authinfo_pw) + %dd + = text_field_tag :auth_info, @contact.auth_info, readonly: true, class: 'partially-hidden' + + %br + + %dt= t(:ident) + %dd= ident_for(@contact) + + %dt= t(:email) + %dd= @contact.email + + %dt= t(:phone) + %dd= @contact.phone + + - if @contact.fax + %dt= t(:fax) + %dd= @contact.fax + + %br + + %dt= t(:created) + %dd + = l(@contact.created_at, format: :short) + by + = creator_link(@contact) + + %dt= t(:updated) + %dd + = l(@contact.updated_at, format: :short) + by + = updator_link(@contact) + + %dt= t(:registrar) + %dd + - if @contact.registrar.present? + = link_to(@contact.registrar, registrant_registrar_path(@contact.registrar)) if @contact.registrar + + .col-md-6 + .panel.panel-default + .panel-heading + %h3.panel-title= t(:contact) + .panel-body + %dl.dl-horizontal + %dl.dl-horizontal + - if @contact.org_name.present? + %dt= t(:org_name) + %dd= @contact.org_name + + %dt= t(:street) + %dd= @contact.street.to_s.gsub("\n", '
').html_safe + + %dt= t(:city) + %dd= @contact.city + + %dt= t(:zip) + %dd= @contact.zip + + %dt= t(:state) + %dd= @contact.state + + %dt= t(:country) + %dd= @contact.country \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 69e6c9680..922dbeaa5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -154,6 +154,8 @@ Rails.application.routes.draw do end end + resources :registrants + resources :whois # resources :contacts do # member do