1
0

AdminSettingsController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use Artisan, Cache, DB;
  4. use Illuminate\Http\Request;
  5. use Carbon\Carbon;
  6. use App\{Comment, Like, Media, Page, Profile, Report, Status, User};
  7. use App\Http\Controllers\Controller;
  8. use Jackiedo\DotenvEditor\Facades\DotenvEditor;
  9. use App\Util\Lexer\PrettyNumber;
  10. trait AdminSettingsController
  11. {
  12. public function settings(Request $request)
  13. {
  14. return view('admin.settings.home');
  15. }
  16. public function settingsBackups(Request $request)
  17. {
  18. $path = storage_path('app/PixelFed');
  19. $files = new \DirectoryIterator($path);
  20. return view('admin.settings.backups', compact('files'));
  21. }
  22. public function settingsConfig(Request $request, DotenvEditor $editor)
  23. {
  24. return view('admin.settings.config', compact('editor'));
  25. }
  26. public function settingsMaintenance(Request $request)
  27. {
  28. return view('admin.settings.maintenance');
  29. }
  30. public function settingsStorage(Request $request)
  31. {
  32. $databaseSum = Cache::remember('admin:settings:storage:db:storageUsed', 360, function() {
  33. $q = 'SELECT sum(ROUND(((data_length + index_length)), 0)) AS size FROM information_schema.TABLES WHERE table_schema = ?';
  34. $db = config('database.default');
  35. $db = config("database.connections.{$db}.database");
  36. return DB::select($q, [$db])[0]->size;
  37. });
  38. $mediaSum = Cache::remember('admin:settings:storage:media:storageUsed', 360, function() {
  39. return Media::sum('size');
  40. });
  41. $backupSum = Cache::remember('admin:settings:storage:backups:storageUsed', 360, function() {
  42. $dir = storage_path('app/'.config('app.name'));
  43. $size = 0;
  44. foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each) {
  45. $size += is_file($each) ? filesize($each) : folderSize($each);
  46. }
  47. return $size;
  48. });
  49. $storage = new \StdClass;
  50. $storage->total = disk_total_space(base_path());
  51. $storage->free = disk_free_space(base_path());
  52. $storage->prettyTotal = PrettyNumber::size($storage->total, false, false);
  53. $storage->prettyFree = PrettyNumber::size($storage->free, false, false);
  54. $storage->percentFree = ceil($storage->free / $storage->total * 100);
  55. $storage->percentUsed = ceil(100 - $storage->percentFree);
  56. $storage->media = [
  57. 'used' => $mediaSum,
  58. 'prettyUsed' => PrettyNumber::size($mediaSum),
  59. 'percentUsed' => ceil($mediaSum / $storage->total * 100)
  60. ];
  61. $storage->backups = [
  62. 'used' => $backupSum
  63. ];
  64. $storage->database = [
  65. 'used' => $databaseSum
  66. ];
  67. return view('admin.settings.storage', compact('storage'));
  68. }
  69. public function settingsFeatures(Request $request)
  70. {
  71. return view('admin.settings.features');
  72. }
  73. public function settingsHomeStore(Request $request)
  74. {
  75. $this->validate($request, [
  76. 'APP_NAME' => 'required|string',
  77. ]);
  78. Artisan::call('config:clear');
  79. DotenvEditor::setKey('APP_NAME', $request->input('APP_NAME'));
  80. DotenvEditor::save();
  81. return redirect()->back();
  82. }
  83. public function settingsPages(Request $request)
  84. {
  85. $pages = Page::orderByDesc('updated_at')->paginate(10);
  86. return view('admin.pages.home', compact('pages'));
  87. }
  88. public function settingsPageEdit(Request $request)
  89. {
  90. return view('admin.pages.edit');
  91. }
  92. public function settingsSystem(Request $request)
  93. {
  94. $sys = [
  95. 'pixelfed' => config('pixelfed.version'),
  96. 'mysql' => DB::select( DB::raw("select version()") )[0]->{'version()'},
  97. 'php' => phpversion(),
  98. 'redis' => explode(' ',exec('redis-cli -v'))[1],
  99. ];
  100. return view('admin.settings.system', compact('sys'));
  101. }
  102. }