AdminShadowFilterController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\AdminShadowFilter;
  5. use App\Profile;
  6. use App\Services\AccountService;
  7. use App\Services\AdminShadowFilterService;
  8. class AdminShadowFilterController extends Controller
  9. {
  10. public function __construct()
  11. {
  12. $this->middleware(['auth','admin']);
  13. }
  14. public function home(Request $request)
  15. {
  16. $filter = $request->input('filter');
  17. $searchQuery = $request->input('q');
  18. $filters = AdminShadowFilter::whereHas('profile')
  19. ->when($filter, function($q, $filter) {
  20. if($filter == 'all') {
  21. return $q;
  22. } else if($filter == 'inactive') {
  23. return $q->whereActive(false);
  24. } else {
  25. return $q;
  26. }
  27. }, function($q, $filter) {
  28. return $q->whereActive(true);
  29. })
  30. ->when($searchQuery, function($q, $searchQuery) {
  31. $ids = Profile::where('username', 'like', '%' . $searchQuery . '%')
  32. ->limit(100)
  33. ->pluck('id')
  34. ->toArray();
  35. return $q->where('item_type', 'App\Profile')->whereIn('item_id', $ids);
  36. })
  37. ->latest()
  38. ->paginate(10)
  39. ->withQueryString();
  40. return view('admin.asf.home', compact('filters'));
  41. }
  42. public function create(Request $request)
  43. {
  44. return view('admin.asf.create');
  45. }
  46. public function edit(Request $request, $id)
  47. {
  48. $filter = AdminShadowFilter::findOrFail($id);
  49. $profile = AccountService::get($filter->item_id);
  50. return view('admin.asf.edit', compact('filter', 'profile'));
  51. }
  52. public function store(Request $request)
  53. {
  54. $this->validate($request, [
  55. 'username' => 'required',
  56. 'active' => 'sometimes',
  57. 'note' => 'sometimes',
  58. 'hide_from_public_feeds' => 'sometimes'
  59. ]);
  60. $profile = Profile::whereUsername($request->input('username'))->first();
  61. if(!$profile) {
  62. return back()->withErrors(['Invalid account']);
  63. }
  64. if($profile->user && $profile->user->is_admin) {
  65. return back()->withErrors(['Cannot filter an admin account']);
  66. }
  67. $active = $request->has('active') && $request->has('hide_from_public_feeds');
  68. AdminShadowFilter::updateOrCreate([
  69. 'item_id' => $profile->id,
  70. 'item_type' => get_class($profile)
  71. ], [
  72. 'is_local' => $profile->domain === null,
  73. 'note' => $request->input('note'),
  74. 'hide_from_public_feeds' => $request->has('hide_from_public_feeds'),
  75. 'admin_id' => $request->user()->profile_id,
  76. 'active' => $active
  77. ]);
  78. AdminShadowFilterService::refresh();
  79. return redirect('/i/admin/asf/home');
  80. }
  81. public function storeEdit(Request $request, $id)
  82. {
  83. $this->validate($request, [
  84. 'active' => 'sometimes',
  85. 'note' => 'sometimes',
  86. 'hide_from_public_feeds' => 'sometimes'
  87. ]);
  88. $filter = AdminShadowFilter::findOrFail($id);
  89. $profile = Profile::findOrFail($filter->item_id);
  90. if($profile->user && $profile->user->is_admin) {
  91. return back()->withErrors(['Cannot filter an admin account']);
  92. }
  93. $active = $request->has('active');
  94. $filter->active = $active;
  95. $filter->hide_from_public_feeds = $request->has('hide_from_public_feeds');
  96. $filter->note = $request->input('note');
  97. $filter->save();
  98. AdminShadowFilterService::refresh();
  99. return redirect('/i/admin/asf/home');
  100. }
  101. }