diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
new file mode 100644
index 000000000..d1dd1c79c
--- /dev/null
+++ b/app/controllers/admin/users_controller.rb
@@ -0,0 +1,16 @@
+class Admin::UsersController < Admin::BaseController
+ load_and_authorize_resource
+
+ def index
+ if params[:search]
+ s = params[:search]
+ @users = User.where("username ILIKE ? OR email ILIKE ? OR document_number ILIKE ?", "%#{s}%","%#{s}%","%#{s}%").page(params[:page])
+ else
+ @users = @users.page(params[:page])
+ end
+ respond_to do |format|
+ format.html
+ format.js
+ end
+ end
+end
diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb
index ad5dccc73..b1eab5265 100644
--- a/app/helpers/admin_helper.rb
+++ b/app/helpers/admin_helper.rb
@@ -29,7 +29,7 @@ module AdminHelper
end
def menu_profiles?
- ["administrators", "organizations", "officials", "moderators", "valuators", "managers"].include? controller_name
+ ["administrators", "organizations", "officials", "moderators", "valuators", "managers", "users"].include? controller_name
end
def menu_banners?
diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb
index af44066be..1aba9dd7c 100644
--- a/app/models/abilities/administrator.rb
+++ b/app/models/abilities/administrator.rb
@@ -38,6 +38,7 @@ module Abilities
can [:search, :create, :index, :destroy], ::Moderator
can [:search, :create, :index, :summary], ::Valuator
can [:search, :create, :index, :destroy], ::Manager
+ can [:search, :index], ::User
can :manage, Annotation
diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb
index 573e66a16..62638f3b7 100644
--- a/app/views/admin/_menu.html.erb
+++ b/app/views/admin/_menu.html.erb
@@ -118,6 +118,10 @@
>
<%= link_to t('admin.menu.managers'), admin_managers_path %>
+
+ >
+ <%= link_to t('admin.menu.users'), admin_users_path %>
+
diff --git a/app/views/admin/users/_users.html.erb b/app/views/admin/users/_users.html.erb
new file mode 100644
index 000000000..4d1a6db0e
--- /dev/null
+++ b/app/views/admin/users/_users.html.erb
@@ -0,0 +1,22 @@
+<%= page_entries_info @users %>
+
+
+
+
+ | <%= t('admin.users.fields.name') %> |
+ <%= t('admin.users.fields.email') %> |
+ <%= t('admin.users.fields.document_number') %> |
+ <%= t('admin.users.fields.verification_level') %> |
+
+
+ <% @users.each do |user| %>
+
+ | <%= user.name %> |
+ <%= user.email %> |
+ <%= user.document_number %> |
+ <%= user.user_type %> |
+
+ <% end %>
+
+
+<%= paginate @users %>
diff --git a/app/views/admin/users/index.html.erb b/app/views/admin/users/index.html.erb
new file mode 100644
index 000000000..2713399ed
--- /dev/null
+++ b/app/views/admin/users/index.html.erb
@@ -0,0 +1,16 @@
+<%= t("admin.users.index.title") %>
+
+
+ <%= form_tag admin_users_path, method: :get, remote: true do %>
+
+ <%= text_field_tag :search, '', placeholder: t('admin.users.search.placeholder') %>
+
+
+ <%= submit_tag t('admin.users.search.search'), class: 'button' %>
+
+ <% end %>
+
+
+
+ <%= render "users" %>
+
diff --git a/app/views/admin/users/index.js.erb b/app/views/admin/users/index.js.erb
new file mode 100644
index 000000000..021407a23
--- /dev/null
+++ b/app/views/admin/users/index.js.erb
@@ -0,0 +1 @@
+$("#users").html("<%= j render 'users' %>");
diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml
index fa353ec63..ea55d190d 100755
--- a/config/locales/admin.en.yml
+++ b/config/locales/admin.en.yml
@@ -380,6 +380,7 @@ en:
title_banners: Banners
title_site_customization: Site customization
legislation: Collaborative Legislation
+ users: Users
administrators:
index:
title: Administrators
@@ -816,6 +817,19 @@ en:
name:
placeholder: Type the name of the topic
update: Update Topic
+ users:
+ fields:
+ name: Name
+ email: Email
+ document_number: Document number
+ verification_level: Verification level
+ index:
+ title: User
+ user:
+ verify: Verify
+ search:
+ placeholder: Search user by email, name or document number
+ search: Search
verifications:
index:
phone_not_given: Phone not given
diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml
index c842403f6..ba1e375b9 100644
--- a/config/locales/admin.es.yml
+++ b/config/locales/admin.es.yml
@@ -391,6 +391,7 @@ es:
title_banners: Banners
title_site_customization: Personalizar sitio
legislation: Legislación colaborativa
+ users: Usuarios
moderators:
index:
title: Moderadores
@@ -816,6 +817,19 @@ es:
name:
placeholder: Escribe el nombre del tema
update: Actualizar Tema
+ users:
+ fields:
+ name: Nombre
+ email: Correo electrónico
+ document_number: DNI/Pasaporte/Tarjeta de residencia
+ verification_level: Nivel de verficación
+ index:
+ title: Usuarios
+ user:
+ verify: Verificar
+ search:
+ placeholder: Buscar usuario por email, nombre o DNI
+ search: Buscar
verifications:
index:
phone_not_given: No ha dado su teléfono
diff --git a/config/routes.rb b/config/routes.rb
index 1d895be09..e0cb9c632 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -238,6 +238,8 @@ Rails.application.routes.draw do
get :search, on: :collection
end
+ resources :users, only: [:index, :show]
+
scope module: :poll do
resources :polls do
get :search_questions, on: :member
diff --git a/spec/features/admin/users_spec.rb b/spec/features/admin/users_spec.rb
new file mode 100644
index 000000000..4a62a75d0
--- /dev/null
+++ b/spec/features/admin/users_spec.rb
@@ -0,0 +1,28 @@
+require 'rails_helper'
+
+feature 'Admin users' do
+ background do
+ @admin = create(:administrator)
+ @user = create(:user, username: 'Jose Luis Balbin')
+ login_as(@admin.user)
+ visit admin_users_path
+ end
+
+ scenario 'Index' do
+ expect(page).to have_content @user.name
+ expect(page).to have_content @user.email
+ expect(page).to have_content @admin.name
+ expect(page).to have_content @admin.email
+ end
+
+ scenario 'Search' do
+ fill_in :search, with: "Luis"
+ click_button 'Search'
+
+ expect(page).to have_content @user.name
+ expect(page).to have_content @user.email
+ expect(page).to_not have_content @admin.name
+ expect(page).to_not have_content @admin.email
+ end
+end
+