Browse Source

Added Error Handler class

Giancarlo Voci 8 years ago
parent
commit
4b2c64f91e
8 changed files with 138 additions and 18 deletions
  1. 1 1
      .gitignore
  2. 2 0
      index.php
  3. 63 0
      src/OpenMind/System/ErrorHandlers.php
  4. 18 1
      src/OpenMind/System/System.php
  5. 25 15
      ui/custom.css
  6. 29 0
      ui/errors.tpl
  7. BIN
      ui/images/error_bg.png
  8. 0 1
      ui/masterpage.tpl

+ 1 - 1
.gitignore

@@ -5,7 +5,7 @@
 ._*
 .Spotlight-V100
 .Trashes
-ehthumbs.db
+thumbs.db
 Thumbs.db
 .idea
 composer.phar

+ 2 - 0
index.php

@@ -18,4 +18,6 @@ $frameworkUtils->DieByOldPhpVersion();
 $frameworkUtils->LoadEncryptedConfig('config.bin');
 $frameworkUtils->PluginLoader('src/');
 
+sdfasdf
+
 \F3::run();

+ 63 - 0
src/OpenMind/System/ErrorHandlers.php

@@ -0,0 +1,63 @@
+<?php
+/**
+ * @author Open Mind
+ * @date 25/06/2018
+ * @time 16:14
+ */
+
+namespace OpenMind\System;
+
+
+class ErrorHandlers
+{
+  private $f3;
+  public function __construct()
+  {
+    $this->f3 = \Base::instance();
+  }
+
+  /**
+   * Main error handler: managed AJAX and non-AJAX calls
+   */
+  public function Handler()
+  {
+    while (ob_get_level()) // Prevent to output all previous templates
+      ob_end_clean();
+
+    $err = $this->f3->get('ERROR');
+
+    $this->WriteLog(join(' - ', array($err['code'], $err['status'], $err['text'])));
+
+    if (!$this->f3->get('AJAX')) {
+      echo \Template::instance()->render('errors.tpl');
+      return;
+    }
+
+    http_response_code(400);
+    echo join(' - ', array($this->f3->get('ERROR')['code'], $this->f3->get('ERROR')['status'], $this->f3->get('ERROR')['text']));
+  }
+
+  /**
+   * Simple function to write to default log file
+   * @param string $logmessage
+   * @param int $tracenumber trace index of debug_backtrace() return array, default 1
+   */
+  function WriteLog($logMessage, $traceNumber = 1)
+  {
+    $trace = debug_backtrace();
+
+    if (count($trace) > 1) {
+      $trace = $trace[$traceNumber];
+
+      $method = isset($trace['function']) ? $trace['function'] . ':' : '';
+      $class = isset($trace['class']) ? $trace['class'] . ':' : '';
+      $line = isset($trace['line']) ? $trace['line'] . ':' : '';
+      //$userAgent = '(' . join(', ', $UA) . ')';
+      System::getLogger()->write("{$line}{$class}{$method} " . str_replace(array("\r", "\n"), '', $logMessage));
+      return;
+    }
+
+    System::getLogger()->write($logMessage);
+  }
+
+}

+ 18 - 1
src/OpenMind/System/System.php

@@ -10,16 +10,33 @@ namespace OpenMind\System;
 
 class System extends PluginStrategy
 {
+  private static $Logger;
+
+  /**
+   * @return mixed
+   */
+  public static function getLogger()
+  {
+    return self::$Logger;
+  }
+
   public static function Init()
   {
+    self::$Logger = new \Log('Site.log');
+
     \F3::set('DB',
       new \DB\SQL(
         \F3::get('DBSETTINGS'),
         \F3::get('dbuser'),
         \F3::get('dbpass'),
-        array(\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_PERSISTENT => TRUE))
+        array(
+          \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
+          \PDO::ATTR_PERSISTENT => TRUE
+        ))
     );
 
     \F3::config('labels.ini', true);
+
+    \F3::set('ONERROR', '\OpenMind\System\ErrorHandlers->Handler');
   }
 }

+ 25 - 15
ui/custom.css

@@ -1,40 +1,50 @@
-html,body {
-    height: 100%;
+html, body {
+  height: 100%;
 }
 
 body {
-    background-color: #1c1c1c !important;
-    color: #ffd242 !important;
+  background-color: #1c1c1c !important;
+  color: #ffd242 !important;
+}
+
+.error_body {
+  background-image: url('ui/images/error_bg.png');
+  background-repeat: no-repeat;
+  background-size: cover;
+}
+
+.error_body .card {
+  opacity: 0.9;
 }
 
 input[type="text"], input[type="password"] {
-    background-color: #484848 !important;
-    border-color: #C5AC0F !important;
+  background-color: #484848 !important;
+  border-color: #C5AC0F !important;
 }
 
 input[type="text"]:focus, input[type="password"]:focus {
-    border-color: #C5AC0F !important;
-    color: #ffd242 !important;
+  border-color: #C5AC0F !important;
+  color: #ffd242 !important;
 }
 
 .form-control {
-    background-color: #484848 !important;
-    color: #ffd242 !important;
+  background-color: #484848 !important;
+  color: #ffd242 !important;
 }
 
 .form-control:focus {
-    border-color: #c5ac0f !important;
-    box-shadow: 0 0 0 0.2rem rgba(197, 172, 15, 0.25) !important;
+  border-color: #c5ac0f !important;
+  box-shadow: 0 0 0 0.2rem rgba(197, 172, 15, 0.25) !important;
 }
 
 .debugborder {
-    border: 1px solid red !important;
+  border: 1px solid red !important;
 }
 
 .bg-dark {
-    background-color: #686f75 !important;
+  background-color: #686f75 !important;
 }
 
 .disablebutton {
-    opacity: 0.4;
+  opacity: 0.4;
 }

+ 29 - 0
ui/errors.tpl

@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="it">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>{{@SITENAME}} error page</title>
+    <link type="text/css" rel="stylesheet" href="{{@BASEURL}}/bundle.css"/>
+</head>
+<body class="bg-light error_body">
+
+<div class="container">
+    <div class="row">
+        <div class="col-md-12" style="font-family: verdana, arial, sans serif; font-size: 8pt; text-align: center">
+            <div class="text-left card bg-white m-1 p-2">
+                <h1 class="text-center text-info">{{@ERROR.code}} {{@ERROR.status}}</h1>
+                <br/>
+                <h3 class="text-success">Dettaglio errore:</h3>
+                <pre style="font-size: 1rem">{{@ERROR.text}}</pre>
+                <h3 class="text-success">Debug Trace:</h3>
+                <pre style="font-size: 1rem">{{@ERROR.trace}}</pre>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="{{@BASEURL}}/bundle.js"></script>
+
+</body>
+</html>

BIN
ui/images/error_bg.png


+ 0 - 1
ui/masterpage.tpl

@@ -17,7 +17,6 @@
     <include if="{{ isset(@CONTENT) }}" href="{{@CONTENT}}"/>
 </div>
 
-
 <script src="{{@BASEURL}}/bundle.js"></script>
 
 </body>