xref: /plugin/combo/ComboStrap/ExceptionReporter.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap;
4*04fd306cSNickeau
5*04fd306cSNickeau/**
6*04fd306cSNickeau * This class is here to help
7*04fd306cSNickeau * create report from an exception (HTML mostly to
8*04fd306cSNickeau * be send to the browser)
9*04fd306cSNickeau */
10*04fd306cSNickeauclass ExceptionReporter
11*04fd306cSNickeau{
12*04fd306cSNickeau
13*04fd306cSNickeau    private \Exception $e;
14*04fd306cSNickeau
15*04fd306cSNickeau    public function __construct(\Exception $e)
16*04fd306cSNickeau    {
17*04fd306cSNickeau        $this->e = $e;
18*04fd306cSNickeau    }
19*04fd306cSNickeau
20*04fd306cSNickeau
21*04fd306cSNickeau    public static function createForException(\Exception $e): ExceptionReporter
22*04fd306cSNickeau    {
23*04fd306cSNickeau        return new ExceptionReporter($e);
24*04fd306cSNickeau    }
25*04fd306cSNickeau
26*04fd306cSNickeau    public function getExceptionTraceAsHtml()
27*04fd306cSNickeau    {
28*04fd306cSNickeau        return str_replace("\n", "<br/>", $this->e->getTraceAsString());
29*04fd306cSNickeau    }
30*04fd306cSNickeau
31*04fd306cSNickeau    public function getHtmlPage($reporterMessage): string
32*04fd306cSNickeau    {
33*04fd306cSNickeau
34*04fd306cSNickeau        if (Identity::isManager()) {
35*04fd306cSNickeau            $errorMessage = $this->e->getMessage();
36*04fd306cSNickeau            $errorTrace = $this->getExceptionTraceAsHtml();
37*04fd306cSNickeau            $errorHtml = <<<EOF
38*04fd306cSNickeau<br/>
39*04fd306cSNickeau<p>Error (only seen by manager):</p>
40*04fd306cSNickeau<p>$errorMessage</p>
41*04fd306cSNickeau<p>$errorTrace</p>
42*04fd306cSNickeauEOF;
43*04fd306cSNickeau        } else {
44*04fd306cSNickeau            $errorHtml = "<br/><p>The error was logged in the log file. Errors are only visible by managers</p>";
45*04fd306cSNickeau        }
46*04fd306cSNickeau        return <<<EOF
47*04fd306cSNickeau<html lang="en">
48*04fd306cSNickeau<head>
49*04fd306cSNickeau<title>Error</title>
50*04fd306cSNickeau</head>
51*04fd306cSNickeau<body>
52*04fd306cSNickeau<h1>An error has occurred</h1>
53*04fd306cSNickeau<p>$reporterMessage</p>
54*04fd306cSNickeau$errorHtml
55*04fd306cSNickeau</body>
56*04fd306cSNickeauEOF;
57*04fd306cSNickeau    }
58*04fd306cSNickeau}
59