Bootstrap.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Dcat\Admin\Http\Middleware;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Support\Helper;
  5. use Dcat\Admin\Widgets\DarkModeSwitcher;
  6. use Illuminate\Http\Request;
  7. class Bootstrap
  8. {
  9. public function handle(Request $request, \Closure $next)
  10. {
  11. $this->includeBootstrapFile();
  12. $this->addScript();
  13. $this->fireEvents();
  14. $this->setUpDarkMode();
  15. $response = $next($request);
  16. $this->storeCurrentUrl($request);
  17. return $response;
  18. }
  19. protected function setUpDarkMode()
  20. {
  21. if (
  22. config('admin.layout.dark_mode_switch')
  23. && ! Helper::isAjaxRequest()
  24. && ! request()->routeIs(admin_api_route('*'))
  25. ) {
  26. Admin::navbar()->right((new DarkModeSwitcher())->render());
  27. }
  28. }
  29. protected function includeBootstrapFile()
  30. {
  31. if (is_file($bootstrap = admin_path('bootstrap.php'))) {
  32. require $bootstrap;
  33. }
  34. }
  35. protected function addScript()
  36. {
  37. $token = csrf_token();
  38. Admin::script("Dcat.token = \"$token\";");
  39. }
  40. protected function fireEvents()
  41. {
  42. Admin::callBooting();
  43. Admin::callBooted();
  44. }
  45. /**
  46. * @param \Illuminate\Http\Request
  47. *
  48. * @return void
  49. */
  50. protected function storeCurrentUrl(Request $request)
  51. {
  52. if (
  53. $request->method() === 'GET'
  54. && $request->route()
  55. && ! Helper::isAjaxRequest()
  56. && ! $this->prefetch($request)
  57. ) {
  58. Admin::addIgnoreQueryName(['_token', '_pjax']);
  59. Helper::setPreviousUrl(
  60. Helper::fullUrlWithoutQuery(Admin::getIgnoreQueryNames())
  61. );
  62. }
  63. }
  64. /**
  65. * @param \Illuminate\Http\Request $request
  66. *
  67. * @return bool
  68. */
  69. public function prefetch($request)
  70. {
  71. if (method_exists($request, 'prefetch')) {
  72. return $request->prefetch();
  73. }
  74. return strcasecmp($request->server->get('HTTP_X_MOZ'), 'prefetch') === 0 ||
  75. strcasecmp($request->headers->get('Purpose'), 'prefetch') === 0;
  76. }
  77. }