1
0

AdminInstanceController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use DB, Cache;
  4. use App\{Instance, Profile};
  5. use Carbon\Carbon;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Validation\Rule;
  8. use App\Services\InstanceService;
  9. trait AdminInstanceController
  10. {
  11. public function instances(Request $request)
  12. {
  13. $this->validate($request, [
  14. 'filter' => [
  15. 'nullable',
  16. 'string',
  17. 'min:1',
  18. 'max:20',
  19. Rule::in([
  20. 'cw',
  21. 'unlisted',
  22. 'banned',
  23. // 'popular',
  24. 'new',
  25. 'all'
  26. ])
  27. ],
  28. ]);
  29. if($request->has('q') && $request->filled('q')) {
  30. $instances = Instance::where('domain', 'like', '%' . $request->input('q') . '%')->simplePaginate(10);
  31. } else if($request->has('filter') && $request->filled('filter')) {
  32. switch ($request->filter) {
  33. case 'cw':
  34. $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->whereAutoCw(true)->orderByDesc('id')->simplePaginate(10);
  35. break;
  36. case 'unlisted':
  37. $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->whereUnlisted(true)->orderByDesc('id')->simplePaginate(10);
  38. break;
  39. case 'banned':
  40. $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->whereBanned(true)->orderByDesc('id')->simplePaginate(10);
  41. break;
  42. case 'new':
  43. $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->latest()->simplePaginate(10);
  44. break;
  45. // case 'popular':
  46. // $popular = Profile::selectRaw('*, count(domain) as count')
  47. // ->whereNotNull('domain')
  48. // ->groupBy('domain')
  49. // ->orderByDesc('count')
  50. // ->take(10)
  51. // ->get()
  52. // ->pluck('domain')
  53. // ->toArray();
  54. // $instances = Instance::whereIn('domain', $popular)->simplePaginate(10);
  55. // break;
  56. default:
  57. $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->orderByDesc('id')->simplePaginate(10);
  58. break;
  59. }
  60. } else {
  61. $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->orderByDesc('id')->simplePaginate(10);
  62. }
  63. return view('admin.instances.home', compact('instances'));
  64. }
  65. public function instanceScan(Request $request)
  66. {
  67. Profile::whereNotNull('domain')
  68. ->latest()
  69. ->groupBy(['domain', 'id'])
  70. ->where('created_at', '>', now()->subMonths(2))
  71. ->chunk(100, function($domains) {
  72. foreach($domains as $domain) {
  73. Instance::firstOrCreate([
  74. 'domain' => $domain->domain
  75. ]);
  76. }
  77. });
  78. return redirect()->back();
  79. }
  80. public function instanceShow(Request $request, $id)
  81. {
  82. $instance = Instance::findOrFail($id);
  83. return view('admin.instances.show', compact('instance'));
  84. }
  85. public function instanceEdit(Request $request, $id)
  86. {
  87. $this->validate($request, [
  88. 'action' => [
  89. 'required',
  90. 'string',
  91. 'min:1',
  92. 'max:20',
  93. Rule::in(['autocw', 'unlist', 'ban'])
  94. ],
  95. ]);
  96. $instance = Instance::findOrFail($id);
  97. $unlisted = $instance->unlisted;
  98. $autocw = $instance->auto_cw;
  99. $banned = $instance->banned;
  100. switch ($request->action) {
  101. case 'autocw':
  102. $instance->auto_cw = $autocw == true ? false : true;
  103. $instance->save();
  104. break;
  105. case 'unlist':
  106. $instance->unlisted = $unlisted == true ? false : true;
  107. $instance->save();
  108. break;
  109. case 'ban':
  110. $instance->banned = $banned == true ? false : true;
  111. $instance->save();
  112. break;
  113. }
  114. Cache::forget(InstanceService::CACHE_KEY_BANNED_DOMAINS);
  115. Cache::forget(InstanceService::CACHE_KEY_UNLISTED_DOMAINS);
  116. Cache::forget(InstanceService::CACHE_KEY_NSFW_DOMAINS);
  117. return response()->json([]);
  118. }
  119. }