Class: AdminAction

Inherits:
RailsBase::ApplicationRecord show all
Extended by:
ActionView::Helpers::DateHelper
Defined in:
app/models/admin_action.rb

Overview

Schema Information

Table name: admin_actions

id            :bigint           not null, primary key
admin_user_id :bigint           not null
user_id       :bigint
action        :string(255)      not null
change_from   :string(255)
change_to     :string(255)
long_action   :text(65535)
created_at    :datetime         not null
updated_at    :datetime         not null

Constant Summary collapse

DEFAULT_PAGE_COUNT =
5
DEFAULT_PAGE_COUNT_SELECT_RANGE =
(0..50).select { |x| x%5 == 0 && x != 0 }
DEFAULT_PAGE_RANGE =
2

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from RailsBase::ApplicationRecord

_magically_defined_time_objects

Class Method Details

.action(admin_user:, action:, user: nil, original_attribute: nil, new_attribute: nil, long_action: nil) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/models/admin_action.rb', line 24

def action(admin_user:, action:, user: nil, original_attribute: nil, new_attribute: nil, long_action: nil)
  params = { admin_user_id: admin_user.id, action: action }
  params[:user_id] = user.id if user
  params[:change_from] = original_attribute.to_s unless original_attribute.nil?
  params[:change_to] = new_attribute.to_s unless new_attribute.nil?
  params[:long_action] = long_action unless long_action.nil?
  begin
    instance = AdminAction.create!(**params)
    ship_to_cache!(instance: instance, user: user, created_at: Time.zone.now) if user
    instance
  rescue StandardError => e
    Rails.logger.error(e.message)
    Rails.logger.error("Unable to save admin action [#{action}]: [#{params}]")
    nil
  end
end

.get_cache_items(user:, time: Time.zone.now, use_lv: false, alltime: false, delete: false, update_lv: false) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/models/admin_action.rb', line 55

def get_cache_items(user:, time: Time.zone.now, use_lv: false, alltime: false, delete: false, update_lv: false)
  if use_lv
    Rails.logger.warn { "Using Last Viewed admin actions for user #{user.id}" }
    temp = RailsBase::Admin::ActionCache.instance.get_last_viewed(user: user)
    time = temp.nil? ? time : (Time.at(temp) rescue time)
  end

  objects = RailsBase::Admin::ActionCache.instance.actions_since(user: user, time: time, alltime: alltime)

  admin_messages = objects.map do |object|
    msg = object[0]
    in_words = distance_of_time_in_words(Time.zone.now, object[1], include_seconds: true)
    [msg, "~ #{in_words.humanize} ago"]
  end

  if delete
    Rails.logger.warn { "Deleting admin actions for user #{user.id}" }
    RailsBase::Admin::ActionCache.instance.delete_actions_since!(user: user, time: time)
  end

  if update_lv
    Rails.logger.warn { "Udating Last Viewed admin actions for user #{user.id}" }
    RailsBase::Admin::ActionCache.instance.update_last_viewed(user: user, time: time)
  end

  admin_messages
end

.paginate_records(page:, user_id: nil, admin_id: nil, count_on_page: DEFAULT_PAGE_COUNT, count: false) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/admin_action.rb', line 88

def paginate_records(page:, user_id: nil, admin_id: nil, count_on_page: DEFAULT_PAGE_COUNT, count: false)
  params = {}
  params[:user_id] = user_id if user_id && user_id.positive?
  params[:admin_user_id] = admin_id if admin_id && admin_id.positive?
  offset = (page - 1) * count_on_page
  if count
    where(params).count
  else
    where(params).order(created_at: :desc).offset(offset).limit(count_on_page)
  end
end

.repopulate_cache!(max_items: 1000) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/models/admin_action.rb', line 41

def repopulate_cache!(max_items: 1000)
  objects = order(created_at: :desc).where.not(user_id: nil).limit(max_items)
  count = 0
  objects.in_batches(of: 500) do |group|
    group.each do |instance|
      count += 1
      user = instance.user
      msg = instance.readable(with_occurred: false)
      RailsBase::Admin::ActionCache.instance.add_action(user: user, msg: msg, occured: instance.created_at)
    end
  end
  count
end

.ship_to_cache!(instance:, user:, created_at: nil) ⇒ Object



83
84
85
86
# File 'app/models/admin_action.rb', line 83

def ship_to_cache!(instance:, user:, created_at: nil)
  msg = instance.readable(with_occurred: false)
  RailsBase::Admin::ActionCache.instance.add_action(user: user, msg: msg, occured: instance.created_at)
end

Instance Method Details

#admin_userObject



101
102
103
# File 'app/models/admin_action.rb', line 101

def admin_user
  @admin_user ||= User.find admin_user_id
end

#readable(long: false, with_occurred: true) ⇒ Object



109
110
111
112
113
114
115
# File 'app/models/admin_action.rb', line 109

def readable(long: false, with_occurred: true)
  msg = "[#{admin_user.full_name}(#{admin_user_id})]: #{ long ? long_action : action}."
  msg += " Changed from [#{change_from}]." unless change_from.nil?
  msg += " Changed to [#{change_to}]." unless change_to.nil?
  msg += " Occured at #{created_at}." if with_occurred
  msg
end

#userObject



105
106
107
# File 'app/models/admin_action.rb', line 105

def user
  @user ||= user_id ? User.find(user_id) : nil
end