From fc91e553ad98e8316936f6356bcbbff8a278edbe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= <rdoursenaud@gpcsolutions.fr>
Date: Fri, 11 Sep 2015 17:37:58 +0200
Subject: [PATCH] Setup FirePHP like ChromePHP

---
 COPYRIGHT                                     |  1 +
 composer.json                                 |  3 +-
 composer.lock                                 | 38 +++++++-
 .../modules/syslog/mod_syslog_firephp.php     | 95 +++++++++++--------
 4 files changed, 97 insertions(+), 40 deletions(-)

diff --git a/COPYRIGHT b/COPYRIGHT
index c38873a2f07..534770f0f75 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -16,6 +16,7 @@ AdoDb-Date             0.33          Modified BSD License        Yes
 ChromePHP              4.1.0         Apache Software License 2.0 Yes             Return server log to chrome browser console
 CKEditor               4.3.3         LGPL-2.1+                   Yes             Editor WYSIWYG
 EvalMath               1.0           BSD                         Yes             Safe math expressions evaluation
+FirePHPCore            0.4.0         MIT License                 Yes             Send logs to Firefox Firebug console
 FPDI                   1.5.2         Apache Software License 2.0 Yes             PDF templates management
 GeoIP                  1.4           LGPL-2.1+                   Yes             Sample code to make geoip convert (not into deb package)
 Mobiledetect           2.8.3         MIT License                 Yes             Detect mobile devices browsers
diff --git a/composer.json b/composer.json
index cddc166bb42..80e55b6a221 100644
--- a/composer.json
+++ b/composer.json
@@ -21,7 +21,8 @@
         "phpoffice/phpexcel": "1.8.0",
         "restler/framework": "^3.0",
         "tecnick.com/tcpdf": "6.2.6",
-        "raven/raven": "^0.12.0"
+        "raven/raven": "^0.12.0",
+        "firephp/firephp-core": "^0.4.0"
     },
     "suggest": {
         "ext-mysqlnd": "To use with MySQL or MariaDB",
diff --git a/composer.lock b/composer.lock
index 81c767d5e9b..f178ec4f419 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "2ab34d0ff69b48500c20621330c1bfd7",
+    "hash": "f441e6348ae7862942693cab10810418",
     "packages": [
         {
             "name": "ccampbell/chromephp",
@@ -90,6 +90,42 @@
             ],
             "time": "2014-02-26 15:34:37"
         },
+        {
+            "name": "firephp/firephp-core",
+            "version": "v0.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/firephp/firephp-core.git",
+                "reference": "fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/firephp/firephp-core/zipball/fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf",
+                "reference": "fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "lib/FirePHPCore/FirePHP.class.php",
+                    "lib/FirePHPCore/fb.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christoph Dorn",
+                    "email": "christoph@christophdorn.com",
+                    "homepage": "http://christophdorn.com"
+                }
+            ],
+            "description": "Traditional FirePHPCore library for sending PHP variables to the browser.",
+            "homepage": "https://github.com/firephp/firephp-core",
+            "time": "2013-04-23 15:28:20"
+        },
         {
             "name": "mobiledetect/mobiledetectlib",
             "version": "2.8.3",
diff --git a/htdocs/core/modules/syslog/mod_syslog_firephp.php b/htdocs/core/modules/syslog/mod_syslog_firephp.php
index 08c0b91efc6..fa6111c80a3 100644
--- a/htdocs/core/modules/syslog/mod_syslog_firephp.php
+++ b/htdocs/core/modules/syslog/mod_syslog_firephp.php
@@ -1,4 +1,20 @@
 <?php
+/* Copyright (C) 2012   Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2015   Raphaƫl Doursenaud   <rdoursenaud@gpcsolutions.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
 
 require_once DOL_DOCUMENT_ROOT.'/core/modules/syslog/logHandler.php';
 
@@ -7,7 +23,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/syslog/logHandler.php';
  */
 class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
 {
-	var $code = 'firephp';
+	public $code = 'firephp';
+	private static $firephp_include_path = '/includes/firephp/firephp-core/lib/';
+	private static $firephp_class_path = 'FirePHPCore/FirePHP.class.php';
 
 	/**
 	 * 	Return name of logger
@@ -38,7 +56,7 @@ class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
 	{
 		global $langs;
 
-		return $this->isActive()?'':$langs->trans('ClassNotFoundIntoPathWarning','FirePHPCore/FirePHP.class.php');
+		return $this->isActive()?'':$langs->trans('ClassNotFoundIntoPathWarning', self::$firephp_class_path);
 	}
 
 	/**
@@ -48,42 +66,48 @@ class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
 	 */
 	public function isActive()
 	{
+		global $conf;
 		try
 		{
-		    set_include_path('/usr/share/php/');
-		    $res = @include_once 'FirePHPCore/FirePHP.class.php';
-		    restore_include_path();
-		    if ($res)
-		    {
-		        return 1;
-		    }
+			if (empty($conf->global->SYSLOG_FIREPHP_INCLUDEPATH)) {
+				$conf->global->SYSLOG_FIREPHP_INCLUDEPATH = DOL_DOCUMENT_ROOT . self::$firephp_include_path;
+			}
+			set_include_path($conf->global->SYSLOG_FIREPHP_INCLUDEPATH);
+			$res = @include_once self::$firephp_class_path;
+			restore_include_path();
+			if ($res) {
+				return 1;
+			} else {
+				return 0;
+			}
 		}
 		catch(Exception $e)
 		{
-		    print '<!-- FirePHP not available into PHP -->'."\n";
+			print '<!-- FirePHP not available into PHP -->'."\n";
 		}
 
 		return -1;
 	}
 
-	///**
-	// * 	Return array of configuration data
-	// *
-	// * 	@return	array		Return array of configuration data
-	// */
-	// public function configure()
-	// {
-	// 	global $langs;
-
-	// 	return array(
-	// 		array(
-	// 			'name' => $langs->trans('IncludePath'),
-	// 			'constant' => 'SYSLOG_FIREPHP_INCLUDEPATH',
-	// 			'default' => '/usr/share/php',
-	// 			'attr' => 'size="40"'
-	// 		)
-	// 	);
-	// }
+	/**
+	 * Return array of configuration data
+	 *
+	 * @return array Return array of configuration data
+	 */
+	public function configure()
+	{
+		global $langs;
+
+		return array(
+			array(
+				'name' => $langs->trans('IncludePath', 'SYSLOG_FIREPHP_INCLUDEPATH'),
+				'constant' => 'SYSLOG_FIREPHP_INCLUDEPATH',
+				'default' => DOL_DOCUMENT_ROOT . self::$firephp_include_path,
+				'attr' => 'size="60"',
+				'example' => '/usr/share/php, ' . DOL_DOCUMENT_ROOT . self::$firephp_include_path
+			)
+		);
+	}
 
 	/**
 	 * 	Return if configuration is valid
@@ -92,20 +116,15 @@ class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
 	 */
 	public function checkConfiguration()
 	{
-		global $langs;
+		global $conf, $langs;
 
 		$errors = array();
 
-		$oldinclude = get_include_path();
-		set_include_path('/usr/share/php/');
-
-		if (!file_exists('FirePHPCore/FirePHP.class.php'))
+		if (!file_exists($conf->global->SYSLOG_FIREPHP_INCLUDEPATH . self::$firephp_class_path))
 		{
-			$errors[] = $langs->trans("ErrorFailedToOpenFile", 'FirePhp.php');
+			$errors[] = $langs->trans("ErrorFailedToOpenFile", self::$firephp_class_path);
 		}
 
-		set_include_path($oldinclude);
-
 		return $errors;
 	}
 
@@ -129,8 +148,8 @@ class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
 			// Warning FirePHPCore must be into PHP include path. It is not possible to use into require_once() a constant from
 			// database or config file because we must be able to log data before database or config file read.
 			$oldinclude=get_include_path();
-			set_include_path('/usr/share/php/');
-			include_once 'FirePHPCore/FirePHP.class.php';
+			set_include_path($conf->global->SYSLOG_FIREPHP_INCLUDEPATH);
+			include_once self::$firephp_class_path;
 			set_include_path($oldinclude);
 			ob_start();	// To be sure headers are not flushed until all page is completely processed
 			$firephp = FirePHP::getInstance(true);
-- 
GitLab