diff --git a/Gemfile.lock b/Gemfile.lock
index 2753c16ba..4bc94dbf2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -378,6 +378,3 @@ DEPENDENCIES
uglifier (>= 1.3.0)
unicorn
web-console (~> 2.0)
-
-BUNDLED WITH
- 1.10.6
diff --git a/app/controllers/admin/moderators_controller.rb b/app/controllers/admin/moderators_controller.rb
new file mode 100644
index 000000000..350b4949c
--- /dev/null
+++ b/app/controllers/admin/moderators_controller.rb
@@ -0,0 +1,18 @@
+class Admin::ModeratorsController < Admin::BaseController
+ def index
+ @moderators = User.joins(:moderator).page(params[:page])
+ end
+ def search
+ @email = params[:email]
+ @user = User.find_by(email: @email)
+
+ respond_to do |format|
+ format.js
+ end
+ end
+ def toggle
+ @user = User.find(params[:id])
+ @user.toggle_moderator
+ redirect_to admin_moderators_path
+ end
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 52287d9f4..3ecf0d1f7 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -70,6 +70,10 @@ class User < ActiveRecord::Base
e.present? ? where(email: e) : none
end
+ def toggle_moderator
+ moderator? ? self.moderator.destroy : create_moderator
+ end
+
private
def use_first_name?
!organization? && !use_nickname?
diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb
index bc2d459e2..252769752 100644
--- a/app/views/admin/_menu.html.erb
+++ b/app/views/admin/_menu.html.erb
@@ -46,6 +46,13 @@
<% end %>
+
>
+ <%= link_to admin_moderators_path do %>
+
+ <%= t('admin.menu.moderators') %>
+ <% end %>
+
+
>
<%= link_to admin_settings_path do %>
diff --git a/app/views/admin/moderators/_moderator.html.erb b/app/views/admin/moderators/_moderator.html.erb
new file mode 100644
index 000000000..de351c160
--- /dev/null
+++ b/app/views/admin/moderators/_moderator.html.erb
@@ -0,0 +1,18 @@
+<% if moderator %>
+ <%= moderator.name %>
+ •
+ <%= moderator.email %>
+ <% if moderator.moderator? %>
+ <%= link_to t('admin.moderators.moderator.delete'),
+ toggle_admin_moderator_path(moderator),
+ method: :post,
+ class: "button tiny radius alert right" %>
+ <% else %>
+ <%= link_to t('admin.moderators.moderator.add'),
+ toggle_admin_moderator_path(moderator),
+ method: :post,
+ class: "button tiny radius success right" %>
+ <% end %>
+<% else%>
+ <%= t('admin.moderators.search.user_not_found') %>
+<% end %>
diff --git a/app/views/admin/moderators/index.html.erb b/app/views/admin/moderators/index.html.erb
new file mode 100644
index 000000000..8a1f8e40d
--- /dev/null
+++ b/app/views/admin/moderators/index.html.erb
@@ -0,0 +1,25 @@
+<%= t("admin.moderators.index.title") %>
+
+
+ <%= form_tag search_admin_moderators_path, method: :get, remote: true do %>
+
+ <%= text_field_tag :email, '', placeholder: t('admin.moderators.search.email_placeholder') %>
+
+
+ <%= submit_tag t('admin.moderators.search.search'), class: 'button radius' %>
+
+ <% end %>
+
+
+
+
+<%= page_entries_info @moderators %>
+
+ <% @moderators.each do |moderator| %>
+ -
+ <%= render 'moderator', moderator: moderator %>
+
+ <% end %>
+
+
+<%= paginate @moderators %>
diff --git a/app/views/admin/moderators/search.js.erb b/app/views/admin/moderators/search.js.erb
new file mode 100644
index 000000000..30d9f8a5d
--- /dev/null
+++ b/app/views/admin/moderators/search.js.erb
@@ -0,0 +1 @@
+$("#search-result").html("<%= j render 'moderator', moderator: @user %>
");
diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml
index cdf6774db..2c7565d62 100644
--- a/config/locales/admin.en.yml
+++ b/config/locales/admin.en.yml
@@ -16,6 +16,7 @@ en:
hidden_users: Hidden users
organizations: Organizations
officials: Officials
+ moderators: Moderators
stats: Statistics
organizations:
index:
@@ -91,3 +92,10 @@ en:
flash:
official_updated: 'Official position saved!'
official_destroyed: 'User is not an official anymore'
+ moderators:
+ index:
+ title: Moderators
+ search:
+ email_placeholder: 'Search user by email'
+ search: Search
+ user_not_found: 'User not found'
diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml
index 02f0ef65a..dc3213cbd 100644
--- a/config/locales/admin.es.yml
+++ b/config/locales/admin.es.yml
@@ -16,6 +16,7 @@ es:
hidden_users: Usuarios ocultos
organizations: Organizaciones
officials: Cargos públicos
+ moderators: Moderadores
stats: Estadísticas
organizations:
index:
@@ -91,3 +92,10 @@ es:
flash:
official_updated: 'Datos del cargo público guardados'
official_destroyed: 'Datos guardados: el usuario ya no es cargo público'
+ moderators:
+ index:
+ title: Moderadores
+ search:
+ email_placeholder: 'Buscar usuario por email'
+ search: Buscar
+ user_not_found: 'Usuario no encontrado'
diff --git a/config/routes.rb b/config/routes.rb
index 7dbe31613..0aff6bfd3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -54,6 +54,10 @@ Rails.application.routes.draw do
end
resources :settings, only: [:index, :update]
+ resources :moderators, only: [:index] do
+ member { post :toggle }
+ collection { get :search }
+ end
end
namespace :moderation do
diff --git a/spec/features/admin/moderators_spec.rb b/spec/features/admin/moderators_spec.rb
new file mode 100644
index 000000000..f218779b0
--- /dev/null
+++ b/spec/features/admin/moderators_spec.rb
@@ -0,0 +1,15 @@
+require 'rails_helper'
+
+feature 'Admin moderators' do
+ background do
+ @user = create(:user)
+ @moderator = create(:moderator)
+ @admin = create(:administrator)
+ login_as(@admin)
+ end
+
+ scenario 'Index' do
+ visit admin_moderators_path
+ end
+end
+