Happy New Year!
[platal.git] / classes / plbacktrace.php
index 6427896..729765b 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2007 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -37,36 +37,44 @@ class PlBacktrace
         }
     }
 
+    private function fixCharset($action)
+    {
+        if (!is_string($action)) {
+            return $action;
+        } else {
+            return is_utf8($action) ? $action : utf8_encode($action);
+        }
+    }
+
     private function add(array &$entry, $sizef = 'rows', $timef = 'exectime', $errorf = 'error')
     {
         $trace = array();
-        $trace['action'] = $entry['action'];
+        $trace['action'] = $this->fixCharset($entry['action']);
         unset($entry['action']);
         $trace['exectime'] = @$entry[$timef];
         $this->totaltime += $trace['exectime'];
         unset($entry[$timef]);
         $trace['rows'] = @$entry[$sizef];
         unset($entry[$sizef]);
-        $trace['error'] = @$entry[$errorf];
+        $trace['error'] = $this->fixCharset(@$entry[$errorf]);
         unset($entry[$errorf]);
         if ($trace['error']) {
             $this->error = true;
         }
-        $trace['data'] = array($entry);
+        $trace['data'] = array($this->fixCharset($entry));
         $this->traces[] =& $trace;
     }
 
     public function newEvent($action, $rows = 0, $error = null, array $userdata = array())
     {
-        $trace = array('action' => $action, 'time' => 0);
+        $trace = array('action' => $this->fixCharset($action), 'time' => 0);
         $this->traces[] =& $trace;
         $this->update($rows, $error, $userdata);
     }
 
     public function start($action)
     {
-        $trace = array('action' => $action, 'starttime' => microtime(true));
-        $this->traces[] =& $trace;
+        $this->traces[] =  array('action' => $this->fixCharset($action), 'starttime' => microtime(true));;
     }
 
     public function stop($rows = 0, $error = null, array $userdata = array())
@@ -76,9 +84,9 @@ class PlBacktrace
             return;
         }
         $trace =& $this->traces[count($this->traces) - 1];
-        $trace['time'] = $time - $trace['starttime'];
+        $trace['exectime'] = $time - $trace['starttime'];
         unset($trace['starttime']);
-        $this->totaltime += $trace['time'];
+        $this->totaltime += $trace['exectime'];
         $this->update($rows, $error, $userdata);
     }
 
@@ -86,7 +94,8 @@ class PlBacktrace
     {
         $trace =& $this->traces[count($this->traces) - 1];
         $trace['rows']  = $rows;
-        $trace['error'] = $error;
+        $trace['error'] = $this->fixCharset($error);
+        array_walk_recursive($userdata, array($this, 'fixCharset'));
         $trace['data']  = $userdata;
         if ($trace['error']) {
             $this->error = true;