From 834fef909a0af037dd60a6cf89327e91be384beb Mon Sep 17 00:00:00 2001 From: Gabriel Cebrian Date: Thu, 21 Feb 2013 19:12:49 -0800 Subject: [PATCH] Added some js and actions to update a user status --- app/assets/javascripts/admin/admin.js.coffee | 19 +++++++++++++++++ app/controllers/admin/admin_controller.rb | 22 ++++++++++++++++++-- app/helpers/admin/admin_helper.rb | 10 ++++++++- app/models/user.rb | 2 +- app/views/admin/admin/index.html.erb | 14 ++++++------- config/routes.rb | 4 ++-- 6 files changed, 58 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/admin/admin.js.coffee b/app/assets/javascripts/admin/admin.js.coffee index 0aa20a9f..b4399f2b 100644 --- a/app/assets/javascripts/admin/admin.js.coffee +++ b/app/assets/javascripts/admin/admin.js.coffee @@ -1,2 +1,21 @@ $(document).ready -> + $(document).on("click", ".waiting-for-approval-users .action.approve", {action : "approve"}, act_on_user) + $(document).on("click", ".approved-users .action.suspend", {action : "suspend"}, act_on_user) + $(document).on("click", ".approved-users .action.activate", {action : "activate"}, act_on_user) + return + +act_on_user = (obj)-> + user_id = $(this).closest("tr").data("user-id") + action_taken = obj.data.action + + request = $.post '/admin/update_user', + user_id: user_id + action_taken: action_taken + + request.success (data) -> + alert("done") + request.error (data, textStatus, jqXHR) -> + alert('error') + + return \ No newline at end of file diff --git a/app/controllers/admin/admin_controller.rb b/app/controllers/admin/admin_controller.rb index da4deae0..7604561c 100644 --- a/app/controllers/admin/admin_controller.rb +++ b/app/controllers/admin/admin_controller.rb @@ -6,7 +6,11 @@ def index @all_users = User.find(:all, :conditions => ["id != ?", current_user.id]) # Note that this reject! will remove users from all_users in order to show users in 2 different tables - @waiting_for_approval_users = @all_users.select{|user| user.status.waiting_approval? } || [] + @waiting_for_approval_users = [] + @approved_users = [] + + # Iterate over the array to get approved and non-approved users + @all_users.each{|user| user.status.waiting_approval? ? @waiting_for_approval_users.push(user) : @approved_users.push(user) } end def update @@ -19,8 +23,22 @@ def update redirect_to :admin_root end - def update_users + def update_user + user_id = params[:user_id] + action = params[:action_taken].to_s + + user = User.find(user_id) + + case action + when "activate", "approve" + user.status = "active" + when "suspend" + user.status = "suspended" + end + + user.save! if user.changed? + render :nothing => true, :status => 200 end end diff --git a/app/helpers/admin/admin_helper.rb b/app/helpers/admin/admin_helper.rb index d5a3ac83..e1419937 100644 --- a/app/helpers/admin/admin_helper.rb +++ b/app/helpers/admin/admin_helper.rb @@ -4,6 +4,14 @@ def user_status user end def user_action user - + action = if user.status.waiting_approval? + "Approve" + elsif user.status.suspended? + "Activate" + else + "Suspend" + end + + "".html_safe end end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 6a75b140..2badb001 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,7 +7,7 @@ class User < ActiveRecord::Base has_many :activities before_save :ensure_authentication_token before_save :ensure_gravatar_hash - before_save :mark_status_depending_on_app_settings + before_create :mark_status_depending_on_app_settings after_create :ensure_at_least_one_admin after_destroy :ensure_at_least_one_admin diff --git a/app/views/admin/admin/index.html.erb b/app/views/admin/admin/index.html.erb index c8b1cda4..b13e2626 100644 --- a/app/views/admin/admin/index.html.erb +++ b/app/views/admin/admin/index.html.erb @@ -3,7 +3,7 @@ <% end %>
- <%= form_for @settings, :url => admin_update_path do |f| %> + <%= form_for @settings, :url => admin_update_path, :method => :post do |f| %> <%= f.label :max_rooms, 'Max number of rooms' %>: <%= f.text_field :max_rooms %>
<%= f.label :public_site, 'Is this a public site?' %>: @@ -12,8 +12,8 @@ <% end %>
-
Users waiting for approval
<% if @waiting_for_approval_users.any? %> +
Users waiting for approval
@@ -44,7 +44,7 @@ <%= user_status(user) %> <% end %> @@ -56,8 +56,8 @@
-
All users
- <% if @all_users.any? %> + <% if @approved_users.any? %> +
All users
- + <%= user_action(user) %>
@@ -70,7 +70,7 @@ - <% @all_users.each do |user| %> + <% @approved_users.each do |user| %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 17856f33..5e786905 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,8 +20,8 @@ namespace :admin do root :to => "admin#index" - put "/update", :to => "admin#update", :as => "update" - put "/update_users", :to => "admin#update_users", :as => "update_users" + post "/update", :to => "admin#update", :as => "update" + post "/update_user", :to => "admin#update_user", :as => "update_user" end # Pages Controller
<%= user.username %> @@ -88,7 +88,7 @@ <%= user_status(user) %> - + <%= user_action(user) %>