/**
  * @param array $event
  */
 public function _write($event)
 {
     $debugbar = DebugBar::getDebugBar();
     if (!$debugbar) {
         return;
     }
     /* @var $messagesCollector DebugBar\DataCollector\MessagesCollector */
     $messagesCollector = $debugbar['messages'];
     if (!$messagesCollector) {
         return;
     }
     $level = $event['priorityName'];
     // Gather info
     if (isset($event['message']['errstr'])) {
         $str = $event['message']['errstr'];
         $file = $event['message']['errfile'];
         $line = $event['message']['errline'];
     } else {
         $str = $event['message']['function'];
         $file = $event['message']['file'];
         $line = isset($event['message']['line']) ? $event['message']['line'] : 0;
     }
     $relfile = Director::makeRelative($file);
     // Save message
     $message = "{$level} - {$str} ({$relfile}:{$line})";
     // Escape \ for proper js display
     $message = str_replace('\\', '\\\\', $message);
     $messagesCollector->addMessage($message, false);
 }
 public function index(SS_HTTPRequest $request)
 {
     if (!DebugBar::config()->enable_storage) {
         return $this->httpError(404, 'Storage not enabled');
     }
     $debugbar = DebugBar::getDebugBar();
     if (!$debugbar) {
         return $this->httpError(404, 'DebugBar not enabled');
     }
     $openHandler = new DebugBar\OpenHandler($debugbar);
     $openHandler->handle();
     exit;
     // Handle will echo and set headers
 }
 /**
  * Filter executed AFTER a request
  *
  * @param SS_HTTPRequest $request   Request container object
  * @param SS_HTTPResponse $response Response output object
  * @param DataModel $model          Current DataModel
  * @return boolean Whether to continue processing other filters. Null or true will continue processing (optional)
  */
 public function postRequest(SS_HTTPRequest $request, SS_HTTPResponse $response, DataModel $model)
 {
     $debugbar = DebugBar::getDebugBar();
     if (!$debugbar) {
         return;
     }
     // All queries have been displayed
     if (DebugBar::getShowQueries()) {
         exit;
     }
     $script = DebugBar::renderDebugBar();
     // If the bar is not renderable, return early
     if (!$script) {
         return;
     }
     // Inject init script into the HTML response
     $body = $response->getBody();
     if (strpos($body, '</body>') !== false) {
         $body = str_replace('</body>', $script . '</body>', $body);
         $response->setBody($body);
     }
     // Ajax support
     if (Director::is_ajax() && !headers_sent()) {
         if (DebugBar::IsAdminUrl() && !DebugBar::config()->enabled_in_admin) {
             return;
         }
         // Skip anything that is not a GET request
         if (!$request->isGET()) {
             return;
         }
         // Always enable in admin because everything is mostly loaded through ajax
         if (DebugBar::config()->ajax || DebugBar::IsAdminUrl()) {
             $headers = $debugbar->getDataAsHeaders();
             // Prevent throwing js errors in case header size is too large
             if (is_array($headers)) {
                 $debugbar->sendDataInHeaders();
             }
         }
     }
 }