AdminInstanceController.php 3.4 KB

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