Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
Legacy
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
4 / 4
10
100.00% covered (success)
100.00%
1 / 1
 render
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 report
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
4
 setLogger
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 stripBasePath
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 isCli
n/a
0 / 0
n/a
0 / 0
2
1<?php
2
3declare(strict_types=1);
4
5namespace Engelsystem\Exceptions\Handlers;
6
7use Engelsystem\Http\Request;
8use Psr\Log\LoggerInterface;
9use Throwable;
10
11class Legacy implements HandlerInterface
12{
13    protected ?LoggerInterface $log = null;
14
15    public function render(Request $request, Throwable $e): void
16    {
17        if ($this->isCli()) {
18            return;
19        }
20
21        echo 'An <del>un</del>expected error occurred. A team of untrained monkeys has been dispatched to fix it.';
22    }
23
24    public function report(Throwable $e): void
25    {
26        $previous = $e->getPrevious();
27        error_log(sprintf(
28            '%s: Code: %s, Message: %s, File: %s:%u, Previous: %s, Trace: %s',
29            get_class($e),
30            $e->getCode(),
31            $e->getMessage(),
32            $this->stripBasePath($e->getFile()),
33            $e->getLine(),
34            $previous ? $previous->getMessage() : 'None',
35            json_encode($e->getTrace())
36        ));
37
38        if (is_null($this->log)) {
39            return;
40        }
41
42        try {
43            $this->log->critical('', ['exception' => $e]);
44        } catch (Throwable) {
45        }
46    }
47
48    public function setLogger(LoggerInterface $logger): void
49    {
50        $this->log = $logger;
51    }
52
53    protected function stripBasePath(string $path): string
54    {
55        $basePath = realpath(__DIR__ . '/../../..') . '/';
56        return str_replace($basePath, '', $path);
57    }
58
59    /**
60     * Test if is called from cli
61     * @codeCoverageIgnore
62     */
63    protected function isCli(): bool
64    {
65        return PHP_SAPI == 'cli' || PHP_SAPI == 'phpdbg';
66    }
67}