DashboardController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Controllers;
  3. use App\Database\Queries\MediaQuery;
  4. use App\Database\Queries\TagQuery;
  5. use Psr\Http\Message\ResponseInterface as Response;
  6. use Psr\Http\Message\ServerRequestInterface as Request;
  7. class DashboardController extends Controller
  8. {
  9. /**
  10. * @param Request $request
  11. * @param Response $response
  12. *
  13. * @return Response
  14. */
  15. public function redirects(Request $request, Response $response): Response
  16. {
  17. if (param($request, 'afterInstall') !== null && !is_dir(BASE_DIR.'install')) {
  18. $this->session->alert(lang('installed'), 'success');
  19. }
  20. return redirect($response, route('home'));
  21. }
  22. /**
  23. * @param Request $request
  24. * @param Response $response
  25. * @param int|null $page
  26. *
  27. * @return Response
  28. * @throws \Twig\Error\RuntimeError
  29. * @throws \Twig\Error\SyntaxError
  30. *
  31. * @throws \Twig\Error\LoaderError
  32. */
  33. public function home(Request $request, Response $response, int $page = 0): Response
  34. {
  35. $page = max(0, --$page);
  36. switch (param($request, 'sort', 'time')) {
  37. case 'size':
  38. $order = MediaQuery::ORDER_SIZE;
  39. break;
  40. case 'name':
  41. $order = MediaQuery::ORDER_NAME;
  42. break;
  43. default:
  44. case 'time':
  45. $order = MediaQuery::ORDER_TIME;
  46. break;
  47. }
  48. /** @var MediaQuery $query */
  49. $query = make(MediaQuery::class, ['isAdmin' => (bool) $this->session->get('admin', false)])
  50. ->orderBy($order, param($request, 'order', 'DESC'))
  51. ->withUserId($this->session->get('user_id'))
  52. ->search(param($request, 'search', null))
  53. ->filterByTag(param($request, 'tag'))
  54. ->run($page);
  55. $tags = make(TagQuery::class, [
  56. 'isAdmin' => (bool) $this->session->get('admin', false),
  57. 'userId' => $this->session->get('user_id')
  58. ])->all();
  59. return view()->render(
  60. $response,
  61. ($this->session->get('admin', false) && $this->session->get('gallery_view', true)) ? 'dashboard/list.twig' : 'dashboard/grid.twig',
  62. [
  63. 'medias' => $query->getMedia(),
  64. 'next' => $page < floor($query->getPages()),
  65. 'previous' => $page >= 1,
  66. 'current_page' => ++$page,
  67. 'copy_raw' => $this->session->get('copy_raw', false),
  68. 'tags' => $tags,
  69. ]
  70. );
  71. }
  72. /**
  73. * @param Response $response
  74. *
  75. * @return Response
  76. */
  77. public function switchView(Response $response): Response
  78. {
  79. $this->session->set('gallery_view', !$this->session->get('gallery_view', true));
  80. return redirect($response, route('home'));
  81. }
  82. }