Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit

Permalink
Add user management to Admin dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
wilfriedE committed Nov 17, 2017
1 parent ba41682 commit a3f6017
Show file tree
Hide file tree
Showing 14 changed files with 347 additions and 32 deletions.
48 changes: 48 additions & 0 deletions app/controllers/platform_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,54 @@ def pages
@pages ||= Page.all
end

def users
@q = User.search(params[:q])
@users = @q.result(distinct: true).page(params[:page])
end

def make_user_admin
@row_id = params[:row_id]
@user = User.find(params[:id])
@user.make_admin!
render "user_role_change"
end

def make_user_editor
@row_id = params[:row_id]
@user = User.find(params[:id])
@user.make_editor!
render "user_role_change"
end

def make_user_moderator
@row_id = params[:row_id]
@user = User.find(params[:id])
@user.make_moderator!
render "user_role_change"
end

def make_user_contributor
@row_id = params[:row_id]
@user = User.find(params[:id])
@user.make_contributor!
render "user_role_change"
end

def ban_user
@row_id = params[:row_id]
@user = User.find(params[:id])
@user.ban!
render "user_role_change"
end

def remove_user_role
@row_id = params[:row_id]
@user = User.find(params[:id])
role_user = @user.role_users.where(role: params[:role_id])
@user.role_users.destroy(role_user)
render "user_role_change"
end

private

def verify_access
Expand Down
9 changes: 4 additions & 5 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,13 @@
</head>
<body <%= yield(:body_attributes) %>>
<%= render partial: "shared/header" %>
<% if flash[:notice] %>
<div class="notice"><%= flash[:notice] %></div>
<% end %>

<% wrapper_class = "container"; wrapper_class = ( platform.container_fuild? ? "container-fuild" : "container") if defined? platform.container_fuild? %>
<% wrapper_class = ( (platform.container_fuild == true) ? "container-fuild" : "container") %>
<div class="<%= wrapper_class %> pt-2 pb-2 mb-5">
<%= ((render "layouts/#{yield_hierarchically(controller.class.name)}" rescue nil)|| yield ) %>
<%= render partial: "shared/flash_alert" %>
<%= yield %>
</div>

<%= render partial: "shared/footer" %>
<%= render partial: "shared/extras" %>
</body>
Expand Down
3 changes: 3 additions & 0 deletions app/views/notifications/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
<li class="nav-item">
<%= link_to "Profile", user_profile_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "Edit information", edit_user_registration_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "Notifications", notifications_path, class: "nav-link active" %>
</li>
Expand Down
9 changes: 9 additions & 0 deletions app/views/platform/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,13 @@
</div>
</div>
</div>
<div class="col-sm-6 mt-4">
<div class="card">
<div class="card-body">
<h4 class="card-title">Users</h4>
<p class="card-text">Manage users.</p>
<%= link_to "Go to Users", administrate_users_path, class: "btn btn-outline-success" %>
</div>
</div>
</div>
</div>
1 change: 1 addition & 0 deletions app/views/platform/user_role_change.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$("#<%=@row_id%>").replaceWith("<%= escape_javascript(render 'users/user_row', { user: @user }) %>");
10 changes: 10 additions & 0 deletions app/views/platform/users.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="row justify-content-center m-2">
<div class="col pt-3">
<%= paginate @users %>
</div>
<%= search_form_for @q, url: administrate_users_path, html: { class: "form-inline col-8" } do |f| %>
<%= f.search_field :email_or_nickname_cont, class: "form-control col-10", placeholder: "Search..." %>
<%= f.submit "Search", class: "btn btn-outline-success" %>
<% end %>
</div>
<%= render "users/users_list", users: @users %>
3 changes: 3 additions & 0 deletions app/views/profile/page.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
<li class="nav-item">
<%= link_to "Profile", user_profile_path, class: "nav-link active" %>
</li>
<li class="nav-item">
<%= link_to "Edit information", edit_user_registration_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "Notifications", notifications_path, class: "nav-link" %>
</li>
Expand Down
8 changes: 8 additions & 0 deletions app/views/shared/_flash_alert.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<% flash.each do |key, value| %>
<div class="alert alert-light alert-<%= key %> alert-dismissible fade show" role="alert">
<%= value %>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<% end %>
30 changes: 30 additions & 0 deletions app/views/users/_user_row.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<% row_id = "user_row_#{user.id}" %>
<tr id="<%= row_id %>">
<td><%= user.nickname %></td>
<td><%= user.email %></td>
<td>
<% user.roles.each do |role| %>
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<%= @q.present? ? link_to(role.name, url_for(only_path: false, q: { roles_name_eq: role.name }),
class: "btn btn-sm btn-info") : content_tag(:span, role.name, class: "btn btn-sm btn-info") %>
<% if policy(:administrate).access? %>
<%= link_to "", remove_user_role_path(id: user.id, role_id: role.id, row_id: row_id ), class: "btn btn-sm btn-danger fa fa-close", remote: true, method: :put %>
<% end %>
</div>
<% end %>
</td>
<td class="d-flex align-items-center justify-content-around">
<% if policy(:administrate).access? %>
<div class="btn-group">
<%= content_tag :button, "Assign role", class: "btn btn-outline-info dropdown-toggle", data: { toggle: "dropdown" }, aria: { haspopup: "true", expanded: "false" } %>
<div class="dropdown-menu">
<%= link_to "Admin", make_user_admin_path(id: user.id, row_id: row_id), class: "dropdown-item", remote: true, method: :put %>
<%= link_to "Moderator", make_user_moderator_path(id: user.id, row_id: row_id), class: "dropdown-item", remote: true, method: :put %>
<%= link_to "Editor", make_user_editor_path(id: user.id, row_id: row_id), class: "dropdown-item", remote: true, method: :put %>
<%= link_to "Contributor", make_user_contributor_path(id: user.id, row_id: row_id), class: "dropdown-item", remote: true, method: :put %>
<%= link_to "Banned", ban_user_path(id: user.id, row_id: row_id), class: "dropdown-item", remote: true, method: :put %>
</div>
</div>
<% end %>
</td>
</tr>
15 changes: 15 additions & 0 deletions app/views/users/_users_list.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<table class="table">
<thead class="thead-default">
<tr>
<th><%= @q.present? ? sort_link(@q, :nickname, 'Nickname') : "Nickname" %></th>
<th><%= @q.present? ? sort_link(@q, :email, 'Email') : "Email" %></th>
<th>Roles</th>
<th ><i class="fa fa-cogs"></i> Modify</th>
</tr>
</thead>
<tbody >
<% users.each do |user| %>
<%= render "users/user_row", user: user %>
<% end %>
</tbody>
</table>
62 changes: 40 additions & 22 deletions app/views/users/registrations/edit.html.erb
Original file line number Diff line number Diff line change
@@ -1,29 +1,47 @@
<h2>Edit <%= resource_name.to_s.humanize %></h2>
<div class="card">
<div class="card-header ">
<ul class="nav nav-pills row card-header-pills">
<div class="col nav">
<li class="nav-item">
<%= link_to "Profile", user_profile_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "Edit information", edit_user_registration_path, class: "nav-link active" %>
</li>
<li class="nav-item">
<%= link_to "Notifications", notifications_path, class: "nav-link" %>
</li>
</div>
</ul>
</div>

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= f.error_notification %>
<div class="card-body">
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= f.error_notification %>

<div class="form-inputs">
<%= f.input :email, required: true, autofocus: true %>
<div class="form-inputs">
<%= f.input :email, required: true, autofocus: true %>

<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<p>Currently waiting confirmation for: <%= resource.unconfirmed_email %></p>
<% end %>
<%= f.input :first_name, required: true %>
<%= f.input :last_name, required: true %>
<%= f.input :nickname, required: true %>
<%= f.input :password, autocomplete: "off", hint: "leave it blank if you don't want to change it", required: false %>
<%= f.input :password_confirmation, required: false %>
<%= f.input :current_password, hint: "we need your current password to confirm your changes", required: true %>
</div>
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<p>Currently waiting confirmation for: <%= resource.unconfirmed_email %></p>
<% end %>
<%= f.input :first_name, required: true %>
<%= f.input :last_name, required: true %>
<%= f.input :nickname, required: true %>
<%= f.input :password, autocomplete: "off", hint: "leave it blank if you don't want to change it", required: false %>
<%= f.input :password_confirmation, required: false %>
<%= f.input :current_password, hint: "we need your current password to confirm your changes", required: true %>
</div>

<div class="form-actions">
<%= f.button :submit, "Update" %>
</div>
<% end %>
<div class="form-actions">
<%= f.button :submit, "Update" %>
</div>
<% end %>

<h3>Cancel my account</h3>
<h3>Cancel my account</h3>

<p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>
<p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>

<%= link_to "Back", :back %>
<%= link_to "Back", :back %>
</div>
</div>
13 changes: 10 additions & 3 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,16 @@

# administrate namespace
scope :administrate do
get '/' => 'platform#index', as: :administrate
get '/preferences' => 'platform#preferences', as: :administrate_preferences
get '/pages' => 'platform#pages', as: :administrate_pages
get '/' => 'platform#index', as: :administrate
get '/preferences' => 'platform#preferences', as: :administrate_preferences
get '/pages' => 'platform#pages', as: :administrate_pages
get '/users' => 'platform#users', as: :administrate_users
put '/users/:id/make-admin' => 'platform#make_user_admin', as: :make_user_admin
put '/users/:id/make-editor' => 'platform#make_user_editor', as: :make_user_editor
put '/users/:id/make-moderator' => 'platform#make_user_moderator', as: :make_user_moderator
put '/users/:id/make-contributor' => 'platform#make_user_contributor', as: :make_user_contributor
put '/users/:id/ban' => 'platform#ban_user', as: :ban_user
put '/users/:id/remove-role/:role_id' => 'platform#remove_user_role', as: :remove_user_role
end

scope :preferences do
Expand Down
Loading

0 comments on commit a3f6017

Please sign in to comment.