Class: RailsImagePostSolution::Admin::UsersController

Inherits:
RailsImagePostSolution::ApplicationController show all
Defined in:
app/controllers/rails_image_post_solution/admin/users_controller.rb

Instance Method Summary collapse

Methods inherited from RailsImagePostSolution::ApplicationController

#default_url_options, #require_admin, #require_login

Instance Method Details

#banObject



73
74
75
76
77
78
79
# File 'app/controllers/rails_image_post_solution/admin/users_controller.rb', line 73

def ban
  reason = params[:reason]

  @user.ban!(reason: reason)

  redirect_to admin_user_path(@user), notice: I18n.t("admin.flash.user_banned", name: @user.display_name)
end

#indexObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/controllers/rails_image_post_solution/admin/users_controller.rb', line 10

def index
  @status_filter = params[:status] || "all"

  @users = User.order(created_at: :desc)

  # Filter by status
  case @status_filter
  when "active"
    @users = @users.select(&:active?)
  when "suspended"
    @users = @users.select(&:suspended?)
  when "banned"
    @users = @users.select(&:banned?)
  when "admin"
    @users = @users.where(admin: true)
  end

  @users = @users.first(100)

  # Statistics
  @stats = {
    total: User.count,
    active: User.all.count(&:active?),
    suspended: User.all.count(&:suspended?),
    banned: User.all.count(&:banned?),
    admin: User.where(admin: true).count
  }
end

#showObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/rails_image_post_solution/admin/users_controller.rb', line 39

def show
  @stages = @user.stages.recent.limit(10)
  @comments = @user.multiplay_recruitment_comments.order(created_at: :desc).limit(10)
  @reports_made = ImageReport.where(user_id: @user.id).order(created_at: :desc).limit(10)

  # Reports against this user's images
  @reports_received = ImageReport
                      .joins(active_storage_attachment: :blob)
                      .where(active_storage_attachments: { record_type: %w[Stage MultiplayRecruitmentComment] })
                      .where("active_storage_attachments.record_id IN (
      SELECT id FROM stages WHERE user_id = :user_id
      UNION
      SELECT id FROM multiplay_recruitment_comments WHERE user_id = :user_id
    )", user_id: @user.id)
                      .order(created_at: :desc)
                      .limit(10)
end

#suspendObject



57
58
59
60
61
62
63
64
65
# File 'app/controllers/rails_image_post_solution/admin/users_controller.rb', line 57

def suspend
  duration_days = params[:duration]&.to_i || 7
  reason = params[:reason]

  @user.suspend!(reason: reason, duration: duration_days.days)

  redirect_to admin_user_path(@user),
              notice: I18n.t("admin.flash.user_suspended", name: @user.display_name, days: duration_days)
end

#unbanObject



81
82
83
84
85
# File 'app/controllers/rails_image_post_solution/admin/users_controller.rb', line 81

def unban
  @user.unban!

  redirect_to admin_user_path(@user), notice: I18n.t("admin.flash.user_unbanned", name: @user.display_name)
end

#unsuspendObject



67
68
69
70
71
# File 'app/controllers/rails_image_post_solution/admin/users_controller.rb', line 67

def unsuspend
  @user.unsuspend!

  redirect_to admin_user_path(@user), notice: I18n.t("admin.flash.user_unsuspended", name: @user.display_name)
end