Add deleted_at for User
Do not remove the user from the database. Mark as deleted instead.
This commit is contained in:
parent
b30b4e46d8
commit
b05ac2ab64
15 changed files with 82 additions and 12 deletions
|
|
@ -2,12 +2,28 @@ class Admin::UsersController < Admin::BaseController
|
|||
inherit_resources
|
||||
|
||||
def index
|
||||
@users = User.natural_order
|
||||
@users = params[:show_deleted] ? User.deleted : User.undeleted
|
||||
|
||||
# if somebody uses the search field:
|
||||
@users = @users.natural_search(params[:user_name]) unless params[:user_name].blank?
|
||||
|
||||
@users = @users.page(params[:page]).per(@per_page)
|
||||
@users = @users.natural_order.page(params[:page]).per(@per_page)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@user = User.find(params[:id])
|
||||
@user.mark_as_deleted
|
||||
redirect_to admin_users_url, notice: t('admin.users.destroy.notice')
|
||||
rescue => error
|
||||
redirect_to admin_users_url, alert: t('admin.users.destroy.error', error: error.message)
|
||||
end
|
||||
|
||||
def restore
|
||||
@user = User.find(params[:id])
|
||||
@user.restore
|
||||
redirect_to admin_users_url, notice: t('admin.users.restore.notice')
|
||||
rescue => error
|
||||
redirect_to admin_users_url, alert: t('admin.users.restore.error', error: error.message)
|
||||
end
|
||||
|
||||
def sudo
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class ApplicationController < ActionController::Base
|
|||
# check if there is a valid session and return the logged-in user (its object)
|
||||
if session[:user_id] && params[:foodcoop]
|
||||
# for shared-host installations. check if the cookie-subdomain fits to request.
|
||||
@current_user ||= User.find_by_id(session[:user_id]) if session[:scope] == FoodsoftConfig.scope
|
||||
@current_user ||= User.undeleted.find_by_id(session[:user_id]) if session[:scope] == FoodsoftConfig.scope
|
||||
end
|
||||
end
|
||||
helper_method :current_user
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
class Foodcoop::UsersController < ApplicationController
|
||||
|
||||
def index
|
||||
@users = User.natural_order
|
||||
@users = User.undeleted.natural_order
|
||||
|
||||
# if somebody uses the search field:
|
||||
@users = @users.natural_search(params[:user_name]) unless params[:user_name].blank?
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class LoginController < ApplicationController
|
|||
redirect_to forgot_password_url, alert: I18n.t('errors.general_again') and return
|
||||
end
|
||||
|
||||
if (user = User.find_by_email(params[:user][:email]))
|
||||
if (user = User.undeleted.find_by_email(params[:user][:email]))
|
||||
user.request_password_reset!
|
||||
end
|
||||
redirect_to login_url, :notice => I18n.t('login.controller.reset_password.notice')
|
||||
|
|
|
|||
|
|
@ -20,7 +20,10 @@ class User < ActiveRecord::Base
|
|||
has_many :created_orders, :class_name => 'Order', :foreign_key => 'created_by_user_id', :dependent => :nullify
|
||||
|
||||
attr_accessor :password, :settings_attributes
|
||||
|
||||
|
||||
scope :deleted, -> { where.not(deleted_at: nil) }
|
||||
scope :undeleted, -> { where(deleted_at: nil) }
|
||||
|
||||
# makes the current_user (logged-in-user) available in models
|
||||
cattr_accessor :current_user
|
||||
|
||||
|
|
@ -178,6 +181,18 @@ class User < ActiveRecord::Base
|
|||
self.groups.where(type: '')
|
||||
end
|
||||
|
||||
def deleted?
|
||||
deleted_at.present?
|
||||
end
|
||||
|
||||
def mark_as_deleted
|
||||
update_column :deleted_at, Time.now
|
||||
end
|
||||
|
||||
def restore
|
||||
update_column :deleted_at, nil
|
||||
end
|
||||
|
||||
def self.authenticate(login, password)
|
||||
user = find_by_nick(login) || find_by_email(login)
|
||||
if user && user.has_password(password)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- if User.count > 20
|
||||
- if User.undeleted.count > 20
|
||||
= items_per_page
|
||||
= pagination_links_remote @users
|
||||
%table.table.table-striped
|
||||
|
|
@ -21,5 +21,10 @@
|
|||
%td= format_roles(user, true)
|
||||
%td= format_time(user.last_activity)
|
||||
%td= link_to t('ui.edit'), edit_admin_user_path(user), class: 'btn btn-mini'
|
||||
%td= link_to t('ui.delete'), [:admin, user], :data => {:confirm => t('admin.confirm', name: user.name)},
|
||||
:method => :delete, class: 'btn btn-danger btn-mini'
|
||||
%td
|
||||
- if user.deleted?
|
||||
= link_to t('ui.restore'), restore_admin_user_path(user), :data => {:confirm => t('ui.confirm_restore', name: user.name)},
|
||||
:method => :post, class: 'btn btn-success btn-mini'
|
||||
- else
|
||||
= link_to t('ui.delete'), [:admin, user], :data => {:confirm => t('admin.confirm', name: user.name)},
|
||||
:method => :delete, class: 'btn btn-danger btn-mini'
|
||||
|
|
|
|||
|
|
@ -4,13 +4,16 @@
|
|||
= link_to t('.new_user'), new_admin_user_path, class: 'btn btn-primary'
|
||||
|
||||
- content_for :sidebar do
|
||||
%p= t('.first_paragraph', url: link_to(t('.new_users'), new_admin_user_path)).html_safe
|
||||
%p= t('.first_paragraph', url: link_to(t('.new_users'), new_admin_user_path)).html_safe
|
||||
|
||||
.well.well-small
|
||||
= form_tag admin_users_path, :method => :get, :remote => true,
|
||||
'data-submit-onchange' => true, class: 'form-search' do
|
||||
= text_field_tag :user_name, params[:user_name], class: 'input-medium search-query',
|
||||
placeholder: t('admin.search_placeholder')
|
||||
%label{:for => 'show_deleted'}
|
||||
= check_box_tag 'show_deleted', 1, params[:show_deleted]
|
||||
= t '.show_deleted'
|
||||
|
||||
#users
|
||||
= render "users"
|
||||
= render "users"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- if User.count > 20
|
||||
- if User.undeleted.count > 20
|
||||
= items_per_page
|
||||
= pagination_links_remote @users
|
||||
%table.table.table-striped
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue