From 211964c29609687710fef7acc557c99dca7567f3 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Thu, 11 Sep 2014 16:40:51 +0300 Subject: [PATCH] Nameserver form validations --- app/assets/javascripts/app.js.coffee | 20 +++++++++++-------- .../admin/nameservers_controller.rb | 20 +++++++++++++++---- app/models/domain.rb | 17 ++++++++++++++++ app/views/admin/nameservers/edit.haml | 8 +++++++- app/views/admin/nameservers/new.haml | 8 +++++++- app/views/layouts/application.html.haml | 7 +++++-- config/locales/en.yml | 7 +++++++ vendor/assets/javascripts/.keep | 0 8 files changed, 71 insertions(+), 16 deletions(-) delete mode 100644 vendor/assets/javascripts/.keep diff --git a/app/assets/javascripts/app.js.coffee b/app/assets/javascripts/app.js.coffee index 8e153867d..b2fa7366c 100644 --- a/app/assets/javascripts/app.js.coffee +++ b/app/assets/javascripts/app.js.coffee @@ -1,9 +1,13 @@ -Autocomplete.bindTypeahead - remote: '/admin/registrars/search' - selector: '.js-registrar-typeahead' - hiddenSelector: '.js-registrar-id' +ready = -> + Autocomplete.bindTypeahead + remote: '/admin/registrars/search' + selector: '.js-registrar-typeahead' + hiddenSelector: '.js-registrar-id' -Autocomplete.bindTypeahead - remote: '/admin/contacts/search' - selector: '.js-contact-typeahead' - hiddenSelector: '.js-contact-id' + Autocomplete.bindTypeahead + remote: '/admin/contacts/search' + selector: '.js-contact-typeahead' + hiddenSelector: '.js-contact-id' + +$(document).ready(ready) +$(document).on('page:load', ready) diff --git a/app/controllers/admin/nameservers_controller.rb b/app/controllers/admin/nameservers_controller.rb index 1d2853f43..d2bcc3e94 100644 --- a/app/controllers/admin/nameservers_controller.rb +++ b/app/controllers/admin/nameservers_controller.rb @@ -9,11 +9,14 @@ class Admin::NameserversController < ApplicationController def create @domain = Domain.find(params[:domain_id]) - @nameserver = @domain.nameservers.build(nameserver_params) - if @domain.save - redirect_to [:admin, @domain] + if @domain.can_add_nameserver? + @domain.nameservers.build(nameserver_params) + flash[:notice] = I18n.t('shared.nameserver_added') + redirect_to [:admin, @domain] and return if @domain.save else + @nameserver = @domain.nameservers.build(nameserver_params) + flash.now[:alert] = I18n.t('shared.failed_to_add_nameserver') render 'new' end end @@ -32,7 +35,16 @@ class Admin::NameserversController < ApplicationController end def destroy - @nameserver.destroy + if @domain.can_remove_nameserver? + if @nameserver.destroy + flash[:notice] = I18n.t('shared.nameserver_deleted') + else + flash[:alert] = I18n.t('shared.failed_to_delete_nameserver') + end + else + flash[:alert] = @domain.errors[:nameservers].first + end + redirect_to [:admin, @domain] end diff --git a/app/models/domain.rb b/app/models/domain.rb index ac84fa58b..32f5f2bde 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -46,6 +46,21 @@ class Domain < ActiveRecord::Base end ### VALIDATIONS ### + def can_remove_nameserver? + sg = SettingGroup.domain_validation + min = sg.setting(:ns_min_count).value.to_i + return true if nameservers.length > min + errors.add(:nameservers, :greater_than_or_equal_to, { count: min }) + false + end + + def can_add_nameserver? + sg = SettingGroup.domain_validation + max = sg.setting(:ns_max_count).value.to_i + return true if nameservers.length < max + errors.add(:nameservers, :less_than_or_equal_to, { count: max }) + false + end def validate_nameservers_count sg = SettingGroup.domain_validation @@ -75,6 +90,8 @@ class Domain < ActiveRecord::Base def all_dependencies_valid? validate_nameservers_count validate_admin_contacts_count + + errors.empty? end ## SHARED diff --git a/app/views/admin/nameservers/edit.haml b/app/views/admin/nameservers/edit.haml index 4fa2277d9..807b1ea36 100644 --- a/app/views/admin/nameservers/edit.haml +++ b/app/views/admin/nameservers/edit.haml @@ -1,3 +1,9 @@ -%h2= t('shared.edit_nameserver') +.row + .col-sm-6 + %h2.text-center-xs + = "#{t('shared.edit_nameserver')}" + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('shared.back_to_domain'), [:admin, @domain], class: 'btn btn-default') %hr = render 'form' diff --git a/app/views/admin/nameservers/new.haml b/app/views/admin/nameservers/new.haml index 3269004db..8636084ab 100644 --- a/app/views/admin/nameservers/new.haml +++ b/app/views/admin/nameservers/new.haml @@ -1,3 +1,9 @@ -%h2= t('shared.new_nameserver') +.row + .col-sm-6 + %h2.text-center-xs + = "#{t('shared.new_nameserver')}" + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('shared.back_to_domain'), [:admin, @domain], class: 'btn btn-default') %hr = render 'form' diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 560c39e0a..939904227 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -7,6 +7,7 @@ %meta{content: "Gitlab LTD", name: "author"}/ = csrf_meta_tags = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true + = javascript_include_tag 'application', 'data-turbolinks-track' => true %link{href: "../../favicon.ico", rel: "icon"}/ %title Eesti Interneti SA %body @@ -48,7 +49,9 @@ %li= link_to t('shared.log_out'), '/logout' / /.nav-collapse .container + - display = (flash.empty?) ? 'none' : 'block' + #flash{style: "display: #{display};"} + - type = (flash[:notice]) ? 'bg-success' : 'bg-danger' + .alert{class: type}= flash[:notice] || flash[:alert] = yield - = javascript_include_tag 'application', 'data-turbolinks-track' => true - diff --git a/config/locales/en.yml b/config/locales/en.yml index d93b6bdaa..c0590ebce 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -85,6 +85,8 @@ en: out_of_range: 'Nameservers count must be between %{min}-%{max}' not_found: 'Nameserver was not found' taken: 'Nameserver already exists on this domain' + less_than_or_equal_to: 'Nameservers count must be less than or equal to %{count}' + greater_than_or_equal_to: 'Nameservers count must be greater than or equal to %{count}' period: out_of_range: 'Period must add up to 1, 2 or 3 years' not_a_number: 'Period is not a number' @@ -198,3 +200,8 @@ en: domain: 'Domain' new_nameserver: 'New nameserver' edit_nameserver: 'Edit nameserver' + nameserver_deleted: 'Nameserver deleted!' + failed_to_delete_nameserver: 'Failed to delete nameserver!' + failed_to_add_nameserver: 'Failed to add nameserver!' + nameserver_added: 'Nameserver added!' + back_to_domain: 'Back to domain' diff --git a/vendor/assets/javascripts/.keep b/vendor/assets/javascripts/.keep deleted file mode 100644 index e69de29bb..000000000