From eac302bafb4592d2a6452fb1bf13fe1ac30c0fad Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Wed, 10 Sep 2014 16:36:49 +0300 Subject: [PATCH] Design --- .../admin/nameservers_controller.rb | 12 ++++++- app/models/nameserver.rb | 6 ++-- .../admin/domains/partials/_nameservers.haml | 2 +- app/views/admin/nameservers/new.haml | 31 +++++++++++++++++-- app/views/admin/shared/_errors.haml | 5 +++ config/locales/en.yml | 2 ++ 6 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 app/views/admin/shared/_errors.haml diff --git a/app/controllers/admin/nameservers_controller.rb b/app/controllers/admin/nameservers_controller.rb index c49e30f7c..19888cfb3 100644 --- a/app/controllers/admin/nameservers_controller.rb +++ b/app/controllers/admin/nameservers_controller.rb @@ -6,13 +6,23 @@ class Admin::NameserversController < ApplicationController def create @domain = Domain.find(params[:domain_id]) - if @domain.nameservers.create(nameserver_params) + @nameserver = @domain.nameservers.build(nameserver_params) + + if @domain.save redirect_to [:admin, @domain] else render 'new' end end + def destroy + # TODO: Refactor this + @nameserver = Nameserver.find(params[:id]) + @domain = @nameserver.domains.first + @nameserver.destroy + redirect_to [:admin, @domain] + end + private def nameserver_params diff --git a/app/models/nameserver.rb b/app/models/nameserver.rb index eb97a8985..b679fbc40 100644 --- a/app/models/nameserver.rb +++ b/app/models/nameserver.rb @@ -7,12 +7,12 @@ class Nameserver < ActiveRecord::Base belongs_to :registrar - has_many :domain_nameservers + has_many :domain_nameservers, dependent: :delete_all has_many :domains, through: :domain_nameservers validates :hostname, format: { with: /\A(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/ } - validates :ipv4, format: { with: /\A(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\z/, allow_nil: true } - validates :ipv6, format: { with: /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/, allow_nil: true } + validates :ipv4, format: { with: /\A(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\z/, allow_blank: true } + validates :ipv6, format: { with: /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/, allow_blank: true } def epp_code_map { diff --git a/app/views/admin/domains/partials/_nameservers.haml b/app/views/admin/domains/partials/_nameservers.haml index b4230986d..5144bbf7e 100644 --- a/app/views/admin/domains/partials/_nameservers.haml +++ b/app/views/admin/domains/partials/_nameservers.haml @@ -21,7 +21,7 @@ %td= x.ipv6 %td = link_to(t('shared.edit'), root_path, class: 'btn btn-primary btn-xs') - = link_to(t('shared.delete'), root_path, method: :delete, data: { confirm: t('shared.are_you_sure') }, class: 'btn btn-danger btn-xs') + = link_to(t('shared.delete'), [:admin, x], method: :delete, data: { confirm: t('shared.are_you_sure') }, class: 'btn btn-danger btn-xs') - if @domain.errors.messages[:nameservers] %tfoot - @domain.errors.messages[:nameservers].each do |x| diff --git a/app/views/admin/nameservers/new.haml b/app/views/admin/nameservers/new.haml index 8bde5a98d..8f96bb6e1 100644 --- a/app/views/admin/nameservers/new.haml +++ b/app/views/admin/nameservers/new.haml @@ -1,3 +1,30 @@ +%h2= t('shared.new_nameserver') +%hr = form_for([:admin, @domain, @nameserver]) do |f| - = f.text_field :hostname - = f.button 'save' + = render 'admin/shared/errors', object: @domain + = render 'admin/shared/errors', object: f.object + + - if @domain.errors.any? + %hr + + .row + .col-md-6 + .form-group + = label_tag t('shared.domain') + = text_field_tag :domain, @domain.name, disabled: true, class: 'form-control' + .col-md-6 + .form-group + = f.label :hostname + = f.text_field(:hostname, class: 'form-control', autocomplete: 'off') + .row + .col-md-6 + .form-group + = f.label :ipv4 + = f.text_field(:ipv4, class: 'form-control', autocomplete: 'off') + .col-md-6 + .form-group + = f.label :ipv6 + = f.text_field(:ipv6, class: 'form-control', autocomplete: 'off') + .row + .col-md-12.text-right + = button_tag(t('shared.save'), class: 'btn btn-primary') diff --git a/app/views/admin/shared/_errors.haml b/app/views/admin/shared/_errors.haml new file mode 100644 index 000000000..8873098bb --- /dev/null +++ b/app/views/admin/shared/_errors.haml @@ -0,0 +1,5 @@ +- if object.errors.any? + - object.errors.each do |attr, err| + - next if attr == :epp_errors + = err + %br diff --git a/config/locales/en.yml b/config/locales/en.yml index d1700266e..4aac2abec 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -81,6 +81,7 @@ en: admin_contacts: out_of_range: 'Admin contacts count must be between 1 - infinity' nameservers: + invalid: 'Nameserver is invalid' out_of_range: 'Nameservers count must be between %{min}-%{max}' not_found: 'Nameserver was not found' taken: 'Nameserver already exists on this domain' @@ -188,3 +189,4 @@ en: registrar_name: 'Registrar name' contact_code: 'Contact code' add: 'Add' + domain: 'Domain'