error.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace Grav\Plugin;
  3. use Composer\Autoload\ClassLoader;
  4. use Grav\Common\Plugin;
  5. use Grav\Common\Page\Page;
  6. use Grav\Common\Page\Pages;
  7. use Grav\Common\Page\Types;
  8. use RocketTheme\Toolbox\Event\Event;
  9. class ErrorPlugin extends Plugin
  10. {
  11. /**
  12. * @return array
  13. */
  14. public static function getSubscribedEvents()
  15. {
  16. return [
  17. 'onCliInitialize' => [
  18. ['autoload', 100000],
  19. ],
  20. 'onPageNotFound' => [
  21. ['onPageNotFound', 0]
  22. ],
  23. 'onGetPageTemplates' => [
  24. ['onGetPageTemplates', 0]
  25. ],
  26. 'onTwigTemplatePaths' => [
  27. ['onTwigTemplatePaths', -10]
  28. ]
  29. ];
  30. }
  31. /**
  32. * [onPluginsInitialized:100000] Composer autoload.
  33. *
  34. * @return ClassLoader
  35. */
  36. public function autoload()
  37. {
  38. return require __DIR__ . '/vendor/autoload.php';
  39. }
  40. /**
  41. * Display error page if no page was found for the current route.
  42. *
  43. * @param Event $event
  44. */
  45. public function onPageNotFound(Event $event)
  46. {
  47. /** @var Pages $pages */
  48. $pages = $this->grav['pages'];
  49. // Try to load user error page.
  50. $page = $pages->dispatch($this->config->get('plugins.error.routes.404', '/error'), true);
  51. if (!$page) {
  52. // If none provided use built in error page.
  53. $page = new Page;
  54. $page->init(new \SplFileInfo(__DIR__ . '/pages/error.md'));
  55. $page->title($this->grav['language']->translate('PLUGIN_ERROR.ERROR') . ' ' . $page->header()->http_response_code);
  56. }
  57. $event->page = $page;
  58. $event->stopPropagation();
  59. }
  60. /**
  61. * Add page template types.
  62. */
  63. public function onGetPageTemplates(Event $event)
  64. {
  65. /** @var Types $types */
  66. $types = $event->types;
  67. $types->register('error');
  68. }
  69. /**
  70. * Add current directory to twig lookup paths.
  71. */
  72. public function onTwigTemplatePaths()
  73. {
  74. $this->grav['twig']->twig_paths[] = __DIR__ . '/templates';
  75. }
  76. }