User form

This commit is contained in:
Martin Lensment 2014-09-30 12:28:16 +03:00
parent 14f9304c6d
commit 0e7e83134c
11 changed files with 252 additions and 6 deletions

View file

@ -0,0 +1,48 @@
class Admin::UsersController < AdminController
before_action :set_user, only: [:show, :edit, :update, :destroy]
def index
@q = User.search(params[:q])
@users = @q.result.page(params[:page])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
flash[:notice] = I18n.t('shared.user_added')
redirect_to [:admin, @user]
else
flash.now[:alert] = I18n.t('shared.failed_to_add_user')
render 'new'
end
end
def show; end
def edit; end
def update
if @user.update(user_params)
flash[:notice] = I18n.t('shared.record_updated')
redirect_to [:admin, @user]
else
flash.now[:alert] = I18n.t('shared.failed_to_update_record')
render 'edit'
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:username, :password, :identity_code, :email, :registrar_id, :admin, :registrar_typeahead)
end
end

View file

@ -51,7 +51,6 @@ class Domain < ActiveRecord::Base
validate :validate_domain_statuses_uniqueness, if: :new_record? validate :validate_domain_statuses_uniqueness, if: :new_record?
attr_accessor :owner_contact_typeahead attr_accessor :owner_contact_typeahead
attr_accessor :registrar_typeahead
def name=(value) def name=(value)
value.strip! value.strip!
@ -64,10 +63,6 @@ class Domain < ActiveRecord::Base
@owner_contact_typeahead || owner_contact.try(:name) || nil @owner_contact_typeahead || owner_contact.try(:name) || nil
end end
def registrar_typeahead
@registrar_typeahead || registrar || nil
end
def pending_transfer def pending_transfer
domain_transfers.find_by(status: DomainTransfer::PENDING) domain_transfers.find_by(status: DomainTransfer::PENDING)
end end

View file

@ -8,4 +8,32 @@ class User < ActiveRecord::Base
belongs_to :role belongs_to :role
belongs_to :registrar belongs_to :registrar
validates :username, :password, presence: true
validates :identity_code, uniqueness: true, allow_blank: true
validate :registrar_presence
before_save :manage_registrar
attr_accessor :registrar_typeahead
def to_s
username
end
def registrar_typeahead
@registrar_typeahead || registrar || nil
end
private
def registrar_presence
if !admin && !registrar
errors.add(:registrar, :blank)
end
end
def manage_registrar
self.registrar = nil if admin?
end
end end

View file

@ -0,0 +1,56 @@
= form_for([:admin, @user]) do |f|
- if @user.errors.any?
- @user.errors.each do |attr, err|
= err
%br
- if @user.errors.any?
%hr
.row
.col-md-6
.form-group
= f.label :username
= f.text_field(:username, class: 'form-control')
.form-group
= f.label :password
= f.text_field(:password, class: 'form-control')
.form-group
= f.label :identity_code
= f.text_field(:identity_code, class: 'form-control')
.col-md-6.text-left
.form-group
= f.label :email
= f.text_field(:email, class: 'form-control')
.form-group
.form-group.has-feedback.js-typeahead-container
= f.label :registrar_typeahead
= f.text_field(:registrar_typeahead, class: 'form-control js-registrar-typeahead', placeholder: t('shared.registrar'), autocomplete: 'off')
%span.glyphicon.glyphicon-ok.form-control-feedback.js-typeahead-ok.hidden
%span.glyphicon.glyphicon-remove.form-control-feedback.js-typeahead-remove
= f.hidden_field(:registrar_id, class: 'js-registrar-id')
.form-group
.checkbox
%label{for: 'user_admin'}
= f.check_box(:admin, class: 'js-admin')
= t('shared.admin')
%hr
.row
.col-md-12.text-right
= button_tag(t('shared.save'), class: 'btn btn-primary')
:javascript
Autocomplete.bindAdminRegistrarSearch();
toggleRegistrar();
$('#user_admin').click(function() {
toggleRegistrar();
});
function toggleRegistrar() {
if($('.js-admin').is(':checked')) {
$('.js-registrar-typeahead, .js-registrar-id').attr('disabled', true);
} else {
$('.js-registrar-typeahead, .js-registrar-id').attr('disabled', false);
}
}

View file

@ -0,0 +1,9 @@
.row
.col-sm-6
%h2.text-center-xs
= "#{t('shared.edit_user')}"
.col-sm-6
%h2.text-right.text-center-xs
= link_to(t('shared.back_to_user'), [:admin, @user], class: 'btn btn-default')
%hr
= render 'form'

View file

@ -0,0 +1,34 @@
.row
.col-sm-6
%h2.text-center-xs= t('shared.users')
.col-sm-6
%h2.text-right.text-center-xs
= link_to(t('shared.create_new_user'), new_admin_user_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, 'username')
%th{class: 'col-xs-2'}
= sort_link(@q, 'email', t('shared.email'))
%th{class: 'col-xs-2'}
= sort_link(@q, 'identity_code', t('shared.identity_code'))
%th{class: 'col-xs-2'}
= sort_link(@q, 'admin', t('shared.admin'))
%th{class: 'col-xs-2'}
= sort_link(@q, 'registrar', t('shared.registrar'))
%tbody
- @users.each do |x|
%tr
%td= link_to(x, [:admin, x])
%td= x.email
%td= x.identity_code
%td= x.admin
%td= x.registrar
.row
.col-md-12
= paginate @users

View file

@ -0,0 +1,3 @@
%h2= t('shared.create_new_user')
%hr
= render 'form'

View file

@ -0,0 +1,46 @@
.row
.col-sm-6
%h2.text-center-xs
= "#{t('shared.user_details')}"
.col-sm-6
%h2.text-right.text-center-xs
= link_to(t('shared.edit'), edit_admin_user_path(@user), class: 'btn btn-primary')
= link_to(t('shared.delete'), admin_user_path(@user), method: :delete, data: { confirm: t('shared.are_you_sure') }, class: 'btn btn-danger')
%hr
- if @user.errors.any?
- @user.errors.each do |attr, err|
= err
%br
- if @user.errors.any?
%hr
.row
.col-md-6
.panel.panel-default
.panel-heading
%h3.panel-title= t('shared.general')
.panel-body
%dl.dl-horizontal
%dt= t('shared.username')
%dd= @user.username
%dt= t('shared.password')
%dd= @user.password
%dt= t('shared.identity_code')
%dd= @user.identity_code
.col-md-6
.panel.panel-default
.panel-heading
%h3.panel-title= t('shared.address')
.panel-body
%dl.dl-horizontal
%dt= t('shared.email')
%dd= @user.email
%dt= t('shared.registrar')
%dd= @user.registrar
%dt= t('shared.admin')
%dd= @user.admin

View file

@ -38,7 +38,7 @@
%li %li
= link_to t('shared.setting_groups'), admin_setting_groups_path = link_to t('shared.setting_groups'), admin_setting_groups_path
%li %li
= link_to t('shared.users'), '#' = link_to t('shared.users'), admin_users_path
%li %li
= link_to t('shared.epp_users'), '#' = link_to t('shared.epp_users'), '#'
%li.divider %li.divider

View file

@ -156,6 +156,20 @@ en:
address: address:
blank: 'Address is missing' blank: 'Address is missing'
user:
attributes:
username:
blank: 'Username is missing'
taken: 'Username already exists'
password:
blank: 'Password is missing'
identity_code:
taken: 'Identity code already exists'
email:
blank: 'Email is missing'
registrar:
blank: 'Registrar is missing'
attributes: attributes:
epp_domain: &epp_domain_attributes epp_domain: &epp_domain_attributes
name: 'Domain name' name: 'Domain name'
@ -332,3 +346,14 @@ en:
registrar_deleted: 'Registrar deleted' registrar_deleted: 'Registrar deleted'
failed_to_delete_registrar: 'Failed to delete registrar' failed_to_delete_registrar: 'Failed to delete registrar'
users: 'Users'
create_new_user: 'Create new user'
user_added: 'User added!'
failed_to_add_user: 'Failed to add user'
admin: 'Admin'
user_details: 'User details'
edit_user: 'Edit user'
back_to_user: 'Back to user'
record_updated: 'Record updated'
failed_to_update_record: 'Failed to update record'

View file

@ -21,6 +21,8 @@ Rails.application.routes.draw do
end end
end end
resources :users
root 'domains#index' root 'domains#index'
end end