mirror of
https://github.com/internetee/registry.git
synced 2025-05-18 02:09:39 +02:00
User form
This commit is contained in:
parent
14f9304c6d
commit
0e7e83134c
11 changed files with 252 additions and 6 deletions
48
app/controllers/admin/users_controller.rb
Normal file
48
app/controllers/admin/users_controller.rb
Normal 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
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
56
app/views/admin/users/_form.haml
Normal file
56
app/views/admin/users/_form.haml
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
9
app/views/admin/users/edit.haml
Normal file
9
app/views/admin/users/edit.haml
Normal 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'
|
34
app/views/admin/users/index.haml
Normal file
34
app/views/admin/users/index.haml
Normal 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
|
3
app/views/admin/users/new.haml
Normal file
3
app/views/admin/users/new.haml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
%h2= t('shared.create_new_user')
|
||||||
|
%hr
|
||||||
|
= render 'form'
|
46
app/views/admin/users/show.haml
Normal file
46
app/views/admin/users/show.haml
Normal 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
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -21,6 +21,8 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
resources :users
|
||||||
|
|
||||||
root 'domains#index'
|
root 'domains#index'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue