Completed
Push — master ( b2e200...1332b8 )
by Oscar
04:48
created

DebugBar::debugBar()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4286
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace Psr7Middlewares\Middleware;
4
5
use DebugBar\DebugBar as Bar;
6
use Psr7Middlewares\Middleware;
7
use Psr7Middlewares\Utils;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Message\ResponseInterface;
10
11
/**
12
 * Middleware to render a debugbar in html responses.
13
 */
14
class DebugBar
15
{
16
    use Utils\HtmlInjectorTrait;
17
18
    private $debugBar;
19
20
    /**
21
     * Constructor. Set the debug bar.
22
     *
23
     * @param Bar|null $debugBar
24
     */
25
    public function __construct(Bar $debugBar = null)
26
    {
27
        if ($debugBar !== null) {
28
            $this->debugBar($debugBar);
29
        }
30
    }
31
32
    /**
33
     * Set the debug bar.
34
     *
35
     * @param Bar $debugBar
36
     * 
37
     * @return self
38
     */
39
    public function debugBar(Bar $debugBar)
40
    {
41
        $this->debugBar = $debugBar;
42
43
        return $this;
44
    }
45
46
    /**
47
     * Execute the middleware.
48
     *
49
     * @param ServerRequestInterface $request
50
     * @param ResponseInterface      $response
51
     * @param callable               $next
52
     *
53
     * @return ResponseInterface
54
     */
55
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
56
    {
57
        $response = $next($request, $response);
58
59
        //Is ajax?
60
        if (strtolower($request->getHeaderLine('X-Requested-With')) === 'xmlhttprequest') {
61
            $headers = $this->debugBar->getDataAsHeaders();
62
63
            foreach ($headers as $name => $value) {
64
                $response = $response->withHeader($name, $value);
65
            }
66
67
            return $response;
68
        }
69
70
        if ($this->isInjectable($request)) {
71
            $renderer = $this->debugBar->getJavascriptRenderer();
72
73
            ob_start();
74
            echo '<style>';
75
            $renderer->dumpCssAssets();
76
            echo '</style>';
77
78
            echo '<script>';
79
            $renderer->dumpJsAssets();
80
            echo '</script>';
81
82
            echo $renderer->render();
83
84
            return $this->inject($response, ob_get_clean());
85
        }
86
87
        return $response;
88
    }
89
}
90