Merge pull request #1560 from bertocq/feature/admin_administrators_management

Administrators management in admin area
This commit is contained in:
Juanjo Bazán
2017-05-30 10:44:50 +02:00
committed by GitHub
12 changed files with 190 additions and 1 deletions

View File

@@ -0,0 +1,37 @@
class Admin::AdministratorsController < Admin::BaseController
load_and_authorize_resource
def index
@administrators = @administrators.page(params[:page])
end
def search
@user = User.find_by(email: params[:email])
respond_to do |format|
if @user
@administrator = Administrator.find_or_initialize_by(user: @user)
format.js
else
format.js { render "user_not_found" }
end
end
end
def create
@administrator.user_id = params[:user_id]
@administrator.save
redirect_to admin_administrators_path
end
def destroy
if current_user.id == @administrator.user_id
flash[:error] = I18n.t("admin.administrators.administrator.restricted_removal")
else
@administrator.destroy
end
redirect_to admin_administrators_path
end
end

View File

@@ -29,7 +29,7 @@ module AdminHelper
end end
def menu_profiles? def menu_profiles?
["organizations", "officials", "moderators", "valuators", "managers"].include? controller_name ["administrators", "organizations", "officials", "moderators", "valuators", "managers"].include? controller_name
end end
def menu_banners? def menu_banners?

View File

@@ -34,6 +34,7 @@ module Abilities
can :comment_as_administrator, [Debate, Comment, Proposal, Poll::Question, Budget::Investment] can :comment_as_administrator, [Debate, Comment, Proposal, Poll::Question, Budget::Investment]
can [:search, :create, :index, :destroy], ::Administrator
can [:search, :create, :index, :destroy], ::Moderator can [:search, :create, :index, :destroy], ::Moderator
can [:search, :create, :index, :summary], ::Valuator can [:search, :create, :index, :summary], ::Valuator
can [:search, :create, :index, :destroy], ::Manager can [:search, :create, :index, :destroy], ::Manager

View File

@@ -95,6 +95,10 @@
<strong><%= t("admin.menu.title_profiles") %></strong> <strong><%= t("admin.menu.title_profiles") %></strong>
</a> </a>
<ul <%= "class=is-active" if menu_profiles? %>> <ul <%= "class=is-active" if menu_profiles? %>>
<li <%= "class=active" if controller_name == "administrators" %>>
<%= link_to t("admin.menu.administrators"), admin_administrators_path %>
</li>
<li <%= "class=active" if controller_name == "organizations" %>> <li <%= "class=active" if controller_name == "organizations" %>>
<%= link_to t("admin.menu.organizations"), admin_organizations_path %> <%= link_to t("admin.menu.organizations"), admin_organizations_path %>
</li> </li>

View File

@@ -0,0 +1,26 @@
<div class="small-12 column">
<table>
<tbody>
<tr>
<td>
<%= administrator.name %>
</td>
<td>
<%= administrator.email %>
</td>
<td class="text-right">
<% if administrator.persisted? %>
<%= link_to t('admin.administrators.administrator.delete'),
admin_administrator_path(administrator),
method: :delete,
class: "button hollow alert" %>
<% else %>
<%= link_to t('admin.administrators.administrator.add'),{ controller: "admin/administrators", action: :create, user_id: administrator.user_id },
method: :post,
class: "button success" %>
<% end %>
</td>
</tr>
</tbody>
</table>
</div>

View File

@@ -0,0 +1,46 @@
<h2 class="inline-block"><%= t("admin.administrators.index.title") %></h2>
<div class="row">
<%= form_tag search_admin_administrators_path, method: :get, remote: true do %>
<div class="small-12 medium-6 column">
<%= text_field_tag :email, '', placeholder: t('admin.administrators.search.email_placeholder') %>
</div>
<div class="small-12 medium-6 column">
<%= submit_tag t('admin.administrators.search.search'), class: 'button' %>
</div>
<% end %>
</div>
<div id="search-result" class="row"></div>
<h3><%= page_entries_info @administrators %></h3>
<table id="administrators">
<% @administrators.each do |administrator| %>
<tr>
<td>
<%= administrator.name %>
</td>
<td>
<%= administrator.email %>
</td>
<td class="text-right">
<% if administrator.persisted? %>
<%= link_to t('admin.administrators.administrator.delete'),
admin_administrator_path(administrator),
method: :delete,
class: "button hollow alert"
%>
<% else %>
<%= link_to t('admin.administrators.administrator.add'),
{ controller: "admin/administrators", action: :create,
user_id: administrator.user_id },
method: :post,
class: "button success" %>
<% end %>
</td>
</tr>
<% end %>
</table>
<%= paginate @administrators %>

View File

@@ -0,0 +1 @@
$("#search-result").html("<%= j render 'administrator', administrator: @administrator %>");

View File

@@ -0,0 +1 @@
$("#search-result").html("<div class=\"small-12 column\"><div class=\"callout alert\"><%= j t('admin.administrators.search.user_not_found') %></div></div>");

View File

@@ -203,6 +203,7 @@ en:
hidden_debates: Hidden debates hidden_debates: Hidden debates
hidden_proposals: Hidden proposals hidden_proposals: Hidden proposals
hidden_users: Hidden users hidden_users: Hidden users
administrators: Administrators
managers: Managers managers: Managers
moderators: Moderators moderators: Moderators
newsletter: Newsletters newsletter: Newsletters
@@ -227,6 +228,17 @@ en:
title_profiles: Profiles title_profiles: Profiles
title_banners: Banners title_banners: Banners
title_site_customization: Site customization title_site_customization: Site customization
administrators:
index:
title: Administrators
administrator:
add: Add
delete: Delete
restricted_removal: "Sorry, you can't remove yourself from the administrators"
search:
email_placeholder: Search user by email
search: Search
user_not_found: User not found
moderators: moderators:
index: index:
title: Moderators title: Moderators

View File

@@ -181,6 +181,17 @@ es:
with_confirmed_hide: Confirmados with_confirmed_hide: Confirmados
without_confirmed_hide: Pendientes without_confirmed_hide: Pendientes
title: Debates ocultos title: Debates ocultos
administrators:
index:
title: Administradores
administrator:
add: Añadir como Administrador
delete: Borrar
restricted_removal: "Lo sentimos, no puedes te eliminar a ti mismo de la lista"
search:
email_placeholder: Buscar usuario por email
search: Buscar
user_not_found: Usuario no encontrado
managers: managers:
index: index:
title: Gestores title: Gestores
@@ -204,6 +215,7 @@ es:
hidden_proposals: Propuestas ocultas hidden_proposals: Propuestas ocultas
hidden_users: Usuarios bloqueados hidden_users: Usuarios bloqueados
managers: Gestores managers: Gestores
administrators: Administradores
moderators: Moderadores moderators: Moderadores
newsletter: Envío de Newsletters newsletter: Envío de Newsletters
valuators: Evaluadores valuators: Evaluadores

View File

@@ -207,6 +207,10 @@ Rails.application.routes.draw do
get :search, on: :collection get :search, on: :collection
end end
resources :administrators, only: [:index, :create, :destroy] do
get :search, on: :collection
end
scope module: :poll do scope module: :poll do
resources :polls do resources :polls do
get :search_questions, on: :member get :search_questions, on: :member

View File

@@ -0,0 +1,45 @@
require 'rails_helper'
feature 'Admin administrators' do
background do
@admin = create(:administrator)
@user = create(:user, username: 'Jose Luis Balbin')
@administrator = create(:administrator)
login_as(@admin.user)
visit admin_administrators_path
end
scenario 'Index' do
expect(page).to have_content @administrator.name
expect(page).to have_content @administrator.email
expect(page).to_not have_content @user.name
end
scenario 'Create Administrator', :js do
fill_in 'email', with: @user.email
click_button 'Search'
expect(page).to have_content @user.name
click_link 'Add'
within("#administrators") do
expect(page).to have_content @user.name
end
end
scenario 'Delete Administrator' do
find(:xpath, "//tr[contains(.,'#{@administrator.name}')]/td/a", text: 'Delete').click
within("#administrators") do
expect(page).to_not have_content @administrator.name
end
end
scenario 'Delete Administrator when its the current user' do
find(:xpath, "//tr[contains(.,'#{@admin.name}')]/td/a", text: 'Delete').click
within("#error") do
expect(page).to have_content I18n.t("admin.administrators.administrator.restricted_removal")
end
end
end