DashboardController.php 2.5 KB

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