Add list view to domain transfers

This commit is contained in:
Martin Lensment 2014-09-29 14:30:26 +03:00
parent d2565d646d
commit 6852aacd3b
11 changed files with 95 additions and 18 deletions

View file

@ -2,6 +2,12 @@ class Client::DomainTransfersController < ClientController
before_action :set_domain_transfer, only: [:show, :approve] before_action :set_domain_transfer, only: [:show, :approve]
before_action :set_domain, only: [:create] before_action :set_domain, only: [:create]
def index
@q = current_registrar.domain_transfers.search(params[:q])
@q.sorts = 'created_at desc' if @q.sorts.empty?
@domain_transfers = @q.result.page(params[:page])
end
def new def new
@domain_transfer = DomainTransfer.new @domain_transfer = DomainTransfer.new
end end

View file

@ -11,13 +11,16 @@ class DomainTransfer < ActiveRecord::Base
SERVER_APPROVED = 'serverApproved' SERVER_APPROVED = 'serverApproved'
SERVER_CANCELLED = 'serverCancelled' SERVER_CANCELLED = 'serverCancelled'
def approved? before_create :set_wait_until
status == CLIENT_APPROVED || status == SERVER_APPROVED
def set_wait_until
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i
return if wait_time == 0
self.wait_until = transfer_requested_at + wait_time.hours
end end
def transfer_confirm_time def approved?
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i status == CLIENT_APPROVED || status == SERVER_APPROVED
transfer_requested_at + wait_time.hours
end end
def approve_as_client def approve_as_client

View file

@ -4,7 +4,15 @@ class Registrar < ActiveRecord::Base
has_many :ns_sets has_many :ns_sets
has_many :epp_users has_many :epp_users
has_many :users has_many :users
has_many :domain_transfers, foreign_key: 'transfer_to_id'
def domain_transfers
at = DomainTransfer.arel_table
DomainTransfer.where(
at[:transfer_to_id].eq(id).or(
at[:transfer_from_id].eq(id)
)
)
end
def to_s def to_s
name name

View file

@ -0,0 +1,39 @@
.row
.col-sm-6
%h2.text-center-xs= t('shared.domain_transfers')
.col-sm-6
%h2.text-right.text-center-xs
= link_to(t('shared.request_domain_transfer'), new_client_domain_transfer_path, class: 'btn btn-primary')
%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, 'domain_name')
%th{class: 'col-xs-2'}
= sort_link(@q, 'status')
%th{class: 'col-xs-2'}
= sort_link(@q, 'transfer_from', t('shared.transfer_from'))
%th{class: 'col-xs-2'}
= sort_link(@q, 'transfer_to', t('shared.transfer_to'))
%th{class: 'col-xs-2'}=t('shared.actions')
%tbody
- @domain_transfers.each do |x|
%tr
- if current_registrar == x.domain.registrar
%td= link_to(x.domain, client_domain_path(x.domain))
- else
%td= x.domain
%td= x.status
%td= x.transfer_from
%td= x.transfer_to
%td
= link_to(t('shared.details'), [:client, x], class: 'btn btn-xs btn-primary')
.row
.col-md-12
= paginate @domain_transfers

View file

@ -1,4 +1,10 @@
%h2= t('shared.transfer_domain') .row
.col-sm-6
%h2.text-center-xs= t('shared.transfer_domain')
.col-sm-6
%h2.text-right.text-center-xs
= link_to(t('shared.domain_transfers'), client_domain_transfers_path, class: 'btn btn-default')
%hr %hr
= form_for([:client, @domain_transfer]) do |f| = form_for([:client, @domain_transfer]) do |f|
= render 'shared/errors', object: @domain_transfer = render 'shared/errors', object: @domain_transfer

View file

@ -4,14 +4,18 @@
= "#{t('shared.domain_transfer')}" = "#{t('shared.domain_transfer')}"
.col-sm-6 .col-sm-6
%h2.text-right.text-center-xs %h2.text-right.text-center-xs
= link_to(t('shared.domain_transfers'), client_domain_transfers_path, class: 'btn btn-default')
- if can? :approve_as_client, @domain_transfer - if can? :approve_as_client, @domain_transfer
= button_to(t('shared.approve'), approve_client_domain_transfer_path, class: 'btn btn-success') = link_to(t('shared.approve'), approve_client_domain_transfer_path, method: :post, class: 'btn btn-success')
%hr %hr
.row .row
.col-md-12 .col-md-12
%dl.dl-horizontal %dl.dl-horizontal
%dt= t('shared.domain') %dt= t('shared.domain')
%dd= @domain_transfer.domain.name - if current_registrar == @domain_transfer.domain.registrar
%dd= link_to(@domain_transfer.domain, client_domain_path(@domain_transfer.domain))
- else
%dd= @domain_transfer.domain
%dt= t('shared.status') %dt= t('shared.status')
%dd= @domain_transfer.status %dd= @domain_transfer.status
@ -25,12 +29,11 @@
%dt= t('shared.transfer_to') %dt= t('shared.transfer_to')
%dd= @domain_transfer.transfer_to %dd= @domain_transfer.transfer_to
%dt= t('shared.accept_time')
- if @domain_transfer.transferred_at - if @domain_transfer.transferred_at
%dt= t('shared.transferred_at')
%dd= l(@domain_transfer.transferred_at) %dd= l(@domain_transfer.transferred_at)
- else - else
%dt= t('shared.transfer_confirm_time') %dd= l(@domain_transfer.wait_until)
%dd= l(@domain_transfer.transfer_confirm_time)
%dt= t('shared.domain_valid_to') %dt= t('shared.domain_valid_to')
%dd= l(@domain_transfer.domain.valid_to) %dd= l(@domain_transfer.domain.valid_to)

View file

@ -32,7 +32,7 @@
%li %li
= link_to t('shared.domain_list'), client_domains_path = link_to t('shared.domain_list'), client_domains_path
%li %li
= link_to t('shared.transfer_domain'), new_client_domain_transfer_path = link_to t('shared.domain_transfers_list'), client_domain_transfers_path
- active_class = ['client/contacts'].include?(params[:controller]) ? 'active' :nil - active_class = ['client/contacts'].include?(params[:controller]) ? 'active' :nil
%li.dropdown{class: active_class} %li.dropdown{class: active_class}

View file

@ -288,10 +288,11 @@ en:
domain_transfer: 'Domain transfer' domain_transfer: 'Domain transfer'
request_domain_transfer: 'Request domain transfer' request_domain_transfer: 'Request domain transfer'
domain_valid_to: 'Domain valid to' domain_valid_to: 'Domain valid to'
transfer_requested_at: 'Transfer requested at' accept_time: 'Accept time'
transfer_from: 'Transfer from' transfer_from: 'Transfer from'
transferred_at: 'Transferred at' transferred_at: 'Transferred at'
transfer_confirm_time: 'Transfer confirm time' domain_transfers_list: 'Domain transfers list'
domain_transfers: 'Domain transfers'
password_invalid: 'Password invalid!' password_invalid: 'Password invalid!'
domain_was_not_found: 'Domain was not found!' domain_was_not_found: 'Domain was not found!'

View file

@ -0,0 +1,5 @@
class AddWaitUntilToDomainTransfer < ActiveRecord::Migration
def change
add_column :domain_transfers, :wait_until, :datetime
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140925101927) do ActiveRecord::Schema.define(version: 20140929095329) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -91,6 +91,7 @@ ActiveRecord::Schema.define(version: 20140925101927) do
t.integer "transfer_to_id" t.integer "transfer_to_id"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.datetime "wait_until"
end end
create_table "domains", force: true do |t| create_table "domains", force: true do |t|

View file

@ -15,7 +15,8 @@ feature 'Domain transfer', type: :feature do
scenario 'Registrar requests transfer on own domain', js: true do scenario 'Registrar requests transfer on own domain', js: true do
sign_in zone_user sign_in zone_user
click_on 'Domains' click_on 'Domains'
click_on 'Transfer domain' click_on 'Domain transfers list'
click_on 'Request domain transfer'
fill_in 'Domain name', with: 'false' fill_in 'Domain name', with: 'false'
click_on 'Request domain transfer' click_on 'Request domain transfer'
@ -81,6 +82,10 @@ feature 'Domain transfer', type: :feature do
end end
scenario 'Domain owner approves request' do scenario 'Domain owner approves request' do
s = Setting.find_by(code: 'transfer_wait_time')
s.value = 1
s.save
d = Domain.first d = Domain.first
d.domain_transfers.create( d.domain_transfers.create(
status: DomainTransfer::PENDING, status: DomainTransfer::PENDING,
@ -105,7 +110,7 @@ feature 'Domain transfer', type: :feature do
fill_in 'Domain password', with: d.auth_info fill_in 'Domain password', with: d.auth_info
click_on 'Request domain transfer' click_on 'Request domain transfer'
expect(page).to have_button('Approve') expect(page).to have_link('Approve')
click_on 'Approve' click_on 'Approve'
expect(page).to have_text('Domain transfer approved!') expect(page).to have_text('Domain transfer approved!')