';
print '';
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index cfd952da7d5..eb9e15b2313 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -797,7 +797,8 @@ class CommandeFournisseur extends CommonOrder
if (! $error)
{
- $this->ref=$newref;
+ $this->ref = $this->newref;
+
if ($movetoapprovestatus) $this->statut = 2;
else $this->statut = 1;
if (empty($secondlevel)) // standard or first level approval
diff --git a/htdocs/includes/firephp/firephp-core/.gitignore b/htdocs/includes/firephp/firephp-core/.gitignore
deleted file mode 100644
index d16386367f7..00000000000
--- a/htdocs/includes/firephp/firephp-core/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-build/
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/CHANGELOG.md b/htdocs/includes/firephp/firephp-core/CHANGELOG.md
deleted file mode 100644
index d8b0f86df5b..00000000000
--- a/htdocs/includes/firephp/firephp-core/CHANGELOG.md
+++ /dev/null
@@ -1,171 +0,0 @@
-
-TODO:
-
- * Fix code indenting in PHP 4 code
- * Port maxDepth option to PHP 4 code
-
-2013-04-23 - Release Version: 0.4.0
-
- * No changes
-
-2011-06-22 - Release Version: 0.4.0rc3
-
- * Build fixes
-
-2011-06-20 - Release Version: 0.4.0rc1
-
- * (Issue 163) PHP5 class_exists() throws Exception without second parameter
- * (Issue 166) Non-utf8 array values replaced with null
- * Cleaned up code formatting [sokolov.innokenty@gmail.com]
- * Ensure JSON keys are never NULL (due to NULL key in some arrays)
- * Better UTF-8 encoding detection
- * Code style cleanup (qbbr)
- * Changed license to MIT
- * Refactored project
-
-2010-10-26 - Release Version: 0.3.2
-
-2010-10-12 - Release Version: 0.3.2rc6
-
- * (Issue 154) getRequestHeader uses "getallheaders" even though it doesn't always exist. [25m]
-
-2010-10-09 - Release Version: 0.3.2rc5
-
- * (Issue 153) FirePHP incorrectly double-encodes UTF8 when mbstring.func_overload is enabled
-
-2010-10-08 - Release Version: 0.3.2rc4
-
- * Trigger upgrade message if part of FirePHP 1.0
- * Removed FirePHP/Init.php inclusion logic and only load FirePHP.class.php if not already loaded
-
-2010-07-19 - Release Version: 0.3.2rc3
-
- * Fixed FirePHP/Init.php inclusion logic
-
-2010-07-19 - Release Version: 0.3.2rc2
-
- * (Issue 145) maxDepth option
- * Changed maxObjectDepth and maxArrayDepth option defaults to 5
- * Fixed code indentation
-
-2010-03-05 - Release Version: 0.3.2rc1
-
- * (Issue 114) Allow options to be passed on to basic logging wrappers
- * (Issue 122) Filter objectStack property of FirePHP class
- * (Issue 123) registerErrorHandler(false) by default
- * Added setOption() and getOption() methods
- * (Issue 117) dump() method argument validation
- * Started adding PHPUnit tests
- * Some refactoring to support unit testing
- * Deprecated setProcessorUrl() and setRendererUrl()
- * Check User-Agent and X-FirePHP-Version header to detect FirePHP on client
- * (Issue 135) FirePHP 0.4.3 with Firebug 1.5 changes user agent on the fly
- * (Issue 112) Error Predefined Constants Not available for PHP 5.x versions
-
-2008-06-14 - Release Version: 0.3.1
-
- * (Issue 108) ignore class name case in object filter
-
-2009-05-11 - Release Version: 0.3
-2009-05-01 - Release Version: 0.3.rc.1
-
- * (Issue 90) PHP4 compatible version of FirePHPCore
- * (Issue 98) Thrown exceptions don't send an HTTP 500 if the FirePHP exception handler is enabled
- * (Issue 85) Support associative arrays in encodeTable method in FirePHP.class.php
- * (Issue 66) Add a new getOptions() public method in API
- * (Issue 82) Define $this->options outside of __construct
- * (Issue 72) Message error if group name is null
- * (Issue 68) registerErrorHandler() and registerExceptionHandler() should returns previous handlers defined
- * (Issue 69) Add the missing register handler in the triumvirate (error, exception, assert)
- * (Issue 75) [Error & Exception Handling] Option to not exit script execution
- * (Issue 83) Exception handler can't throw exceptions
- * (Issue 80) Auto/Pre collapsing groups AND Custom group row colors
-
-2008-11-09 - Release Version: 0.2.1
-
- * (Issue 70) Problem when logging resources
-
-2008-10-21 - Release Version: 0.2.0
-
- * Updated version to 0.2.0
- * Switched to using __sleep instead of __wakeup
- * Added support to exclude object members when encoding
- * Add support to enable/disable logging
-
-2008-10-17 - Release Version: 0.2.b.8
-
- * New implementation for is_utf8()
- * (Issue 55) maxObjectDepth Option not working correctly when using TABLE and EXCEPTION Type
- * Bugfix for max[Object|Array]Depth when encoding nested array/object graphs
- * Bugfix for FB::setOptions()
-
-2008-10-16 - Release Version: 0.2.b.7
-
- * (Issue 45) Truncate dump when string have non utf8 cars
- * (Issue 52) logging will not work when firephp object gets stored in the session.
-
-2008-10-16 - Release Version: 0.2.b.6
-
- * (Issue 37) Display file and line information for each log message
- * (Issue 51) Limit output of object graphs
- * Bugfix for encoding object members set to NULL|false|''
-
-2008-10-14 - Release Version: 0.2.b.5
-
- * Updated JsonStream wildfire protocol to be more robust
- * (Issue 33) PHP error notices running demos
- * (Issue 48) Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given
-
-2008-10-08 - Release Version: 0.2.b.4
-
- * Bugfix for logging objects with recursion
-
-2008-10-08 - Release Version: 0.2.b.3
-
- * (Issue 43) Notice message in 0.2b2
- * Added support for PHP's native json_encode() if available
- * Revised object encoder to detect object recursion
-
-2008-10-07 - Release Version: 0.2.b.2
-
- * (Issue 28) Need solution for logging private and protected object variables
- * Added trace() and table() aliases in FirePHP class
- * (Issue 41) Use PHP doc in FirePHP
- * (Issue 39) Static logging method for object oriented API
-
-2008-10-01 - Release Version: 0.2.b.1
-
- * Added support for error and exception handling
- * Updated min PHP version for PEAR package to 5.2
- * Added version constant for library
- * Gave server library it's own wildfire plugin namespace
- * Migrated communication protocol to Wildfire JsonStream
- * Added support for console groups using "group" and "groupEnd"
- * Added support for log, info, warn and error logging aliases
- * (Issue 29) problem with TRACE when using with error_handler
- * (Issue 33) PHP error notices running demos
- * (Issue 12) undefined index php notice
- * Removed closing ?> php tags
- * (Issue 13) the code in the fb() function has a second return statement that will never be reached
-
-2008-07-30 - Release Version: 0.1.1.3
-
- * Include __className property in JSON string if variable was an object
- * Bugfix - Mis-spelt "Exception" in JSON encoding code
-
-2008-06-13 - Release Version: 0.1.1.1
-
- * Bugfix - Standardize windows paths in stack traces
- * Bugfix - Display correct stack trace info in windows environments
- * Bugfix - Check $_SERVER['HTTP_USER_AGENT'] before returning
-
-2008-06-13 - Release Version: 0.1.1
-
- * Added support for FirePHP::TRACE log style
- * Changed license to New BSD License
-
-2008-06-06 - Release Version: 0.0.2
-
- * Bugfix - Added usleep() to header writing loop to ensure unique index
- * Bugfix - Ensure chunk_split does not generate trailing "\n" with empty data header
- * Added support for FirePHP::TABLE log style
diff --git a/htdocs/includes/firephp/firephp-core/README.md b/htdocs/includes/firephp/firephp-core/README.md
deleted file mode 100644
index b1b32f842ff..00000000000
--- a/htdocs/includes/firephp/firephp-core/README.md
+++ /dev/null
@@ -1,75 +0,0 @@
-FirePHPCore
-===========
-
-**Status: stable**
-
-> **FirePHP is an advanced logging system that can display PHP variables in the browser as an application is navigated.**
-> All communication is out of band to the application meaning that the logging data will not interfere with the normal functioning of the application.
-
-This project contains the *FirePHPCore* PHP server library and provides a development environment (see `./workspace/`) for working on *FirePHPCore*.
-
-
-Usage
-=====
-
-See [Install/Traditional: FirePHPCore](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/Configuration/Traditional) in the
-[FirePHP 1.0 Documentation](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/).
-
-
-Testing
-=======
-
- cd tests
- phpunit .
-
-
-Support & Feedback
-==================
-
-See [Support](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/OpenSource#support) in the [FirePHP 1.0 Documentation](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/).
-
-
-Contribute
-==========
-
-See [Contribute](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/OpenSource#contribute) in the [FirePHP 1.0 Documentation](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/).
-
-
-Author
-======
-
-This project is authored and maintained by [Christoph Dorn](http://www.christophdorn.com/).
-
-
-Documentation License
-=====================
-
-[Creative Commons Attribution-NonCommercial-ShareAlike 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/)
-
-Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
-
-
-Code License
-============
-
-[MIT License](http://www.opensource.org/licenses/mit-license.php)
-
-Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/htdocs/includes/firephp/firephp-core/composer.json b/htdocs/includes/firephp/firephp-core/composer.json
deleted file mode 100644
index 7cab85a9f8b..00000000000
--- a/htdocs/includes/firephp/firephp-core/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "firephp/firephp-core",
- "description": "Traditional FirePHPCore library for sending PHP variables to the browser.",
- "type": "library",
- "homepage": "https://github.com/firephp/firephp-core",
- "license": "MIT",
- "authors": [
- {
- "name": "Christoph Dorn",
- "email": "christoph@christophdorn.com",
- "homepage": "http://christophdorn.com"
- }
- ],
- "support": {
- "forum": "http://groups.google.com/group/firephp-dev",
- "issues": "https://github.com/firephp/firephp-core/issues",
- "source": "https://github.com/firephp/firephp-core"
- },
- "autoload": {
- "classmap": [
- "lib/FirePHPCore/FirePHP.class.php",
- "lib/FirePHPCore/fb.php"
- ]
- }
-}
-
diff --git a/htdocs/includes/firephp/firephp-core/examples/oo.php b/htdocs/includes/firephp/firephp-core/examples/oo.php
deleted file mode 100644
index f5f39875c94..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/oo.php
+++ /dev/null
@@ -1,82 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/FirePHP.class.php');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-
-$firephp = FirePHP::getInstance(true);
-
-
-$firephp->fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-$firephp->fb('Log message' ,FirePHP::LOG);
-$firephp->fb('Info message' ,FirePHP::INFO);
-$firephp->fb('Warn message' ,FirePHP::WARN);
-$firephp->fb('Error message',FirePHP::ERROR);
-
-$firephp->fb('Message with label','Label',FirePHP::LOG);
-
-$firephp->fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP::LOG);
-
-function test($Arg1) {
- throw new Exception('Test Exception');
-}
-try {
- test(array('Hello'=>'World'));
-} catch(Exception $e) {
- /* Log exception including stack trace & variables */
- $firephp->fb($e);
-}
-
-$firephp->fb('Backtrace to here',FirePHP::TRACE);
-
-$firephp->fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP::TABLE);
-
-/* Will show only in "Server" tab for the request */
-$firephp->fb(apache_request_headers(),'RequestHeaders',FirePHP::DUMP);
-
-
-print 'Hello World';
diff --git a/htdocs/includes/firephp/firephp-core/examples/oo.php4 b/htdocs/includes/firephp/firephp-core/examples/oo.php4
deleted file mode 100644
index 75ec1ee3f9e..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/oo.php4
+++ /dev/null
@@ -1,72 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/FirePHP.class.php4');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-
-$firephp =& FirePHP::getInstance(true);
-
-
-$firephp->fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-$firephp->fb('Log message' ,FirePHP_LOG);
-$firephp->fb('Info message' ,FirePHP_INFO);
-$firephp->fb('Warn message' ,FirePHP_WARN);
-$firephp->fb('Error message',FirePHP_ERROR);
-
-$firephp->fb('Message with label','Label',FirePHP_LOG);
-
-$firephp->fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP_LOG);
-
-$firephp->fb('Backtrace to here',FirePHP_TRACE);
-
-$firephp->fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP_TABLE);
-
-/* Will show only in "Server" tab for the request */
-$firephp->fb(apache_request_headers(),'RequestHeaders',FirePHP_DUMP);
-
-
-print 'Hello World';
diff --git a/htdocs/includes/firephp/firephp-core/examples/procedural.php b/htdocs/includes/firephp/firephp-core/examples/procedural.php
deleted file mode 100644
index d1d3920bf4a..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/procedural.php
+++ /dev/null
@@ -1,79 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/fb.php');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-fb('Log message' ,FirePHP::LOG);
-fb('Info message' ,FirePHP::INFO);
-fb('Warn message' ,FirePHP::WARN);
-fb('Error message',FirePHP::ERROR);
-
-fb('Message with label','Label',FirePHP::LOG);
-
-fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP::LOG);
-
-function test($Arg1) {
- throw new Exception('Test Exception');
-}
-try {
- test(array('Hello'=>'World'));
-} catch(Exception $e) {
- /* Log exception including stack trace & variables */
- fb($e);
-}
-
-fb('Backtrace to here',FirePHP::TRACE);
-
-fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP::TABLE);
-
-/* Will show only in "Server" tab for the request */
-fb(apache_request_headers(),'RequestHeaders',FirePHP::DUMP);
-
-
-print 'Hello World';
-
diff --git a/htdocs/includes/firephp/firephp-core/examples/procedural.php4 b/htdocs/includes/firephp/firephp-core/examples/procedural.php4
deleted file mode 100644
index 28eb7dc17e8..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/procedural.php4
+++ /dev/null
@@ -1,69 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/fb.php');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-fb('Log message' ,FirePHP_LOG);
-fb('Info message' ,FirePHP_INFO);
-fb('Warn message' ,FirePHP_WARN);
-fb('Error message',FirePHP_ERROR);
-
-fb('Message with label','Label',FirePHP_LOG);
-
-fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP_LOG);
-
-fb('Backtrace to here',FirePHP_TRACE);
-
-fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP_TABLE);
-
-/* Will show only in "Server" tab for the request */
-fb(apache_request_headers(),'RequestHeaders',FirePHP_DUMP);
-
-
-print 'Hello World';
-
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php
deleted file mode 100644
index 65d83b56dca..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php
+++ /dev/null
@@ -1,1828 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Sokolov Innokenty , Copyright 2011, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/**
- * *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-/**
- * @see http://code.google.com/p/firephp/issues/detail?id=112
- */
-if (!defined('E_STRICT')) {
- define('E_STRICT', 2048);
-}
-if (!defined('E_RECOVERABLE_ERROR')) {
- define('E_RECOVERABLE_ERROR', 4096);
-}
-if (!defined('E_DEPRECATED')) {
- define('E_DEPRECATED', 8192);
-}
-if (!defined('E_USER_DEPRECATED')) {
- define('E_USER_DEPRECATED', 16384);
-}
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * For more information see: http://www.firephp.org/
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-class FirePHP {
-
- /**
- * FirePHP version
- *
- * @var string
- */
- const VERSION = '0.3'; // @pinf replace '0.3' with '%%VERSION%%'
-
- /**
- * Firebug LOG level
- *
- * Logs a message to firebug console.
- *
- * @var string
- */
- const LOG = 'LOG';
-
- /**
- * Firebug INFO level
- *
- * Logs a message to firebug console and displays an info icon before the message.
- *
- * @var string
- */
- const INFO = 'INFO';
-
- /**
- * Firebug WARN level
- *
- * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise.
- *
- * @var string
- */
- const WARN = 'WARN';
-
- /**
- * Firebug ERROR level
- *
- * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
- *
- * @var string
- */
- const ERROR = 'ERROR';
-
- /**
- * Dumps a variable to firebug's server panel
- *
- * @var string
- */
- const DUMP = 'DUMP';
-
- /**
- * Displays a stack trace in firebug console
- *
- * @var string
- */
- const TRACE = 'TRACE';
-
- /**
- * Displays an exception in firebug console
- *
- * Increments the firebug error count.
- *
- * @var string
- */
- const EXCEPTION = 'EXCEPTION';
-
- /**
- * Displays an table in firebug console
- *
- * @var string
- */
- const TABLE = 'TABLE';
-
- /**
- * Starts a group in firebug console
- *
- * @var string
- */
- const GROUP_START = 'GROUP_START';
-
- /**
- * Ends a group in firebug console
- *
- * @var string
- */
- const GROUP_END = 'GROUP_END';
-
- /**
- * Singleton instance of FirePHP
- *
- * @var FirePHP
- */
- protected static $instance = null;
-
- /**
- * Flag whether we are logging from within the exception handler
- *
- * @var boolean
- */
- protected $inExceptionHandler = false;
-
- /**
- * Flag whether to throw PHP errors that have been converted to ErrorExceptions
- *
- * @var boolean
- */
- protected $throwErrorExceptions = true;
-
- /**
- * Flag whether to convert PHP assertion errors to Exceptions
- *
- * @var boolean
- */
- protected $convertAssertionErrorsToExceptions = true;
-
- /**
- * Flag whether to throw PHP assertion errors that have been converted to Exceptions
- *
- * @var boolean
- */
- protected $throwAssertionExceptions = false;
-
- /**
- * Wildfire protocol message index
- *
- * @var integer
- */
- protected $messageIndex = 1;
-
- /**
- * Options for the library
- *
- * @var array
- */
- protected $options = array('maxDepth' => 10,
- 'maxObjectDepth' => 5,
- 'maxArrayDepth' => 5,
- 'useNativeJsonEncode' => true,
- 'includeLineNumbers' => true);
-
- /**
- * Filters used to exclude object members when encoding
- *
- * @var array
- */
- protected $objectFilters = array(
- 'firephp' => array('objectStack', 'instance', 'json_objectStack'),
- 'firephp_test_class' => array('objectStack', 'instance', 'json_objectStack')
- );
-
- /**
- * A stack of objects used to detect recursion during object encoding
- *
- * @var object
- */
- protected $objectStack = array();
-
- /**
- * Flag to enable/disable logging
- *
- * @var boolean
- */
- protected $enabled = true;
-
- /**
- * The insight console to log to if applicable
- *
- * @var object
- */
- protected $logToInsightConsole = null;
-
- /**
- * When the object gets serialized only include specific object members.
- *
- * @return array
- */
- public function __sleep()
- {
- return array('options', 'objectFilters', 'enabled');
- }
-
- /**
- * Gets singleton instance of FirePHP
- *
- * @param boolean $autoCreate
- * @return FirePHP
- */
- public static function getInstance($autoCreate = false)
- {
- if ($autoCreate === true && !self::$instance) {
- self::init();
- }
- return self::$instance;
- }
-
- /**
- * Creates FirePHP object and stores it for singleton access
- *
- * @return FirePHP
- */
- public static function init()
- {
- return self::setInstance(new self());
- }
-
- /**
- * Set the instance of the FirePHP singleton
- *
- * @param FirePHP $instance The FirePHP object instance
- * @return FirePHP
- */
- public static function setInstance($instance)
- {
- return self::$instance = $instance;
- }
-
- /**
- * Set an Insight console to direct all logging calls to
- *
- * @param object $console The console object to log to
- * @return void
- */
- public function setLogToInsightConsole($console)
- {
- if (is_string($console)) {
- if (get_class($this) != 'FirePHP_Insight' && !is_subclass_of($this, 'FirePHP_Insight')) {
- throw new Exception('FirePHP instance not an instance or subclass of FirePHP_Insight!');
- }
- $this->logToInsightConsole = $this->to('request')->console($console);
- } else {
- $this->logToInsightConsole = $console;
- }
- }
-
- /**
- * Enable and disable logging to Firebug
- *
- * @param boolean $enabled TRUE to enable, FALSE to disable
- * @return void
- */
- public function setEnabled($enabled)
- {
- $this->enabled = $enabled;
- }
-
- /**
- * Check if logging is enabled
- *
- * @return boolean TRUE if enabled
- */
- public function getEnabled()
- {
- return $this->enabled;
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @param string $class The class name of the object
- * @param array $filter An array of members to exclude
- * @return void
- */
- public function setObjectFilter($class, $filter)
- {
- $this->objectFilters[strtolower($class)] = $filter;
- }
-
- /**
- * Set some options for the library
- *
- * Options:
- * - maxDepth: The maximum depth to traverse (default: 10)
- * - maxObjectDepth: The maximum depth to traverse objects (default: 5)
- * - maxArrayDepth: The maximum depth to traverse arrays (default: 5)
- * - useNativeJsonEncode: If true will use json_encode() (default: true)
- * - includeLineNumbers: If true will include line numbers and filenames (default: true)
- *
- * @param array $options The options to be set
- * @return void
- */
- public function setOptions($options)
- {
- $this->options = array_merge($this->options, $options);
- }
-
- /**
- * Get options from the library
- *
- * @return array The currently set options
- */
- public function getOptions()
- {
- return $this->options;
- }
-
- /**
- * Set an option for the library
- *
- * @param string $name
- * @param mixed $value
- * @return void
- * @throws Exception
- */
- public function setOption($name, $value)
- {
- if (!isset($this->options[$name])) {
- throw $this->newException('Unknown option: ' . $name);
- }
- $this->options[$name] = $value;
- }
-
- /**
- * Get an option from the library
- *
- * @param string $name
- * @return mixed
- * @throws Exception
- */
- public function getOption($name)
- {
- if (!isset($this->options[$name])) {
- throw $this->newException('Unknown option: ' . $name);
- }
- return $this->options[$name];
- }
-
- /**
- * Register FirePHP as your error handler
- *
- * Will throw exceptions for each php error.
- *
- * @return mixed Returns a string containing the previously defined error handler (if any)
- */
- public function registerErrorHandler($throwErrorExceptions = false)
- {
- //NOTE: The following errors will not be caught by this error handler:
- // E_ERROR, E_PARSE, E_CORE_ERROR,
- // E_CORE_WARNING, E_COMPILE_ERROR,
- // E_COMPILE_WARNING, E_STRICT
-
- $this->throwErrorExceptions = $throwErrorExceptions;
-
- return set_error_handler(array($this, 'errorHandler'));
- }
-
- /**
- * FirePHP's error handler
- *
- * Throws exception for each php error that will occur.
- *
- * @param integer $errno
- * @param string $errstr
- * @param string $errfile
- * @param integer $errline
- * @param array $errcontext
- */
- public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
- {
- // Don't throw exception if error reporting is switched off
- if (error_reporting() == 0) {
- return;
- }
- // Only throw exceptions for errors we are asking for
- if (error_reporting() & $errno) {
-
- $exception = new ErrorException($errstr, 0, $errno, $errfile, $errline);
- if ($this->throwErrorExceptions) {
- throw $exception;
- } else {
- $this->fb($exception);
- }
- }
- }
-
- /**
- * Register FirePHP as your exception handler
- *
- * @return mixed Returns the name of the previously defined exception handler,
- * or NULL on error.
- * If no previous handler was defined, NULL is also returned.
- */
- public function registerExceptionHandler()
- {
- return set_exception_handler(array($this, 'exceptionHandler'));
- }
-
- /**
- * FirePHP's exception handler
- *
- * Logs all exceptions to your firebug console and then stops the script.
- *
- * @param Exception $exception
- * @throws Exception
- */
- function exceptionHandler($exception)
- {
- $this->inExceptionHandler = true;
-
- header('HTTP/1.1 500 Internal Server Error');
-
- try {
- $this->fb($exception);
- } catch (Exception $e) {
- echo 'We had an exception: ' . $e;
- }
-
- $this->inExceptionHandler = false;
- }
-
- /**
- * Register FirePHP driver as your assert callback
- *
- * @param boolean $convertAssertionErrorsToExceptions
- * @param boolean $throwAssertionExceptions
- * @return mixed Returns the original setting or FALSE on errors
- */
- public function registerAssertionHandler($convertAssertionErrorsToExceptions = true, $throwAssertionExceptions = false)
- {
- $this->convertAssertionErrorsToExceptions = $convertAssertionErrorsToExceptions;
- $this->throwAssertionExceptions = $throwAssertionExceptions;
-
- if ($throwAssertionExceptions && !$convertAssertionErrorsToExceptions) {
- throw $this->newException('Cannot throw assertion exceptions as assertion errors are not being converted to exceptions!');
- }
-
- return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
- }
-
- /**
- * FirePHP's assertion handler
- *
- * Logs all assertions to your firebug console and then stops the script.
- *
- * @param string $file File source of assertion
- * @param integer $line Line source of assertion
- * @param mixed $code Assertion code
- */
- public function assertionHandler($file, $line, $code)
- {
- if ($this->convertAssertionErrorsToExceptions) {
-
- $exception = new ErrorException('Assertion Failed - Code[ ' . $code . ' ]', 0, null, $file, $line);
-
- if ($this->throwAssertionExceptions) {
- throw $exception;
- } else {
- $this->fb($exception);
- }
-
- } else {
- $this->fb($code, 'Assertion Failed', FirePHP::ERROR, array('File' => $file, 'Line' => $line));
- }
- }
-
- /**
- * Start a group for following messages.
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $name
- * @param array $options OPTIONAL Instructions on how to log the group
- * @return true
- * @throws Exception
- */
- public function group($name, $options = null)
- {
-
- if (!$name) {
- throw $this->newException('You must specify a label for the group!');
- }
-
- if ($options) {
- if (!is_array($options)) {
- throw $this->newException('Options must be defined as an array!');
- }
- if (array_key_exists('Collapsed', $options)) {
- $options['Collapsed'] = ($options['Collapsed']) ? 'true' : 'false';
- }
- }
-
- return $this->fb(null, $name, FirePHP::GROUP_START, $options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- * @throws Exception
- */
- public function groupEnd()
- {
- return $this->fb(null, null, FirePHP::GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function log($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::LOG, $options);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function info($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::INFO, $options);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function warn($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::WARN, $options);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function error($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::ERROR, $options);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $key
- * @param mixed $variable
- * @return true
- * @throws Exception
- */
- public function dump($key, $variable, $options = array())
- {
- if (!is_string($key)) {
- throw $this->newException('Key passed to dump() is not a string');
- }
- if (strlen($key) > 100) {
- throw $this->newException('Key passed to dump() is longer than 100 characters');
- }
- if (!preg_match_all('/^[a-zA-Z0-9-_\.:]*$/', $key, $m)) {
- throw $this->newException('Key passed to dump() contains invalid characters [a-zA-Z0-9-_\.:]');
- }
- return $this->fb($variable, $key, FirePHP::DUMP, $options);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function trace($label)
- {
- return $this->fb($label, FirePHP::TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $label
- * @param string $table
- * @return true
- * @throws Exception
- */
- public function table($label, $table, $options = array())
- {
- return $this->fb($table, $label, FirePHP::TABLE, $options);
- }
-
- /**
- * Insight API wrapper
- *
- * @see Insight_Helper::to()
- */
- public static function to()
- {
- $instance = self::getInstance();
- if (!method_exists($instance, '_to')) {
- throw new Exception('FirePHP::to() implementation not loaded');
- }
- $args = func_get_args();
- return call_user_func_array(array($instance, '_to'), $args);
- }
-
- /**
- * Insight API wrapper
- *
- * @see Insight_Helper::plugin()
- */
- public static function plugin()
- {
- $instance = self::getInstance();
- if (!method_exists($instance, '_plugin')) {
- throw new Exception('FirePHP::plugin() implementation not loaded');
- }
- $args = func_get_args();
- return call_user_func_array(array($instance, '_plugin'), $args);
- }
-
- /**
- * Check if FirePHP is installed on client
- *
- * @return boolean
- */
- public function detectClientExtension()
- {
- // Check if FirePHP is installed on client via User-Agent header
- if (@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si', $this->getUserAgent(), $m) &&
- version_compare($m[1][0], '0.0.6', '>=')) {
- return true;
- } else
- // Check if FirePHP is installed on client via X-FirePHP-Version header
- if (@preg_match_all('/^([\.\d]*)$/si', $this->getRequestHeader('X-FirePHP-Version'), $m) &&
- version_compare($m[1][0], '0.0.6', '>=')) {
- return true;
- }
- return false;
- }
-
- /**
- * Log varible to Firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $object The variable to be logged
- * @return boolean Return TRUE if message was added to headers, FALSE otherwise
- * @throws Exception
- */
- public function fb($object)
- {
- if ($this instanceof FirePHP_Insight && method_exists($this, '_logUpgradeClientMessage')) {
- if (!FirePHP_Insight::$upgradeClientMessageLogged) { // avoid infinite recursion as _logUpgradeClientMessage() logs a message
- $this->_logUpgradeClientMessage();
- }
- }
-
- static $insightGroupStack = array();
-
- if (!$this->getEnabled()) {
- return false;
- }
-
- if ($this->headersSent($filename, $linenum)) {
- // If we are logging from within the exception handler we cannot throw another exception
- if ($this->inExceptionHandler) {
- // Simply echo the error out to the page
- echo '
FirePHP ERROR: Headers already sent in ' . $filename . ' on line ' . $linenum . '. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.
';
- } else {
- throw $this->newException('Headers already sent in ' . $filename . ' on line ' . $linenum . '. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
- }
- }
-
- $type = null;
- $label = null;
- $options = array();
-
- if (func_num_args() == 1) {
- } else if (func_num_args() == 2) {
- switch (func_get_arg(1)) {
- case self::LOG:
- case self::INFO:
- case self::WARN:
- case self::ERROR:
- case self::DUMP:
- case self::TRACE:
- case self::EXCEPTION:
- case self::TABLE:
- case self::GROUP_START:
- case self::GROUP_END:
- $type = func_get_arg(1);
- break;
- default:
- $label = func_get_arg(1);
- break;
- }
- } else if (func_num_args() == 3) {
- $type = func_get_arg(2);
- $label = func_get_arg(1);
- } else if (func_num_args() == 4) {
- $type = func_get_arg(2);
- $label = func_get_arg(1);
- $options = func_get_arg(3);
- } else {
- throw $this->newException('Wrong number of arguments to fb() function!');
- }
-
- if ($this->logToInsightConsole !== null && (get_class($this) == 'FirePHP_Insight' || is_subclass_of($this, 'FirePHP_Insight'))) {
- $trace = debug_backtrace();
- if (!$trace) return false;
- for ($i = 0; $i < sizeof($trace); $i++) {
- if (isset($trace[$i]['class'])) {
- if ($trace[$i]['class'] == 'FirePHP' || $trace[$i]['class'] == 'FB') {
- continue;
- }
- }
- if (isset($trace[$i]['file'])) {
- $path = $this->_standardizePath($trace[$i]['file']);
- if (substr($path, -18, 18) == 'FirePHPCore/fb.php' || substr($path, -29, 29) == 'FirePHPCore/FirePHP.class.php') {
- continue;
- }
- }
- if (isset($trace[$i]['function']) && $trace[$i]['function'] == 'fb' &&
- isset($trace[$i - 1]['file']) && substr($this->_standardizePath($trace[$i - 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- continue;
- }
- if (isset($trace[$i]['class']) && $trace[$i]['class'] == 'FB' &&
- isset($trace[$i - 1]['file']) && substr($this->_standardizePath($trace[$i - 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- continue;
- }
- break;
- }
- // adjust trace offset
- $msg = $this->logToInsightConsole->option('encoder.trace.offsetAdjustment', $i);
-
- if ($object instanceof Exception) {
- $type = self::EXCEPTION;
- }
- if ($label && $type != self::TABLE && $type != self::GROUP_START) {
- $msg = $msg->label($label);
- }
- switch ($type) {
- case self::DUMP:
- case self::LOG:
- return $msg->log($object);
- case self::INFO:
- return $msg->info($object);
- case self::WARN:
- return $msg->warn($object);
- case self::ERROR:
- return $msg->error($object);
- case self::TRACE:
- return $msg->trace($object);
- case self::EXCEPTION:
- return $this->plugin('error')->handleException($object, $msg);
- case self::TABLE:
- if (isset($object[0]) && !is_string($object[0]) && $label) {
- $object = array($label, $object);
- }
- return $msg->table($object[0], array_slice($object[1], 1), $object[1][0]);
- case self::GROUP_START:
- $insightGroupStack[] = $msg->group(md5($label))->open();
- return $msg->log($label);
- case self::GROUP_END:
- if (count($insightGroupStack) == 0) {
- throw new Error('Too many groupEnd() as opposed to group() calls!');
- }
- $group = array_pop($insightGroupStack);
- return $group->close();
- default:
- return $msg->log($object);
- }
- }
-
- if (!$this->detectClientExtension()) {
- return false;
- }
-
- $meta = array();
- $skipFinalObjectEncode = false;
-
- if ($object instanceof Exception) {
-
- $meta['file'] = $this->_escapeTraceFile($object->getFile());
- $meta['line'] = $object->getLine();
-
- $trace = $object->getTrace();
- if ($object instanceof ErrorException
- && isset($trace[0]['function'])
- && $trace[0]['function'] == 'errorHandler'
- && isset($trace[0]['class'])
- && $trace[0]['class'] == 'FirePHP') {
-
- $severity = false;
- switch ($object->getSeverity()) {
- case E_WARNING:
- $severity = 'E_WARNING';
- break;
-
- case E_NOTICE:
- $severity = 'E_NOTICE';
- break;
-
- case E_USER_ERROR:
- $severity = 'E_USER_ERROR';
- break;
-
- case E_USER_WARNING:
- $severity = 'E_USER_WARNING';
- break;
-
- case E_USER_NOTICE:
- $severity = 'E_USER_NOTICE';
- break;
-
- case E_STRICT:
- $severity = 'E_STRICT';
- break;
-
- case E_RECOVERABLE_ERROR:
- $severity = 'E_RECOVERABLE_ERROR';
- break;
-
- case E_DEPRECATED:
- $severity = 'E_DEPRECATED';
- break;
-
- case E_USER_DEPRECATED:
- $severity = 'E_USER_DEPRECATED';
- break;
- }
-
- $object = array('Class' => get_class($object),
- 'Message' => $severity . ': ' . $object->getMessage(),
- 'File' => $this->_escapeTraceFile($object->getFile()),
- 'Line' => $object->getLine(),
- 'Type' => 'trigger',
- 'Trace' => $this->_escapeTrace(array_splice($trace, 2)));
- $skipFinalObjectEncode = true;
- } else {
- $object = array('Class' => get_class($object),
- 'Message' => $object->getMessage(),
- 'File' => $this->_escapeTraceFile($object->getFile()),
- 'Line' => $object->getLine(),
- 'Type' => 'throw',
- 'Trace' => $this->_escapeTrace($trace));
- $skipFinalObjectEncode = true;
- }
- $type = self::EXCEPTION;
-
- } else if ($type == self::TRACE) {
-
- $trace = debug_backtrace();
- if (!$trace) return false;
- for ($i = 0; $i < sizeof($trace); $i++) {
-
- if (isset($trace[$i]['class'])
- && isset($trace[$i]['file'])
- && ($trace[$i]['class'] == 'FirePHP'
- || $trace[$i]['class'] == 'FB')
- && (substr($this->_standardizePath($trace[$i]['file']), -18, 18) == 'FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']), -29, 29) == 'FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if (isset($trace[$i]['class'])
- && isset($trace[$i+1]['file'])
- && $trace[$i]['class'] == 'FirePHP'
- && substr($this->_standardizePath($trace[$i + 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if ($trace[$i]['function'] == 'fb'
- || $trace[$i]['function'] == 'trace'
- || $trace[$i]['function'] == 'send') {
-
- $object = array('Class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : '',
- 'Type' => isset($trace[$i]['type']) ? $trace[$i]['type'] : '',
- 'Function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : '',
- 'Message' => $trace[$i]['args'][0],
- 'File' => isset($trace[$i]['file']) ? $this->_escapeTraceFile($trace[$i]['file']) : '',
- 'Line' => isset($trace[$i]['line']) ? $trace[$i]['line'] : '',
- 'Args' => isset($trace[$i]['args']) ? $this->encodeObject($trace[$i]['args']) : '',
- 'Trace' => $this->_escapeTrace(array_splice($trace, $i + 1)));
-
- $skipFinalObjectEncode = true;
- $meta['file'] = isset($trace[$i]['file']) ? $this->_escapeTraceFile($trace[$i]['file']) : '';
- $meta['line'] = isset($trace[$i]['line']) ? $trace[$i]['line'] : '';
- break;
- }
- }
-
- } else
- if ($type == self::TABLE) {
-
- if (isset($object[0]) && is_string($object[0])) {
- $object[1] = $this->encodeTable($object[1]);
- } else {
- $object = $this->encodeTable($object);
- }
-
- $skipFinalObjectEncode = true;
-
- } else if ($type == self::GROUP_START) {
-
- if (!$label) {
- throw $this->newException('You must specify a label for the group!');
- }
-
- } else {
- if ($type === null) {
- $type = self::LOG;
- }
- }
-
- if ($this->options['includeLineNumbers']) {
- if (!isset($meta['file']) || !isset($meta['line'])) {
-
- $trace = debug_backtrace();
- for ($i = 0; $trace && $i < sizeof($trace); $i++) {
-
- if (isset($trace[$i]['class'])
- && isset($trace[$i]['file'])
- && ($trace[$i]['class'] == 'FirePHP'
- || $trace[$i]['class'] == 'FB')
- && (substr($this->_standardizePath($trace[$i]['file']), -18, 18) == 'FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']), -29, 29) == 'FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if (isset($trace[$i]['class'])
- && isset($trace[$i + 1]['file'])
- && $trace[$i]['class'] == 'FirePHP'
- && substr($this->_standardizePath($trace[$i + 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if (isset($trace[$i]['file'])
- && substr($this->_standardizePath($trace[$i]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- /* Skip FB::fb() */
- } else {
- $meta['file'] = isset($trace[$i]['file']) ? $this->_escapeTraceFile($trace[$i]['file']) : '';
- $meta['line'] = isset($trace[$i]['line']) ? $trace[$i]['line'] : '';
- break;
- }
- }
- }
- } else {
- unset($meta['file']);
- unset($meta['line']);
- }
-
- $this->setHeader('X-Wf-Protocol-1', 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
- $this->setHeader('X-Wf-1-Plugin-1', 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/' . self::VERSION);
-
- $structureIndex = 1;
- if ($type == self::DUMP) {
- $structureIndex = 2;
- $this->setHeader('X-Wf-1-Structure-2', 'http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
- } else {
- $this->setHeader('X-Wf-1-Structure-1', 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
- }
-
- if ($type == self::DUMP) {
- $msg = '{"' . $label . '":' . $this->jsonEncode($object, $skipFinalObjectEncode) . '}';
- } else {
- $msgMeta = $options;
- $msgMeta['Type'] = $type;
- if ($label !== null) {
- $msgMeta['Label'] = $label;
- }
- if (isset($meta['file']) && !isset($msgMeta['File'])) {
- $msgMeta['File'] = $meta['file'];
- }
- if (isset($meta['line']) && !isset($msgMeta['Line'])) {
- $msgMeta['Line'] = $meta['line'];
- }
- $msg = '[' . $this->jsonEncode($msgMeta) . ',' . $this->jsonEncode($object, $skipFinalObjectEncode) . ']';
- }
-
- $parts = explode("\n", chunk_split($msg, 5000, "\n"));
-
- for ($i = 0; $i < count($parts); $i++) {
-
- $part = $parts[$i];
- if ($part) {
-
- if (count($parts) > 2) {
- // Message needs to be split into multiple parts
- $this->setHeader('X-Wf-1-' . $structureIndex . '-' . '1-' . $this->messageIndex,
- (($i == 0) ? strlen($msg) : '')
- . '|' . $part . '|'
- . (($i < count($parts) - 2) ? '\\' : ''));
- } else {
- $this->setHeader('X-Wf-1-' . $structureIndex . '-' . '1-' . $this->messageIndex,
- strlen($part) . '|' . $part . '|');
- }
-
- $this->messageIndex++;
-
- if ($this->messageIndex > 99999) {
- throw $this->newException('Maximum number (99,999) of messages reached!');
- }
- }
- }
-
- $this->setHeader('X-Wf-1-Index', $this->messageIndex - 1);
-
- return true;
- }
-
- /**
- * Standardizes path for windows systems.
- *
- * @param string $path
- * @return string
- */
- protected function _standardizePath($path)
- {
- return preg_replace('/\\\\+/', '/', $path);
- }
-
- /**
- * Escape trace path for windows systems
- *
- * @param array $trace
- * @return array
- */
- protected function _escapeTrace($trace)
- {
- if (!$trace) return $trace;
- for ($i = 0; $i < sizeof($trace); $i++) {
- if (isset($trace[$i]['file'])) {
- $trace[$i]['file'] = $this->_escapeTraceFile($trace[$i]['file']);
- }
- if (isset($trace[$i]['args'])) {
- $trace[$i]['args'] = $this->encodeObject($trace[$i]['args']);
- }
- }
- return $trace;
- }
-
- /**
- * Escape file information of trace for windows systems
- *
- * @param string $file
- * @return string
- */
- protected function _escapeTraceFile($file)
- {
- /* Check if we have a windows filepath */
- if (strpos($file, '\\')) {
- /* First strip down to single \ */
-
- $file = preg_replace('/\\\\+/', '\\', $file);
-
- return $file;
- }
- return $file;
- }
-
- /**
- * Check if headers have already been sent
- *
- * @param string $filename
- * @param integer $linenum
- */
- protected function headersSent(&$filename, &$linenum)
- {
- return headers_sent($filename, $linenum);
- }
-
- /**
- * Send header
- *
- * @param string $name
- * @param string $value
- */
- protected function setHeader($name, $value)
- {
- return header($name . ': ' . $value);
- }
-
- /**
- * Get user agent
- *
- * @return string|false
- */
- protected function getUserAgent()
- {
- if (!isset($_SERVER['HTTP_USER_AGENT'])) return false;
- return $_SERVER['HTTP_USER_AGENT'];
- }
-
- /**
- * Get all request headers
- *
- * @return array
- */
- public static function getAllRequestHeaders()
- {
- static $_cachedHeaders = false;
- if ($_cachedHeaders !== false) {
- return $_cachedHeaders;
- }
- $headers = array();
- if (function_exists('getallheaders')) {
- foreach (getallheaders() as $name => $value) {
- $headers[strtolower($name)] = $value;
- }
- } else {
- foreach ($_SERVER as $name => $value) {
- if (substr($name, 0, 5) == 'HTTP_') {
- $headers[strtolower(str_replace(' ', '-', str_replace('_', ' ', substr($name, 5))))] = $value;
- }
- }
- }
- return $_cachedHeaders = $headers;
- }
-
- /**
- * Get a request header
- *
- * @return string|false
- */
- protected function getRequestHeader($name)
- {
- $headers = self::getAllRequestHeaders();
- if (isset($headers[strtolower($name)])) {
- return $headers[strtolower($name)];
- }
- return false;
- }
-
- /**
- * Returns a new exception
- *
- * @param string $message
- * @return Exception
- */
- protected function newException($message)
- {
- return new Exception($message);
- }
-
- /**
- * Encode an object into a JSON string
- *
- * Uses PHP's jeson_encode() if available
- *
- * @param object $object The object to be encoded
- * @param boolean $skipObjectEncode
- * @return string The JSON string
- */
- public function jsonEncode($object, $skipObjectEncode = false)
- {
- if (!$skipObjectEncode) {
- $object = $this->encodeObject($object);
- }
-
- if (function_exists('json_encode')
- && $this->options['useNativeJsonEncode'] != false) {
-
- return json_encode($object);
- } else {
- return $this->json_encode($object);
- }
- }
-
- /**
- * Encodes a table by encoding each row and column with encodeObject()
- *
- * @param array $table The table to be encoded
- * @return array
- */
- protected function encodeTable($table)
- {
- if (!$table) return $table;
-
- $newTable = array();
- foreach ($table as $row) {
-
- if (is_array($row)) {
- $newRow = array();
-
- foreach ($row as $item) {
- $newRow[] = $this->encodeObject($item);
- }
-
- $newTable[] = $newRow;
- }
- }
-
- return $newTable;
- }
-
- /**
- * Encodes an object including members with
- * protected and private visibility
- *
- * @param object $object The object to be encoded
- * @param integer $Depth The current traversal depth
- * @return array All members of the object
- */
- protected function encodeObject($object, $objectDepth = 1, $arrayDepth = 1, $maxDepth = 1)
- {
- if ($maxDepth > $this->options['maxDepth']) {
- return '** Max Depth (' . $this->options['maxDepth'] . ') **';
- }
-
- $return = array();
-
- if (is_resource($object)) {
-
- return '** ' . (string) $object . ' **';
-
- } else if (is_object($object)) {
-
- if ($objectDepth > $this->options['maxObjectDepth']) {
- return '** Max Object Depth (' . $this->options['maxObjectDepth'] . ') **';
- }
-
- foreach ($this->objectStack as $refVal) {
- if ($refVal === $object) {
- return '** Recursion (' . get_class($object) . ') **';
- }
- }
- array_push($this->objectStack, $object);
-
- $return['__className'] = $class = get_class($object);
- $classLower = strtolower($class);
-
- $reflectionClass = new ReflectionClass($class);
- $properties = array();
- foreach ($reflectionClass->getProperties() as $property) {
- $properties[$property->getName()] = $property;
- }
-
- $members = (array)$object;
-
- foreach ($properties as $plainName => $property) {
-
- $name = $rawName = $plainName;
- if ($property->isStatic()) {
- $name = 'static:' . $name;
- }
- if ($property->isPublic()) {
- $name = 'public:' . $name;
- } else if ($property->isPrivate()) {
- $name = 'private:' . $name;
- $rawName = "\0" . $class . "\0" . $rawName;
- } else if ($property->isProtected()) {
- $name = 'protected:' . $name;
- $rawName = "\0" . '*' . "\0" . $rawName;
- }
-
- if (!(isset($this->objectFilters[$classLower])
- && is_array($this->objectFilters[$classLower])
- && in_array($plainName, $this->objectFilters[$classLower]))) {
-
- if (array_key_exists($rawName, $members) && !$property->isStatic()) {
- $return[$name] = $this->encodeObject($members[$rawName], $objectDepth + 1, 1, $maxDepth + 1);
- } else {
- if (method_exists($property, 'setAccessible')) {
- $property->setAccessible(true);
- $return[$name] = $this->encodeObject($property->getValue($object), $objectDepth + 1, 1, $maxDepth + 1);
- } else
- if ($property->isPublic()) {
- $return[$name] = $this->encodeObject($property->getValue($object), $objectDepth + 1, 1, $maxDepth + 1);
- } else {
- $return[$name] = '** Need PHP 5.3 to get value **';
- }
- }
- } else {
- $return[$name] = '** Excluded by Filter **';
- }
- }
-
- // Include all members that are not defined in the class
- // but exist in the object
- foreach ($members as $rawName => $value) {
-
- $name = $rawName;
-
- if ($name{0} == "\0") {
- $parts = explode("\0", $name);
- $name = $parts[2];
- }
-
- $plainName = $name;
-
- if (!isset($properties[$name])) {
- $name = 'undeclared:' . $name;
-
- if (!(isset($this->objectFilters[$classLower])
- && is_array($this->objectFilters[$classLower])
- && in_array($plainName, $this->objectFilters[$classLower]))) {
-
- $return[$name] = $this->encodeObject($value, $objectDepth + 1, 1, $maxDepth + 1);
- } else {
- $return[$name] = '** Excluded by Filter **';
- }
- }
- }
-
- array_pop($this->objectStack);
-
- } elseif (is_array($object)) {
-
- if ($arrayDepth > $this->options['maxArrayDepth']) {
- return '** Max Array Depth (' . $this->options['maxArrayDepth'] . ') **';
- }
-
- foreach ($object as $key => $val) {
-
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if ($key == 'GLOBALS'
- && is_array($val)
- && array_key_exists('GLOBALS', $val)) {
- $val['GLOBALS'] = '** Recursion (GLOBALS) **';
- }
-
- if (!$this->is_utf8($key)) {
- $key = utf8_encode($key);
- }
-
- $return[$key] = $this->encodeObject($val, 1, $arrayDepth + 1, $maxDepth + 1);
- }
- } else {
- if ($this->is_utf8($object)) {
- return $object;
- } else {
- return utf8_encode($object);
- }
- }
- return $return;
- }
-
- /**
- * Returns true if $string is valid UTF-8 and false otherwise.
- *
- * @param mixed $str String to be tested
- * @return boolean
- */
- protected function is_utf8($str)
- {
- if (function_exists('mb_detect_encoding')) {
- return (
- mb_detect_encoding($str, 'UTF-8', true) == 'UTF-8' &&
- ($str === null || $this->jsonEncode($str, true) !== 'null')
- );
- }
- $c = 0;
- $b = 0;
- $bits = 0;
- $len = strlen($str);
- for ($i = 0; $i < $len; $i++) {
- $c = ord($str[$i]);
- if ($c > 128) {
- if (($c >= 254)) return false;
- elseif ($c >= 252) $bits = 6;
- elseif ($c >= 248) $bits = 5;
- elseif ($c >= 240) $bits = 4;
- elseif ($c >= 224) $bits = 3;
- elseif ($c >= 192) $bits = 2;
- else return false;
- if (($i + $bits) > $len) return false;
- while($bits > 1) {
- $i++;
- $b = ord($str[$i]);
- if ($b < 128 || $b > 191) return false;
- $bits--;
- }
- }
- }
- return ($str === null || $this->jsonEncode($str, true) !== 'null');
- }
-
- /**
- * Converts to and from JSON format.
- *
- * JSON (JavaScript Object Notation) is a lightweight data-interchange
- * format. It is easy for humans to read and write. It is easy for machines
- * to parse and generate. It is based on a subset of the JavaScript
- * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- * This feature can also be found in Python. JSON is a text format that is
- * completely language independent but uses conventions that are familiar
- * to programmers of the C-family of languages, including C, C++, C#, Java,
- * JavaScript, Perl, TCL, and many others. These properties make JSON an
- * ideal data-interchange language.
- *
- * This package provides a simple encoder and decoder for JSON notation. It
- * is intended for use with client-side Javascript applications that make
- * use of HTTPRequest to perform server communication functions - data can
- * be encoded into JSON notation for use in a client-side javascript, or
- * decoded from incoming Javascript requests. JSON format is native to
- * Javascript, and can be directly eval()'ed with no further parsing
- * overhead
- *
- * All strings should be in ASCII or UTF-8 format!
- *
- * LICENSE: Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met: Redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following
- * disclaimer. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * @category
- * @package Services_JSON
- * @author Michal Migurski
- * @author Matt Knapp
- * @author Brett Stimmerman
- * @author Christoph Dorn
- * @copyright 2005 Michal Migurski
- * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
- * @license http://www.opensource.org/licenses/bsd-license.php
- * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- */
-
-
- /**
- * Keep a list of objects as we descend into the array so we can detect recursion.
- */
- private $json_objectStack = array();
-
-
- /**
- * convert a string from one UTF-8 char to one UTF-16 char
- *
- * Normally should be handled by mb_convert_encoding, but
- * provides a slower PHP-only method for installations
- * that lack the multibye string extension.
- *
- * @param string $utf8 UTF-8 character
- * @return string UTF-16 character
- * @access private
- */
- private function json_utf82utf16($utf8)
- {
- // oh please oh please oh please oh please oh please
- if (function_exists('mb_convert_encoding')) {
- return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
- }
-
- switch (strlen($utf8)) {
- case 1:
- // this case should never be reached, because we are in ASCII range
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return $utf8;
-
- case 2:
- // return a UTF-16 character from a 2-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr(0x07 & (ord($utf8{0}) >> 2))
- . chr((0xC0 & (ord($utf8{0}) << 6))
- | (0x3F & ord($utf8{1})));
-
- case 3:
- // return a UTF-16 character from a 3-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr((0xF0 & (ord($utf8{0}) << 4))
- | (0x0F & (ord($utf8{1}) >> 2)))
- . chr((0xC0 & (ord($utf8{1}) << 6))
- | (0x7F & ord($utf8{2})));
- }
-
- // ignoring UTF-32 for now, sorry
- return '';
- }
-
- /**
- * encodes an arbitrary variable into JSON format
- *
- * @param mixed $var any number, boolean, string, array, or object to be encoded.
- * see argument 1 to Services_JSON() above for array-parsing behavior.
- * if var is a strng, note that encode() always expects it
- * to be in ASCII or UTF-8 format!
- *
- * @return mixed JSON string representation of input var or an error if a problem occurs
- * @access public
- */
- private function json_encode($var)
- {
- if (is_object($var)) {
- if (in_array($var, $this->json_objectStack)) {
- return '"** Recursion **"';
- }
- }
-
- switch (gettype($var)) {
- case 'boolean':
- return $var ? 'true' : 'false';
-
- case 'NULL':
- return 'null';
-
- case 'integer':
- return (int) $var;
-
- case 'double':
- case 'float':
- return (float) $var;
-
- case 'string':
- // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
- $ascii = '';
- $strlen_var = strlen($var);
-
- /*
- * Iterate over every character in the string,
- * escaping with a slash or encoding to UTF-8 where necessary
- */
- for ($c = 0; $c < $strlen_var; ++$c) {
-
- $ord_var_c = ord($var{$c});
-
- switch (true) {
- case $ord_var_c == 0x08:
- $ascii .= '\b';
- break;
- case $ord_var_c == 0x09:
- $ascii .= '\t';
- break;
- case $ord_var_c == 0x0A:
- $ascii .= '\n';
- break;
- case $ord_var_c == 0x0C:
- $ascii .= '\f';
- break;
- case $ord_var_c == 0x0D:
- $ascii .= '\r';
- break;
-
- case $ord_var_c == 0x22:
- case $ord_var_c == 0x2F:
- case $ord_var_c == 0x5C:
- // double quote, slash, slosh
- $ascii .= '\\' . $var{$c};
- break;
-
- case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
- // characters U-00000000 - U-0000007F (same as ASCII)
- $ascii .= $var{$c};
- break;
-
- case (($ord_var_c & 0xE0) == 0xC0):
- // characters U-00000080 - U-000007FF, mask 110XXXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
- $c += 1;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF0) == 0xE0):
- // characters U-00000800 - U-0000FFFF, mask 1110XXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}));
- $c += 2;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF8) == 0xF0):
- // characters U-00010000 - U-001FFFFF, mask 11110XXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}));
- $c += 3;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFC) == 0xF8):
- // characters U-00200000 - U-03FFFFFF, mask 111110XX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}));
- $c += 4;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFE) == 0xFC):
- // characters U-04000000 - U-7FFFFFFF, mask 1111110X
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}),
- ord($var{$c + 5}));
- $c += 5;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
- }
- }
-
- return '"' . $ascii . '"';
-
- case 'array':
- /*
- * As per JSON spec if any array key is not an integer
- * we must treat the the whole array as an object. We
- * also try to catch a sparsely populated associative
- * array with numeric keys here because some JS engines
- * will create an array with empty indexes up to
- * max_index which can cause memory issues and because
- * the keys, which may be relevant, will be remapped
- * otherwise.
- *
- * As per the ECMA and JSON specification an object may
- * have any string as a property. Unfortunately due to
- * a hole in the ECMA specification if the key is a
- * ECMA reserved word or starts with a digit the
- * parameter is only accessible using ECMAScript's
- * bracket notation.
- */
-
- // treat as a JSON object
- if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($var),
- array_values($var));
-
- array_pop($this->json_objectStack);
-
- foreach ($properties as $property) {
- if ($property instanceof Exception) {
- return $property;
- }
- }
-
- return '{' . join(',', $properties) . '}';
- }
-
- $this->json_objectStack[] = $var;
-
- // treat it like a regular array
- $elements = array_map(array($this, 'json_encode'), $var);
-
- array_pop($this->json_objectStack);
-
- foreach ($elements as $element) {
- if ($element instanceof Exception) {
- return $element;
- }
- }
-
- return '[' . join(',', $elements) . ']';
-
- case 'object':
- $vars = self::encodeObject($var);
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($vars),
- array_values($vars));
-
- array_pop($this->json_objectStack);
-
- foreach ($properties as $property) {
- if ($property instanceof Exception) {
- return $property;
- }
- }
-
- return '{' . join(',', $properties) . '}';
-
- default:
- return null;
- }
- }
-
- /**
- * array-walking function for use in generating JSON-formatted name-value pairs
- *
- * @param string $name name of key to use
- * @param mixed $value reference to an array element to be encoded
- *
- * @return string JSON-formatted name-value pair, like '"name":value'
- * @access private
- */
- private function json_name_value($name, $value)
- {
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if ($name == 'GLOBALS'
- && is_array($value)
- && array_key_exists('GLOBALS', $value)) {
- $value['GLOBALS'] = '** Recursion **';
- }
-
- $encodedValue = $this->json_encode($value);
-
- if ($encodedValue instanceof Exception) {
- return $encodedValue;
- }
-
- return $this->json_encode(strval($name)) . ':' . $encodedValue;
- }
-
- /**
- * @deprecated
- */
- public function setProcessorUrl($URL)
- {
- trigger_error('The FirePHP::setProcessorUrl() method is no longer supported', E_USER_DEPRECATED);
- }
-
- /**
- * @deprecated
- */
- public function setRendererUrl($URL)
- {
- trigger_error('The FirePHP::setRendererUrl() method is no longer supported', E_USER_DEPRECATED);
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php4 b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php4
deleted file mode 100644
index d702cea4a35..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php4
+++ /dev/null
@@ -1,1327 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Michael Day , Copyright 2008, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/**
- * *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * This verion of FirePHPCore is for use with PHP4. If you do not require PHP4
- * compatibility, it is suggested you use FirePHPCore.class.php instead.
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @author Michael Day
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-/**
- * FirePHP version
- *
- * @var string
- */
-define('FirePHP_VERSION', '0.3'); // @pinf replace '0.3' with '%%VERSION%%'
-
-/**
- * Firebug LOG level
- *
- * Logs a message to firebug console
- *
- * @var string
- */
-define('FirePHP_LOG', 'LOG');
-
-/**
- * Firebug INFO level
- *
- * Logs a message to firebug console and displays an info icon before the message
- *
- * @var string
- */
-define('FirePHP_INFO', 'INFO');
-
-/**
- * Firebug WARN level
- *
- * Logs a message to firebug console, displays a warning icon before the message and colors the line turquoise
- *
- * @var string
- */
-define('FirePHP_WARN', 'WARN');
-
-/**
- * Firebug ERROR level
- *
- * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
- *
- * @var string
- */
-define('FirePHP_ERROR', 'ERROR');
-
-/**
- * Dumps a variable to firebug's server panel
- *
- * @var string
- */
-define('FirePHP_DUMP', 'DUMP');
-
-/**
- * Displays a stack trace in firebug console
- *
- * @var string
- */
-define('FirePHP_TRACE', 'TRACE');
-
-/**
- * Displays a table in firebug console
- *
- * @var string
- */
-define('FirePHP_TABLE', 'TABLE');
-
-/**
- * Starts a group in firebug console
- *
- * @var string
- */
-define('FirePHP_GROUP_START', 'GROUP_START');
-
-/**
- * Ends a group in firebug console
- *
- * @var string
- */
-define('FirePHP_GROUP_END', 'GROUP_END');
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * For more information see: http://www.firephp.org/
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @author Michael Day
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-class FirePHP {
- /**
- * Wildfire protocol message index
- *
- * @var int
- */
- var $messageIndex = 1;
-
- /**
- * Options for the library
- *
- * @var array
- */
- var $options = array('maxObjectDepth' => 5,
- 'maxArrayDepth' => 5,
- 'useNativeJsonEncode' => true,
- 'includeLineNumbers' => true);
-
- /**
- * Filters used to exclude object members when encoding
- *
- * @var array
- */
- var $objectFilters = array();
-
- /**
- * A stack of objects used to detect recursion during object encoding
- *
- * @var object
- */
- var $objectStack = array();
-
- /**
- * Flag to enable/disable logging
- *
- * @var boolean
- */
- var $enabled = true;
-
- /**
- * The object constructor
- */
- function FirePHP() {
- }
-
-
- /**
- * When the object gets serialized only include specific object members.
- *
- * @return array
- */
- function __sleep() {
- return array('options','objectFilters','enabled');
- }
-
- /**
- * Gets singleton instance of FirePHP
- *
- * @param boolean $AutoCreate
- * @return FirePHP
- */
- function &getInstance($AutoCreate=false) {
- global $FirePHP_Instance;
-
- if($AutoCreate===true && !$FirePHP_Instance) {
- $FirePHP_Instance = new FirePHP();
- }
-
- return $FirePHP_Instance;
- }
-
- /**
- * Enable and disable logging to Firebug
- *
- * @param boolean $Enabled TRUE to enable, FALSE to disable
- * @return void
- */
- function setEnabled($Enabled) {
- $this->enabled = $Enabled;
- }
-
- /**
- * Check if logging is enabled
- *
- * @return boolean TRUE if enabled
- */
- function getEnabled() {
- return $this->enabled;
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @param string $Class The class name of the object
- * @param array $Filter An array of members to exclude
- * @return void
- */
- function setObjectFilter($Class, $Filter) {
- $this->objectFilters[strtolower($Class)] = $Filter;
- }
-
- /**
- * Set some options for the library
- *
- * Options:
- * - maxObjectDepth: The maximum depth to traverse objects (default: 5)
- * - maxArrayDepth: The maximum depth to traverse arrays (default: 5)
- * - useNativeJsonEncode: If true will use json_encode() (default: true)
- * - includeLineNumbers: If true will include line numbers and filenames (default: true)
- *
- * @param array $Options The options to be set
- * @return void
- */
- function setOptions($Options) {
- $this->options = array_merge($this->options,$Options);
- }
-
- /**
- * Get options from the library
- *
- * @return array The currently set options
- */
- function getOptions() {
- return $this->options;
- }
-
- /**
- * Register FirePHP as your error handler
- *
- * Will use FirePHP to log each php error.
- *
- * @return mixed Returns a string containing the previously defined error handler (if any)
- */
- function registerErrorHandler()
- {
- //NOTE: The following errors will not be caught by this error handler:
- // E_ERROR, E_PARSE, E_CORE_ERROR,
- // E_CORE_WARNING, E_COMPILE_ERROR,
- // E_COMPILE_WARNING, E_STRICT
-
- return set_error_handler(array($this,'errorHandler'));
- }
-
- /**
- * FirePHP's error handler
- *
- * Logs each php error that will occur.
- *
- * @param int $errno
- * @param string $errstr
- * @param string $errfile
- * @param int $errline
- * @param array $errcontext
- */
- function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
- {
- global $FirePHP_Instance;
- // Don't log error if error reporting is switched off
- if (error_reporting() == 0) {
- return;
- }
- // Only log error for errors we are asking for
- if (error_reporting() & $errno) {
- $FirePHP_Instance->group($errstr);
- $FirePHP_Instance->error("{$errfile}, line $errline");
- $FirePHP_Instance->groupEnd();
- }
- }
-
- /**
- * Register FirePHP driver as your assert callback
- *
- * @return mixed Returns the original setting
- */
- function registerAssertionHandler()
- {
- return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
- }
-
- /**
- * FirePHP's assertion handler
- *
- * Logs all assertions to your firebug console and then stops the script.
- *
- * @param string $file File source of assertion
- * @param int $line Line source of assertion
- * @param mixed $code Assertion code
- */
- function assertionHandler($file, $line, $code)
- {
- $this->fb($code, 'Assertion Failed', FirePHP_ERROR, array('File'=>$file,'Line'=>$line));
- }
-
- /**
- * Set custom processor url for FirePHP
- *
- * @param string $URL
- */
- function setProcessorUrl($URL)
- {
- $this->setHeader('X-FirePHP-ProcessorURL', $URL);
- }
-
- /**
- * Set custom renderer url for FirePHP
- *
- * @param string $URL
- */
- function setRendererUrl($URL)
- {
- $this->setHeader('X-FirePHP-RendererURL', $URL);
- }
-
- /**
- * Start a group for following messages.
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $Name
- * @param array $Options OPTIONAL Instructions on how to log the group
- * @return true
- * @throws Exception
- */
- function group($Name, $Options=null) {
-
- if(!$Name) {
- trigger_error('You must specify a label for the group!');
- }
-
- if($Options) {
- if(!is_array($Options)) {
- trigger_error('Options must be defined as an array!');
- }
- if(array_key_exists('Collapsed', $Options)) {
- $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false';
- }
- }
-
- return $this->fb(null, $Name, FirePHP_GROUP_START, $Options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- * @throws Exception
- */
- function groupEnd() {
- return $this->fb(null, null, FirePHP_GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function log($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_LOG);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function info($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_INFO);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function warn($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_WARN);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function error($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_ERROR);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $Key
- * @param mixed $Variable
- * @return true
- * @throws Exception
- */
- function dump($Key, $Variable) {
- return $this->fb($Variable, $Key, FirePHP_DUMP);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function trace($Label) {
- return $this->fb($Label, FirePHP_TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $Label
- * @param string $Table
- * @return true
- * @throws Exception
- */
- function table($Label, $Table) {
- return $this->fb($Table, $Label, FirePHP_TABLE);
- }
-
- /**
- * Check if FirePHP is installed on client
- *
- * @return boolean
- */
- function detectClientExtension() {
- // Check if FirePHP is installed on client via User-Agent header
- if(@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si',$this->getUserAgent(),$m) &&
- version_compare($m[1][0],'0.0.6','>=')) {
- return true;
- } else
- // Check if FirePHP is installed on client via X-FirePHP-Version header
- if(@preg_match_all('/^([\.\d]*)$/si',$this->getRequestHeader("X-FirePHP-Version"),$m) &&
- version_compare($m[1][0],'0.0.6','>=')) {
- return true;
- }
- return false;
- }
-
- /**
- * Log varible to Firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object The variable to be logged
- * @return true Return TRUE if message was added to headers, FALSE otherwise
- * @throws Exception
- */
- function fb($Object) {
-
- if(!$this->enabled) {
- return false;
- }
-
- if (headers_sent($filename, $linenum)) {
- trigger_error('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
- }
-
- $Type = null;
- $Label = null;
- $Options = array();
-
- if(func_num_args()==1) {
- } else
- if(func_num_args()==2) {
- switch(func_get_arg(1)) {
- case FirePHP_LOG:
- case FirePHP_INFO:
- case FirePHP_WARN:
- case FirePHP_ERROR:
- case FirePHP_DUMP:
- case FirePHP_TRACE:
- case FirePHP_TABLE:
- case FirePHP_GROUP_START:
- case FirePHP_GROUP_END:
- $Type = func_get_arg(1);
- break;
- default:
- $Label = func_get_arg(1);
- break;
- }
- } else
- if(func_num_args()==3) {
- $Type = func_get_arg(2);
- $Label = func_get_arg(1);
- } else
- if(func_num_args()==4) {
- $Type = func_get_arg(2);
- $Label = func_get_arg(1);
- $Options = func_get_arg(3);
- } else {
- trigger_error('Wrong number of arguments to fb() function!');
- }
-
-
- if(!$this->detectClientExtension()) {
- return false;
- }
-
- $meta = array();
- $skipFinalObjectEncode = false;
-
- if($Type==FirePHP_TRACE) {
-
- $trace = debug_backtrace();
- if(!$trace) return false;
- for( $i=0 ; $i_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if(isset($trace[$i]['class'])
- && isset($trace[$i+1]['file'])
- && $trace[$i]['class']=='FirePHP'
- && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if($trace[$i]['function']=='fb'
- || $trace[$i]['function']=='trace'
- || $trace[$i]['function']=='send') {
- $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
- 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
- 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
- 'Message'=>$trace[$i]['args'][0],
- 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
- 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
- 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
- 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
-
- $skipFinalObjectEncode = true;
- $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
- $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
- break;
- }
- }
-
- } else
- if($Type==FirePHP_TABLE) {
-
- if(isset($Object[0]) && is_string($Object[0])) {
- $Object[1] = $this->encodeTable($Object[1]);
- } else {
- $Object = $this->encodeTable($Object);
- }
-
- $skipFinalObjectEncode = true;
-
- } else
- if($Type==FirePHP_GROUP_START) {
-
- if(!$Label) {
- trigger_error('You must specify a label for the group!');
- }
- } else {
- if($Type===null) {
- $Type = FirePHP_LOG;
- }
- }
-
- if($this->options['includeLineNumbers']) {
- if(!isset($meta['file']) || !isset($meta['line'])) {
-
- $trace = debug_backtrace();
- for( $i=0 ; $trace && $i_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if(isset($trace[$i]['class'])
- && isset($trace[$i+1]['file'])
- && $trace[$i]['class']=='FirePHP'
- && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if(isset($trace[$i]['file'])
- && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
- /* Skip FB::fb() */
- } else {
- $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
- $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
- break;
- }
- }
-
- }
- } else {
- unset($meta['file']);
- unset($meta['line']);
- }
-
- $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
- $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.FirePHP_VERSION);
-
- $structure_index = 1;
- if($Type==FirePHP_DUMP) {
- $structure_index = 2;
- $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
- } else {
- $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
- }
-
- if($Type==FirePHP_DUMP) {
- $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
- } else {
- $msg_meta = $Options;
- $msg_meta['Type'] = $Type;
- if($Label!==null) {
- $msg_meta['Label'] = $Label;
- }
- if(isset($meta['file']) && !isset($msg_meta['File'])) {
- $msg_meta['File'] = $meta['file'];
- }
- if(isset($meta['line']) && !isset($msg_meta['Line'])) {
- $msg_meta['Line'] = $meta['line'];
- }
- $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
- }
-
- $parts = explode("\n",chunk_split($msg, 5000, "\n"));
-
- for( $i=0 ; $i2) {
- // Message needs to be split into multiple parts
- $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
- (($i==0)?strlen($msg):'')
- . '|' . $part . '|'
- . (($isetHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
- strlen($part) . '|' . $part . '|');
- }
-
- $this->messageIndex++;
-
- if ($this->messageIndex > 99999) {
- trigger_error('Maximum number (99,999) of messages reached!');
- }
- }
- }
-
- $this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
-
- return true;
- }
-
-
- /**
- * Standardizes path for windows systems.
- *
- * @param string $Path
- * @return string
- */
- function _standardizePath($Path) {
- return preg_replace('/\\\\+/','/',$Path);
- }
-
- /**
- * Escape trace path for windows systems
- *
- * @param array $Trace
- * @return array
- */
- function _escapeTrace($Trace) {
- if(!$Trace) return $Trace;
- for( $i=0 ; $i_escapeTraceFile($Trace[$i]['file']);
- }
- if(isset($Trace[$i]['args'])) {
- $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
- }
- }
- return $Trace;
- }
-
- /**
- * Escape file information of trace for windows systems
- *
- * @param string $File
- * @return string
- */
- function _escapeTraceFile($File) {
- /* Check if we have a windows filepath */
- if(strpos($File,'\\')) {
- /* First strip down to single \ */
-
- $file = preg_replace('/\\\\+/','\\',$File);
-
- return $file;
- }
- return $File;
- }
-
- /**
- * Send header
- *
- * @param string $Name
- * @param string_type $Value
- */
- function setHeader($Name, $Value) {
- return header($Name.': '.$Value);
- }
-
- /**
- * Get user agent
- *
- * @return string|false
- */
- function getUserAgent() {
- if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
- return $_SERVER['HTTP_USER_AGENT'];
- }
-
- /**
- * Get all request headers
- *
- * @return array
- */
- function getAllRequestHeaders() {
- $headers = array();
- if(function_exists('getallheaders')) {
- foreach( getallheaders() as $name => $value ) {
- $headers[strtolower($name)] = $value;
- }
- } else {
- foreach($_SERVER as $name => $value) {
- if(substr($name, 0, 5) == 'HTTP_') {
- $headers[strtolower(str_replace(' ', '-', str_replace('_', ' ', substr($name, 5))))] = $value;
- }
- }
- }
- return $headers;
- }
-
- /**
- * Get a request header
- *
- * @return string|false
- */
- function getRequestHeader($Name)
- {
- $headers = $this->getAllRequestHeaders();
- if (isset($headers[strtolower($Name)])) {
- return $headers[strtolower($Name)];
- }
- return false;
- }
-
- /**
- * Encode an object into a JSON string
- *
- * Uses PHP's jeson_encode() if available
- *
- * @param object $Object The object to be encoded
- * @return string The JSON string
- */
- function jsonEncode($Object, $skipObjectEncode=false)
- {
- if(!$skipObjectEncode) {
- $Object = $this->encodeObject($Object);
- }
-
- if(function_exists('json_encode')
- && $this->options['useNativeJsonEncode']!=false) {
-
- return json_encode($Object);
- } else {
- return $this->json_encode($Object);
- }
- }
-
- /**
- * Encodes a table by encoding each row and column with encodeObject()
- *
- * @param array $Table The table to be encoded
- * @return array
- */
- function encodeTable($Table) {
-
- if(!$Table) return $Table;
-
- $new_table = array();
- foreach($Table as $row) {
-
- if(is_array($row)) {
- $new_row = array();
-
- foreach($row as $item) {
- $new_row[] = $this->encodeObject($item);
- }
-
- $new_table[] = $new_row;
- }
- }
-
- return $new_table;
- }
-
- /**
- * Encodes an object
- *
- * @param Object $Object The object to be encoded
- * @param int $Depth The current traversal depth
- * @return array All members of the object
- */
- function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1)
- {
- $return = array();
-
- if (is_resource($Object)) {
-
- return '** '.(string)$Object.' **';
-
- } else
- if (is_object($Object)) {
-
- if ($ObjectDepth > $this->options['maxObjectDepth']) {
- return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **';
- }
-
- foreach ($this->objectStack as $refVal) {
- if ($refVal === $Object) {
- return '** Recursion ('.get_class($Object).') **';
- }
- }
- array_push($this->objectStack, $Object);
-
- $return['__className'] = $class = get_class($Object);
- $class_lower = strtolower($class);
-
- $members = (array)$Object;
-
- // Include all members that are not defined in the class
- // but exist in the object
- foreach( $members as $raw_name => $value ) {
-
- $name = $raw_name;
-
- if ($name{0} == "\0") {
- $parts = explode("\0", $name);
- $name = $parts[2];
- }
-
- if(!isset($properties[$name])) {
- $name = 'undeclared:'.$name;
-
- if(!(isset($this->objectFilters[$class_lower])
- && is_array($this->objectFilters[$class_lower])
- && in_array($raw_name,$this->objectFilters[$class_lower]))) {
-
- $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1);
- } else {
- $return[$name] = '** Excluded by Filter **';
- }
- }
- }
-
- array_pop($this->objectStack);
-
- } elseif (is_array($Object)) {
-
- if ($ArrayDepth > $this->options['maxArrayDepth']) {
- return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **';
- }
-
- foreach ($Object as $key => $val) {
-
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if($key=='GLOBALS'
- && is_array($val)
- && array_key_exists('GLOBALS',$val)) {
- $val['GLOBALS'] = '** Recursion (GLOBALS) **';
- }
-
- $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1);
- }
- } else {
- if($this->is_utf8($Object)) {
- return $Object;
- } else {
- return utf8_encode($Object);
- }
- }
- return $return;
-
- }
-
- /**
- * Returns true if $string is valid UTF-8 and false otherwise.
- *
- * @param mixed $str String to be tested
- * @return boolean
- */
- function is_utf8($str) {
- $c=0; $b=0;
- $bits=0;
- $len=strlen($str);
- for($i=0; $i<$len; $i++){
- $c=ord($str[$i]);
- if($c > 128){
- if(($c >= 254)) return false;
- elseif($c >= 252) $bits=6;
- elseif($c >= 248) $bits=5;
- elseif($c >= 240) $bits=4;
- elseif($c >= 224) $bits=3;
- elseif($c >= 192) $bits=2;
- else return false;
- if(($i+$bits) > $len) return false;
- while($bits > 1){
- $i++;
- $b=ord($str[$i]);
- if($b < 128 || $b > 191) return false;
- $bits--;
- }
- }
- }
- return true;
- }
-
- /**
- * Converts to and from JSON format.
- *
- * JSON (JavaScript Object Notation) is a lightweight data-interchange
- * format. It is easy for humans to read and write. It is easy for machines
- * to parse and generate. It is based on a subset of the JavaScript
- * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- * This feature can also be found in Python. JSON is a text format that is
- * completely language independent but uses conventions that are familiar
- * to programmers of the C-family of languages, including C, C++, C#, Java,
- * JavaScript, Perl, TCL, and many others. These properties make JSON an
- * ideal data-interchange language.
- *
- * This package provides a simple encoder and decoder for JSON notation. It
- * is intended for use with client-side Javascript applications that make
- * use of HTTPRequest to perform server communication functions - data can
- * be encoded into JSON notation for use in a client-side javascript, or
- * decoded from incoming Javascript requests. JSON format is native to
- * Javascript, and can be directly eval()'ed with no further parsing
- * overhead
- *
- * All strings should be in ASCII or UTF-8 format!
- *
- * LICENSE: Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met: Redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following
- * disclaimer. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * @category
- * @package Services_JSON
- * @author Michal Migurski
- * @author Matt Knapp
- * @author Brett Stimmerman
- * @author Christoph Dorn
- * @copyright 2005 Michal Migurski
- * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
- * @license http://www.opensource.org/licenses/bsd-license.php
- * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- */
-
-
- /**
- * Keep a list of objects as we descend into the array so we can detect recursion.
- */
- var $json_objectStack = array();
-
-
- /**
- * convert a string from one UTF-8 char to one UTF-16 char
- *
- * Normally should be handled by mb_convert_encoding, but
- * provides a slower PHP-only method for installations
- * that lack the multibye string extension.
- *
- * @param string $utf8 UTF-8 character
- * @return string UTF-16 character
- * @access private
- */
- function json_utf82utf16($utf8)
- {
- // oh please oh please oh please oh please oh please
- if(function_exists('mb_convert_encoding')) {
- return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
- }
-
- switch(strlen($utf8)) {
- case 1:
- // this case should never be reached, because we are in ASCII range
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return $utf8;
-
- case 2:
- // return a UTF-16 character from a 2-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr(0x07 & (ord($utf8{0}) >> 2))
- . chr((0xC0 & (ord($utf8{0}) << 6))
- | (0x3F & ord($utf8{1})));
-
- case 3:
- // return a UTF-16 character from a 3-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr((0xF0 & (ord($utf8{0}) << 4))
- | (0x0F & (ord($utf8{1}) >> 2)))
- . chr((0xC0 & (ord($utf8{1}) << 6))
- | (0x7F & ord($utf8{2})));
- }
-
- // ignoring UTF-32 for now, sorry
- return '';
- }
-
- /**
- * encodes an arbitrary variable into JSON format
- *
- * @param mixed $var any number, boolean, string, array, or object to be encoded.
- * see argument 1 to Services_JSON() above for array-parsing behavior.
- * if var is a strng, note that encode() always expects it
- * to be in ASCII or UTF-8 format!
- *
- * @return mixed JSON string representation of input var or an error if a problem occurs
- * @access public
- */
- function json_encode($var)
- {
-
- if(is_object($var)) {
- if(in_array($var,$this->json_objectStack)) {
- return '"** Recursion **"';
- }
- }
-
- switch (gettype($var)) {
- case 'boolean':
- return $var ? 'true' : 'false';
-
- case 'NULL':
- return 'null';
-
- case 'integer':
- return (int) $var;
-
- case 'double':
- case 'float':
- return (float) $var;
-
- case 'string':
- // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
- $ascii = '';
- $strlen_var = strlen($var);
-
- /*
- * Iterate over every character in the string,
- * escaping with a slash or encoding to UTF-8 where necessary
- */
- for ($c = 0; $c < $strlen_var; ++$c) {
-
- $ord_var_c = ord($var{$c});
-
- switch (true) {
- case $ord_var_c == 0x08:
- $ascii .= '\b';
- break;
- case $ord_var_c == 0x09:
- $ascii .= '\t';
- break;
- case $ord_var_c == 0x0A:
- $ascii .= '\n';
- break;
- case $ord_var_c == 0x0C:
- $ascii .= '\f';
- break;
- case $ord_var_c == 0x0D:
- $ascii .= '\r';
- break;
-
- case $ord_var_c == 0x22:
- case $ord_var_c == 0x2F:
- case $ord_var_c == 0x5C:
- // double quote, slash, slosh
- $ascii .= '\\'.$var{$c};
- break;
-
- case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
- // characters U-00000000 - U-0000007F (same as ASCII)
- $ascii .= $var{$c};
- break;
-
- case (($ord_var_c & 0xE0) == 0xC0):
- // characters U-00000080 - U-000007FF, mask 110XXXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
- $c += 1;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF0) == 0xE0):
- // characters U-00000800 - U-0000FFFF, mask 1110XXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}));
- $c += 2;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF8) == 0xF0):
- // characters U-00010000 - U-001FFFFF, mask 11110XXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}));
- $c += 3;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFC) == 0xF8):
- // characters U-00200000 - U-03FFFFFF, mask 111110XX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}));
- $c += 4;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFE) == 0xFC):
- // characters U-04000000 - U-7FFFFFFF, mask 1111110X
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}),
- ord($var{$c + 5}));
- $c += 5;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
- }
- }
-
- return '"'.$ascii.'"';
-
- case 'array':
- /*
- * As per JSON spec if any array key is not an integer
- * we must treat the the whole array as an object. We
- * also try to catch a sparsely populated associative
- * array with numeric keys here because some JS engines
- * will create an array with empty indexes up to
- * max_index which can cause memory issues and because
- * the keys, which may be relevant, will be remapped
- * otherwise.
- *
- * As per the ECMA and JSON specification an object may
- * have any string as a property. Unfortunately due to
- * a hole in the ECMA specification if the key is a
- * ECMA reserved word or starts with a digit the
- * parameter is only accessible using ECMAScript's
- * bracket notation.
- */
-
- // treat as a JSON object
- if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($var),
- array_values($var));
-
- array_pop($this->json_objectStack);
-
- return '{' . join(',', $properties) . '}';
- }
-
- $this->json_objectStack[] = $var;
-
- // treat it like a regular array
- $elements = array_map(array($this, 'json_encode'), $var);
-
- array_pop($this->json_objectStack);
-
- return '[' . join(',', $elements) . ']';
-
- case 'object':
- $vars = FirePHP::encodeObject($var);
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($vars),
- array_values($vars));
-
- array_pop($this->json_objectStack);
-
- return '{' . join(',', $properties) . '}';
-
- default:
- return null;
- }
- }
-
- /**
- * array-walking function for use in generating JSON-formatted name-value pairs
- *
- * @param string $name name of key to use
- * @param mixed $value reference to an array element to be encoded
- *
- * @return string JSON-formatted name-value pair, like '"name":value'
- * @access private
- */
- function json_name_value($name, $value)
- {
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if($name=='GLOBALS'
- && is_array($value)
- && array_key_exists('GLOBALS',$value)) {
- $value['GLOBALS'] = '** Recursion **';
- }
-
- $encoded_value = $this->json_encode($value);
-
- return $this->json_encode(strval($name)) . ':' . $encoded_value;
- }
-}
-
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php
deleted file mode 100644
index 8827ba15d97..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php
+++ /dev/null
@@ -1,275 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Sokolov Innokenty , Copyright 2011, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/**
- * ***** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-if (!class_exists('FirePHP', false)) {
- require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'FirePHP.class.php';
-}
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object
- * @return true
- * @throws Exception
- */
-function fb()
-{
- $instance = FirePHP::getInstance(true);
-
- $args = func_get_args();
- return call_user_func_array(array($instance, 'fb'), $args);
-}
-
-
-class FB
-{
- /**
- * Set an Insight console to direct all logging calls to
- *
- * @param object $console The console object to log to
- * @return void
- */
- public static function setLogToInsightConsole($console)
- {
- FirePHP::getInstance(true)->setLogToInsightConsole($console);
- }
-
- /**
- * Enable and disable logging to Firebug
- *
- * @see FirePHP->setEnabled()
- * @param boolean $enabled TRUE to enable, FALSE to disable
- * @return void
- */
- public static function setEnabled($enabled)
- {
- FirePHP::getInstance(true)->setEnabled($enabled);
- }
-
- /**
- * Check if logging is enabled
- *
- * @see FirePHP->getEnabled()
- * @return boolean TRUE if enabled
- */
- public static function getEnabled()
- {
- return FirePHP::getInstance(true)->getEnabled();
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @see FirePHP->setObjectFilter()
- * @param string $class The class name of the object
- * @param array $filter An array or members to exclude
- * @return void
- */
- public static function setObjectFilter($class, $filter)
- {
- FirePHP::getInstance(true)->setObjectFilter($class, $filter);
- }
-
- /**
- * Set some options for the library
- *
- * @see FirePHP->setOptions()
- * @param array $options The options to be set
- * @return void
- */
- public static function setOptions($options)
- {
- FirePHP::getInstance(true)->setOptions($options);
- }
-
- /**
- * Get options for the library
- *
- * @see FirePHP->getOptions()
- * @return array The options
- */
- public static function getOptions()
- {
- return FirePHP::getInstance(true)->getOptions();
- }
-
- /**
- * Log object to firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $object
- * @return true
- * @throws Exception
- */
- public static function send()
- {
- $args = func_get_args();
- return call_user_func_array(array(FirePHP::getInstance(true), 'fb'), $args);
- }
-
- /**
- * Start a group for following messages
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $name
- * @param array $options OPTIONAL Instructions on how to log the group
- * @return true
- */
- public static function group($name, $options=null)
- {
- return FirePHP::getInstance(true)->group($name, $options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- * @throws Exception
- */
- public static function groupEnd()
- {
- return self::send(null, null, FirePHP::GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function log($object, $label=null)
- {
- return self::send($object, $label, FirePHP::LOG);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function info($object, $label=null)
- {
- return self::send($object, $label, FirePHP::INFO);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function warn($object, $label=null)
- {
- return self::send($object, $label, FirePHP::WARN);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function error($object, $label=null)
- {
- return self::send($object, $label, FirePHP::ERROR);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $key
- * @param mixed $variable
- * @return true
- * @throws Exception
- */
- public static function dump($key, $variable)
- {
- return self::send($variable, $key, FirePHP::DUMP);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function trace($label)
- {
- return self::send($label, FirePHP::TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $label
- * @param string $table
- * @return true
- * @throws Exception
- */
- public static function table($label, $table)
- {
- return self::send($table, $label, FirePHP::TABLE);
- }
-
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php4 b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php4
deleted file mode 100644
index eab2f0f681b..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php4
+++ /dev/null
@@ -1,245 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Michael Day , Copyright 2008, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* ***** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @author Michael Day
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-require_once dirname(__FILE__).'/FirePHP.class.php4';
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object
- * @return true
- * @throws Exception
- */
-function fb()
-{
- $instance =& FirePHP::getInstance(true);
-
- $args = func_get_args();
- return call_user_func_array(array(&$instance,'fb'),$args);
-}
-
-
-class FB
-{
- /**
- * Enable and disable logging to Firebug
- *
- * @see FirePHP->setEnabled()
- * @param boolean $Enabled TRUE to enable, FALSE to disable
- * @return void
- */
- function setEnabled($Enabled) {
- $instance =& FirePHP::getInstance(true);
- $instance->setEnabled($Enabled);
- }
-
- /**
- * Check if logging is enabled
- *
- * @see FirePHP->getEnabled()
- * @return boolean TRUE if enabled
- */
- function getEnabled() {
- $instance =& FirePHP::getInstance(true);
- return $instance->getEnabled();
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @see FirePHP->setObjectFilter()
- * @param string $Class The class name of the object
- * @param array $Filter An array or members to exclude
- * @return void
- */
- function setObjectFilter($Class, $Filter) {
- $instance =& FirePHP::getInstance(true);
- $instance->setObjectFilter($Class, $Filter);
- }
-
- /**
- * Set some options for the library
- *
- * @see FirePHP->setOptions()
- * @param array $Options The options to be set
- * @return void
- */
- function setOptions($Options) {
- $instance =& FirePHP::getInstance(true);
- $instance->setOptions($Options);
- }
-
- /**
- * Get options for the library
- *
- * @see FirePHP->getOptions()
- * @return array The options
- */
- function getOptions() {
- $instance =& FirePHP::getInstance(true);
- return $instance->getOptions();
- }
-
- /**
- * Log object to firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object
- * @return true
- */
- function send()
- {
- $instance =& FirePHP::getInstance(true);
- $args = func_get_args();
- return call_user_func_array(array(&$instance,'fb'),$args);
- }
-
- /**
- * Start a group for following messages
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $Name
- * @param array $Options OPTIONAL Instructions on how to log the group
- * @return true
- */
- function group($Name, $Options=null) {
- $instance =& FirePHP::getInstance(true);
- return $instance->group($Name, $Options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- */
- function groupEnd() {
- return FB::send(null, null, FirePHP_GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function log($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_LOG);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function info($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_INFO);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function warn($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_WARN);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function error($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_ERROR);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $Key
- * @param mixed $Variable
- * @return true
- */
- function dump($Key, $Variable) {
- return FB::send($Variable, $Key, FirePHP_DUMP);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $Label
- * @return true
- */
- function trace($Label) {
- return FB::send($Label, FirePHP_TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $Label
- * @param string $Table
- * @return true
- */
- function table($Label, $Table) {
- return FB::send($Table, $Label, FirePHP_TABLE);
- }
-}
diff --git a/htdocs/includes/firephp/firephp-core/package.json b/htdocs/includes/firephp/firephp-core/package.json
deleted file mode 100644
index 291a920223a..00000000000
--- a/htdocs/includes/firephp/firephp-core/package.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "uid": "https://github.com/firephp/firephp-core/",
- "name": "firephp-core",
- "version": "0.4.0",
- "label": "FirePHP Server Library",
- "repositories": [
- {
- "type": "git",
- "url": "git://github.com/firephp/firephp-core.git"
- }
- ],
- "maintainers": [
- {
- "name": "Christoph Dorn",
- "email": "christoph@christophdorn.com",
- "web": "http://www.christophdorn.com/",
- "alias": {
- "github": "cadorn"
- }
- }
- ],
- "contributors": [
- {
- "name": "Christoph Dorn",
- "email": "christoph@christophdorn.com",
- "web": "http://www.christophdorn.com/",
- "alias": {
- "github": "cadorn"
- }
- },
- {
- "name": "Michael Day",
- "email": "manveru.alma@gmail.com"
- },
- {
- "name": "Sokolov Innokenty",
- "email": "sokolov.innokenty@gmail.com",
- "alias": {
- "github": "qbbr"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/program.json b/htdocs/includes/firephp/firephp-core/program.json
deleted file mode 100644
index 9889e97a36f..00000000000
--- a/htdocs/includes/firephp/firephp-core/program.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "extends": {
- "location": "./workspace/program.json"
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/tests/API/newlines.php b/htdocs/includes/firephp/firephp-core/tests/API/newlines.php
deleted file mode 100644
index 1e5511e544d..00000000000
--- a/htdocs/includes/firephp/firephp-core/tests/API/newlines.php
+++ /dev/null
@@ -1,12 +0,0 @@
-dump("key", "value");
- $headers = $firephp->_getHeaders();
- $this->assertEquals('15|{"key":"value"}|', $headers['X-Wf-1-2-1-1']);
- $firephp->_clearHeaders();
-
- $caught = false;
- try {
- $firephp->dump(array(), "value");
- } catch(Exception $e) {
- // Key passed to dump() is not a string
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
-
- $caught = false;
- try {
- $firephp->dump("key \n\r value", "value");
- } catch(Exception $e) {
- // Key passed to dump() contains invalid characters [a-zA-Z0-9-_\.:]
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
-
- $caught = false;
- try {
- $firephp->dump("keykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeyk1", "value");
- } catch(Exception $e) {
- // Key passed to dump() is longer than 100 characters
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
- }
-
- /**
- * @issue http://code.google.com/p/firephp/issues/detail?id=123
- */
- public function testRegisterErrorHandler()
- {
- $firephp = new FirePHP_Test_Class();
- $firephp->setOption("maxObjectDepth", 1);
- $firephp->setOption("maxArrayDepth", 1);
-
- $firephp->registerErrorHandler();
- trigger_error("Hello World");
- $headers = $firephp->_getHeaders();
- if(!isset($headers["X-Wf-1-1-1-1"])) {
- $this->fail("Error not in headers");
- }
- }
-
- /**
- * @issue http://code.google.com/p/firephp/issues/detail?id=122
- */
- public function testFirePHPClassInstanceLogging()
- {
- $firephp = new FirePHP_Test_Class();
-
- $firephp->log($firephp);
- $headers = $firephp->_getHeaders();
- if(!preg_match_all('/"protected:objectStack":"\\*\\* Excluded by Filter \\*\\*"/', $headers['X-Wf-1-1-1-1'], $m)) {
- $this->fail("objectStack member contains value");
- }
- if(!preg_match_all('/"protected:static:instance":"\\*\\* Excluded by Filter \\*\\*"/', $headers['X-Wf-1-1-1-1'], $m)) {
- $this->fail("instance member should not be logged");
- }
- if(!preg_match_all('/"undeclared:json_objectStack":"\\*\\* Excluded by Filter \\*\\*"/', $headers['X-Wf-1-1-1-1'], $m)) {
- $this->fail("json_objectStack member should not be logged");
- }
- }
-
- /**
- * @issue http://code.google.com/p/firephp/issues/detail?id=114
- */
- public function testCustomFileLineOptions()
- {
- $firephp = new FirePHP_Test_Class();
-
- $firephp->log("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->info("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->warn("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->error("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->dump("key", "value", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->table("label", array(array("header"),array("cell")), array("File"=>"/file/path", "Line"=>"1"));
-
- $headers = $firephp->_getHeaders();
-
- $this->assertEquals('75|[{"File":"\/file\/path","Line":"1","Type":"LOG","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-1']);
- $this->assertEquals('76|[{"File":"\/file\/path","Line":"1","Type":"INFO","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-2']);
- $this->assertEquals('76|[{"File":"\/file\/path","Line":"1","Type":"WARN","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-3']);
- $this->assertEquals('77|[{"File":"\/file\/path","Line":"1","Type":"ERROR","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-4']);
- $this->assertEquals('15|{"key":"value"}|', $headers['X-Wf-1-2-1-5']);
- $this->assertEquals('89|[{"File":"\/file\/path","Line":"1","Type":"TABLE","Label":"label"},[["header"],["cell"]]]|', $headers['X-Wf-1-1-1-6']);
- }
-
- public function testRecursiveEncode()
- {
- $firephp = new FirePHP_Test_Class();
-
- $obj = new FirePHPCore_FirePHPTest__TestObject();
- $obj->child = $obj;
-
- $firephp->log($obj, "label", array("File"=>"/file/path", "Line"=>"1"));
- $headers = $firephp->_getHeaders();
- $this->assertEquals('215|[{"File":"\/file\/path","Line":"1","Type":"LOG","Label":"label"},{"__className":"FirePHPCore_FirePHPTest__TestObject","public:var":"value","undeclared:child":"** Recursion (FirePHPCore_FirePHPTest__TestObject) **"}]|', $headers['X-Wf-1-1-1-1']);
- }
-
- public function testOptions()
- {
- $firephp = new FirePHP_Test_Class();
-
- // defaults
- $this->assertEquals(5, $firephp->getOption("maxObjectDepth"));
- $this->assertEquals(5, $firephp->getOption("maxArrayDepth"));
- $this->assertEquals(true, $firephp->getOption("useNativeJsonEncode"));
- $this->assertEquals(true, $firephp->getOption("includeLineNumbers"));
-
- // modify
- $firephp->setOption("maxObjectDepth", 1);
- $this->assertEquals(1, $firephp->getOption("maxObjectDepth"));
-
- // invalid
- $caught = false;
- try {
- $firephp->setOption("invalidName", 1);
- } catch(Exception $e) {
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
-
- $caught = false;
- try {
- $firephp->getOption("invalidName");
- } catch(Exception $e) {
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
- }
-
- public function testDeprecatedMethods()
- {
- $firephp = new FirePHP_Test_Class();
-
- $caught = false;
- try {
- $firephp->setProcessorUrl('URL');
- } catch(Exception $e) {
- $caught = true;
- $this->assertEquals(E_USER_DEPRECATED, $e->getCode());
- $this->assertEquals('The FirePHP::setProcessorUrl() method is no longer supported', $e->getMessage());
- }
- if(!$caught) $this->fail('No deprecation error thrown');
-
- $caught = false;
- try {
- $firephp->setRendererUrl('URL');
- } catch(Exception $e) {
- $caught = true;
- $this->assertEquals(E_USER_DEPRECATED, $e->getCode());
- $this->assertEquals('The FirePHP::setRendererUrl() method is no longer supported', $e->getMessage());
- }
- if(!$caught) $this->fail('No deprecation error thrown');
- }
-
-}
-
-
-class FirePHPCore_FirePHPTest__TestObject
-{
- public $var = "value";
-}
diff --git a/htdocs/includes/firephp/firephp-core/tests/TestHelper.php b/htdocs/includes/firephp/firephp-core/tests/TestHelper.php
deleted file mode 100644
index bb65e73202d..00000000000
--- a/htdocs/includes/firephp/firephp-core/tests/TestHelper.php
+++ /dev/null
@@ -1,55 +0,0 @@
-_headers;
- }
- public function _clearHeaders() {
- $this->_headers = array();
- }
-
-
- // ######################
- // # Subclassed Methods #
- // ######################
-
- protected function setHeader($Name, $Value) {
- $this->_headers[$Name] = $Value;
- }
-
- protected function headersSent(&$Filename, &$Linenum) {
- return false;
- }
-
- public function detectClientExtension() {
- return true;
- }
-
-}
diff --git a/htdocs/includes/firephp/firephp-core/tests/phpunit.xml b/htdocs/includes/firephp/firephp-core/tests/phpunit.xml
deleted file mode 100644
index b0474e9d627..00000000000
--- a/htdocs/includes/firephp/firephp-core/tests/phpunit.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/README.md b/htdocs/includes/firephp/firephp-core/workspace/README.md
deleted file mode 100644
index 999f09a9418..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-
-The [PINF JavaScript Loader](https://github.com/pinf/loader-js) is used to provide a development environment and package releases for this project.
-
-**NOTE:** It is assumed you have the _PINF JavaScript Loader_ mapped to the `commonjs` command and are using the `node` platform by default as explained [here](https://github.com/pinf/loader-js/blob/master/docs/Setup.md).
-
-
-Publishing
-==========
-
- git tag v...
-
- commonjs -v --script build .
-
- commonjs -v --script publish .
-
-
-TODO: Auto-upload to PEAR channel server at http://pear.firephp.org/
-
-NOTE: For PEAR RC releases: Change release stability to "beta" and capitalize "RC" in release version in package.xml
diff --git a/htdocs/includes/firephp/firephp-core/workspace/lib/project.js b/htdocs/includes/firephp/firephp-core/workspace/lib/project.js
deleted file mode 100644
index 913c6d7c60f..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/lib/project.js
+++ /dev/null
@@ -1,5 +0,0 @@
-
-exports.main = function(options)
-{
-
-}
diff --git a/htdocs/includes/firephp/firephp-core/workspace/package.json b/htdocs/includes/firephp/firephp-core/workspace/package.json
deleted file mode 100644
index 19e8385ee6f..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "firephp-core",
- "engine": [
- "node"
- ],
- "main": "lib/project.js",
- "scripts": {
- "build": {
- "location": "./",
- "module": "/scripts/build.js"
- },
- "publish": {
- "location": "./",
- "module": "/scripts/publish.js"
- }
- },
- "mappings": {
- "nodejs": {
- "id": "nodejs.org/"
- },
- "pinf": {
- "id": "pinf.org/loader/"
- },
- "modules": {
- "id": "github.com/pinf/modules-js/"
- }
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/program.json b/htdocs/includes/firephp/firephp-core/workspace/program.json
deleted file mode 100644
index 9628b525c6c..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/program.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "boot": "workspace",
- "engine": [
- "node"
- ],
- "packages": {
- "workspace": {
- "locator": {
- "location": "./"
- }
- },
- "nodejs.org/": {
- "provider": "nodejs.org/"
- },
- "pinf.org/loader/": {
- "provider": "pinf.org/loader/"
- },
- "github.com/pinf/modules-js/": {
- "locator": {
- "archive": "https://github.com/pinf/modules-js/zipball/master"
- }
- },
- "github.com/kriskowal/q/": {
- "locator": {
- "archive": "https://github.com/kriskowal/q/zipball/v0.3.0"
- },
- "descriptor": {
- "uid": "https://github.com/kriskowal/q/",
- "dependencies": [
- {
- "id": "github.com/pinf/modules-js/"
- }
- ]
- }
- },
- "private-registry.appspot.com/cadorn.com/github/com.cadorn.baby/projects/sourcemint/packages/client-js/": {
- "locator": {
- "archive": "https://github.com/cadorn/com.cadorn.baby/zipball/master",
- "path": "projects/sourcemint/packages/client-js"
- }
- },
- "github.com/cadorn/aws-lib/": {
- "locator": {
- "archive": "https://github.com/cadorn/aws-lib/zipball/master"
- },
- "descriptor": {
- "uid": "https://github.com/cadorn/aws-lib/",
- "native": true,
- "dependencies": [
- {
- "id": "registry.npmjs.org/sax/"
- },
- {
- "id": "registry.npmjs.org/xml2js/"
- }
- ]
- }
- },
- "registry.npmjs.org/sax/": {
- "locator": {
- "archive": "http://registry.npmjs.org/sax/-/sax-0.1.2.tgz"
- },
- "descriptor": {
- "uid": "http://registry.npmjs.org/sax/",
- "native": true
- }
- },
- "registry.npmjs.org/xml2js/": {
- "locator": {
- "archive": "http://registry.npmjs.org/xml2js/-/xml2js-0.1.6.tgz"
- },
- "descriptor": {
- "uid": "http://registry.npmjs.org/xml2js/",
- "native": true
- }
- }
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/scripts/build.js b/htdocs/includes/firephp/firephp-core/workspace/scripts/build.js
deleted file mode 100644
index 2481d99d381..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/scripts/build.js
+++ /dev/null
@@ -1,164 +0,0 @@
-
-var FILE = require("modules/file"),
- Q = require("modules/q"),
- SYSTEM = require("modules/system"),
- UTIL = require("modules/util"),
- JSON = require("modules/json");
-
-
-var pkgPath = FILE.dirname(FILE.dirname(FILE.dirname(module.id))),
- buildPath = pkgPath + "/build",
- tplPath = pkgPath + "/workspace/tpl",
- version = false;
-
-exports.getBuildPath = function()
-{
- return buildPath;
-}
-
-exports.main = function()
-{
-
- SYSTEM.exec("rm -Rf " + buildPath, function()
- {
- FILE.mkdirs(buildPath, 0775);
-
- SYSTEM.exec("git tag", function(stdout)
- {
- version = UTIL.trim(stdout).split("\n").pop().match(/^v(.*)$/)[1];
-
- // TODO: Compare against version in `../../program.json ~ version` (ensure =)
-
- module.print("\0cyan(Building version: " + version + "\0)\n");
-
- buildZipArchive(function()
- {
- buildPEARArchive(function()
- {
- done();
- });
- });
- });
- });
-
- function done()
- {
- module.print("\0green(Done\0)\n");
- }
-}
-
-function buildZipArchive(callback)
-{
- var targetBasePath = buildPath + "/FirePHPCore-" + version;
-
- FILE.mkdirs(targetBasePath, 0775);
-
- SYSTEM.exec("rsync -r --copy-links --exclude \"- .DS_Store\" --exclude \"- .git/\" --exclude \"- .tmp_*\" " + pkgPath + "/lib " + targetBasePath, function()
- {
- replaceVariablesInFile(targetBasePath + "/lib/FirePHPCore/FirePHP.class.php");
- replaceVariablesInFile(targetBasePath + "/lib/FirePHPCore/FirePHP.class.php4");
-
- SYSTEM.exec("cp -Rf " + pkgPath + "/examples " + targetBasePath, function()
- {
- next1();
- });
- });
-
- function next1()
- {
- var content = FILE.read(tplPath + "/readme.tpl.md");
- content = content.replace(/%%VERSION%%/g, version);
- FILE.write(targetBasePath + "/README.md", content);
-
- var content = FILE.read(tplPath + "/license.tpl.md");
- FILE.write(targetBasePath + "/LICENSE.md", content);
-
- FILE.write(buildPath + "/info.json", JSON.encode({
- version: version
- }));
-
- next2();
- }
-
- function next2()
- {
- SYSTEM.exec("cd " + buildPath + " ; zip -vr FirePHPCore-" + version + ".zip FirePHPCore-" + version, function(stdout)
- {
- console.log(stdout);
-
- callback();
- });
- }
-}
-
-function buildPEARArchive(callback)
-{
- var targetBasePath = buildPath + "/pear";
-
- FILE.mkdirs(targetBasePath, 0775);
-
- SYSTEM.exec("rsync -r --copy-links --exclude \"- .DS_Store\" --exclude \"- .git/\" --exclude \"- .tmp_*\" " + pkgPath + "/lib/FirePHPCore/* " + targetBasePath, function()
- {
- replaceVariablesInFile(targetBasePath + "/FirePHP.class.php");
- replaceVariablesInFile(targetBasePath + "/FirePHP.class.php4");
-
- next1();
- });
-
- function next1()
- {
- var content = FILE.read(tplPath + "/pear.package.tpl.xml");
-
- var date = new Date();
- content = content.replace(/%%DATE%%/g, date.getFullYear() + "-" + UTIL.padBegin(date.getMonth()+1, 2, "0") + "-" + date.getDate());
- content = content.replace(/%%VERSION%%/g, version);
- content = content.replace(/%%STABILITY%%/g, "stable");
-
- FILE.write(targetBasePath + "/package.xml", content);
-
- next2();
- }
-
- function next2()
- {
- SYSTEM.exec("pear channel-discover pear.firephp.org", function(stdout)
- {
- console.log(stdout);
-
- SYSTEM.exec("cd " + targetBasePath + "; pear package package.xml", function(stdout)
- {
- console.log(stdout);
-
- callback();
- });
- });
- }
-}
-
-function replaceVariablesInFile(path)
-{
- var content = FILE.read(path);
-
- // @pinf replace '0.3' with '%%VERSION%%'
- var re1 = /\n(.*)\/\/\s*@pinf\s(.*)\n/g;
- var match1;
- while (match1 = re1.exec(content)) {
- var rule = match1[2].match(/^replace (.*?) with (.*)$/);
- if(rule) {
- // replace variables in rule
- var re2 = /%%([^%]*)%%/g;
- var match2;
- while (match2 = re2.exec(rule[2])) {
- var value;
- if(match2[1]=="VERSION") {
- value = version;
- }
- rule[2] = rule[2].replace(match2[0], value);
- }
- match1[1] = match1[1].replace(rule[1], rule[2]);
- content = content.replace(match1[0], "\n"+match1[1]+"\n");
- }
- }
-
- FILE.write(path, content);
-}
diff --git a/htdocs/includes/firephp/firephp-core/workspace/scripts/publish.js b/htdocs/includes/firephp/firephp-core/workspace/scripts/publish.js
deleted file mode 100644
index 39106e1b3b3..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/scripts/publish.js
+++ /dev/null
@@ -1,65 +0,0 @@
-
-var PINF_LOADER = require("pinf/loader"),
- SANDBOX = PINF_LOADER.getSandbox(),
- FILE = require("modules/file"),
- Q = require("modules/q"),
- SYSTEM = require("modules/system"),
- BUILD = require("./build"),
- JSON = require("modules/json"),
- SOURCEMINT_CLIENT = false;
-
-exports.main = function()
-{
- module.load({
- id: "private-registry.appspot.com/cadorn.com/github/com.cadorn.baby/projects/sourcemint/packages/client-js/",
- descriptor: {
- main: "lib/client.js"
- }
- }, function(id)
- {
- SOURCEMINT_CLIENT = require(id);
-
- publish();
- });
-}
-
-function publish()
-{
- var buildPath = BUILD.getBuildPath(),
- info = JSON.decode(FILE.read(buildPath + "/info.json")),
- descriptor = JSON.decode(FILE.read(FILE.dirname(FILE.dirname(FILE.dirname(module.id))) + "/package.json"));
-
- var bundles = {};
- bundles["firephp-core.zip"] = {
- "type": "zip",
- "options": {
- "archivePath": buildPath + "/FirePHPCore-" + info.version + ".zip",
- }
- };
-
- var packages = [
- {
- "uid": descriptor.uid,
- "stream": "stable",
- "version": info.version,
- "bundles": bundles
- }
- ];
-
- try
- {
- Q.when(SOURCEMINT_CLIENT.publish(packages), function(info)
- {
- module.print("\0green(Published:\n");
- console.log(info);
- module.print("\0)");
- }, function(e)
- {
- throw e;
- });
- }
- catch(e)
- {
- console.error("Error: " + e);
- }
-}
diff --git a/htdocs/includes/firephp/firephp-core/workspace/tpl/license.tpl.md b/htdocs/includes/firephp/firephp-core/workspace/tpl/license.tpl.md
deleted file mode 100644
index 1b0aaf26962..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/tpl/license.tpl.md
+++ /dev/null
@@ -1,21 +0,0 @@
-[MIT License](http://www.opensource.org/licenses/mit-license.php)
-
-Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/tpl/pear.package.tpl.xml b/htdocs/includes/firephp/firephp-core/workspace/tpl/pear.package.tpl.xml
deleted file mode 100644
index b9f3d65a43d..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/tpl/pear.package.tpl.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
- FirePHPCore
- pear.firephp.org
- Log variables from PHP to the browser (Firebug Console)
- Handles all communication between the PHP code on the server and the client. Also implements all core FirePHP features.
-
-
- Christoph Dorn
- cadorn
- christoph@christophdorn.com
- yes
-
-
- %%DATE%%
-
- %%VERSION%%
- 0.3
-
-
-
- %%STABILITY%%
- stable
-
-
- MIT
-
- No Notes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
- 1.4.5
-
-
-
-
-
-
-
diff --git a/htdocs/includes/firephp/firephp-core/workspace/tpl/readme.tpl.md b/htdocs/includes/firephp/firephp-core/workspace/tpl/readme.tpl.md
deleted file mode 100644
index 01264662e85..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/tpl/readme.tpl.md
+++ /dev/null
@@ -1,17 +0,0 @@
-FirePHPCore Server Library
-==========================
-
-Status: stable
-
-Version: [%%VERSION%%](https://github.com/firephp/firephp-core/tree/v%%VERSION%%)
-
-This archive contains the *FirePHPCore* PHP server library.
-
-Links
------
-
- * Documentation: http://docs.sourcemint.org/firephp.org/firephp/1/-docs/
- * Install: http://docs.sourcemint.org/firephp.org/firephp/1/-docs/Configuration/Traditional
- * Support: http://docs.sourcemint.org/firephp.org/firephp/1/-docs/OpenSource#support
- * Author: [Christoph Dorn](http://www.christophdorn.com/)
- * License: [MIT License](http://www.opensource.org/licenses/mit-license.php)
diff --git a/htdocs/includes/raven-js/.bower.json b/htdocs/includes/raven-js/.bower.json
deleted file mode 100644
index f42bb67b949..00000000000
--- a/htdocs/includes/raven-js/.bower.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "raven-js",
- "version": "1.1.19",
- "dependencies": {},
- "main": "dist/raven.js",
- "ignore": {},
- "homepage": "https://github.com/getsentry/raven-js",
- "_release": "1.1.19",
- "_resolution": {
- "type": "version",
- "tag": "1.1.19",
- "commit": "82b9c07b7545c6c10e297709a741eaa9b75f64e8"
- },
- "_source": "git://github.com/getsentry/raven-js.git",
- "_target": "~1.1.19",
- "_originalSource": "raven-js",
- "_direct": true
-}
\ No newline at end of file
diff --git a/htdocs/includes/raven-js/.gitignore b/htdocs/includes/raven-js/.gitignore
deleted file mode 100644
index 02111f91fe4..00000000000
--- a/htdocs/includes/raven-js/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-.DS_Store
-
-# Thumbnails
-._*
-
-# Files that might appear on external disk
-.Spotlight-V100
-.Trashes
-
-docs/html
-docs/doctrees
-
-build
-node_modules
-npm-debug.log
-
-scratch/
-
-*.pyc
-
-.idea
-aws.json
diff --git a/htdocs/includes/raven-js/.jshintrc b/htdocs/includes/raven-js/.jshintrc
deleted file mode 100644
index 6e4ec735331..00000000000
--- a/htdocs/includes/raven-js/.jshintrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "es3": true,
- "globalstrict": true,
- "browser": true,
- "predef": [
- "TraceKit",
- "console"
- ]
-}
diff --git a/htdocs/includes/raven-js/.travis.yml b/htdocs/includes/raven-js/.travis.yml
deleted file mode 100644
index 3b4f88c1e93..00000000000
--- a/htdocs/includes/raven-js/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-# language doesn't matter, we're only using phantom.js
-language: node_js
-node_js:
- - "0.10"
-script:
- - ./node_modules/.bin/grunt test build
-notifications:
- irc: "irc.freenode.org#sentry"
diff --git a/htdocs/includes/raven-js/AUTHORS b/htdocs/includes/raven-js/AUTHORS
deleted file mode 100644
index 7f1ae423217..00000000000
--- a/htdocs/includes/raven-js/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/getsentry/raven-js/graphs/contributors
diff --git a/htdocs/includes/raven-js/Gruntfile.js b/htdocs/includes/raven-js/Gruntfile.js
deleted file mode 100644
index fce8eb17272..00000000000
--- a/htdocs/includes/raven-js/Gruntfile.js
+++ /dev/null
@@ -1,254 +0,0 @@
-module.exports = function(grunt) {
- "use strict";
-
- var _ = require('lodash');
- var path = require('path');
-
- var coreFiles = [
- 'template/_header.js',
- 'vendor/**/*.js',
- 'src/**/*.js',
- 'template/_footer.js'
- ];
-
- var plugins = grunt.option('plugins');
- // Create plugin paths and verify hey exist
- plugins = _.map(plugins ? plugins.split(',') : [], function (plugin) {
- var path = 'plugins/' + plugin + '.js';
-
- if(!grunt.file.exists(path))
- throw new Error("Plugin '" + plugin + "' not found in plugins directory.");
-
- return path;
- });
-
- // Taken from http://dzone.com/snippets/calculate-all-combinations
- var combine = function (a) {
- var fn = function (n, src, got, all) {
- if (n === 0) {
- all.push(got);
- return;
- }
-
- for (var j = 0; j < src.length; j++) {
- fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all);
- }
- };
-
- var all = [a];
-
- for (var i = 0; i < a.length; i++) {
- fn(i, a, [], all);
- }
-
- return all;
- };
-
- var pluginCombinations = combine(grunt.file.expand('plugins/*.js'));
- var pluginConcatFiles = _.reduce(pluginCombinations, function (dict, comb) {
- var key = _.map(comb, function (plugin) {
- return path.basename(plugin, '.js');
- });
- key.sort();
-
- var dest = path.join('build/', key.join(','), '/raven.js');
- dict[dest] = coreFiles.concat(comb);
-
- return dict;
- }, {});
-
- var gruntConfig = {
- pkg: grunt.file.readJSON('package.json'),
- aws: grunt.file.exists('aws.json') ? grunt.file.readJSON('aws.json'): {},
-
- clean: ['build'],
- concat: {
- options: {
- separator: '\n',
- banner: grunt.file.read('template/_copyright.js'),
- process: true
- },
- core: {
- src: coreFiles.concat(plugins),
- dest: 'build/raven.js'
- },
- all: {
- files: pluginConcatFiles
- }
- },
-
- uglify: {
- options: {
- sourceMap: function (dest) {
- return path.join(path.dirname(dest),
- path.basename(dest, '.js')) +
- '.map';
- },
- sourceMappingURL: function (dest) {
- return path.basename(dest, '.js') + '.map';
- },
- preserveComments: 'some'
- },
- dist: {
- src: ['build/**/*.js'],
- ext: '.min.js',
- expand: true
- }
- },
-
- fixSourceMaps: {
- all: ['build/**/*.map']
- },
-
- jshint: {
- options: {
- jshintrc: '.jshintrc'
- },
- all: ['Gruntfile.js', 'src/**/*.js', 'plugins/**/*.js']
- },
-
- mocha: {
- all: {
- options: {
- mocha: {
- ignoreLeaks: true,
- grep: grunt.option('grep')
- },
- log: true,
- reporter: 'Dot',
- run: true
- },
- src: ['test/index.html'],
- nonull: true
- }
- },
-
- release: {
- options: {
- npm: false,
- commitMessage: 'Release <%= version %>'
- }
- },
-
- s3: {
- options: {
- key: '<%= aws.key %>',
- secret: '<%= aws.secret %>',
- bucket: '<%= aws.bucket %>',
- access: 'public-read',
- // Limit concurrency
- maxOperations: 20,
- headers: {
- // Surrogate-Key header for Fastly to purge by release
- 'x-amz-meta-surrogate-key': '<%= pkg.release %>'
- }
- },
- all: {
- upload: [{
- src: 'build/**/*',
- dest: '<%= pkg.release %>/',
- rel: 'build/'
- }]
- }
- },
-
- connect: {
- test: {
- options: {
- port: 8000,
- debug: true,
- keepalive: true
- }
- },
-
- docs: {
- options: {
- port: 8000,
- debug: true,
- base: 'docs/html',
- keepalive: true
- }
- }
- },
-
- copy: {
- dist: {
- expand: true,
- flatten: true,
- cwd: 'build/',
- src: '**',
- dest: 'dist/'
- }
- }
- };
-
- grunt.initConfig(gruntConfig);
-
- // Custom Grunt tasks
- grunt.registerTask('version', function() {
- var pkg = grunt.config.get('pkg');
- if (grunt.option('dev')) {
- pkg.release = 'dev';
- pkg.version = grunt.config.get('gitinfo').local.branch.current.shortSHA;
- } else {
- pkg.release = pkg.version;
- }
- grunt.config.set('pkg', pkg);
- });
-
- grunt.registerMultiTask('fixSourceMaps', function () {
- this.files.forEach(function (f) {
- var result;
- var sources = f.src.filter(function (filepath) {
- if (!grunt.file.exists(filepath)) {
- grunt.log.warn('Source file "' + filepath + '" not found.');
- return false;
- } else {
- return true;
- }
- }).forEach(function (filepath) {
- var base = path.dirname(filepath);
- var sMap = grunt.file.readJSON(filepath);
- sMap.file = path.relative(base, sMap.file);
- sMap.sources = _.map(sMap.sources, path.relative.bind(path, base));
-
- grunt.file.write(filepath, JSON.stringify(sMap));
- // Print a success message.
- grunt.log.writeln('File "' + filepath + '" fixed.');
- });
- });
- });
-
- // Grunt contrib tasks
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-concat');
- grunt.loadNpmTasks('grunt-contrib-clean');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-connect');
- grunt.loadNpmTasks('grunt-contrib-copy');
-
- // 3rd party Grunt tasks
- grunt.loadNpmTasks('grunt-mocha');
- grunt.loadNpmTasks('grunt-release');
- grunt.loadNpmTasks('grunt-s3');
- grunt.loadNpmTasks('grunt-gitinfo');
-
- // Build tasks
- grunt.registerTask('_prep', ['clean', 'gitinfo', 'version']);
- grunt.registerTask('concat.core', ['_prep', 'concat:core']);
- grunt.registerTask('concat.all', ['_prep', 'concat:all']);
- grunt.registerTask('build.core', ['concat.core', 'uglify', 'fixSourceMaps']);
- grunt.registerTask('build.all', ['concat.all', 'uglify', 'fixSourceMaps']);
- grunt.registerTask('build', ['build.all']);
- grunt.registerTask('dist', ['build.core', 'copy:dist']);
-
- // Test task
- grunt.registerTask('test', ['jshint', 'mocha']);
-
- // Webserver tasks
- grunt.registerTask('run:test', ['connect:test']);
- grunt.registerTask('run:docs', ['connect:docs']);
-
- grunt.registerTask('publish', ['test', 'build.all', 's3']);
- grunt.registerTask('default', ['test']);
-};
diff --git a/htdocs/includes/raven-js/LICENSE b/htdocs/includes/raven-js/LICENSE
deleted file mode 100644
index 2752d4c7395..00000000000
--- a/htdocs/includes/raven-js/LICENSE
+++ /dev/null
@@ -1,9 +0,0 @@
-Copyright (c) 2014 Matt Robenolt and other contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/htdocs/includes/raven-js/Makefile b/htdocs/includes/raven-js/Makefile
deleted file mode 100644
index f378b15f09d..00000000000
--- a/htdocs/includes/raven-js/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-develop: update-submodules
- npm install .
-
-update-submodules:
- git submodule init
- git submodule update
-
-docs:
- cd docs; $(MAKE) html
-
-docs-live:
- while true; do \
- sleep 2; \
- $(MAKE) docs; \
- done
-
-clean:
- rm -rf docs/html
-
-.PHONY: develop update-submodules docs docs-live clean
diff --git a/htdocs/includes/raven-js/README.md b/htdocs/includes/raven-js/README.md
deleted file mode 100644
index 058a44fe41f..00000000000
--- a/htdocs/includes/raven-js/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Raven.js [](https://travis-ci.org/getsentry/raven-js)
-
-Raven.js is a tiny standalone JavaScript client for [Sentry](https://www.getsentry.com/).
-
-**Raven.js v1.1 requires Sentry v6.0 or later.**
-
-## Resources
-
- * [Download](http://ravenjs.com)
- * [Documentation](https://raven-js.readthedocs.org)
- * [Bug Tracker](https://github.com/getsentry/raven-js/issues)
- * [IRC](irc://chat.freenode.net/sentry) (chat.freenode.net, #sentry)
- * Follow [@mattrobenolt](https://twitter.com/mattrobenolt) on Twitter for updates
diff --git a/htdocs/includes/raven-js/bower.json b/htdocs/includes/raven-js/bower.json
deleted file mode 100644
index ba54c40ac65..00000000000
--- a/htdocs/includes/raven-js/bower.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "raven-js",
- "version": "1.1.19",
- "dependencies": {},
- "main": "dist/raven.js",
- "ignore": {}
-}
diff --git a/htdocs/includes/raven-js/dist/raven.js b/htdocs/includes/raven-js/dist/raven.js
deleted file mode 100644
index 195d002ab65..00000000000
--- a/htdocs/includes/raven-js/dist/raven.js
+++ /dev/null
@@ -1,1909 +0,0 @@
-/*! Raven.js 1.1.19 (b51bc89) | github.com/getsentry/raven-js */
-
-/*
- * Includes TraceKit
- * https://github.com/getsentry/TraceKit
- *
- * Copyright 2015 Matt Robenolt and other contributors
- * Released under the BSD license
- * https://github.com/getsentry/raven-js/blob/master/LICENSE
- *
- */
-;(function(window, undefined){
-'use strict';
-
-/*
- TraceKit - Cross brower stack traces - github.com/occ/TraceKit
- MIT license
-*/
-
-var TraceKit = {
- remoteFetching: false,
- collectWindowErrors: true,
- // 3 lines before, the offending line, 3 lines after
- linesOfContext: 7
-};
-
-// global reference to slice
-var _slice = [].slice;
-var UNKNOWN_FUNCTION = '?';
-
-
-/**
- * TraceKit.wrap: Wrap any function in a TraceKit reporter
- * Example: func = TraceKit.wrap(func);
- *
- * @param {Function} func Function to be wrapped
- * @return {Function} The wrapped func
- */
-TraceKit.wrap = function traceKitWrapper(func) {
- function wrapped() {
- try {
- return func.apply(this, arguments);
- } catch (e) {
- TraceKit.report(e);
- throw e;
- }
- }
- return wrapped;
-};
-
-/**
- * TraceKit.report: cross-browser processing of unhandled exceptions
- *
- * Syntax:
- * TraceKit.report.subscribe(function(stackInfo) { ... })
- * TraceKit.report.unsubscribe(function(stackInfo) { ... })
- * TraceKit.report(exception)
- * try { ...code... } catch(ex) { TraceKit.report(ex); }
- *
- * Supports:
- * - Firefox: full stack trace with line numbers, plus column number
- * on top frame; column number is not guaranteed
- * - Opera: full stack trace with line and column numbers
- * - Chrome: full stack trace with line and column numbers
- * - Safari: line and column number for the top frame only; some frames
- * may be missing, and column number is not guaranteed
- * - IE: line and column number for the top frame only; some frames
- * may be missing, and column number is not guaranteed
- *
- * In theory, TraceKit should work on all of the following versions:
- * - IE5.5+ (only 8.0 tested)
- * - Firefox 0.9+ (only 3.5+ tested)
- * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
- * Exceptions Have Stacktrace to be enabled in opera:config)
- * - Safari 3+ (only 4+ tested)
- * - Chrome 1+ (only 5+ tested)
- * - Konqueror 3.5+ (untested)
- *
- * Requires TraceKit.computeStackTrace.
- *
- * Tries to catch all unhandled exceptions and report them to the
- * subscribed handlers. Please note that TraceKit.report will rethrow the
- * exception. This is REQUIRED in order to get a useful stack trace in IE.
- * If the exception does not reach the top of the browser, you will only
- * get a stack trace from the point where TraceKit.report was called.
- *
- * Handlers receive a stackInfo object as described in the
- * TraceKit.computeStackTrace docs.
- */
-TraceKit.report = (function reportModuleWrapper() {
- var handlers = [],
- lastArgs = null,
- lastException = null,
- lastExceptionStack = null;
-
- /**
- * Add a crash handler.
- * @param {Function} handler
- */
- function subscribe(handler) {
- installGlobalHandler();
- handlers.push(handler);
- }
-
- /**
- * Remove a crash handler.
- * @param {Function} handler
- */
- function unsubscribe(handler) {
- for (var i = handlers.length - 1; i >= 0; --i) {
- if (handlers[i] === handler) {
- handlers.splice(i, 1);
- }
- }
- }
-
- /**
- * Remove all crash handlers.
- */
- function unsubscribeAll() {
- uninstallGlobalHandler();
- handlers = [];
- }
-
- /**
- * Dispatch stack information to all handlers.
- * @param {Object.} stack
- */
- function notifyHandlers(stack, isWindowError) {
- var exception = null;
- if (isWindowError && !TraceKit.collectWindowErrors) {
- return;
- }
- for (var i in handlers) {
- if (hasKey(handlers, i)) {
- try {
- handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
- } catch (inner) {
- exception = inner;
- }
- }
- }
-
- if (exception) {
- throw exception;
- }
- }
-
- var _oldOnerrorHandler, _onErrorHandlerInstalled;
-
- /**
- * Ensures all global unhandled exceptions are recorded.
- * Supported by Gecko and IE.
- * @param {string} message Error message.
- * @param {string} url URL of script that generated the exception.
- * @param {(number|string)} lineNo The line number at which the error
- * occurred.
- * @param {?(number|string)} colNo The column number at which the error
- * occurred.
- * @param {?Error} ex The actual Error object.
- */
- function traceKitWindowOnError(message, url, lineNo, colNo, ex) {
- var stack = null;
-
- if (lastExceptionStack) {
- TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);
- processLastException();
- } else if (ex) {
- // New chrome and blink send along a real error object
- // Let's just report that like a normal error.
- // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
- stack = TraceKit.computeStackTrace(ex);
- notifyHandlers(stack, true);
- } else {
- var location = {
- 'url': url,
- 'line': lineNo,
- 'column': colNo
- };
- location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line);
- location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line);
- stack = {
- 'message': message,
- 'url': document.location.href,
- 'stack': [location]
- };
- notifyHandlers(stack, true);
- }
-
- if (_oldOnerrorHandler) {
- return _oldOnerrorHandler.apply(this, arguments);
- }
-
- return false;
- }
-
- function installGlobalHandler ()
- {
- if (_onErrorHandlerInstalled) {
- return;
- }
- _oldOnerrorHandler = window.onerror;
- window.onerror = traceKitWindowOnError;
- _onErrorHandlerInstalled = true;
- }
-
- function uninstallGlobalHandler ()
- {
- if (!_onErrorHandlerInstalled) {
- return;
- }
- window.onerror = _oldOnerrorHandler;
- _onErrorHandlerInstalled = false;
- _oldOnerrorHandler = undefined;
- }
-
- function processLastException() {
- var _lastExceptionStack = lastExceptionStack,
- _lastArgs = lastArgs;
- lastArgs = null;
- lastExceptionStack = null;
- lastException = null;
- notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
- }
-
- /**
- * Reports an unhandled Error to TraceKit.
- * @param {Error} ex
- * @param {?boolean} rethrow If false, do not re-throw the exception.
- * Only used for window.onerror to not cause an infinite loop of
- * rethrowing.
- */
- function report(ex, rethrow) {
- var args = _slice.call(arguments, 1);
- if (lastExceptionStack) {
- if (lastException === ex) {
- return; // already caught by an inner catch block, ignore
- } else {
- processLastException();
- }
- }
-
- var stack = TraceKit.computeStackTrace(ex);
- lastExceptionStack = stack;
- lastException = ex;
- lastArgs = args;
-
- // If the stack trace is incomplete, wait for 2 seconds for
- // slow slow IE to see if onerror occurs or not before reporting
- // this exception; otherwise, we will end up with an incomplete
- // stack trace
- window.setTimeout(function () {
- if (lastException === ex) {
- processLastException();
- }
- }, (stack.incomplete ? 2000 : 0));
-
- if (rethrow !== false) {
- throw ex; // re-throw to propagate to the top level (and cause window.onerror)
- }
- }
-
- report.subscribe = subscribe;
- report.unsubscribe = unsubscribe;
- report.uninstall = unsubscribeAll;
- return report;
-}());
-
-/**
- * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
- *
- * Syntax:
- * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
- * Returns:
- * s.name - exception name
- * s.message - exception message
- * s.stack[i].url - JavaScript or HTML file URL
- * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
- * s.stack[i].args - arguments passed to the function, if known
- * s.stack[i].line - line number, if known
- * s.stack[i].column - column number, if known
- * s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line#
- *
- * Supports:
- * - Firefox: full stack trace with line numbers and unreliable column
- * number on top frame
- * - Opera 10: full stack trace with line and column numbers
- * - Opera 9-: full stack trace with line numbers
- * - Chrome: full stack trace with line and column numbers
- * - Safari: line and column number for the topmost stacktrace element
- * only
- * - IE: no line numbers whatsoever
- *
- * Tries to guess names of anonymous functions by looking for assignments
- * in the source code. In IE and Safari, we have to guess source file names
- * by searching for function bodies inside all page scripts. This will not
- * work for scripts that are loaded cross-domain.
- * Here be dragons: some function names may be guessed incorrectly, and
- * duplicate functions may be mismatched.
- *
- * TraceKit.computeStackTrace should only be used for tracing purposes.
- * Logging of unhandled exceptions should be done with TraceKit.report,
- * which builds on top of TraceKit.computeStackTrace and provides better
- * IE support by utilizing the window.onerror event to retrieve information
- * about the top of the stack.
- *
- * Note: In IE and Safari, no stack trace is recorded on the Error object,
- * so computeStackTrace instead walks its *own* chain of callers.
- * This means that:
- * * in Safari, some methods may be missing from the stack trace;
- * * in IE, the topmost function in the stack trace will always be the
- * caller of computeStackTrace.
- *
- * This is okay for tracing (because you are likely to be calling
- * computeStackTrace from the function you want to be the topmost element
- * of the stack trace anyway), but not okay for logging unhandled
- * exceptions (because your catch block will likely be far away from the
- * inner function that actually caused the exception).
- *
- */
-TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
- var debug = false,
- sourceCache = {};
-
- /**
- * Attempts to retrieve source code via XMLHttpRequest, which is used
- * to look up anonymous function names.
- * @param {string} url URL of source code.
- * @return {string} Source contents.
- */
- function loadSource(url) {
- if (!TraceKit.remoteFetching) { //Only attempt request if remoteFetching is on.
- return '';
- }
- try {
- var getXHR = function() {
- try {
- return new window.XMLHttpRequest();
- } catch (e) {
- // explicitly bubble up the exception if not found
- return new window.ActiveXObject('Microsoft.XMLHTTP');
- }
- };
-
- var request = getXHR();
- request.open('GET', url, false);
- request.send('');
- return request.responseText;
- } catch (e) {
- return '';
- }
- }
-
- /**
- * Retrieves source code from the source code cache.
- * @param {string} url URL of source code.
- * @return {Array.} Source contents.
- */
- function getSource(url) {
- if (!isString(url)) return [];
- if (!hasKey(sourceCache, url)) {
- // URL needs to be able to fetched within the acceptable domain. Otherwise,
- // cross-domain errors will be triggered.
- var source = '';
- if (url.indexOf(document.domain) !== -1) {
- source = loadSource(url);
- }
- sourceCache[url] = source ? source.split('\n') : [];
- }
-
- return sourceCache[url];
- }
-
- /**
- * Tries to use an externally loaded copy of source code to determine
- * the name of a function by looking at the name of the variable it was
- * assigned to, if any.
- * @param {string} url URL of source code.
- * @param {(string|number)} lineNo Line number in source code.
- * @return {string} The function name, if discoverable.
- */
- function guessFunctionName(url, lineNo) {
- var reFunctionArgNames = /function ([^(]*)\(([^)]*)\)/,
- reGuessFunction = /['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,
- line = '',
- maxLines = 10,
- source = getSource(url),
- m;
-
- if (!source.length) {
- return UNKNOWN_FUNCTION;
- }
-
- // Walk backwards from the first line in the function until we find the line which
- // matches the pattern above, which is the function definition
- for (var i = 0; i < maxLines; ++i) {
- line = source[lineNo - i] + line;
-
- if (!isUndefined(line)) {
- if ((m = reGuessFunction.exec(line))) {
- return m[1];
- } else if ((m = reFunctionArgNames.exec(line))) {
- return m[1];
- }
- }
- }
-
- return UNKNOWN_FUNCTION;
- }
-
- /**
- * Retrieves the surrounding lines from where an exception occurred.
- * @param {string} url URL of source code.
- * @param {(string|number)} line Line number in source code to centre
- * around for context.
- * @return {?Array.} Lines of source code.
- */
- function gatherContext(url, line) {
- var source = getSource(url);
-
- if (!source.length) {
- return null;
- }
-
- var context = [],
- // linesBefore & linesAfter are inclusive with the offending line.
- // if linesOfContext is even, there will be one extra line
- // *before* the offending line.
- linesBefore = Math.floor(TraceKit.linesOfContext / 2),
- // Add one extra line if linesOfContext is odd
- linesAfter = linesBefore + (TraceKit.linesOfContext % 2),
- start = Math.max(0, line - linesBefore - 1),
- end = Math.min(source.length, line + linesAfter - 1);
-
- line -= 1; // convert to 0-based index
-
- for (var i = start; i < end; ++i) {
- if (!isUndefined(source[i])) {
- context.push(source[i]);
- }
- }
-
- return context.length > 0 ? context : null;
- }
-
- /**
- * Escapes special characters, except for whitespace, in a string to be
- * used inside a regular expression as a string literal.
- * @param {string} text The string.
- * @return {string} The escaped string literal.
- */
- function escapeRegExp(text) {
- return text.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g, '\\$&');
- }
-
- /**
- * Escapes special characters in a string to be used inside a regular
- * expression as a string literal. Also ensures that HTML entities will
- * be matched the same as their literal friends.
- * @param {string} body The string.
- * @return {string} The escaped string.
- */
- function escapeCodeAsRegExpForMatchingInsideHTML(body) {
- return escapeRegExp(body).replace('<', '(?:<|<)').replace('>', '(?:>|>)').replace('&', '(?:&|&)').replace('"', '(?:"|")').replace(/\s+/g, '\\s+');
- }
-
- /**
- * Determines where a code fragment occurs in the source code.
- * @param {RegExp} re The function definition.
- * @param {Array.} urls A list of URLs to search.
- * @return {?Object.} An object containing
- * the url, line, and column number of the defined function.
- */
- function findSourceInUrls(re, urls) {
- var source, m;
- for (var i = 0, j = urls.length; i < j; ++i) {
- // console.log('searching', urls[i]);
- if ((source = getSource(urls[i])).length) {
- source = source.join('\n');
- if ((m = re.exec(source))) {
- // console.log('Found function in ' + urls[i]);
-
- return {
- 'url': urls[i],
- 'line': source.substring(0, m.index).split('\n').length,
- 'column': m.index - source.lastIndexOf('\n', m.index) - 1
- };
- }
- }
- }
-
- // console.log('no match');
-
- return null;
- }
-
- /**
- * Determines at which column a code fragment occurs on a line of the
- * source code.
- * @param {string} fragment The code fragment.
- * @param {string} url The URL to search.
- * @param {(string|number)} line The line number to examine.
- * @return {?number} The column number.
- */
- function findSourceInLine(fragment, url, line) {
- var source = getSource(url),
- re = new RegExp('\\b' + escapeRegExp(fragment) + '\\b'),
- m;
-
- line -= 1;
-
- if (source && source.length > line && (m = re.exec(source[line]))) {
- return m.index;
- }
-
- return null;
- }
-
- /**
- * Determines where a function was defined within the source code.
- * @param {(Function|string)} func A function reference or serialized
- * function definition.
- * @return {?Object.} An object containing
- * the url, line, and column number of the defined function.
- */
- function findSourceByFunctionBody(func) {
- var urls = [window.location.href],
- scripts = document.getElementsByTagName('script'),
- body,
- code = '' + func,
- codeRE = /^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,
- eventRE = /^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,
- re,
- parts,
- result;
-
- for (var i = 0; i < scripts.length; ++i) {
- var script = scripts[i];
- if (script.src) {
- urls.push(script.src);
- }
- }
-
- if (!(parts = codeRE.exec(code))) {
- re = new RegExp(escapeRegExp(code).replace(/\s+/g, '\\s+'));
- }
-
- // not sure if this is really necessary, but I don’t have a test
- // corpus large enough to confirm that and it was in the original.
- else {
- var name = parts[1] ? '\\s+' + parts[1] : '',
- args = parts[2].split(',').join('\\s*,\\s*');
-
- body = escapeRegExp(parts[3]).replace(/;$/, ';?'); // semicolon is inserted if the function ends with a comment.replace(/\s+/g, '\\s+');
- re = new RegExp('function' + name + '\\s*\\(\\s*' + args + '\\s*\\)\\s*{\\s*' + body + '\\s*}');
- }
-
- // look for a normal function definition
- if ((result = findSourceInUrls(re, urls))) {
- return result;
- }
-
- // look for an old-school event handler function
- if ((parts = eventRE.exec(code))) {
- var event = parts[1];
- body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]);
-
- // look for a function defined in HTML as an onXXX handler
- re = new RegExp('on' + event + '=[\\\'"]\\s*' + body + '\\s*[\\\'"]', 'i');
-
- if ((result = findSourceInUrls(re, urls[0]))) {
- return result;
- }
-
- // look for ???
- re = new RegExp(body);
-
- if ((result = findSourceInUrls(re, urls))) {
- return result;
- }
- }
-
- return null;
- }
-
- // Contents of Exception in various browsers.
- //
- // SAFARI:
- // ex.message = Can't find variable: qq
- // ex.line = 59
- // ex.sourceId = 580238192
- // ex.sourceURL = http://...
- // ex.expressionBeginOffset = 96
- // ex.expressionCaretOffset = 98
- // ex.expressionEndOffset = 98
- // ex.name = ReferenceError
- //
- // FIREFOX:
- // ex.message = qq is not defined
- // ex.fileName = http://...
- // ex.lineNumber = 59
- // ex.columnNumber = 69
- // ex.stack = ...stack trace... (see the example below)
- // ex.name = ReferenceError
- //
- // CHROME:
- // ex.message = qq is not defined
- // ex.name = ReferenceError
- // ex.type = not_defined
- // ex.arguments = ['aa']
- // ex.stack = ...stack trace...
- //
- // INTERNET EXPLORER:
- // ex.message = ...
- // ex.name = ReferenceError
- //
- // OPERA:
- // ex.message = ...message... (see the example below)
- // ex.name = ReferenceError
- // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
- // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
-
- /**
- * Computes stack trace information from the stack property.
- * Chrome and Gecko use this property.
- * @param {Error} ex
- * @return {?Object.} Stack trace information.
- */
- function computeStackTraceFromStackProp(ex) {
- if (!ex.stack) {
- return null;
- }
-
- var chrome = /^\s*at (.*?) ?\(?((?:file|https?|chrome-extension):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
- gecko = /^\s*(.*?)(?:\((.*?)\))?@((?:file|https?|chrome).*?):(\d+)(?::(\d+))?\s*$/i,
- lines = ex.stack.split('\n'),
- stack = [],
- parts,
- element,
- reference = /^(.*) is undefined$/.exec(ex.message);
-
- for (var i = 0, j = lines.length; i < j; ++i) {
- if ((parts = gecko.exec(lines[i]))) {
- element = {
- 'url': parts[3],
- 'func': parts[1] || UNKNOWN_FUNCTION,
- 'args': parts[2] ? parts[2].split(',') : '',
- 'line': +parts[4],
- 'column': parts[5] ? +parts[5] : null
- };
- } else if ((parts = chrome.exec(lines[i]))) {
- element = {
- 'url': parts[2],
- 'func': parts[1] || UNKNOWN_FUNCTION,
- 'line': +parts[3],
- 'column': parts[4] ? +parts[4] : null
- };
- } else {
- continue;
- }
-
- if (!element.func && element.line) {
- element.func = guessFunctionName(element.url, element.line);
- }
-
- if (element.line) {
- element.context = gatherContext(element.url, element.line);
- }
-
- stack.push(element);
- }
-
- if (!stack.length) {
- return null;
- }
-
- if (stack[0].line && !stack[0].column && reference) {
- stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line);
- } else if (!stack[0].column && !isUndefined(ex.columnNumber)) {
- // FireFox uses this awesome columnNumber property for its top frame
- // Also note, Firefox's column number is 0-based and everything else expects 1-based,
- // so adding 1
- stack[0].column = ex.columnNumber + 1;
- }
-
- return {
- 'name': ex.name,
- 'message': ex.message,
- 'url': document.location.href,
- 'stack': stack
- };
- }
-
- /**
- * Computes stack trace information from the stacktrace property.
- * Opera 10 uses this property.
- * @param {Error} ex
- * @return {?Object.} Stack trace information.
- */
- function computeStackTraceFromStacktraceProp(ex) {
- // Access and store the stacktrace property before doing ANYTHING
- // else to it because Opera is not very good at providing it
- // reliably in other circumstances.
- var stacktrace = ex.stacktrace;
-
- var testRE = / line (\d+), column (\d+) in (?:]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,
- lines = stacktrace.split('\n'),
- stack = [],
- parts;
-
- for (var i = 0, j = lines.length; i < j; i += 2) {
- if ((parts = testRE.exec(lines[i]))) {
- var element = {
- 'line': +parts[1],
- 'column': +parts[2],
- 'func': parts[3] || parts[4],
- 'args': parts[5] ? parts[5].split(',') : [],
- 'url': parts[6]
- };
-
- if (!element.func && element.line) {
- element.func = guessFunctionName(element.url, element.line);
- }
- if (element.line) {
- try {
- element.context = gatherContext(element.url, element.line);
- } catch (exc) {}
- }
-
- if (!element.context) {
- element.context = [lines[i + 1]];
- }
-
- stack.push(element);
- }
- }
-
- if (!stack.length) {
- return null;
- }
-
- return {
- 'name': ex.name,
- 'message': ex.message,
- 'url': document.location.href,
- 'stack': stack
- };
- }
-
- /**
- * NOT TESTED.
- * Computes stack trace information from an error message that includes
- * the stack trace.
- * Opera 9 and earlier use this method if the option to show stack
- * traces is turned on in opera:config.
- * @param {Error} ex
- * @return {?Object.} Stack information.
- */
- function computeStackTraceFromOperaMultiLineMessage(ex) {
- // Opera includes a stack trace into the exception message. An example is:
- //
- // Statement on line 3: Undefined variable: undefinedFunc
- // Backtrace:
- // Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz
- // undefinedFunc(a);
- // Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy
- // zzz(x, y, z);
- // Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx
- // yyy(a, a, a);
- // Line 1 of function script
- // try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); }
- // ...
-
- var lines = ex.message.split('\n');
- if (lines.length < 4) {
- return null;
- }
-
- var lineRE1 = /^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
- lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
- lineRE3 = /^\s*Line (\d+) of function script\s*$/i,
- stack = [],
- scripts = document.getElementsByTagName('script'),
- inlineScriptBlocks = [],
- parts,
- i,
- len,
- source;
-
- for (i in scripts) {
- if (hasKey(scripts, i) && !scripts[i].src) {
- inlineScriptBlocks.push(scripts[i]);
- }
- }
-
- for (i = 2, len = lines.length; i < len; i += 2) {
- var item = null;
- if ((parts = lineRE1.exec(lines[i]))) {
- item = {
- 'url': parts[2],
- 'func': parts[3],
- 'line': +parts[1]
- };
- } else if ((parts = lineRE2.exec(lines[i]))) {
- item = {
- 'url': parts[3],
- 'func': parts[4]
- };
- var relativeLine = (+parts[1]); // relative to the start of the
-
-
-
-