AdminShadowFilterController.php 3.6 KB

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