DashboardController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Controllers;
  3. use App\Database\DB;
  4. use App\Traits\SingletonController;
  5. use App\Web\Session;
  6. use Flight;
  7. use League\Flysystem\FileNotFoundException;
  8. class DashboardController extends Controller
  9. {
  10. use SingletonController;
  11. const PER_PAGE = 21;
  12. const PER_PAGE_ADMIN = 50;
  13. public function redirects(): void
  14. {
  15. $this->checkLogin();
  16. Flight::redirect('/home');
  17. }
  18. public function home($page = 1): void
  19. {
  20. $this->checkLogin();
  21. $page = max(0, --$page);
  22. if (Session::get('admin', false)) {
  23. $medias = DB::query('SELECT `uploads`.*, `users`.`user_code`, `users`.`username` FROM `uploads` LEFT JOIN `users` ON `uploads`.`user_id` = `users`.`id` ORDER BY `timestamp` DESC LIMIT ? OFFSET ?', [self::PER_PAGE_ADMIN, $page * self::PER_PAGE_ADMIN])->fetchAll();
  24. $pages = DB::query('SELECT COUNT(*) AS `count` FROM `uploads`')->fetch()->count / self::PER_PAGE_ADMIN;
  25. } else {
  26. $medias = DB::query('SELECT `uploads`.*,`users`.`user_code`, `users`.`username` FROM `uploads` INNER JOIN `users` ON `uploads`.`user_id` = `users`.`id` WHERE `user_id` = ? ORDER BY `timestamp` DESC LIMIT ? OFFSET ?', [Session::get('user_id'), self::PER_PAGE, $page * self::PER_PAGE])->fetchAll();
  27. $pages = DB::query('SELECT COUNT(*) AS `count` FROM `uploads` WHERE `user_id` = ?', Session::get('user_id'))->fetch()->count / self::PER_PAGE;
  28. }
  29. $filesystem = $this->getStorage();
  30. $base_url = Flight::get('config')['base_url'];
  31. foreach ($medias as $media) {
  32. $extension = pathinfo($media->filename, PATHINFO_EXTENSION);
  33. try {
  34. $mime = $filesystem->getMimetype($media->storage_path);
  35. } catch (FileNotFoundException $e) {
  36. $mime = null;
  37. }
  38. $media->mimetype = $mime;
  39. $media->extension = $extension;
  40. if ($type = explode('/', $mime)[0] === 'image') {
  41. $this->http2push("$base_url/$media->user_code/$media->code.$extension/raw");
  42. }
  43. }
  44. Flight::render(
  45. Session::get('admin', false) ? 'dashboard/admin.twig' : 'dashboard/home.twig',
  46. [
  47. 'medias' => $medias,
  48. 'next' => $page < floor($pages),
  49. 'previous' => $page >= 1,
  50. 'current_page' => ++$page,
  51. ]
  52. );
  53. }
  54. public function system()
  55. {
  56. $this->checkAdmin();
  57. $usersCount = DB::query('SELECT COUNT(*) AS `count` FROM `users`')->fetch()->count;
  58. $mediasCount = DB::query('SELECT COUNT(*) AS `count` FROM `uploads`')->fetch()->count;
  59. $orphanFilesCount = DB::query('SELECT COUNT(*) AS `count` FROM `uploads` WHERE `user_id` IS NULL')->fetch()->count;
  60. $medias = DB::query('SELECT `users`.`user_code`, `uploads`.`code`, `uploads`.`storage_path` FROM `uploads` LEFT JOIN `users` ON `uploads`.`user_id` = `users`.`id`')->fetchAll();
  61. $totalSize = 0;
  62. $filesystem = $this->getStorage();
  63. foreach ($medias as $media) {
  64. $totalSize += $filesystem->getSize($media->storage_path);
  65. }
  66. Flight::render('dashboard/system.twig', [
  67. 'usersCount' => $usersCount,
  68. 'mediasCount' => $mediasCount,
  69. 'orphanFilesCount' => $orphanFilesCount,
  70. 'totalSize' => $this->humanFilesize($totalSize),
  71. 'max_filesize' => ini_get('post_max_size') . '/' . ini_get('upload_max_filesize'),
  72. ]);
  73. }
  74. }