Debugger.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace Grav\Common;
  3. use DebugBar\JavascriptRenderer;
  4. use DebugBar\StandardDebugBar;
  5. /**
  6. * Class Debugger
  7. * @package Grav\Common
  8. */
  9. class Debugger
  10. {
  11. protected $grav;
  12. protected $debugbar;
  13. protected $renderer;
  14. protected $enabled;
  15. public function __construct()
  16. {
  17. $this->debugbar = new StandardDebugBar();
  18. $this->debugbar['time']->addMeasure('Loading', $this->debugbar['time']->getRequestStartTime(), microtime(true));
  19. }
  20. public function init()
  21. {
  22. $this->grav = Grav::instance();
  23. if ($this->enabled()) {
  24. $this->debugbar->addCollector(new \DebugBar\DataCollector\ConfigCollector((array)$this->grav['config']->get('system')));
  25. }
  26. return $this;
  27. }
  28. public function enabled($state = null)
  29. {
  30. if (isset($state)) {
  31. $this->enabled = $state;
  32. } else {
  33. if (!isset($this->enabled)) {
  34. $this->enabled = $this->grav['config']->get('system.debugger.enabled');
  35. }
  36. }
  37. return $this->enabled;
  38. }
  39. public function addAssets()
  40. {
  41. if ($this->enabled()) {
  42. $assets = $this->grav['assets'];
  43. // Add jquery library
  44. $assets->add('jquery', 101);
  45. $this->renderer = $this->debugbar->getJavascriptRenderer();
  46. $this->renderer->setIncludeVendors(false);
  47. // Get the required CSS files
  48. list($css_files, $js_files) = $this->renderer->getAssets(null, JavascriptRenderer::RELATIVE_URL);
  49. foreach ($css_files as $css) {
  50. $assets->addCss($css);
  51. }
  52. $assets->addCss('/system/assets/debugger.css');
  53. foreach ($js_files as $js) {
  54. $assets->addJs($js);
  55. }
  56. }
  57. return $this;
  58. }
  59. public function addCollector($collector)
  60. {
  61. $this->debugbar->addCollector($collector);
  62. return $this;
  63. }
  64. public function getCollector($collector)
  65. {
  66. return $this->debugbar->getCollector($collector);
  67. }
  68. public function render()
  69. {
  70. if ($this->enabled()) {
  71. echo $this->renderer->render();
  72. }
  73. return $this;
  74. }
  75. public function sendDataInHeaders()
  76. {
  77. $this->debugbar->sendDataInHeaders();
  78. return $this;
  79. }
  80. public function startTimer($name, $description = null)
  81. {
  82. if ($name[0] == '_' || $this->grav['config']->get('system.debugger.enabled')) {
  83. $this->debugbar['time']->startMeasure($name, $description);
  84. }
  85. return $this;
  86. }
  87. public function stopTimer($name)
  88. {
  89. if ($name[0] == '_' || $this->grav['config']->get('system.debugger.enabled')) {
  90. $this->debugbar['time']->stopMeasure($name);
  91. }
  92. return $this;
  93. }
  94. public function addMessage($message, $label = 'info', $isString = true)
  95. {
  96. if ($this->enabled()) {
  97. $this->debugbar['messages']->addMessage($message, $label, $isString);
  98. }
  99. return $this;
  100. }
  101. }