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