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 %>

    + + + + + + + + + + + <% @users.each do |user| %> + + + + + + + <% end %> +
    <%= t('admin.users.fields.name') %><%= t('admin.users.fields.email') %><%= t('admin.users.fields.document_number') %><%= t('admin.users.fields.verification_level') %>
    <%= user.name %><%= user.email %><%= user.document_number %><%= user.user_type %>
    + +<%= 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 +