From c32314139a089de1ddcd3777dcfc9e8bdc9d04c8 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 4 Dec 2020 01:43:36 +0800 Subject: [PATCH] Upgrade cached dependencies and remove vendor dir --- composer.json | 5 +- composer.lock | 85 +- composer.phar | Bin 1070308 -> 0 bytes docker-bootstrap.sh | 3 +- vendor/autoload.php | 7 - vendor/composer/ClassLoader.php | 386 - vendor/composer/autoload_classmap.php | 9 - vendor/composer/autoload_files.php | 10 - vendor/composer/autoload_namespaces.php | 10 - vendor/composer/autoload_psr4.php | 11 - vendor/composer/autoload_real.php | 55 - vendor/composer/installed.json | 152 - vendor/fieryprophet/php-sandbox/.gitignore | 1 - .../fieryprophet/php-sandbox/.scrutinizer.yml | 6 - vendor/fieryprophet/php-sandbox/.travis.yml | 18 - vendor/fieryprophet/php-sandbox/CHANGELOG.md | 69 - vendor/fieryprophet/php-sandbox/LICENSE | 31 - vendor/fieryprophet/php-sandbox/MANUAL.html | 766 - vendor/fieryprophet/php-sandbox/README.md | 134 - vendor/fieryprophet/php-sandbox/composer.json | 26 - vendor/fieryprophet/php-sandbox/composer.lock | 3074 --- .../docs/classes/PHPSandbox.Error.html | 2459 -- .../docs/classes/PHPSandbox.PHPSandbox.html | 20543 ---------------- .../PHPSandbox.SandboxWhitelistVisitor.html | 466 - .../classes/PHPSandbox.SandboxedString.html | 706 - .../classes/PHPSandbox.ValidatorVisitor.html | 635 - .../classes/PHPSandbox.WhitelistVisitor.html | 470 - .../php-sandbox/docs/css/jquery.iviewer.css | 65 - .../css/phpdocumentor-clean-icons/Read Me.txt | 3 - .../fonts/phpdocumentor-clean-icons.dev.svg | 17 - .../fonts/phpdocumentor-clean-icons.eot | Bin 2324 -> 0 bytes .../fonts/phpdocumentor-clean-icons.svg | 17 - .../fonts/phpdocumentor-clean-icons.ttf | Bin 2080 -> 0 bytes .../fonts/phpdocumentor-clean-icons.woff | Bin 1832 -> 0 bytes .../css/phpdocumentor-clean-icons/lte-ie7.js | 30 - .../css/phpdocumentor-clean-icons/style.css | 48 - .../php-sandbox/docs/css/prism.css | 204 - .../php-sandbox/docs/css/template.css | 418 - .../php-sandbox/docs/files/Error.php.html | 280 - .../php-sandbox/docs/files/Error.php.txt | 160 - .../docs/files/PHPSandbox.php.html | 280 - .../php-sandbox/docs/files/PHPSandbox.php.txt | 7317 ------ .../files/SandboxWhitelistVisitor.php.html | 280 - .../files/SandboxWhitelistVisitor.php.txt | 62 - .../docs/files/SandboxedString.php.html | 280 - .../docs/files/SandboxedString.php.txt | 93 - .../docs/files/ValidatorVisitor.php.html | 280 - .../docs/files/ValidatorVisitor.php.txt | 623 - .../docs/files/WhitelistVisitor.php.html | 280 - .../docs/files/WhitelistVisitor.php.txt | 95 - .../php-sandbox/docs/graphs/class.html | 167 - .../php-sandbox/docs/images/custom-icons.svg | 116 - .../docs/images/hierarchy-item.png | Bin 236 -> 0 bytes .../docs/images/icon-class-13x13.png | Bin 428 -> 0 bytes .../php-sandbox/docs/images/icon-class.svg | 77 - .../docs/images/icon-interface-13x13.png | Bin 308 -> 0 bytes .../docs/images/icon-interface.svg | 73 - .../docs/images/icon-trait-13x13.png | Bin 340 -> 0 bytes .../php-sandbox/docs/images/icon-trait.svg | 73 - .../php-sandbox/docs/images/iviewer/grab.cur | Bin 1150 -> 0 bytes .../php-sandbox/docs/images/iviewer/hand.cur | Bin 1150 -> 0 bytes .../images/iviewer/iviewer.rotate_left.png | Bin 1493 -> 0 bytes .../images/iviewer/iviewer.rotate_right.png | Bin 1482 -> 0 bytes .../docs/images/iviewer/iviewer.zoom_fit.png | Bin 1252 -> 0 bytes .../docs/images/iviewer/iviewer.zoom_in.png | Bin 1420 -> 0 bytes .../docs/images/iviewer/iviewer.zoom_out.png | Bin 1416 -> 0 bytes .../docs/images/iviewer/iviewer.zoom_zero.png | Bin 1091 -> 0 bytes .../fieryprophet/php-sandbox/docs/index.html | 213 - .../docs/js/jquery.dotdotdot-1.5.9.js | 602 - .../docs/js/jquery.dotdotdot-1.5.9.min.js | 15 - .../php-sandbox/docs/js/jquery.iviewer.js | 1169 - .../php-sandbox/docs/js/jquery.iviewer.min.js | 47 - .../docs/js/jquery.smooth-scroll.js | 32 - .../php-sandbox/docs/js/prism.min.js | 16 - .../docs/namespaces/PHPSandbox.html | 236 - .../php-sandbox/docs/namespaces/default.html | 213 - ...-file_9ea3fb738d2b3bb3e76d9fcf099a195a.dat | Bin 57312 -> 0 bytes .../phpdoc-cache-2e/phpdoc-cache-settings.dat | Bin 113 -> 0 bytes ...-file_e9d34eadaeaefe21f3f7d9637905ed7e.dat | Bin 70567 -> 0 bytes ...-file_71b26f83a6d8fca5a6e6d0e38043da73.dat | Bin 12615 -> 0 bytes ...-file_1650e678d9bfd900b640a959c8b1e0a7.dat | Bin 14762 -> 0 bytes ...-file_1ab0dec1234e249d2c697ed723a0a834.dat | Bin 24042 -> 0 bytes ...-file_28dd4a0d5fd4671edbec88b87b53efe2.dat | Bin 1384258 -> 0 bytes .../php-sandbox/docs/reports/deprecated.html | 154 - .../php-sandbox/docs/reports/errors.html | 224 - .../php-sandbox/docs/reports/markers.html | 155 - .../fieryprophet/php-sandbox/phpunit.xml.dist | 15 - vendor/fieryprophet/php-sandbox/src/Error.php | 160 - .../php-sandbox/src/PHPSandbox.php | 7151 ------ .../src/SandboxWhitelistVisitor.php | 62 - .../php-sandbox/src/SandboxedString.php | 93 - .../php-sandbox/src/ValidatorVisitor.php | 623 - .../php-sandbox/src/WhitelistVisitor.php | 95 - .../php-sandbox/src/functions.php | 62 - .../Tests/Config/DefaultConfigTest.php | 405 - .../php-sandbox/tests/bootstrap.php | 3 - .../php-sandbox/toolkit/index.php | 1859 -- .../toolkit/templates/001 - Hello World.json | 1 - .../templates/002 - Evil Function.json | 1 - .../toolkit/templates/003 - Whitelisting.json | 1 - .../toolkit/templates/004 - Setup Code.json | 1 - .../toolkit/templates/005 - Ola World.json | 1 - .../toolkit/templates/006 - Superglobals.json | 1 - .../templates/007 - Magic Constants.json | 1 - .../toolkit/templates/008 - Namespaces.json | 1 - .../templates/009 - Redefining Classes.json | 1 - .../jeremeamia/FunctionParser/.gitattributes | 9 - vendor/jeremeamia/FunctionParser/.gitignore | 6 - vendor/jeremeamia/FunctionParser/.travis.yml | 15 - vendor/jeremeamia/FunctionParser/LICENSE | 16 - vendor/jeremeamia/FunctionParser/README.md | 81 - vendor/jeremeamia/FunctionParser/build.xml | 138 - .../jeremeamia/FunctionParser/composer.json | 24 - .../FunctionParser/demo/class-method.php | 26 - .../FunctionParser/demo/simple-closure.php | 28 - .../FunctionParser/phpunit.xml.dist | 34 - .../FunctionParser/src/FunctionParser.php | 388 - .../jeremeamia/FunctionParser/src/Token.php | 249 - .../FunctionParser/src/Tokenizer.php | 444 - .../IntegrationTest/FunctionParserTest.php | 175 - .../tests/UnitTest/FunctionParserTest.php | 185 - .../tests/UnitTest/TokenTest.php | 223 - .../tests/UnitTest/TokenizerTest.php | 475 - vendor/nikic/php-parser/.travis.yml | 7 - vendor/nikic/php-parser/CHANGELOG.md | 156 - vendor/nikic/php-parser/LICENSE | 31 - vendor/nikic/php-parser/README.md | 78 - vendor/nikic/php-parser/composer.json | 24 - .../php-parser/doc/0_Introduction.markdown | 81 - .../php-parser/doc/1_Installation.markdown | 48 - .../doc/2_Usage_of_basic_components.markdown | 394 - ...3_Other_node_tree_representations.markdown | 201 - .../php-parser/doc/4_Code_generation.markdown | 265 - .../php-parser/doc/component/Lexer.markdown | 114 - vendor/nikic/php-parser/grammar/README.md | 29 - vendor/nikic/php-parser/grammar/analyze.php | 96 - .../php-parser/grammar/kmyacc.php.parser | 361 - .../php-parser/grammar/rebuildParser.php | 225 - .../grammar/zend_language_parser.phpy | 906 - .../php-parser/lib/PHPParser/Autoloader.php | 33 - .../php-parser/lib/PHPParser/Builder.php | 11 - .../lib/PHPParser/Builder/Class.php | 137 - .../lib/PHPParser/Builder/Function.php | 109 - .../lib/PHPParser/Builder/Interface.php | 92 - .../lib/PHPParser/Builder/Method.php | 187 - .../lib/PHPParser/Builder/Param.php | 75 - .../lib/PHPParser/Builder/Property.php | 92 - .../lib/PHPParser/BuilderAbstract.php | 94 - .../lib/PHPParser/BuilderFactory.php | 87 - .../php-parser/lib/PHPParser/Comment.php | 117 - .../php-parser/lib/PHPParser/Comment/Doc.php | 5 - .../nikic/php-parser/lib/PHPParser/Error.php | 70 - .../nikic/php-parser/lib/PHPParser/Lexer.php | 191 - .../lib/PHPParser/Lexer/Emulative.php | 200 - .../nikic/php-parser/lib/PHPParser/Node.php | 75 - .../php-parser/lib/PHPParser/Node/Arg.php | 25 - .../php-parser/lib/PHPParser/Node/Const.php | 25 - .../php-parser/lib/PHPParser/Node/Expr.php | 5 - .../lib/PHPParser/Node/Expr/Array.php | 22 - .../lib/PHPParser/Node/Expr/ArrayDimFetch.php | 25 - .../lib/PHPParser/Node/Expr/ArrayItem.php | 28 - .../lib/PHPParser/Node/Expr/Assign.php | 25 - .../PHPParser/Node/Expr/AssignBitwiseAnd.php | 25 - .../PHPParser/Node/Expr/AssignBitwiseOr.php | 25 - .../PHPParser/Node/Expr/AssignBitwiseXor.php | 25 - .../lib/PHPParser/Node/Expr/AssignConcat.php | 25 - .../lib/PHPParser/Node/Expr/AssignDiv.php | 25 - .../lib/PHPParser/Node/Expr/AssignMinus.php | 25 - .../lib/PHPParser/Node/Expr/AssignMod.php | 25 - .../lib/PHPParser/Node/Expr/AssignMul.php | 25 - .../lib/PHPParser/Node/Expr/AssignPlus.php | 25 - .../lib/PHPParser/Node/Expr/AssignRef.php | 25 - .../PHPParser/Node/Expr/AssignShiftLeft.php | 25 - .../PHPParser/Node/Expr/AssignShiftRight.php | 25 - .../lib/PHPParser/Node/Expr/BitwiseAnd.php | 25 - .../lib/PHPParser/Node/Expr/BitwiseNot.php | 22 - .../lib/PHPParser/Node/Expr/BitwiseOr.php | 25 - .../lib/PHPParser/Node/Expr/BitwiseXor.php | 25 - .../lib/PHPParser/Node/Expr/BooleanAnd.php | 25 - .../lib/PHPParser/Node/Expr/BooleanNot.php | 22 - .../lib/PHPParser/Node/Expr/BooleanOr.php | 25 - .../lib/PHPParser/Node/Expr/Cast.php | 22 - .../lib/PHPParser/Node/Expr/Cast/Array.php | 5 - .../lib/PHPParser/Node/Expr/Cast/Bool.php | 5 - .../lib/PHPParser/Node/Expr/Cast/Double.php | 5 - .../lib/PHPParser/Node/Expr/Cast/Int.php | 5 - .../lib/PHPParser/Node/Expr/Cast/Object.php | 5 - .../lib/PHPParser/Node/Expr/Cast/String.php | 5 - .../lib/PHPParser/Node/Expr/Cast/Unset.php | 5 - .../PHPParser/Node/Expr/ClassConstFetch.php | 25 - .../lib/PHPParser/Node/Expr/Clone.php | 22 - .../lib/PHPParser/Node/Expr/Closure.php | 35 - .../lib/PHPParser/Node/Expr/ClosureUse.php | 25 - .../lib/PHPParser/Node/Expr/Concat.php | 25 - .../lib/PHPParser/Node/Expr/ConstFetch.php | 22 - .../lib/PHPParser/Node/Expr/Div.php | 25 - .../lib/PHPParser/Node/Expr/Empty.php | 22 - .../lib/PHPParser/Node/Expr/Equal.php | 25 - .../lib/PHPParser/Node/Expr/ErrorSuppress.php | 22 - .../lib/PHPParser/Node/Expr/Eval.php | 22 - .../lib/PHPParser/Node/Expr/Exit.php | 22 - .../lib/PHPParser/Node/Expr/FuncCall.php | 25 - .../lib/PHPParser/Node/Expr/Greater.php | 25 - .../PHPParser/Node/Expr/GreaterOrEqual.php | 25 - .../lib/PHPParser/Node/Expr/Identical.php | 25 - .../lib/PHPParser/Node/Expr/Include.php | 30 - .../lib/PHPParser/Node/Expr/Instanceof.php | 25 - .../lib/PHPParser/Node/Expr/Isset.php | 22 - .../lib/PHPParser/Node/Expr/List.php | 22 - .../lib/PHPParser/Node/Expr/LogicalAnd.php | 25 - .../lib/PHPParser/Node/Expr/LogicalOr.php | 25 - .../lib/PHPParser/Node/Expr/LogicalXor.php | 25 - .../lib/PHPParser/Node/Expr/MethodCall.php | 28 - .../lib/PHPParser/Node/Expr/Minus.php | 25 - .../lib/PHPParser/Node/Expr/Mod.php | 25 - .../lib/PHPParser/Node/Expr/Mul.php | 25 - .../lib/PHPParser/Node/Expr/New.php | 25 - .../lib/PHPParser/Node/Expr/NotEqual.php | 25 - .../lib/PHPParser/Node/Expr/NotIdentical.php | 25 - .../lib/PHPParser/Node/Expr/Plus.php | 25 - .../lib/PHPParser/Node/Expr/PostDec.php | 22 - .../lib/PHPParser/Node/Expr/PostInc.php | 22 - .../lib/PHPParser/Node/Expr/PreDec.php | 22 - .../lib/PHPParser/Node/Expr/PreInc.php | 22 - .../lib/PHPParser/Node/Expr/Print.php | 22 - .../lib/PHPParser/Node/Expr/PropertyFetch.php | 25 - .../lib/PHPParser/Node/Expr/ShellExec.php | 22 - .../lib/PHPParser/Node/Expr/ShiftLeft.php | 25 - .../lib/PHPParser/Node/Expr/ShiftRight.php | 25 - .../lib/PHPParser/Node/Expr/Smaller.php | 25 - .../PHPParser/Node/Expr/SmallerOrEqual.php | 25 - .../lib/PHPParser/Node/Expr/StaticCall.php | 28 - .../Node/Expr/StaticPropertyFetch.php | 25 - .../lib/PHPParser/Node/Expr/Ternary.php | 28 - .../lib/PHPParser/Node/Expr/UnaryMinus.php | 22 - .../lib/PHPParser/Node/Expr/UnaryPlus.php | 22 - .../lib/PHPParser/Node/Expr/Variable.php | 22 - .../lib/PHPParser/Node/Expr/Yield.php | 25 - .../php-parser/lib/PHPParser/Node/Name.php | 168 - .../PHPParser/Node/Name/FullyQualified.php | 40 - .../lib/PHPParser/Node/Name/Relative.php | 40 - .../php-parser/lib/PHPParser/Node/Param.php | 31 - .../php-parser/lib/PHPParser/Node/Scalar.php | 5 - .../lib/PHPParser/Node/Scalar/ClassConst.php | 13 - .../lib/PHPParser/Node/Scalar/DNumber.php | 58 - .../lib/PHPParser/Node/Scalar/DirConst.php | 13 - .../lib/PHPParser/Node/Scalar/Encapsed.php | 22 - .../lib/PHPParser/Node/Scalar/FileConst.php | 13 - .../lib/PHPParser/Node/Scalar/FuncConst.php | 13 - .../lib/PHPParser/Node/Scalar/LNumber.php | 55 - .../lib/PHPParser/Node/Scalar/LineConst.php | 13 - .../lib/PHPParser/Node/Scalar/MethodConst.php | 13 - .../lib/PHPParser/Node/Scalar/NSConst.php | 13 - .../lib/PHPParser/Node/Scalar/String.php | 109 - .../lib/PHPParser/Node/Scalar/TraitConst.php | 13 - .../php-parser/lib/PHPParser/Node/Stmt.php | 5 - .../lib/PHPParser/Node/Stmt/Break.php | 22 - .../lib/PHPParser/Node/Stmt/Case.php | 25 - .../lib/PHPParser/Node/Stmt/Catch.php | 28 - .../lib/PHPParser/Node/Stmt/Class.php | 102 - .../lib/PHPParser/Node/Stmt/ClassConst.php | 22 - .../lib/PHPParser/Node/Stmt/ClassMethod.php | 66 - .../lib/PHPParser/Node/Stmt/Const.php | 22 - .../lib/PHPParser/Node/Stmt/Continue.php | 22 - .../lib/PHPParser/Node/Stmt/Declare.php | 25 - .../PHPParser/Node/Stmt/DeclareDeclare.php | 25 - .../php-parser/lib/PHPParser/Node/Stmt/Do.php | 25 - .../lib/PHPParser/Node/Stmt/Echo.php | 22 - .../lib/PHPParser/Node/Stmt/Else.php | 22 - .../lib/PHPParser/Node/Stmt/ElseIf.php | 25 - .../lib/PHPParser/Node/Stmt/For.php | 32 - .../lib/PHPParser/Node/Stmt/Foreach.php | 35 - .../lib/PHPParser/Node/Stmt/Function.php | 32 - .../lib/PHPParser/Node/Stmt/Global.php | 22 - .../lib/PHPParser/Node/Stmt/Goto.php | 22 - .../lib/PHPParser/Node/Stmt/HaltCompiler.php | 22 - .../php-parser/lib/PHPParser/Node/Stmt/If.php | 33 - .../lib/PHPParser/Node/Stmt/InlineHTML.php | 22 - .../lib/PHPParser/Node/Stmt/Interface.php | 45 - .../lib/PHPParser/Node/Stmt/Label.php | 22 - .../lib/PHPParser/Node/Stmt/Namespace.php | 122 - .../lib/PHPParser/Node/Stmt/Property.php | 41 - .../PHPParser/Node/Stmt/PropertyProperty.php | 25 - .../lib/PHPParser/Node/Stmt/Return.php | 22 - .../lib/PHPParser/Node/Stmt/Static.php | 22 - .../lib/PHPParser/Node/Stmt/StaticVar.php | 25 - .../lib/PHPParser/Node/Stmt/Switch.php | 25 - .../lib/PHPParser/Node/Stmt/Throw.php | 22 - .../lib/PHPParser/Node/Stmt/Trait.php | 25 - .../lib/PHPParser/Node/Stmt/TraitUse.php | 25 - .../Node/Stmt/TraitUseAdaptation.php | 5 - .../Node/Stmt/TraitUseAdaptation/Alias.php | 31 - .../Stmt/TraitUseAdaptation/Precedence.php | 28 - .../lib/PHPParser/Node/Stmt/TryCatch.php | 32 - .../lib/PHPParser/Node/Stmt/Unset.php | 22 - .../lib/PHPParser/Node/Stmt/Use.php | 22 - .../lib/PHPParser/Node/Stmt/UseUse.php | 36 - .../lib/PHPParser/Node/Stmt/While.php | 25 - .../php-parser/lib/PHPParser/NodeAbstract.php | 125 - .../php-parser/lib/PHPParser/NodeDumper.php | 39 - .../lib/PHPParser/NodeTraverser.php | 132 - .../lib/PHPParser/NodeTraverserInterface.php | 28 - .../php-parser/lib/PHPParser/NodeVisitor.php | 58 - .../PHPParser/NodeVisitor/NameResolver.php | 136 - .../lib/PHPParser/NodeVisitorAbstract.php | 12 - .../nikic/php-parser/lib/PHPParser/Parser.php | 2721 -- .../lib/PHPParser/PrettyPrinter/Default.php | 725 - .../lib/PHPParser/PrettyPrinter/Zend.php | 10 - .../lib/PHPParser/PrettyPrinterAbstract.php | 262 - .../php-parser/lib/PHPParser/Serializer.php | 13 - .../lib/PHPParser/Serializer/XML.php | 78 - .../php-parser/lib/PHPParser/Template.php | 72 - .../lib/PHPParser/TemplateLoader.php | 48 - .../php-parser/lib/PHPParser/Unserializer.php | 13 - .../lib/PHPParser/Unserializer/XML.php | 133 - vendor/nikic/php-parser/lib/bootstrap.php | 14 - vendor/nikic/php-parser/phpunit.xml.dist | 24 - .../PHPParser/Tests/Builder/ClassTest.php | 91 - .../PHPParser/Tests/Builder/FunctionTest.php | 70 - .../PHPParser/Tests/Builder/InterfaceTest.php | 91 - .../PHPParser/Tests/Builder/MethodTest.php | 137 - .../PHPParser/Tests/Builder/ParamTest.php | 118 - .../PHPParser/Tests/Builder/PropertyTest.php | 123 - .../PHPParser/Tests/BuilderFactoryTest.php | 23 - .../test/PHPParser/Tests/CodeTestAbstract.php | 51 - .../test/PHPParser/Tests/CommentTest.php | 69 - .../test/PHPParser/Tests/ErrorTest.php | 33 - .../PHPParser/Tests/Lexer/EmulativeTest.php | 103 - .../test/PHPParser/Tests/LexerTest.php | 145 - .../test/PHPParser/Tests/Node/NameTest.php | 130 - .../Tests/Node/Scalar/StringTest.php | 59 - .../Tests/Node/Stmt/ClassMethodTest.php | 35 - .../PHPParser/Tests/Node/Stmt/ClassTest.php | 40 - .../Tests/Node/Stmt/PropertyTest.php | 34 - .../test/PHPParser/Tests/NodeAbstractTest.php | 96 - .../test/PHPParser/Tests/NodeDumperTest.php | 66 - .../PHPParser/Tests/NodeTraverserTest.php | 144 - .../Tests/NodeVisitor/NameResolverTest.php | 225 - .../test/PHPParser/Tests/ParserTest.php | 44 - .../PHPParser/Tests/PrettyPrinterTest.php | 42 - .../PHPParser/Tests/Serializer/XMLTest.php | 152 - .../PHPParser/Tests/TemplateLoaderTest.php | 48 - .../test/PHPParser/Tests/TemplateTest.php | 59 - .../PHPParser/Tests/Unserializer/XMLTest.php | 141 - .../test/code/parser/expr/arrayDef.test | 139 - .../test/code/parser/expr/assign.test | 225 - .../test/code/parser/expr/cast.test | 72 - .../test/code/parser/expr/clone.test | 13 - .../test/code/parser/expr/closure.test | 94 - .../test/code/parser/expr/comparison.test | 98 - .../test/code/parser/expr/errorSuppress.test | 12 - .../test/code/parser/expr/exit.test | 34 - .../code/parser/expr/fetchAndCall/args.test | 71 - .../parser/expr/fetchAndCall/constFetch.test | 33 - .../expr/fetchAndCall/constantDeref.test | 181 - .../parser/expr/fetchAndCall/funcCall.test | 117 - .../parser/expr/fetchAndCall/newDeref.test | 70 - .../expr/fetchAndCall/objectAccess.test | 118 - .../expr/fetchAndCall/simpleArrayAccess.test | 62 - .../parser/expr/fetchAndCall/staticCall.test | 151 - .../fetchAndCall/staticPropertyFetch.test | 71 - .../test/code/parser/expr/includeAndEval.test | 40 - .../test/code/parser/expr/issetAndEmpty.test | 75 - .../test/code/parser/expr/logic.test | 138 - .../test/code/parser/expr/math.test | 187 - .../php-parser/test/code/parser/expr/new.test | 139 - .../test/code/parser/expr/print.test | 12 - .../test/code/parser/expr/shellExec.test | 38 - .../test/code/parser/expr/ternary.test | 72 - .../test/code/parser/expr/variable.test | 54 - .../code/parser/scalar/constantString.test | 53 - .../test/code/parser/scalar/docString.test | 67 - .../code/parser/scalar/encapsedString.test | 148 - .../test/code/parser/scalar/float.test | 70 - .../test/code/parser/scalar/int.test | 47 - .../test/code/parser/scalar/magicConst.test | 31 - .../code/parser/stmt/blocklessStatement.test | 112 - .../test/code/parser/stmt/class/abstract.test | 37 - .../code/parser/stmt/class/conditional.test | 33 - .../test/code/parser/stmt/class/final.test | 17 - .../code/parser/stmt/class/interface.test | 35 - .../code/parser/stmt/class/modifier.test-fail | 29 - .../code/parser/stmt/class/name.test-fail | 61 - .../code/parser/stmt/class/php4Style.test | 38 - .../test/code/parser/stmt/class/simple.test | 139 - .../parser/stmt/class/staticMethod.test-fail | 13 - .../test/code/parser/stmt/class/trait.test | 159 - .../test/code/parser/stmt/const.test | 40 - .../test/code/parser/stmt/controlFlow.test | 55 - .../test/code/parser/stmt/declare.test | 47 - .../test/code/parser/stmt/echo.test | 32 - .../test/code/parser/stmt/function/byRef.test | 37 - .../parser/stmt/function/conditional.test | 32 - .../parser/stmt/function/defaultValues.test | 138 - .../code/parser/stmt/function/generator.test | 227 - .../parser/stmt/function/specialVars.test | 50 - .../code/parser/stmt/function/typeHints.test | 44 - .../test/code/parser/stmt/haltCompiler.test | 55 - .../stmt/haltCompilerInvalidSyntax.test-fail | 6 - .../stmt/haltCompilerOutermostScope.test-fail | 8 - .../php-parser/test/code/parser/stmt/if.test | 95 - .../test/code/parser/stmt/inlineHTML.test | 27 - .../test/code/parser/stmt/loop/do.test | 17 - .../test/code/parser/stmt/loop/for.test | 86 - .../test/code/parser/stmt/loop/foreach.test | 139 - .../test/code/parser/stmt/loop/while.test | 25 - .../code/parser/stmt/namespace/alias.test | 85 - .../code/parser/stmt/namespace/braced.test | 42 - .../code/parser/stmt/namespace/mix.test-fail | 13 - .../test/code/parser/stmt/namespace/name.test | 42 - .../code/parser/stmt/namespace/name.test-fail | 25 - .../parser/stmt/namespace/nested.test-fail | 10 - .../code/parser/stmt/namespace/notBraced.test | 45 - .../parser/stmt/namespace/outsideStmt.test | 37 - .../stmt/namespace/outsideStmt.test-fail | 13 - .../test/code/parser/stmt/switch.test | 67 - .../test/code/parser/stmt/tryCatch.test | 114 - .../test/code/parser/stmt/tryCatch.test-fail | 7 - .../test/code/parser/stmt/unset.test | 26 - .../test/code/prettyPrinter/closure.test | 18 - .../test/code/prettyPrinter/comments.test | 56 - .../test/code/prettyPrinter/include.test | 7 - .../inlineHTMLandPHPtest.file-test | 52 - .../test/code/prettyPrinter/namespaces.test | 58 - .../prettyPrinter/onlyInlineHTML.file-test | 11 - .../test/code/prettyPrinter/onlyPHP.file-test | 11 - .../test/code/prettyPrinter/parentheses.test | 45 - .../test/code/prettyPrinter/switch.test | 35 - vendor/nikic/php-parser/test_old/run.php | 189 - 429 files changed, 54 insertions(+), 78537 deletions(-) delete mode 100755 composer.phar delete mode 100644 vendor/autoload.php delete mode 100644 vendor/composer/ClassLoader.php delete mode 100644 vendor/composer/autoload_classmap.php delete mode 100644 vendor/composer/autoload_files.php delete mode 100644 vendor/composer/autoload_namespaces.php delete mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/composer/autoload_real.php delete mode 100644 vendor/composer/installed.json delete mode 100644 vendor/fieryprophet/php-sandbox/.gitignore delete mode 100644 vendor/fieryprophet/php-sandbox/.scrutinizer.yml delete mode 100644 vendor/fieryprophet/php-sandbox/.travis.yml delete mode 100644 vendor/fieryprophet/php-sandbox/CHANGELOG.md delete mode 100644 vendor/fieryprophet/php-sandbox/LICENSE delete mode 100644 vendor/fieryprophet/php-sandbox/MANUAL.html delete mode 100644 vendor/fieryprophet/php-sandbox/README.md delete mode 100644 vendor/fieryprophet/php-sandbox/composer.json delete mode 100644 vendor/fieryprophet/php-sandbox/composer.lock delete mode 100644 vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.Error.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.PHPSandbox.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxWhitelistVisitor.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxedString.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.ValidatorVisitor.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.WhitelistVisitor.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/jquery.iviewer.css delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/Read Me.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.dev.svg delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.eot delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.svg delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.ttf delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.woff delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/lte-ie7.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/style.css delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/prism.css delete mode 100644 vendor/fieryprophet/php-sandbox/docs/css/template.css delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/Error.php.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/Error.php.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.txt delete mode 100644 vendor/fieryprophet/php-sandbox/docs/graphs/class.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/custom-icons.svg delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/hierarchy-item.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/icon-class-13x13.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/icon-class.svg delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/icon-interface-13x13.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/icon-interface.svg delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/icon-trait-13x13.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/icon-trait.svg delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/grab.cur delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/hand.cur delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.rotate_left.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.rotate_right.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_fit.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_in.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_out.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_zero.png delete mode 100644 vendor/fieryprophet/php-sandbox/docs/index.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.min.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.min.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/js/jquery.smooth-scroll.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/js/prism.min.js delete mode 100644 vendor/fieryprophet/php-sandbox/docs/namespaces/PHPSandbox.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/namespaces/default.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-2b/phpdoc-cache-file_9ea3fb738d2b3bb3e76d9fcf099a195a.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-2e/phpdoc-cache-settings.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-70/phpdoc-cache-file_e9d34eadaeaefe21f3f7d9637905ed7e.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-72/phpdoc-cache-file_71b26f83a6d8fca5a6e6d0e38043da73.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-ba/phpdoc-cache-file_1650e678d9bfd900b640a959c8b1e0a7.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-d6/phpdoc-cache-file_1ab0dec1234e249d2c697ed723a0a834.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-e8/phpdoc-cache-file_28dd4a0d5fd4671edbec88b87b53efe2.dat delete mode 100644 vendor/fieryprophet/php-sandbox/docs/reports/deprecated.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/reports/errors.html delete mode 100644 vendor/fieryprophet/php-sandbox/docs/reports/markers.html delete mode 100644 vendor/fieryprophet/php-sandbox/phpunit.xml.dist delete mode 100644 vendor/fieryprophet/php-sandbox/src/Error.php delete mode 100644 vendor/fieryprophet/php-sandbox/src/PHPSandbox.php delete mode 100644 vendor/fieryprophet/php-sandbox/src/SandboxWhitelistVisitor.php delete mode 100644 vendor/fieryprophet/php-sandbox/src/SandboxedString.php delete mode 100644 vendor/fieryprophet/php-sandbox/src/ValidatorVisitor.php delete mode 100644 vendor/fieryprophet/php-sandbox/src/WhitelistVisitor.php delete mode 100644 vendor/fieryprophet/php-sandbox/src/functions.php delete mode 100644 vendor/fieryprophet/php-sandbox/tests/PHPSandbox/Tests/Config/DefaultConfigTest.php delete mode 100644 vendor/fieryprophet/php-sandbox/tests/bootstrap.php delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/index.php delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/001 - Hello World.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/002 - Evil Function.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/003 - Whitelisting.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/004 - Setup Code.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/005 - Ola World.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/006 - Superglobals.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/007 - Magic Constants.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/008 - Namespaces.json delete mode 100644 vendor/fieryprophet/php-sandbox/toolkit/templates/009 - Redefining Classes.json delete mode 100644 vendor/jeremeamia/FunctionParser/.gitattributes delete mode 100644 vendor/jeremeamia/FunctionParser/.gitignore delete mode 100644 vendor/jeremeamia/FunctionParser/.travis.yml delete mode 100644 vendor/jeremeamia/FunctionParser/LICENSE delete mode 100644 vendor/jeremeamia/FunctionParser/README.md delete mode 100644 vendor/jeremeamia/FunctionParser/build.xml delete mode 100644 vendor/jeremeamia/FunctionParser/composer.json delete mode 100644 vendor/jeremeamia/FunctionParser/demo/class-method.php delete mode 100644 vendor/jeremeamia/FunctionParser/demo/simple-closure.php delete mode 100644 vendor/jeremeamia/FunctionParser/phpunit.xml.dist delete mode 100644 vendor/jeremeamia/FunctionParser/src/FunctionParser.php delete mode 100644 vendor/jeremeamia/FunctionParser/src/Token.php delete mode 100644 vendor/jeremeamia/FunctionParser/src/Tokenizer.php delete mode 100644 vendor/jeremeamia/FunctionParser/tests/IntegrationTest/FunctionParserTest.php delete mode 100644 vendor/jeremeamia/FunctionParser/tests/UnitTest/FunctionParserTest.php delete mode 100644 vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenTest.php delete mode 100644 vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenizerTest.php delete mode 100644 vendor/nikic/php-parser/.travis.yml delete mode 100644 vendor/nikic/php-parser/CHANGELOG.md delete mode 100644 vendor/nikic/php-parser/LICENSE delete mode 100644 vendor/nikic/php-parser/README.md delete mode 100644 vendor/nikic/php-parser/composer.json delete mode 100644 vendor/nikic/php-parser/doc/0_Introduction.markdown delete mode 100644 vendor/nikic/php-parser/doc/1_Installation.markdown delete mode 100644 vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown delete mode 100644 vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown delete mode 100644 vendor/nikic/php-parser/doc/4_Code_generation.markdown delete mode 100644 vendor/nikic/php-parser/doc/component/Lexer.markdown delete mode 100644 vendor/nikic/php-parser/grammar/README.md delete mode 100644 vendor/nikic/php-parser/grammar/analyze.php delete mode 100644 vendor/nikic/php-parser/grammar/kmyacc.php.parser delete mode 100644 vendor/nikic/php-parser/grammar/rebuildParser.php delete mode 100644 vendor/nikic/php-parser/grammar/zend_language_parser.phpy delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Autoloader.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder/Class.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder/Function.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder/Interface.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder/Method.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder/Param.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Builder/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/BuilderAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/BuilderFactory.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Comment.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Comment/Doc.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Error.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Lexer.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Lexer/Emulative.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Arg.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Const.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Array.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayDimFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayItem.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Assign.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseOr.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseXor.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignConcat.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignDiv.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMinus.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMod.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMul.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignPlus.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignRef.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftLeft.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftRight.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseNot.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseOr.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseXor.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanNot.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanOr.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Array.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Bool.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Double.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Int.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Object.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/String.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Unset.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ClassConstFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Clone.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Closure.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ClosureUse.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Concat.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ConstFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Div.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Empty.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Equal.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ErrorSuppress.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Eval.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Exit.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/FuncCall.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Greater.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/GreaterOrEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Identical.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Include.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Instanceof.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Isset.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/List.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalOr.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalXor.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/MethodCall.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Minus.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mod.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mul.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/New.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotIdentical.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Plus.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostDec.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostInc.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreDec.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreInc.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Print.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShellExec.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftLeft.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftRight.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Smaller.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/SmallerOrEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticCall.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticPropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Ternary.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryMinus.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryPlus.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Variable.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Yield.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Name.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Name/FullyQualified.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Name/Relative.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Param.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/ClassConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/DNumber.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/DirConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/Encapsed.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/FileConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/FuncConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/LNumber.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/LineConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/MethodConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/NSConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/String.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/TraitConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Break.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Case.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Catch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Class.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassConst.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassMethod.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Const.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Continue.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Declare.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/DeclareDeclare.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Do.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Echo.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Else.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ElseIf.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/For.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Foreach.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Function.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Global.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Goto.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/HaltCompiler.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/If.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/InlineHTML.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Interface.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Label.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Namespace.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/PropertyProperty.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Return.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Static.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/StaticVar.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Switch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Throw.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Trait.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUse.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation/Alias.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation/Precedence.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TryCatch.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Unset.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Use.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/UseUse.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/While.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeDumper.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeTraverser.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeTraverserInterface.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeVisitor/NameResolver.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/NodeVisitorAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Parser.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Default.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Zend.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/PrettyPrinterAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Serializer.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Serializer/XML.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Template.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/TemplateLoader.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Unserializer.php delete mode 100644 vendor/nikic/php-parser/lib/PHPParser/Unserializer/XML.php delete mode 100644 vendor/nikic/php-parser/lib/bootstrap.php delete mode 100644 vendor/nikic/php-parser/phpunit.xml.dist delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ClassTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Builder/FunctionTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Builder/InterfaceTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Builder/MethodTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ParamTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Builder/PropertyTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/BuilderFactoryTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/CodeTestAbstract.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/CommentTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/ErrorTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Lexer/EmulativeTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/LexerTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Node/NameTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Node/Scalar/StringTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassMethodTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/PropertyTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/NodeAbstractTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/NodeDumperTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/NodeTraverserTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/NodeVisitor/NameResolverTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/ParserTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/PrettyPrinterTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Serializer/XMLTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/TemplateLoaderTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/TemplateTest.php delete mode 100644 vendor/nikic/php-parser/test/PHPParser/Tests/Unserializer/XMLTest.php delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/assign.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/cast.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/clone.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/closure.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/comparison.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/exit.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/logic.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/math.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/new.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/print.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/shellExec.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/ternary.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/expr/variable.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/constantString.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/docString.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/float.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/int.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/final.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/name.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/const.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/declare.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/echo.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/function/typeHints.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/if.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/switch.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test-fail delete mode 100644 vendor/nikic/php-parser/test/code/parser/stmt/unset.test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/closure.test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/comments.test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/include.test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/namespaces.test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/parentheses.test delete mode 100644 vendor/nikic/php-parser/test/code/prettyPrinter/switch.test delete mode 100644 vendor/nikic/php-parser/test_old/run.php diff --git a/composer.json b/composer.json index 4e79698..e57bb2f 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,7 @@ { "minimum-stability": "dev", + "prefer-stable": true, "require": { - "fieryprophet/php-sandbox": "dev-master" + "corveda/php-sandbox": "^2" } -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index 9213e0a..e6923c0 100644 --- a/composer.lock +++ b/composer.lock @@ -1,33 +1,36 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "5b9b5514301f761e1e6445c22a1eb96d", + "content-hash": "e2097080a181a5a741398c72ea5c8f09", "packages": [ { - "name": "fieryprophet/php-sandbox", - "version": "dev-master", + "name": "corveda/php-sandbox", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/fieryprophet/php-sandbox.git", - "reference": "4a30e96e1a525a4a6b74e24034d7f505133eb8cb" + "url": "https://github.com/Corveda/PHPSandbox.git", + "reference": "d82fe60d58fbc8d01e61facd963296df372eeeb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fieryprophet/php-sandbox/zipball/4a30e96e1a525a4a6b74e24034d7f505133eb8cb", - "reference": "4a30e96e1a525a4a6b74e24034d7f505133eb8cb", + "url": "https://api.github.com/repos/Corveda/PHPSandbox/zipball/d82fe60d58fbc8d01e61facd963296df372eeeb7", + "reference": "d82fe60d58fbc8d01e61facd963296df372eeeb7", "shasum": "" }, "require": { - "jeremeamia/functionparser": "~1.0.0", - "nikic/php-parser": "~0.9.5", - "php": ">=5.3.2" + "jeremeamia/functionparser": "*", + "nikic/php-parser": "2.*", + "php": ">=5.4" + }, + "replace": { + "fieryprophet/php-sandbox": "*" }, "require-dev": { - "phpdocumentor/phpdocumentor": "v2.3.2", - "phpunit/phpunit": "3.7.*" + "phpunit/phpunit": "4.8.*", + "symfony/yaml": "~2.1" }, "type": "library", "autoload": { @@ -38,17 +41,21 @@ "PHPSandbox\\": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Elijah Horton" + "name": "Elijah Horton", + "email": "elijah@corveda.com" + }, + { + "name": "Corveda, LLC." } ], "description": "A PHP library that can be used to run PHP code in a sandboxed environment", - "homepage": "http://www.fieryprophet.com/phpsandbox", + "homepage": "https://phpsandbox.org/", "keywords": [ "blacklist", "parser", @@ -56,11 +63,11 @@ "sandbox", "whitelist" ], - "time": "2015-02-27 20:09:02" + "time": "2016-05-20T20:23:57+00:00" }, { - "name": "jeremeamia/FunctionParser", - "version": "dev-master", + "name": "jeremeamia/functionparser", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/jeremeamia/FunctionParser.git", @@ -86,7 +93,7 @@ "FunctionParser\\": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -103,38 +110,44 @@ "parser", "tokenizer" ], - "time": "2015-02-02 17:30:47" + "time": "2015-02-02T17:30:47+00:00" }, { "name": "nikic/php-parser", - "version": "dev-master", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "700847e2951942200b479c413aa2984b5364799b" + "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/700847e2951942200b479c413aa2984b5364799b", - "reference": "700847e2951942200b479c413aa2984b5364799b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4dd659edadffdc2143e4753df655d866dbfeedf0", + "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.2" + "php": ">=5.4" }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "psr-0": { - "PHPParser": "lib/" + "psr-4": { + "PhpParser\\": "lib/PhpParser" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -148,16 +161,16 @@ "parser", "php" ], - "time": "2013-09-28 11:21:30" + "time": "2016-09-16T12:04:44+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", - "stability-flags": { - "fieryprophet/php-sandbox": 20 - }, - "prefer-stable": false, + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, "platform": [], - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/composer.phar b/composer.phar deleted file mode 100755 index cd734fdc25bb1f191d49e92de68a23c25f0f4777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070308 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
Sq!ikZ!>qTR$74Lnu_G#cqP~Y!OMl$)+4n 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 {I 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 LzIgiN;K~01RcNa4 diff --git a/docker-bootstrap.sh b/docker-bootstrap.sh index 26bd6c5..c4b5551 100755 --- a/docker-bootstrap.sh +++ b/docker-bootstrap.sh @@ -1,3 +1,4 @@ #!/bin/bash -docker run -p 80:80 -v $(pwd):/var/www/ -d eboraas/apache-php \ No newline at end of file +docker rm phpepl +docker run --name=phpepl -p 80:80 -v $(pwd):/var/www/html -d eboraas/apache-php diff --git a/vendor/autoload.php b/vendor/autoload.php deleted file mode 100644 index 769581d..0000000 --- a/vendor/autoload.php +++ /dev/null @@ -1,7 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0 class loader - * - * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - */ -class ClassLoader -{ - // PSR-4 - private $prefixLengthsPsr4 = array(); - private $prefixDirsPsr4 = array(); - private $fallbackDirsPsr4 = array(); - - // PSR-0 - private $prefixesPsr0 = array(); - private $fallbackDirsPsr0 = array(); - - private $useIncludePath = false; - private $classMap = array(); - - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); - } - return array(); - } - - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-0 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if ($file === null && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if ($file === null) { - // Remember that this class does not exist. - return $this->classMap[$class] = false; - } - - return $file; - } - - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { - if (0 === strpos($class, $prefix)) { - foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; -} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php deleted file mode 100644 index 7a91153..0000000 --- a/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/nikic/php-parser/lib'), -); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php deleted file mode 100644 index 25c8aa9..0000000 --- a/vendor/composer/autoload_psr4.php +++ /dev/null @@ -1,11 +0,0 @@ - array($vendorDir . '/fieryprophet/php-sandbox/src'), - 'FunctionParser\\' => array($vendorDir . '/jeremeamia/FunctionParser/src'), -); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php deleted file mode 100644 index 8d22512..0000000 --- a/vendor/composer/autoload_real.php +++ /dev/null @@ -1,55 +0,0 @@ - $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - - $loader->register(true); - - $includeFiles = require __DIR__ . '/autoload_files.php'; - foreach ($includeFiles as $file) { - composerRequire905b83fb126b062f4c2d3d659f6f0e12($file); - } - - return $loader; - } -} - -function composerRequire905b83fb126b062f4c2d3d659f6f0e12($file) -{ - require $file; -} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json deleted file mode 100644 index 4745c36..0000000 --- a/vendor/composer/installed.json +++ /dev/null @@ -1,152 +0,0 @@ -[ - { - "name": "nikic/php-parser", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "700847e2951942200b479c413aa2984b5364799b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/700847e2951942200b479c413aa2984b5364799b", - "reference": "700847e2951942200b479c413aa2984b5364799b", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.2" - }, - "time": "2013-09-28 11:21:30", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - }, - "installation-source": "source", - "autoload": { - "psr-0": { - "PHPParser": "lib/" - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ] - }, - { - "name": "jeremeamia/FunctionParser", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/jeremeamia/FunctionParser.git", - "reference": "035b52000b88ea8d72a6647dd4cd39f080cf7ada" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/FunctionParser/zipball/035b52000b88ea8d72a6647dd4cd39f080cf7ada", - "reference": "035b52000b88ea8d72a6647dd4cd39f080cf7ada", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "time": "2015-02-02 17:30:47", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "source", - "autoload": { - "psr-4": { - "FunctionParser\\": "src/" - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Lindblom" - } - ], - "description": "Function parser for PHP functions, methods, and closures", - "homepage": "https://github.com/jeremeamia/FunctionParser", - "keywords": [ - "closure", - "function", - "parser", - "tokenizer" - ] - }, - { - "name": "fieryprophet/php-sandbox", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/fieryprophet/php-sandbox.git", - "reference": "4a30e96e1a525a4a6b74e24034d7f505133eb8cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fieryprophet/php-sandbox/zipball/4a30e96e1a525a4a6b74e24034d7f505133eb8cb", - "reference": "4a30e96e1a525a4a6b74e24034d7f505133eb8cb", - "shasum": "" - }, - "require": { - "jeremeamia/functionparser": "~1.0.0", - "nikic/php-parser": "~0.9.5", - "php": ">=5.3.2" - }, - "require-dev": { - "phpdocumentor/phpdocumentor": "v2.3.2", - "phpunit/phpunit": "3.7.*" - }, - "time": "2015-02-27 20:09:02", - "type": "library", - "installation-source": "source", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "PHPSandbox\\": "src/" - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Elijah Horton" - } - ], - "description": "A PHP library that can be used to run PHP code in a sandboxed environment", - "homepage": "http://www.fieryprophet.com/phpsandbox", - "keywords": [ - "blacklist", - "parser", - "php", - "sandbox", - "whitelist" - ] - } -] diff --git a/vendor/fieryprophet/php-sandbox/.gitignore b/vendor/fieryprophet/php-sandbox/.gitignore deleted file mode 100644 index 140fada..0000000 --- a/vendor/fieryprophet/php-sandbox/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vendor/* diff --git a/vendor/fieryprophet/php-sandbox/.scrutinizer.yml b/vendor/fieryprophet/php-sandbox/.scrutinizer.yml deleted file mode 100644 index a151519..0000000 --- a/vendor/fieryprophet/php-sandbox/.scrutinizer.yml +++ /dev/null @@ -1,6 +0,0 @@ -# .scrutinizer.yml -tools: - external_code_coverage: true - php_pdepend: true - php_cpd: true - php_analyzer: true \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/.travis.yml b/vendor/fieryprophet/php-sandbox/.travis.yml deleted file mode 100644 index 492a0f7..0000000 --- a/vendor/fieryprophet/php-sandbox/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: php -php: - - 5.5 - - 5.4 - - 5.3 - -before_script: - - composer install - -script: - - phpunit --coverage-clover=coverage.clover - -after_script: - - wget https://scrutinizer-ci.com/ocular.phar - - php ocular.phar code-coverage:upload --format=php-clover coverage.clover - -notifications: - - email: false \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/CHANGELOG.md b/vendor/fieryprophet/php-sandbox/CHANGELOG.md deleted file mode 100644 index 6c669d7..0000000 --- a/vendor/fieryprophet/php-sandbox/CHANGELOG.md +++ /dev/null @@ -1,69 +0,0 @@ -#CHANGELOG - -##02/27/2015 -- Addressed issue #18 where arrays may potentially allow for compromising the sandbox by encapsulating unsandboxed callables - -##07/24/2014 -- Fixed bug with prepare_vars() - -##06/19/2014 -- Added flags to enable/disable validation checks for every type (for example, this will help in situations where someone wants to enable all functions but not blacklist a fake function name to remove the function whitelist.) Disabling a validation check also ignores any custom validation check for that type! -- Fixed issue with toolkit giving incorrect error and exception messages -- Added ability for sandbox to overwrite static type hints that are redefined to other class names (NOTE: All statically referenced class/interface/trait names are treated as classes by the parser and the sandbox, therefore they must be redefined via define_class()) -- Updated documentation - -##05/06/2014 -- Corrected defined alias case-sensitivity issue (see: issue #10) - -##03/19/2014 -- API CHANGE: set_error_handler() and its related methods have been changed to set_validation_error_handler(), etc. because that more closely explains their purpose of handling validation errors in the sandbox -- set_error_handler() its related methods now represent a new error handling mechanism that replicates PHP's set_error_handler() built-in functionality for the sandbox -- set_exception_handler() and its related methods represent a new exception handling mechanism that replicates PHP's set_exception_handler() built-in functionality for the sandbox -- A new convert_errors option flag has been added to the sandbox, which will automatically convert PHP errors in the sandbox to exceptions and send them to the sandbox's exception handler if it is set -- Revised SandboxedString insertion to more intelligently provide sandboxing of callbacks -- Changed method visibility to public for error() and exception() to resolve PHP 5.3's failure to use them in the proper context -- Addressed issue where functions expecting float or int values passed as strings would throw errors -- You can now specify an unlimited number of parameters for all whitelist_*, blacklist_*, etc. methods etc for _superglobal. This works the same as passing an array of parameters. - -##03/10/2014 -- Addressed potential vulnerabilities related to SandboxedStrings where sandboxed code could manipulate the strings in a way that could defeat their protection -- Solved errors from casting sandboxed strings to int -- Overwrote some internal PHP functions to further mask SandboxedStrings from the sandboxed code and prevent type-checking errors -- Added more tests related to SandboxedStrings -- Made some minor tweaks to PHPSandbox Toolkit - -##03/05/2014 -- Corrected an issue where the sandbox variable could be accessed from within the sandbox in PHP 5.4+ - -##03/03/2014 -- Implemented function checking mechanism for callbacks, which should now obey function whitelists and blacklists -- Replaced passed sandbox instance variable with static method call that allows the sandbox to be accessed for validation within sandboxed functions and closures -- Added overwritten var_dump, print_r and var_export methods that automatically hide the sandbox instance and return the string value of sandboxed strings - -##01/30/2014 -- Implemented overhaul of error handling system. Can now specify a custom error handler to intercept thrown exceptions. - -##12/09/2013 -- Added ability to define custom validation functions for fine-grained control of the sandbox elements -- Added capture_output flag to indicate whether to capture and return output of sandbox execution via output buffering -- Added restore_error_level flag to indicate whether the to restore error level after setting custom error level in sandbox - -##08/15/2013 -- Added support for PHP 5.5. and new allow_generators flag for configuring the sandbox to enable or disable PHP 5.5 generators - -##03/04/2013 -- Added the ability to redefine classes, interfaces and traits - -##03/03/2013 - -- Major updates to dynamic demonstrations system, not know as the PHPSandbox Toolkit. Allows for almost unlimited configuration of PHPSandbox environments -- PHPSandbox class now supports importing JSON template configurations, serialization, and defining callables for superglobals and magic constants -- API documentation is complete, PHPUnit testing is initialized. Toolkit has its own help system, utilizing the fully written INSTRUCTIONS.html - -##03/01/2013 - -- Early version of dynamic demonstration system added to /demos -- Supports configuring and testing sandboxes from local PHP server without the necessity of coding specific demos -- Can save personal templates of sandboxed code and configurations for future reference -- The /demos/templates folder will gradually have a full suite of demonstration files explaining the various features and configuration options available in PHPSandbox -- Initial commit of PHPUnit tests and added PHPUnit as a "require-dev" in composer.json \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/LICENSE b/vendor/fieryprophet/php-sandbox/LICENSE deleted file mode 100644 index a675b58..0000000 --- a/vendor/fieryprophet/php-sandbox/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Copyright (c) 2013-2014 by Elijah Horton (fieryprophet [at] yahoo.com) - -Some 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. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -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 -OWNER 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. \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/MANUAL.html b/vendor/fieryprophet/php-sandbox/MANUAL.html deleted file mode 100644 index 060cd43..0000000 --- a/vendor/fieryprophet/php-sandbox/MANUAL.html +++ /dev/null @@ -1,766 +0,0 @@ - - - - PHPSandbox Manual - - - - - -
-
-

1 - About PHPSandbox & PHPSandbox Toolkit

-
-
- - PHPSandbox - -
-

- PHPSandbox Toolkit 1.3.9 -

-
- Developed by: Elijah Horton - — - Github -
-

PHPSandbox is a PHP 5.3.2+ class designed to implement tightly-controlled and highly configurable code - sandboxes in pure PHP code. - It utilizes the PHPParser and - FunctionParser - libraries to parse the sandboxed code for violations of the sandbox configuration and to disassemble - closures passed to the sandbox.

-

The PHPSandbox Toolkit is used to demonstrate the use of the PHPSandbox class, its various configuration - options, creation of custom templates and for easy experimentation. The JSON templates it generates - can also be imported directly into a PHPSandbox instance to allow for easy sharing of common configurations.

-

The PHPSandbox project is licensed under the open source BSD License. Click the "PHPSandbox License" tab below or - see the LICENSE file that came with your distribution for more information.

-

Click the "Using PHPSandbox" tab below to continue.

-
-

2 - Using PHPSandbox

-
-

Including PHPSandbox

-

If you have downloaded PHPSandbox through composer, then the only thing you need to do to include all required - PHPSandbox classes is:

-
require_once('vendor/autoload.php');
-

If you have a PSR-0 compliant autoloader, simply put the PHPSandbox folder under /src in your library folder - and it will handle loading all PHPSandbox files for you. Otherwise, you must include all PHPSandbox files and - its dependencies yourself.

-

Instantiating A PHPSandbox Instance

-

You have two methods of instantiating a PHPSandbox instance: the new keyword, or the static method PHPSandbox::create();

- New Keyword -
$sandbox = new \PHPSandbox\PHPSandbox();
- Static Method -
$sandbox = \PHPSandbox\PHPSandbox::create();
-

You can pass the following array arguments to either method to setup the sandbox:

-
    -
  • $options — This is equivalent to using the set_options() method.
  • -
  • $functions — This is equivalent to using the define_funcs() method.
  • -
  • $variables — This is equivalent to using the define_vars() method.
  • -
  • $constants — This is equivalent to using the define_consts() method.
  • -
  • $namespaces — This is equivalent to using the define_namespaces() method.
  • -
  • $aliases — This is equivalent to using the define_aliases() method.
  • -
  • $superglobals — This is equivalent to using the define_superglobals() method.
  • -
  • $magic_constants — This is equivalent to using the define_magic_consts() method.
  • -
  • $classes — This is equivalent to using the define_classes() method.
  • -
  • $interfaces — This is equivalent to using the define_interfaces() method.
  • -
  • $traits — This is equivalent to using the define_traits() method.
  • -
- Examples: -
$sandbox = new \PHPSandbox\PHPSandbox($options,
-                                     $functions,
-                                     $variables,
-                                     $constants,
-                                     $namespaces,
-                                     $aliases,
-                                     $superglobals,
-                                     $magic_constants,
-                                     $classes,
-                                     $interfaces,
-                                     $traits);
-
$sandbox = \PHPSandbox\PHPSandbox::create($options,
-                                          $functions,
-                                          $variables,
-                                          $constants,
-                                          $namespaces,
-                                          $aliases,
-                                          $superglobals,
-                                          $magic_constants,
-                                          $classes,
-                                          $interfaces,
-                                          $traits);
-

Click the "Configuring PHPSandbox" tab below to continue.

-
-

3 - Configuring PHPSandbox

-
-

You have four main areas of configuration available in PHPSandbox: Options, - Whitelists, Blacklists and Definitions.

-

Options

-

Options are configured in the PHPSandbox class by accessing - the flag's public instance property (e.g. $sandbox->allow_functions = true; ) or through the set_option() - and set_options() instance methods.

- Example: -
$sandbox->set_option('allow_functions', false);
-

Option Descriptions

-
    -
  • - Validate Functions: — Default Value: true -
    - If this flag is set the sandbox will validate functions within the sandboxed code. If this flag is - disabled then all function validation, including custom function validation, will be ignored. -
    -
  • -
  • - Validate Variables: — Default Value: true -
    - If this flag is set the sandbox will validate variables within the sandboxed code. If this flag is - disabled then all variable validation, including custom variable validation, will be ignored. -
    -
  • -
  • - Validate Globals: — Default Value: true -
    - If this flag is set the sandbox will validate globals within the sandboxed code. If this flag is - disabled then all global validation, including custom global validation, will be ignored. -
    -
  • -
  • - Validate Superglobals: — Default Value: true -
    - If this flag is set the sandbox will validate superglobals within the sandboxed code. If this flag is - disabled then all superglobal validation, including custom superglobal validation, will be ignored. -
    -
  • -
  • - Validate Constants: — Default Value: true -
    - If this flag is set the sandbox will validate constants within the sandboxed code. If this flag is - disabled then all constant validation, including custom constant validation, will be ignored. -
    -
  • -
  • - Validate Magic Constants: — Default Value: true -
    - If this flag is set the sandbox will validate magic constants within the sandboxed code. If this flag is - disabled then all magic constant validation, including custom magic constant validation, will be ignored. -
    -
  • -
  • - Validate Namespaces: — Default Value: true -
    - If this flag is set the sandbox will validate namespaces within the sandboxed code. If this flag is - disabled then all namespace validation, including custom namespace validation, will be ignored. -
    -
  • -
  • - Validate Aliases (aka Use): — Default Value: true -
    - If this flag is set the sandbox will validate aliases within the sandboxed code. If this flag is - disabled then all alias validation, including custom alias validation, will be ignored. -
    -
  • -
  • - Validate Classes: — Default Value: true -
    - If this flag is set the sandbox will validate classes within the sandboxed code. If this flag is - disabled then all class validation, including custom class validation, will be ignored. -
    -
  • -
  • - Validate Interfaces: — Default Value: true -
    - If this flag is set the sandbox will validate interfaces within the sandboxed code. If this flag is - disabled then all interface validation, including custom interface validation, will be ignored. -
    -
  • -
  • - Validate Traits: — Default Value: true -
    - If this flag is set the sandbox will validate traits within the sandboxed code. If this flag is - disabled then all trait validation, including custom trait validation, will be ignored. -
    -
  • -
  • - Validate Keywords: — Default Value: true -
    - If this flag is set the sandbox will validate keywords within the sandboxed code. If this flag is - disabled then all keyword validation, including custom keyword validation, will be ignored. -
    -
  • -
  • - Validate Operators: — Default Value: true -
    - If this flag is set the sandbox will validate operators within the sandboxed code. If this flag is - disabled then all operator validation, including custom operator validation, will be ignored. -
    -
  • -
  • - Validate Primitives: — Default Value: true -
    - If this flag is set the sandbox will validate primitives within the sandboxed code. If this flag is - disabled then all primitive validation, including custom primitive validation, will be ignored. -
    -
  • -
  • - Validate Types: — Default Value: true -
    - If this flag is set the sandbox will validate types within the sandboxed code. If this flag is - disabled then all type validation, including custom type validation, will be ignored. -
    -
  • -
  • - Error Level: — Default Value: null -
    - If this option is set then sandbox will set the error level to this value before executing the sandboxed code. -
    -
  • -
  • - Restore Error Level: — Default Value: true -
    - If this flag is set the sandbox will restore the error level after the sandboxed code has executed. -
    -
  • -
  • - Convert Errors: — Default Value: false -
    - If this flag is set the sandbox will convert errors to exceptions during execution of the sandboxed code. -
    -
  • -
  • - Capture Output: — Default Value: false -
    - If this flag is set the sandbox will return all output generated by the executed code. -
    -
  • -
  • - Auto Whitelist Trusted Code: — Default Value: true -
    - If this flag is set the sandbox will automatically whitelist all functions, variables (if the - allow variables flag is false and blacklisted variables have not been defined, - unnecessary otherwise), constants, classes, interfaces, traits, namespaces, alias (or uses), and - types defined, declared or executed in prepended and appended trusted code. -
    - NOTE: Because whitelists take precedence over blacklists, any blacklist type - defined whose type was automatically whitelisted will have no effect. -
    -
  • -
  • - Auto Whitelist Functions — Default Value: true -
    - If this flag is set the sandbox will automatically whitelist all functions defined by the sandboxed - code if the allow functions flag is set. This will prevent exceptions being thrown - if your sandboxed code attempts to use functions it has defined earlier in its execution scope. -
    -
  • -
  • - Auto Whitelist Constants — Default Value: true -
    - If this flag is set the sandbox will automatically whitelist all constants defined by the sandboxed - code if the allow constants flag is set. This will prevent exceptions being thrown - if your sandboxed code attempts to use constants it has defined earlier in its execution scope. -
    -
  • -
  • - Auto Whitelist Globals — Default Value: true -
    - If this flag is set the sandbox will automatically whitelist all globals defined by the sandboxed - code if the allow globals flag is set. This will prevent exceptions being thrown - if your sandboxed code attempts to use globals it has defined earlier in its execution scope. -
    -
  • -
  • - Auto Whitelist Classes — Default Value: true -
    - If this flag is set the sandbox will automatically whitelist all classes defined by the sandboxed - code if the allow classes flag is set. This will prevent exceptions being thrown - if your sandboxed code attempts to use classes it has defined earlier in its execution scope. -
    -
  • -
  • - Auto Whitelist Interfaces — Default Value: true -
    - If this flag is set the sandbox will automatically - whitelist all interfaces defined by the sandboxed code if the allow interfaces flag is - set. This will prevent exceptions being thrown if your sandboxed code attempts to use interfaces it - has defined earlier in its execution scope. -
    -
  • -
  • - Auto Whitelist Traits — Default Value: true -
    - If this flag is set the sandbox will automatically whitelist all traits defined by the sandboxed - code if the allow traits flag is set. This will prevent exceptions being thrown - if your sandboxed code attempts to use traits it has defined earlier in its execution scope. -
    -
  • -
  • - Auto Define Variables — Default Value: true -
    - If this flag is set the sandbox will automatically define arguments passed via prepended, appended - and sandboxed code closures, so these variables will be available to the sandboxed code scope. -
    -
  • -
  • - Overwrite Defined Functions — Default Value: true -
    - If this flag is set the sandbox will overwrite PHP's internal get_defined_functions, - get_defined_vars, get_defined_constants, get_declared_classes, - get_declared_interfaces, and get_declared_traits functions so they report only - values available to the sandboxed scope. -
    - NOTE: If you define your own functions for get_defined_functions, - get_defined_vars, get_defined_constants, get_declared_classes, - get_declared_interfaces, or get_declared_traits, the PHPSandbox instance will call - them instead. -
    -
  • -
  • - Overwrite Func_Get_Args — Default Value: true -
    - If this flag is set the sandbox will overwrite PHP's internal func_get_args, func_get_arg, - and func_num_args so they report only arguments available to the sandboxed scope. -
    - NOTE: If you define your own functions for func_get_args, func_get_arg, - or func_num_args the PHPSandbox instance will call them instead. -
    -
  • -
  • - Allow Functions — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to declare functions via the - function keyword. -
    - NOTE: The function keyword is still subject to the keyword whitelist and - blacklist! -
    -
  • -
  • - Allow Closures — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to create closures. -
    -
  • -
  • - Allow Variables — Default Value: true -
    - If this flag is set the sandbox will allow the sandboxed code to create variables. -
    -
  • -
  • - Allow Static Variables — Default Value: true -
    - If this flag is set the sandbox will allow the sandboxed code to create static variables. -
    -
  • -
  • - Allow Objects — Default Value: true -
    - If this flag is set the sandbox will allow the sandboxed code to objects via the new - keyword. -
    - NOTE: Object creation is still subject to type whitelists and - blacklists, and the new keyword is still subject to the keyword whitelist and - blacklist! -
    -
  • -
  • - Allow Constants — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to define constants. -
    -
  • -
  • - Allow Globals — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to define globals via the global - keyword. -
    - NOTE: The global keyword is still subject to the keyword whitelist and - blacklist! -
    -
  • -
  • - Allow Namespaces — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to define namespaces. -
    - NOTE: Namespaces are defined outside the sandboxed code scope, and the - namespace keyword is still subject to the keyword whitelist and blacklist! -
    -
  • -
  • - Allow Aliases (aka Use) — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to define aliases (aka use.) -
    - NOTE: Aliases (aka use) are defined outside the sandboxed code scope, and the - use keyword is still subject to the keyword whitelist and blacklist! -
    -
  • -
  • - Allow Classes — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to declare classes. -
    - NOTE: The class keyword is still subject to the keyword - whitelist and blacklist! -
    -
  • -
  • - Allow Interfaces — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to declare interfaces. -
    - NOTE: The interface keyword is still subject to the keyword - whitelist and blacklist! -
    -
  • -
  • - Allow Traits — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to declare traits. -
    - NOTE: The trait keyword is still subject to the keyword - whitelist and blacklist! -
    -
  • -
  • - Allow Generators — Default Value: true -
    - If this flag is set the sandbox will allow the sandboxed code to create generators. -
    - NOTE: The yield keyword is still subject to the keyword - whitelist and blacklist! -
    -
  • -
  • - Allow Escaping — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to escape to HTML. -
    -
  • -
  • - Allow Casting — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to cast variables to primitive types. -
    - NOTE: The casted primitive type is still subject to the primitive - whitelist and blacklist! -
    -
  • -
  • - Allow Error Suppressing — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to suppress errors via the @ prefix. -
    -
  • -
  • - Allow References — Default Value: true -
    - If this flag is set the sandbox will allow the sandboxed code to assign by reference, and to - define functions that return by reference if the allow functions flag is set. -
    -
  • -
  • - Allow Backticks — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to shell execute strings quoted in - backticks. - NOTE: This requires the shell_exec to be either defined or allowed according - to the function whitelist and blacklist! If shell_exec is a defined function - then backticked strings will be passed to that function instead for execution. -
    -
  • -
  • - Allow Halting — Default Value: false -
    - If this flag is set the sandbox will allow the sandboxed code to halt the PHP compiler. -
    - NOTE: The __halt_compiler keyword is still subject to the keyword - whitelist and blacklist! -
  • -
-

Whitelists & Blacklists

-

By default, an exception is thrown if any function, variable, global, superglobal, constant, magic constant, - namespace, alias (aka use), class, interface, or type is executed in sandboxed code without being either - defined or whitelisted, or if it has been blacklisted.

-

Keywords other than eval, die, exit, include, require, - include_once, require_once, and __halt_compiler, are allowed even if they are - not whitelisted as long as they are not in the blacklist and a keyword whitelist hasn't been defined.

-

Operators and primitives are allowed even if they are not whitelisted as long as they are not in the blacklist - and a whitelist hasn't been defined.

-

Whitelist & Blacklist Precedence

-

Whitelists override their blacklist counterpart, therefore if a whitelist of functions has been defined - and also a blacklist of functions, the blacklist will have no effect. Furthermore, definitions override both - whitelists and blacklists, so that a defined function will always be allowed even if that function is not - defined in a function whitelist or is in a function blacklist.

-

Whitelists are configured in the PHPSandbox class through the whitelist(), - whitelist_func(), whitelist_var(), etc. instance methods.

-

Detailed explanations of the whitelist instance methods can be found in the - API documentation.

-

Blacklists are configured in the PHPSandbox class through the blacklist(), - blacklist_func(), blacklist_var(), etc. instance methods.

-

Detailed explanations of the blacklist instance methods can be found in the - API documentation.

-

Definitions

-

Definitions are configured in the PHPSandbox class through the define(), - define_func(), define_var(), etc. instance methods. They - are fully trusted, and override any respective whitelist or blacklist.

-

Detailed explanations of the definition instance methods can be found in the - API documentation.

-

Custom Validators

-

Custom validators are configured in the PHPSandbox class through the set_validator(), - set_func_validator(), set_var_validator(), etc. instance methods. They - are passed the name of the element and the PHPSandbox instance as arguments, and override any respective whitelist or blacklist.

-

Detailed explanations of the custom validator instance methods can be found in the - API documentation.

-

Click the "Using PHPSandbox Toolkit" tab to continue.

-
-

4 - Using PHPSandbox Toolkit

-
-

WARNING: The PHPSandbox toolkit is NOT DESIGNED to be used on a publicly accessible server! It is for - local testing in a private environment only! Use of The PHPSandbox toolkit on a public-facing server - will likely lead to the rooting of your server!

-
-

The Toolbar

-

The far right of the toolkit screen is the toolbar. Links to the API documentation and this help - dialog can be found here. This is also where sandbox templates, stored in the /toolkit/templates/ - folder, can be selected and automatically loaded in the toolkit environment to test, or templates can - be imported from your local filesystem.

-

More importantly, this is where the various sandbox configuration options can be selected, whitelists - and blacklists can be enabled, and definitions for functions, superglobals, etc. can be defined. Click the - "Configuring PHPSandbox Toolkit" tab below for more information.

-

Finally, the error level for the code to be executed can be set, and clicking "Run Code In Sandbox" - will execute the toolkit environment and output the response.

-

The Code Editor

-

The top left of the toolkit screen is the code editor, which can be set to four possible modes via the - Editor Mode menu above the code editor. These modes are:

-
    -
  • - Sandboxed Code — Code entered in this mode will be run within the sandbox - environment, and will be subject to all validation checks determined by the sandbox configuration. -
  • -
  • - Setup Code — This is a special mode that allows the toolkit to run trusted - code outside the sandbox, in the global scope of the script. This will allow for testing the sandbox - against globally scoped functions, variables, etc. it is NOT subject to any validation - checks, and can do anything a typical PHP script can! -
  • -
  • - Prepended Code — Code entered in this mode will be automatically trusted - by the sandboxed and will run before the sandboxed code runs, in the same execution scope as the - sandbox. If auto_whitelist is not enabled you will likely run into validation errors if the sandboxed - code attempts to use classes or functions declared by this code. -
  • -
  • - Appended Code — Code entered in this mode is treated exactly the same as - prepended code except it is run after the sandboxed code runs, and in the same execution scope. -
  • -
-

The Output Box

-

When "Run Code In Sandbox" is clicked, any execution output is sent to this box, including error messages, - uncaught exceptions and echoed output. Any values returned by the sandbox via the return keyword - will also be shown as a var_dump() output in a line underneath the echoed output.

-

Finally, a line will be shown at the end of the output showing the amount of milliseconds spent preparing - and executing the sandbox as well as the total time spent.

-

Click the "Using Templates" tab below to continue.

-
-

5 - Configuring PHPSandbox Toolkit

-
-

In the toolbar on the right side of the screen is a set of tabs that allow you to define all four areas of - configuration for your sandbox.

-

Options

-

This tab shows a list of checkboxes correlating with the configuration options available in the PHPSandbox class. - When a checkbox is checked its corresponding flag will be enabled, when unchecked its corresponding flag will be disabled.

-

Whitelists & Blacklists

-

This tab shows a dropdown menu of the type and a text input of the name of the item to add. - As you type the name of the item to add an alert tooltip will show if the name you are typing is invalid - for the selected type. Click the "+" button next to the text input to add the item - to your whitelist or blacklist. You can then click on an item to remove it from the whitelist or blacklist.

-

NOTE: Whitelists will override their blacklist counterparts! (e.g. if you - define a whitelisted function then the function blacklist will have no effect.)

-

Whitelist & Blacklist Types

-
    -
  • Functions: The names of the functions (must be fully qualified if namespace is not defined) to whitelist or blackist.
  • -
  • Variables: The names of the variables (without the $ prefix) to whitelist or blackist.
  • -
  • Globals: The names of the globals (without the $ prefix) to whitelist or blackist.
  • -
  • Superglobals: The names of the superglobals (without the $ prefix) to whitelist or blackist.
  • -
  • Constants: The names of the constants to whitelist or blackist.
  • -
  • Magic Constants: The names of the magic constants to whitelist or blackist.
  • -
  • Namespaces: The names of the namespaces to whitelist or blackist.
  • -
  • Aliases (aka Use): The names of the namespace aliases (aka uses) to whitelist or blackist.
  • -
  • Classes: The names of the classes to whitelist or blackist.
  • -
  • Interfaces: The names of the interfaces to whitelist or blackist.
  • -
  • Traits: The names of the traits to whitelist or blackist.
  • -
  • Classes: The names of the classes to whitelist or blackist.
  • -
  • Keywords: The keywords to whitelist or blackist.
  • -
  • Operators: The operators to whitelist or blackist.
  • -
  • Primitives: The names of the primitives to whitelist or blackist.
  • -
  • Types: The names of the object types to whitelist or blackist.
  • -
-

Definitions

-

This tab shows a dropdown menu of the definition type. Click the "Define" button next to the dropdown - menu to open the selected definition editor.

-

NOTE: Definitions are fully trusted, and override their whitelist and blacklist counterparts!

-

Definition Editors

-

Each of the definition editors open in their own window, and will show you a preview of what their - result will be in your sandboxed code.

-
    -
  • Function Editor: -

    In this editor you will be able to specify the name of your defined function, a checkbox that - indicates whether to pass the PHPSandbox instance as the first argument, a text field in which - you can describe the arguments of your function, and a code editor in which to write your - defined function code. If this code is malformed the execution of your sandbox will fail.

    -
  • -
  • Variable Editor: -

    In this editor you will be able to specify the name of your defined variable, the variable - scalar value type, and the variable value.

    -
  • -
  • Superglobal Editor: -

    In this editor you will be able to specify the name of your defined superglobal, the superglobal - key to set, the superglobal scalar value type, and the superglobal value.

    -

    NOTE: You are able to define a callable function as the value of superglobal - when configuring the PHPSandbox class from PHP through the define_superglobal() instance method. It - will be passed the PHPSandbox instance as the first argument, and is fully trusted.

    -
  • -
  • Constant Editor: -

    In this editor you will be able to specify the name of your defined constant, the constant - scalar value type, and the constant value.

    -
  • -
  • Magic Constant Editor: -

    In this editor you will be able to specify the name of your defined magic constant, the - magic constant scalar value type, and the magic constant value.

    -

    NOTE: You are able to define a callable function as the value of magic constant - when configuring the PHPSandbox class from PHP through the define_magic_const() instance method. - It will be passed the PHPSandbox instance as the first argument, and is fully trusted.

    -
  • -
  • Namespace Editor: -

    In this editor you will be able to specify the name of your defined namespace.

    -
  • -
  • Alias (aka Use) Editor: -

    In this editor you will be able to specify the name of your defined namespace to use, and - the alias to use. If alias is left blank the namespace will not use an alias.

    -
  • -
  • Class Editor: -

    In this editor you will be able to specify the name of the class to redefine, and - the class to redefine it to use.

    -
  • -
  • Interface Editor: -

    In this editor you will be able to specify the name of the interface to redefine, and - the interface to redefine it to use.

    -
  • -
  • Trait Editor: -

    In this editor you will be able to specify the name of the trait to redefine, and - the trait to redefine it to use.

    -
  • -
-

Click the "Using PHPSandbox Templates" tab below to continue.

-
-

6 - Using PHPSandbox Templates

-
-

The PHPSandbox toolkit comes with a special template feature that allows for you to open and save templates in a - JSON format that the PHPSandbox class can easily import. This makes the sharing of sandboxed configurations - incredibly easy as well as making it simple to extend existing templates for your own uses.

-

Loading Templates

-

To load a template, simply select a template from the dropdown list of available templates in the - /toolkit/templates/ folder, or click "Import A Template" to load one from your local filesystem. - Once a template is selected the toolkit environment will automatically load all the template options, - whitelists, blacklists, definitions, and all setup, trusted and sandboxed code in their respective modes.

-

Saving Templates

-

If you wish to save your current sandbox configuration, simply click the "Save As New Template" button. - You will be prompted for a name for your new template. Once you have named your template, you will be - alerted to the success or failure of the operation, and your template will be stored in the - /toolkit/templates/ folder. Once your template is saved it automatically becomes available in the - dropdown templates menu for you to choose from. If you check the "Download Template?" checkbox you - will be prompted to download your template and save it in a location of your choosing instead of - saving it to the /toolkit/templates/ folder.

-

Importing Templates

-

If you wish to import a JSON template into a PHPSandbox instance within PHP, simply call the import() - instance method and either pass the JSON string or JSON array to the method. You may also specify a bitmask of - import options, by passing it as the second argument to the method.

- Example: -
$sandbox->import(file_get_contents('template.json'));
-

Import Options

-

These class constants are provided to simplify setting the bitmask option to pass to the import() method.

-
    -
  • PHPSandbox::IMPORT_ALL — Import everything from the template. This is the default setting.
  • -
  • PHPSandbox::IMPORT_OPTIONS — Import the template options.
  • -
  • PHPSandbox::IMPORT_DEFINITIONS — Import the template definitions.
  • -
  • PHPSandbox::IMPORT_WHITELIST — Import the template whitelist.
  • -
  • PHPSandbox::IMPORT_BLACKLIST — Import the template blacklist.
  • -
  • PHPSandbox::IMPORT_TRUSTED_CODE — Import the template trusted prepended and appended code.
  • -
  • PHPSandbox::IMPORT_CODE — Import the template sandboxed code.
  • -
- Example: -
$sandbox->import(file_get_contents('template.json'),
-                 PHPSandbox\PHPSandbox::IMPORT_OPTIONS);
-

Click the "PHPSandbox License" tab below to continue.

-
-

7 - PHPSandbox License

-
-
Copyright (c) 2013-2014 by Elijah Horton (fieryprophet [at] yahoo.com)
-
-Some 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.
-
-    * The names of the contributors may not be used to endorse or
-      promote products derived from this software without specific
-      prior written permission.
-
-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
-OWNER 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.
-
-
-
-

- © Copyright 2013-2014 Elijah Hortonfieryprophet.com -

- - - \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/README.md b/vendor/fieryprophet/php-sandbox/README.md deleted file mode 100644 index dcdc406..0000000 --- a/vendor/fieryprophet/php-sandbox/README.md +++ /dev/null @@ -1,134 +0,0 @@ -![PHPSandbox](http://www.fieryprophet.com/frontend/files/userfiles/images/phpsandbox-logo.png) - -##A full-scale PHP 5.3.2+ sandbox class that utilizes [PHP-Parser](https://github.com/nikic/PHP-Parser) to prevent sandboxed code from running unsafe code. - -It also utilizes [FunctionParser](https://github.com/jeremeamia/FunctionParser) to disassemble callables passed to the sandbox, so that PHP callables can also be run in sandboxes without first converting them into strings. - -**Manual:** [http://fieryprophet.com/phpsandbox-docs/MANUAL.html](http://fieryprophet.com/phpsandbox-docs/MANUAL.html) - -**Online API Documentation:** [http://fieryprophet.com/phpsandbox-docs/](http://fieryprophet.com/phpsandbox-docs/) - -[![Build Status](https://travis-ci.org/fieryprophet/php-sandbox.png?branch=master)](https://travis-ci.org/fieryprophet/php-sandbox) [![Latest Stable Version](https://poser.pugx.org/fieryprophet/php-sandbox/v/stable.png)](https://packagist.org/packages/fieryprophet/php-sandbox) [![Total Downloads](https://poser.pugx.org/fieryprophet/php-sandbox/downloads.png)](https://packagist.org/packages/fieryprophet/php-sandbox) [![Latest Unstable Version](https://poser.pugx.org/fieryprophet/php-sandbox/v/unstable.png)](https://packagist.org/packages/fieryprophet/php-sandbox) [![License](https://poser.pugx.org/fieryprophet/php-sandbox/license.png)](https://packagist.org/packages/fieryprophet/php-sandbox) - -##Features: - -- Finegrained whitelisting and blacklisting, with sensible defaults configured. -- **Includes dynamic demonstration system that allows for local testing of custom sandbox configurations** -- Can redefine internal PHP and other functions to make them more secure for sandbox usage. -- Can redefine superglobals and magic constants to expose your own values to sandboxed code. -- Can overwrite the get_defined_* and get_declared_* functions to show only allowed functions, classes, etc. to the sandboxed code. -- Can selectively allow and disallow function creation, class declarations, constant definitions, keywords, and much more. -- Can prepend and append trusted code to setup and tear down the sandbox, and automatically whitelist the classes, functions, variables, etc. they define for the sandbox. -- Can retrieve the generated sandbox code for later usage. -- Can pass arguments directly to the sandboxed code through the execute method to reveal chosen outside variables to the sandbox. -- Can access the parsed, prepared and generated code ASTs for further analysis or for serialization. -- Can define custom validation functions for fine-grained control of every element of the sandbox. -- Can specify a custom error handler to intercept PHP errors and handle them with custom logic. -- Can specify a custom exception handler to intercept thrown exceptions and handle them with custom logic. -- Can specify a validation error handler to intercept thrown validation errors and handle them with custom logic. -- **Can intercept callbacks and validate them against function whitelists and blacklists, even if they are called as strings** - -##Example usage: - - function test($string){ - return 'Hello ' . $string; - } - - $sandbox = new PHPSandbox\PHPSandbox; - $sandbox->whitelist_func('test'); - $result = $sandbox->execute(function(){ - return test('world'); - }); - - var_dump($result); //Hello world - -##Custom validation example: - - function custom_func(){ - echo 'I am valid!'; - } - - $sandbox = new PHPSandbox\PHPSandbox; - //this will mark any function valid that begins with "custom_" - $sandbox->set_func_validator(function($function_name, PHPSandbox\PHPSandbox $sandbox){ - return (substr($function_name, 0, 7) == 'custom_'); //return true if function is valid, false otherwise - }); - $sandbox->execute(function(){ - custom_func(); - }); - //echoes "I am valid!" - -##Custom validation error handler example: - - $sandbox = new PHPSandbox\PHPSandbox; - //this will intercept parser validation errors and quietly exit, otherwise it will throw the validation error - $sandbox->set_validation_error_handler(function(PHPSandbox\Error $error, PHPSandbox\PHPSandbox $sandbox){ - if($error->getCode() == PHPSandbox\Error::PARSER_ERROR){ //PARSER_ERROR == 1 - exit; - } - throw $error; - }); - $sandbox->execute(''); - //does nothing - -##Disable validation example: - - $sandbox = new PHPSandbox\PHPSandbox; - //this will disable function validation - $sandbox->set_option('validate_functions', false); // or $sandbox->validate_functions = false; - $sandbox->execute(''); - //Pinging google.com. . . - -##Requirements - -- PHP 5.3.2+ -- [PHP-Parser](https://github.com/nikic/PHP-Parser) -- [FunctionParser](https://github.com/jeremeamia/FunctionParser) (if you wish to use closures) -- PHP should be compiled with *--enable-tokenizer* option (it typically is) - -##Installation - -To install using [composer](http://getcomposer.org/), simply add the following to your composer.json file in the root of your project: - - { - "minimum-stability": "dev", - "require": { - "fieryprophet/php-sandbox": "1.3.*" - } - } - -Then run *composer install --dry-run* to check for any potential problems, and *composer install* to install. - -##LICENSE - - Copyright (c) 2013-2014 by Elijah Horton (fieryprophet [at] yahoo.com) - - Some 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. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - - 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 - OWNER 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. \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/composer.json b/vendor/fieryprophet/php-sandbox/composer.json deleted file mode 100644 index b5f0496..0000000 --- a/vendor/fieryprophet/php-sandbox/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "fieryprophet/php-sandbox", - "description": "A PHP library that can be used to run PHP code in a sandboxed environment", - "keywords": ["php", "sandbox", "parser", "whitelist", "blacklist"], - "type": "library", - "homepage": "http://www.fieryprophet.com/phpsandbox", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Elijah Horton" - } - ], - "require": { - "php": ">=5.3.2", - "nikic/php-parser": "~0.9.5", - "jeremeamia/functionparser": "~1.0.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*", - "phpdocumentor/phpdocumentor": "v2.3.2" - }, - "autoload": { - "files": [ "src/functions.php" ], - "psr-4": { "PHPSandbox\\": "src/" } - } -} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/composer.lock b/vendor/fieryprophet/php-sandbox/composer.lock deleted file mode 100644 index 0681e6a..0000000 --- a/vendor/fieryprophet/php-sandbox/composer.lock +++ /dev/null @@ -1,3074 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "35c3d488c87c7f41396a85bf0a00d5a9", - "packages": [ - { - "name": "jeremeamia/FunctionParser", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/jeremeamia/FunctionParser.git", - "reference": "035b52000b88ea8d72a6647dd4cd39f080cf7ada" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/FunctionParser/zipball/035b52000b88ea8d72a6647dd4cd39f080cf7ada", - "reference": "035b52000b88ea8d72a6647dd4cd39f080cf7ada", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "FunctionParser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Lindblom" - } - ], - "description": "Function parser for PHP functions, methods, and closures", - "homepage": "https://github.com/jeremeamia/FunctionParser", - "keywords": [ - "closure", - "function", - "parser", - "tokenizer" - ], - "time": "2015-02-02 17:30:47" - }, - { - "name": "nikic/php-parser", - "version": "v0.9.5", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - }, - "autoload": { - "psr-0": { - "PHPParser": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2014-07-23 18:24:17" - } - ], - "packages-dev": [ - { - "name": "cilex/cilex", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/Cilex/Cilex.git", - "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Cilex/Cilex/zipball/7acd965a609a56d0345e8b6071c261fbdb926cb5", - "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5", - "shasum": "" - }, - "require": { - "cilex/console-service-provider": "1.*", - "php": ">=5.3.3", - "pimple/pimple": "~1.0", - "symfony/finder": "~2.1", - "symfony/process": "~2.1" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*", - "symfony/validator": "~2.1" - }, - "suggest": { - "monolog/monolog": ">=1.0.0", - "symfony/validator": ">=1.0.0", - "symfony/yaml": ">=1.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-0": { - "Cilex": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components", - "homepage": "http://cilex.github.com", - "keywords": [ - "cli", - "microframework" - ], - "time": "2014-03-29 14:03:13" - }, - { - "name": "cilex/console-service-provider", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/Cilex/console-service-provider.git", - "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e", - "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "pimple/pimple": "1.*@dev", - "symfony/console": "~2.1" - }, - "require-dev": { - "cilex/cilex": "1.*@dev", - "silex/silex": "1.*@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-0": { - "Cilex\\Provider\\Console": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "description": "Console Service Provider", - "keywords": [ - "cilex", - "console", - "pimple", - "service-provider", - "silex" - ], - "time": "2012-12-19 10:50:58" - }, - { - "name": "doctrine/annotations", - "version": "v1.2.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/eeda578cbe24a170331a1cfdf78be723412df7a4", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": ">=5.3.2" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "4.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Annotations\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2014-12-20 20:49:38" - }, - { - "name": "doctrine/lexer", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "lexer", - "parser" - ], - "time": "2014-09-09 13:34:57" - }, - { - "name": "dompdf/dompdf", - "version": "v0.6.1", - "source": { - "type": "git", - "url": "https://github.com/dompdf/dompdf.git", - "reference": "cf7d8a0a27270418850cc7d7ea532159e5eeb3eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/cf7d8a0a27270418850cc7d7ea532159e5eeb3eb", - "reference": "cf7d8a0a27270418850cc7d7ea532159e5eeb3eb", - "shasum": "" - }, - "require": { - "phenx/php-font-lib": "0.2.*" - }, - "type": "library", - "autoload": { - "classmap": [ - "include/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - }, - { - "name": "Brian Sweeney", - "email": "eclecticgeek@gmail.com" - } - ], - "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", - "homepage": "https://github.com/dompdf/dompdf", - "time": "2014-03-11 01:59:52" - }, - { - "name": "erusev/parsedown", - "version": "0.9.4", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/d29ff18299210b52a75a631a70963e7c8b35b04f", - "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], - "time": "2014-02-06 12:16:14" - }, - { - "name": "jms/metadata", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/metadata.git", - "reference": "22b72455559a25777cfd28c4ffda81ff7639f353" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/22b72455559a25777cfd28c4ffda81ff7639f353", - "reference": "22b72455559a25777cfd28c4ffda81ff7639f353", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "doctrine/cache": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5.x-dev" - } - }, - "autoload": { - "psr-0": { - "Metadata\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache" - ], - "authors": [ - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Class/method/property metadata management in PHP", - "keywords": [ - "annotations", - "metadata", - "xml", - "yaml" - ], - "time": "2014-07-12 07:13:19" - }, - { - "name": "jms/parser-lib", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/parser-lib.git", - "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", - "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", - "shasum": "" - }, - "require": { - "phpoption/phpoption": ">=0.9,<2.0-dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-0": { - "JMS\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "description": "A library for easily creating recursive-descent parsers.", - "time": "2012-11-18 18:08:43" - }, - { - "name": "jms/serializer", - "version": "0.16.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/serializer.git", - "reference": "c8a171357ca92b6706e395c757f334902d430ea9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/c8a171357ca92b6706e395c757f334902d430ea9", - "reference": "c8a171357ca92b6706e395c757f334902d430ea9", - "shasum": "" - }, - "require": { - "doctrine/annotations": "1.*", - "jms/metadata": "~1.1", - "jms/parser-lib": "1.*", - "php": ">=5.3.2", - "phpcollection/phpcollection": "~0.1" - }, - "require-dev": { - "doctrine/orm": "~2.1", - "doctrine/phpcr-odm": "~1.0.1", - "jackalope/jackalope-doctrine-dbal": "1.0.*", - "propel/propel1": "~1.7", - "symfony/filesystem": "2.*", - "symfony/form": "~2.1", - "symfony/translation": "~2.0", - "symfony/validator": "~2.0", - "symfony/yaml": "2.*", - "twig/twig": ">=1.8,<2.0-dev" - }, - "suggest": { - "symfony/yaml": "Required if you'd like to serialize data to YAML format." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.15-dev" - } - }, - "autoload": { - "psr-0": { - "JMS\\Serializer": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "authors": [ - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", - "homepage": "http://jmsyst.com/libs/serializer", - "keywords": [ - "deserialization", - "jaxb", - "json", - "serialization", - "xml" - ], - "time": "2014-03-18 08:39:00" - }, - { - "name": "monolog/monolog", - "version": "1.12.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1fbe8c2641f2b163addf49cc5e18f144bec6b19f", - "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~4.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "videlalvaro/php-amqplib": "~2.4" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.12.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "time": "2014-12-29 21:29:35" - }, - { - "name": "phenx/php-font-lib", - "version": "0.2.2", - "source": { - "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82", - "reference": "c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "classes/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse, export and make subsets of different types of font files.", - "homepage": "https://github.com/PhenX/php-font-lib", - "time": "2014-02-01 15:22:28" - }, - { - "name": "phpcollection/phpcollection", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-collection.git", - "reference": "b8bf55a0a929ca43b01232b36719f176f86c7e83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/b8bf55a0a929ca43b01232b36719f176f86c7e83", - "reference": "b8bf55a0a929ca43b01232b36719f176f86c7e83", - "shasum": "" - }, - "require": { - "phpoption/phpoption": "1.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.3-dev" - } - }, - "autoload": { - "psr-0": { - "PhpCollection": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "authors": [ - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "General-Purpose Collection Library for PHP", - "keywords": [ - "collection", - "list", - "map", - "sequence", - "set" - ], - "time": "2014-03-11 13:46:42" - }, - { - "name": "phpdocumentor/fileset", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Fileset.git", - "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Fileset/zipball/bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", - "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/finder": "~2.1" - }, - "require-dev": { - "phpunit/phpunit": "~3.7" - }, - "type": "library", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Fileset component for collecting a set of files given directories and file paths", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "files", - "fileset", - "phpdoc" - ], - "time": "2013-08-06 21:07:42" - }, - { - "name": "phpdocumentor/graphviz", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/GraphViz.git", - "reference": "aa243118c8a055fc853c02802e8503c5435862f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/aa243118c8a055fc853c02802e8503c5435862f7", - "reference": "aa243118c8a055fc853c02802e8503c5435862f7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~3.7" - }, - "type": "library", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2014-07-19 06:52:59" - }, - { - "name": "phpdocumentor/phpdocumentor", - "version": "v2.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/phpDocumentor2.git", - "reference": "0f95a9ddd5340423a9e8a6a532ec211ae57b1d24" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/phpDocumentor2/zipball/0f95a9ddd5340423a9e8a6a532ec211ae57b1d24", - "reference": "0f95a9ddd5340423a9e8a6a532ec211ae57b1d24", - "shasum": "" - }, - "require": { - "cilex/cilex": "~1.0", - "dompdf/dompdf": "~0.6", - "erusev/parsedown": "~0.7", - "jms/serializer": "~0.12", - "monolog/monolog": "~1.6", - "php": ">=5.3.3", - "phpdocumentor/fileset": "~1.0", - "phpdocumentor/graphviz": "~1.0", - "phpdocumentor/reflection": "~1.0", - "phpdocumentor/reflection-docblock": "~2.0", - "phpdocumentor/template-abstract": "~1.2", - "phpdocumentor/template-checkstyle": "~1.2", - "phpdocumentor/template-clean": "~1.0", - "phpdocumentor/template-new-black": "~1.3", - "phpdocumentor/template-old-ocean": "~1.3", - "phpdocumentor/template-responsive": "~1.3", - "phpdocumentor/template-responsive-twig": "~1.2", - "phpdocumentor/template-xml": "~1.0", - "phpdocumentor/template-zend": "~1.3", - "symfony/config": "~2.3", - "symfony/console": "~2.3", - "symfony/event-dispatcher": "~2.1", - "symfony/process": "~2.0", - "symfony/stopwatch": "~2.3", - "symfony/validator": "~2.2", - "twig/twig": "~1.3", - "zendframework/zend-cache": "2.*", - "zendframework/zend-config": "2.*", - "zendframework/zend-filter": "2.*", - "zendframework/zend-i18n": "2.*", - "zendframework/zend-serializer": "2.*", - "zendframework/zend-servicemanager": "2.*", - "zendframework/zend-stdlib": "2.*", - "zetacomponents/document": ">=1.3.1" - }, - "require-dev": { - "behat/behat": "~2.4", - "mikey179/vfsstream": "~1.2", - "mockery/mockery": ">=0.8.0", - "phpunit/phpunit": "~3.7", - "squizlabs/php_codesniffer": "~1.4", - "symfony/expression-language": "~2.4" - }, - "bin": [ - "bin/phpdoc.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Documentation Generator for PHP", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "api", - "application", - "dga", - "documentation", - "phpdoc" - ], - "time": "2014-03-07 07:32:00" - }, - { - "name": "phpdocumentor/reflection", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/fc40c3f604ac2287eb5c314174d5109b2c699372", - "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372", - "shasum": "" - }, - "require": { - "nikic/php-parser": "~0.9.4", - "php": ">=5.3.3", - "phpdocumentor/reflection-docblock": "~2.0", - "psr/log": "~1.0" - }, - "require-dev": { - "behat/behat": "~2.4", - "mockery/mockery": "~0.8", - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/", - "tests/mocks/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Reflection library to do Static Analysis for PHP Projects", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2014-11-14 11:43:04" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpdocumentor/template-abstract", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.abstract.git", - "reference": "df1d11cf11cf5da433789e2be07f4d2d6e51aaca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.abstract/zipball/df1d11cf11cf5da433789e2be07f4d2d6e51aaca", - "reference": "df1d11cf11cf5da433789e2be07f4d2d6e51aaca", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Simple bright template for phpDocumentor", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2014-06-04 19:32:56" - }, - { - "name": "phpdocumentor/template-checkstyle", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.checkstyle.git", - "reference": "cfa86d19327b0d762332787ff2dda0d55226a2e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.checkstyle/zipball/cfa86d19327b0d762332787ff2dda0d55226a2e2", - "reference": "cfa86d19327b0d762332787ff2dda0d55226a2e2", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Checkstyle XML output template for phpDocumentor2", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2014-08-17 19:32:38" - }, - { - "name": "phpdocumentor/template-clean", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.clean.git", - "reference": "6fc0f7f6c55c1f94ac5b1c6fccde7aac77755e45" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.clean/zipball/6fc0f7f6c55c1f94ac5b1c6fccde7aac77755e45", - "reference": "6fc0f7f6c55c1f94ac5b1c6fccde7aac77755e45", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A clean, responsive modern template for phpDocumentor for Twig aimed at usability", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "responsive", - "template" - ], - "time": "2014-08-15 21:45:34" - }, - { - "name": "phpdocumentor/template-new-black", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.new_black.git", - "reference": "d98f84633b94b279582735aecd91015c1e191d98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.new_black/zipball/d98f84633b94b279582735aecd91015c1e191d98", - "reference": "d98f84633b94b279582735aecd91015c1e191d98", - "shasum": "" - }, - "require": { - "phpdocumentor/template-abstract": "1.*", - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Web 2.0 template with dark sidebar for phpDocumentor", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2014-06-27 17:00:31" - }, - { - "name": "phpdocumentor/template-old-ocean", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.old_ocean.git", - "reference": "2fdb786038351c0ec88633d4e2aa103e4bbb8655" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.old_ocean/zipball/2fdb786038351c0ec88633d4e2aa103e4bbb8655", - "reference": "2fdb786038351c0ec88633d4e2aa103e4bbb8655", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Blue template with high contrast for the foreground", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2014-06-27 16:59:35" - }, - { - "name": "phpdocumentor/template-responsive", - "version": "1.3.5", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.responsive.git", - "reference": "949e742f350f70fc8ec7c945b3cf0070a4e1825e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.responsive/zipball/949e742f350f70fc8ec7c945b3cf0070a4e1825e", - "reference": "949e742f350f70fc8ec7c945b3cf0070a4e1825e", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Responsive modern template for phpDocumentor", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2014-08-05 20:47:53" - }, - { - "name": "phpdocumentor/template-responsive-twig", - "version": "1.2.5", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.responsive-twig.git", - "reference": "493e204be607583efd2d75f1728cd5210e23cf96" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.responsive-twig/zipball/493e204be607583efd2d75f1728cd5210e23cf96", - "reference": "493e204be607583efd2d75f1728cd5210e23cf96", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Responsive modern template for phpDocumentor for Twig", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2014-07-30 20:00:37" - }, - { - "name": "phpdocumentor/template-xml", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/mvriel/template.xml.git", - "reference": "a372713be8ee99b16497e2580592e474ff51190c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mvriel/template.xml/zipball/a372713be8ee99b16497e2580592e474ff51190c", - "reference": "a372713be8ee99b16497e2580592e474ff51190c", - "shasum": "" - }, - "require": { - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Generates an XML representation of the project's structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "documentation", - "phpdoc", - "template" - ], - "time": "2013-08-01 20:23:32" - }, - { - "name": "phpdocumentor/template-zend", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/template.zend.git", - "reference": "75913288bfd73d3bf4c1b1179c3963f3431e7a9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/template.zend/zipball/75913288bfd73d3bf4c1b1179c3963f3431e7a9d", - "reference": "75913288bfd73d3bf4c1b1179c3963f3431e7a9d", - "shasum": "" - }, - "require": { - "ext-xsl": "*", - "phpdocumentor/template-abstract": "1.*", - "phpdocumentor/unified-asset-installer": "~1.1" - }, - "type": "phpdocumentor-template", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Official Zend Framework Template for phpDocumentor2", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "ZendFramework", - "documentation", - "phpdoc", - "template", - "zend", - "zf" - ], - "time": "2013-12-05 08:51:57" - }, - { - "name": "phpdocumentor/unified-asset-installer", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/UnifiedAssetInstaller.git", - "reference": "241fb036268cd9da7d76da3db66e3eda66259c52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/UnifiedAssetInstaller/zipball/241fb036268cd9da7d76da3db66e3eda66259c52", - "reference": "241fb036268cd9da7d76da3db66e3eda66259c52", - "shasum": "" - }, - "require": { - "composer-plugin-api": "1.0.0" - }, - "require-dev": { - "composer/composer": "~1.0@dev", - "phpunit/phpunit": "~3.7" - }, - "type": "composer-installer", - "extra": { - "class": "\\phpDocumentor\\Composer\\UnifiedAssetInstaller" - }, - "autoload": { - "psr-0": { - "phpDocumentor\\Composer": [ - "src/", - "test/unit/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Asset installer for phpDocumentor", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "assets", - "installer", - "plugins", - "templates" - ], - "time": "2013-09-09 06:13:02" - }, - { - "name": "phpoption/phpoption", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "5d099bcf0393908bf4ad69cc47dafb785d51f7f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5d099bcf0393908bf4ad69cc47dafb785d51f7f5", - "reference": "5d099bcf0393908bf4ad69cc47dafb785d51f7f5", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-0": { - "PhpOption\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "authors": [ - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "time": "2014-01-09 22:37:17" - }, - { - "name": "phpunit/php-code-coverage", - "version": "1.2.18", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b", - "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.0@stable", - "phpunit/php-text-template": ">=1.2.0@stable", - "phpunit/php-token-stream": ">=1.1.3,<1.3.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@dev" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.0.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2014-09-02 10:13:14" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "File/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2013-10-10 15:34:57" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "Text/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2014-01-30 17:20:04" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2013-08-02 07:42:54" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32", - "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2014-03-03 05:10:30" - }, - { - "name": "phpunit/phpunit", - "version": "3.7.38", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/38709dc22d519a3d1be46849868aa2ddf822bcf6", - "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~1.2", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.1", - "phpunit/php-timer": "~1.0", - "phpunit/phpunit-mock-objects": "~1.2", - "symfony/yaml": "~2.0" - }, - "require-dev": { - "pear-pear.php.net/pear": "1.9.4" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "composer/bin/phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.7.x-dev" - } - }, - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2014-10-17 09:04:17" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875", - "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-text-template": ">=1.1.1@stable" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2013-01-13 10:24:48" - }, - { - "name": "pimple/pimple", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", - "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", - "homepage": "http://pimple.sensiolabs.org", - "keywords": [ - "container", - "dependency injection" - ], - "time": "2013-11-22 08:30:29" - }, - { - "name": "psr/log", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" - }, - { - "name": "symfony/config", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Config", - "source": { - "type": "git", - "url": "https://github.com/symfony/Config.git", - "reference": "a9f781ba1221067d1f07c8cec0bc50f81b8d7408" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Config/zipball/a9f781ba1221067d1f07c8cec0bc50f81b8d7408", - "reference": "a9f781ba1221067d1f07c8cec0bc50f81b8d7408", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/filesystem": "~2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Config\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Config Component", - "homepage": "http://symfony.com", - "time": "2015-01-21 20:57:55" - }, - { - "name": "symfony/console", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Console", - "source": { - "type": "git", - "url": "https://github.com/symfony/Console.git", - "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/e44154bfe3e41e8267d7a3794cd9da9a51cfac34", - "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/process": "~2.1" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Console\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Console Component", - "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" - }, - { - "name": "symfony/event-dispatcher", - "version": "v2.6.4", - "target-dir": "Symfony/Component/EventDispatcher", - "source": { - "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "f75989f3ab2743a82fe0b03ded2598a2b1546813" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/f75989f3ab2743a82fe0b03ded2598a2b1546813", - "reference": "f75989f3ab2743a82fe0b03ded2598a2b1546813", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5", - "symfony/dependency-injection": "~2.6", - "symfony/expression-language": "~2.6", - "symfony/stopwatch": "~2.3" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "http://symfony.com", - "time": "2015-02-01 16:10:57" - }, - { - "name": "symfony/filesystem", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Filesystem", - "source": { - "type": "git", - "url": "https://github.com/symfony/Filesystem.git", - "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a1f566d1f92e142fa1593f4555d6d89e3044a9b7", - "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Filesystem\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "http://symfony.com", - "time": "2015-01-03 21:13:09" - }, - { - "name": "symfony/finder", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Finder", - "source": { - "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "16513333bca64186c01609961a2bb1b95b5e1355" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/16513333bca64186c01609961a2bb1b95b5e1355", - "reference": "16513333bca64186c01609961a2bb1b95b5e1355", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Finder\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Finder Component", - "homepage": "http://symfony.com", - "time": "2015-01-03 08:01:59" - }, - { - "name": "symfony/process", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Process", - "source": { - "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/ecfc23e89d9967999fa5f60a1e9af7384396e9ae", - "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Process\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Process Component", - "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" - }, - { - "name": "symfony/stopwatch", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Stopwatch", - "source": { - "type": "git", - "url": "https://github.com/symfony/Stopwatch.git", - "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/e8da5286132ba75ce4b4275fbf0f4cd369bfd71c", - "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Stopwatch\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "http://symfony.com", - "time": "2015-01-03 08:01:59" - }, - { - "name": "symfony/translation", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Translation", - "source": { - "type": "git", - "url": "https://github.com/symfony/Translation.git", - "reference": "f289cdf8179d32058c1e1cbac723106a5ff6fa39" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Translation/zipball/f289cdf8179d32058c1e1cbac723106a5ff6fa39", - "reference": "f289cdf8179d32058c1e1cbac723106a5ff6fa39", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.3,>=2.3.12", - "symfony/intl": "~2.3", - "symfony/yaml": "~2.2" - }, - "suggest": { - "psr/log": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Translation Component", - "homepage": "http://symfony.com", - "time": "2015-01-03 15:33:07" - }, - { - "name": "symfony/validator", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Validator", - "source": { - "type": "git", - "url": "https://github.com/symfony/Validator.git", - "reference": "1906eb78a5049b41a80094c20faf66dfbaaf2049" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Validator/zipball/1906eb78a5049b41a80094c20faf66dfbaaf2049", - "reference": "1906eb78a5049b41a80094c20faf66dfbaaf2049", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/translation": "~2.0,>=2.0.5" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "doctrine/cache": "~1.0", - "doctrine/common": "~2.3", - "egulias/email-validator": "~1.2,>=1.2.1", - "symfony/config": "~2.2", - "symfony/expression-language": "~2.4", - "symfony/http-foundation": "~2.1", - "symfony/intl": "~2.3", - "symfony/property-access": "~2.3", - "symfony/yaml": "~2.0,>=2.0.5" - }, - "suggest": { - "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader and metadata cache.", - "egulias/email-validator": "Strict (RFC compliant) email validation", - "symfony/config": "", - "symfony/expression-language": "For using the 2.4 Expression validator", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/property-access": "For using the 2.4 Validator API", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Validator\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Validator Component", - "homepage": "http://symfony.com", - "time": "2015-02-01 16:10:57" - }, - { - "name": "symfony/yaml", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Yaml", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/60ed7751671113cf1ee7d7778e691642c2e9acd8", - "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Yaml\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Yaml Component", - "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" - }, - { - "name": "twig/twig", - "version": "v1.18.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "4cf7464348e7f9893a93f7096a90b73722be99cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/4cf7464348e7f9893a93f7096a90b73722be99cf", - "reference": "4cf7464348e7f9893a93f7096a90b73722be99cf", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.18-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", - "keywords": [ - "templating" - ], - "time": "2015-01-25 17:32:08" - }, - { - "name": "zendframework/zend-cache", - "version": "2.3.4", - "target-dir": "Zend/Cache", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendCache.git", - "reference": "03cf30de6aa60ff9fb1a9f473202559a18b9f2f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendCache/zipball/03cf30de6aa60ff9fb1a9f473202559a18b9f2f5", - "reference": "03cf30de6aa60ff9fb1a9f473202559a18b9f2f5", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-session": "self.version" - }, - "suggest": { - "ext-apc": "APC >= 3.1.6 to use the APC storage adapter", - "ext-dba": "DBA, to use the DBA storage adapter", - "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter", - "ext-wincache": "WinCache, to use the WinCache storage adapter", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-session": "Zend\\Session component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Cache\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides a generic way to cache any data", - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "cache", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-config", - "version": "2.3.4", - "target-dir": "Zend/Config", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendConfig.git", - "reference": "c07bbcfd6c32e9eaf3de457cb880349f8c18885d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendConfig/zipball/c07bbcfd6c32e9eaf3de457cb880349f8c18885d", - "reference": "c07bbcfd6c32e9eaf3de457cb880349f8c18885d", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", - "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Config\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides a nested object property based user interface for accessing this configuration data within application code", - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "config", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-eventmanager", - "version": "2.3.4", - "target-dir": "Zend/EventManager", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendEventManager.git", - "reference": "5992c202f13292415501aed41beba76404197866" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/5992c202f13292415501aed41beba76404197866", - "reference": "5992c202f13292415501aed41beba76404197866", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\EventManager\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "eventmanager", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-filter", - "version": "2.3.4", - "target-dir": "Zend/Filter", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendFilter.git", - "reference": "43206c8a7d847ebaff83c1c0b2f7dd8a318313eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendFilter/zipball/43206c8a7d847ebaff83c1c0b2f7dd8a318313eb", - "reference": "43206c8a7d847ebaff83c1c0b2f7dd8a318313eb", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-crypt": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-crypt": "Zend\\Crypt component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Filter\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides a set of commonly needed data filters", - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "filter", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-i18n", - "version": "2.3.4", - "target-dir": "Zend/I18n", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendI18n.git", - "reference": "0a78212878f5cf7d5ec0b554150717ddbe5755d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendI18n/zipball/0a78212878f5cf7d5ec0b554150717ddbe5755d6", - "reference": "0a78212878f5cf7d5ec0b554150717ddbe5755d6", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-cache": "self.version", - "zendframework/zend-config": "self.version", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-view": "self.version" - }, - "suggest": { - "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", - "zendframework/zend-cache": "Zend\\Cache component", - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", - "zendframework/zend-filter": "You should install this package to use the provided filters", - "zendframework/zend-resources": "Translation resources", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-validator": "You should install this package to use the provided validators", - "zendframework/zend-view": "You should install this package to use the provided view helpers" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\I18n\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "i18n", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-json", - "version": "2.3.4", - "target-dir": "Zend/Json", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendJson.git", - "reference": "24b072788f42a025e479901e0c6e5c0bf0dcd960" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendJson/zipball/24b072788f42a025e479901e0c6e5c0bf0dcd960", - "reference": "24b072788f42a025e479901e0c6e5c0bf0dcd960", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-http": "self.version", - "zendframework/zend-server": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-server": "Zend\\Server component", - "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Json\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "json", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-math", - "version": "2.3.4", - "target-dir": "Zend/Math", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendMath.git", - "reference": "45e7544d499a11c97d8b8fec00597f646e105ffb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendMath/zipball/45e7544d499a11c97d8b8fec00597f646e105ffb", - "reference": "45e7544d499a11c97d8b8fec00597f646e105ffb", - "shasum": "" - }, - "require": { - "php": ">=5.3.23" - }, - "suggest": { - "ext-bcmath": "If using the bcmath functionality", - "ext-gmp": "If using the gmp functionality", - "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable", - "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Math\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "math", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-serializer", - "version": "2.3.4", - "target-dir": "Zend/Serializer", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendSerializer.git", - "reference": "8cc08516ff69b275f22d2378cba0e0b482ba33a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendSerializer/zipball/8cc08516ff69b275f22d2378cba0e0b482ba33a1", - "reference": "8cc08516ff69b275f22d2378cba0e0b482ba33a1", - "shasum": "" - }, - "require": { - "php": ">=5.3.23", - "zendframework/zend-json": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Serializer\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "serializer", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-servicemanager", - "version": "2.3.4", - "target-dir": "Zend/ServiceManager", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendServiceManager.git", - "reference": "148b1ce06fa0ac7fe58e3bd396df57f1ee0e9e82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendServiceManager/zipball/148b1ce06fa0ac7fe58e3bd396df57f1ee0e9e82", - "reference": "148b1ce06fa0ac7fe58e3bd396df57f1ee0e9e82", - "shasum": "" - }, - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "zendframework/zend-di": "self.version" - }, - "suggest": { - "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", - "zendframework/zend-di": "Zend\\Di component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\ServiceManager\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "servicemanager", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zendframework/zend-stdlib", - "version": "2.3.4", - "target-dir": "Zend/Stdlib", - "source": { - "type": "git", - "url": "https://github.com/zendframework/Component_ZendStdlib.git", - "reference": "280e4ee6a8fea96b3de00a39174758b4002a7358" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/280e4ee6a8fea96b3de00a39174758b4002a7358", - "reference": "280e4ee6a8fea96b3de00a39174758b4002a7358", - "shasum": "" - }, - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Zend\\Stdlib\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zf2", - "keywords": [ - "stdlib", - "zf2" - ], - "time": "2015-01-14 16:44:17" - }, - { - "name": "zetacomponents/base", - "version": "1.9", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/Base.git", - "reference": "f20df24e8de3e48b6b69b2503f917e457281e687" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Base/zipball/f20df24e8de3e48b6b69b2503f917e457281e687", - "reference": "f20df24e8de3e48b6b69b2503f917e457281e687", - "shasum": "" - }, - "require-dev": { - "zetacomponents/unit-test": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sergey Alexeev" - }, - { - "name": "Sebastian Bergmann" - }, - { - "name": "Jan Borsodi" - }, - { - "name": "Raymond Bosman" - }, - { - "name": "Frederik Holljen" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Vadym Savchuk" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", - "homepage": "https://github.com/zetacomponents", - "time": "2014-09-19 03:28:34" - }, - { - "name": "zetacomponents/document", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/Document.git", - "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8", - "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8", - "shasum": "" - }, - "require": { - "zetacomponents/base": "*" - }, - "require-dev": { - "zetacomponents/unit-test": "dev-master" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sebastian Bergmann" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.", - "homepage": "https://github.com/zetacomponents", - "time": "2013-12-19 11:40:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.3.2" - }, - "platform-dev": [] -} diff --git a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.Error.html b/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.Error.html deleted file mode 100644 index 05c7147..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.Error.html +++ /dev/null @@ -1,2459 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

\PHPSandboxError

-

Error class for PHP Sandboxes.

-

This class extends Exception to allow for catching PHPSandbox-specific exceptions.

- - -
-

Summary

-
-
- Methods -
-
- Properties -
-
- Constants -
-
-
-
- __construct()
- get_data()
- getData()
- get_node()
- getNode()
-
-
- No public properties found -
-
- PARSER_ERROR
- ESCAPE_ERROR
- HALT_ERROR
- CAST_ERROR
- CLOSURE_ERROR
- BYREF_ERROR
- GENERATOR_ERROR
- GLOBALS_ERROR
- DYNAMIC_VAR_ERROR
- STATIC_VAR_ERROR
- ERROR_SUPPRESS_ERROR
- BACKTICKS_ERROR
- IMPORT_ERROR
- DYNAMIC_STATIC_VAR_ERROR
- DYNAMIC_CONST_ERROR
- DYNAMIC_CLASS_ERROR
- SANDBOX_ACCESS_ERROR
- GLOBAL_CONST_ERROR
- CREATE_OBJECT_ERROR
- VALID_FUNC_ERROR
- VALID_KEYWORD_ERROR
- VALID_CONST_ERROR
- VALID_VAR_ERROR
- VALID_GLOBAL_ERROR
- VALID_SUPERGLOBAL_ERROR
- VALID_MAGIC_CONST_ERROR
- VALID_CLASS_ERROR
- VALID_TYPE_ERROR
- VALID_INTERFACE_ERROR
- VALID_TRAIT_ERROR
- VALID_NAMESPACE_ERROR
- VALID_ALIAS_ERROR
- VALID_OPERATOR_ERROR
- VALID_PRIMITIVE_ERROR
- DEFINE_FUNC_ERROR
- DEFINE_KEYWORD_ERROR
- DEFINE_CONST_ERROR
- DEFINE_VAR_ERROR
- DEFINE_GLOBAL_ERROR
- DEFINE_SUPERGLOBAL_ERROR
- DEFINE_MAGIC_CONST_ERROR
- DEFINE_CLASS_ERROR
- DEFINE_TYPE_ERROR
- DEFINE_INTERFACE_ERROR
- DEFINE_TRAIT_ERROR
- DEFINE_NAMESPACE_ERROR
- DEFINE_ALIAS_ERROR
- DEFINE_OPERATOR_ERROR
- DEFINE_PRIMITIVE_ERROR
- WHITELIST_FUNC_ERROR
- WHITELIST_KEYWORD_ERROR
- WHITELIST_CONST_ERROR
- WHITELIST_VAR_ERROR
- WHITELIST_GLOBAL_ERROR
- WHITELIST_SUPERGLOBAL_ERROR
- WHITELIST_MAGIC_CONST_ERROR
- WHITELIST_CLASS_ERROR
- WHITELIST_TYPE_ERROR
- WHITELIST_INTERFACE_ERROR
- WHITELIST_TRAIT_ERROR
- WHITELIST_NAMESPACE_ERROR
- WHITELIST_ALIAS_ERROR
- WHITELIST_OPERATOR_ERROR
- WHITELIST_PRIMITIVE_ERROR
- BLACKLIST_FUNC_ERROR
- BLACKLIST_KEYWORD_ERROR
- BLACKLIST_CONST_ERROR
- BLACKLIST_VAR_ERROR
- BLACKLIST_GLOBAL_ERROR
- BLACKLIST_SUPERGLOBAL_ERROR
- BLACKLIST_MAGIC_CONST_ERROR
- BLACKLIST_CLASS_ERROR
- BLACKLIST_TYPE_ERROR
- BLACKLIST_INTERFACE_ERROR
- BLACKLIST_TRAIT_ERROR
- BLACKLIST_NAMESPACE_ERROR
- BLACKLIST_ALIAS_ERROR
- BLACKLIST_OPERATOR_ERROR
- BLACKLIST_PRIMITIVE_ERROR
-
-
-
-
- No protected methods found -
-
- $node
- $data
-
-
- N/A -
-
-
-
- No private methods found -
-
- No private properties found -
-
- N/A -
-
-
-
- -
- - -
-
-

Constants

-
- -
- -
-
- -
-

PARSER_ERROR

-
PARSER_ERROR
-

- - -
-
- -
- -
-
- -
-

ESCAPE_ERROR

-
ESCAPE_ERROR
-

- - -
-
- -
- -
-
- -
-

HALT_ERROR

-
HALT_ERROR
-

- - -
-
- -
- -
-
- -
-

CAST_ERROR

-
CAST_ERROR
-

- - -
-
- -
- -
-
- -
-

CLOSURE_ERROR

-
CLOSURE_ERROR
-

- - -
-
- -
- -
-
- -
-

BYREF_ERROR

-
BYREF_ERROR
-

- - -
-
- -
- -
-
- -
-

GENERATOR_ERROR

-
GENERATOR_ERROR
-

- - -
-
- -
- -
-
- -
-

GLOBALS_ERROR

-
GLOBALS_ERROR
-

- - -
-
- -
- -
-
- -
-

DYNAMIC_VAR_ERROR

-
DYNAMIC_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

STATIC_VAR_ERROR

-
STATIC_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

ERROR_SUPPRESS_ERROR

-
ERROR_SUPPRESS_ERROR
-

- - -
-
- -
- -
-
- -
-

BACKTICKS_ERROR

-
BACKTICKS_ERROR
-

- - -
-
- -
- -
-
- -
-

IMPORT_ERROR

-
IMPORT_ERROR
-

- - -
-
- -
- -
-
- -
-

DYNAMIC_STATIC_VAR_ERROR

-
DYNAMIC_STATIC_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

DYNAMIC_CONST_ERROR

-
DYNAMIC_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

DYNAMIC_CLASS_ERROR

-
DYNAMIC_CLASS_ERROR
-

- - -
-
- -
- -
-
- -
-

SANDBOX_ACCESS_ERROR

-
SANDBOX_ACCESS_ERROR
-

- - -
-
- -
- -
-
- -
-

GLOBAL_CONST_ERROR

-
GLOBAL_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

CREATE_OBJECT_ERROR

-
CREATE_OBJECT_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_FUNC_ERROR

-
VALID_FUNC_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_KEYWORD_ERROR

-
VALID_KEYWORD_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_CONST_ERROR

-
VALID_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_VAR_ERROR

-
VALID_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_GLOBAL_ERROR

-
VALID_GLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_SUPERGLOBAL_ERROR

-
VALID_SUPERGLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_MAGIC_CONST_ERROR

-
VALID_MAGIC_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_CLASS_ERROR

-
VALID_CLASS_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_TYPE_ERROR

-
VALID_TYPE_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_INTERFACE_ERROR

-
VALID_INTERFACE_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_TRAIT_ERROR

-
VALID_TRAIT_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_NAMESPACE_ERROR

-
VALID_NAMESPACE_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_ALIAS_ERROR

-
VALID_ALIAS_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_OPERATOR_ERROR

-
VALID_OPERATOR_ERROR
-

- - -
-
- -
- -
-
- -
-

VALID_PRIMITIVE_ERROR

-
VALID_PRIMITIVE_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_FUNC_ERROR

-
DEFINE_FUNC_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_KEYWORD_ERROR

-
DEFINE_KEYWORD_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_CONST_ERROR

-
DEFINE_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_VAR_ERROR

-
DEFINE_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_GLOBAL_ERROR

-
DEFINE_GLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_SUPERGLOBAL_ERROR

-
DEFINE_SUPERGLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_MAGIC_CONST_ERROR

-
DEFINE_MAGIC_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_CLASS_ERROR

-
DEFINE_CLASS_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_TYPE_ERROR

-
DEFINE_TYPE_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_INTERFACE_ERROR

-
DEFINE_INTERFACE_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_TRAIT_ERROR

-
DEFINE_TRAIT_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_NAMESPACE_ERROR

-
DEFINE_NAMESPACE_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_ALIAS_ERROR

-
DEFINE_ALIAS_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_OPERATOR_ERROR

-
DEFINE_OPERATOR_ERROR
-

- - -
-
- -
- -
-
- -
-

DEFINE_PRIMITIVE_ERROR

-
DEFINE_PRIMITIVE_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_FUNC_ERROR

-
WHITELIST_FUNC_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_KEYWORD_ERROR

-
WHITELIST_KEYWORD_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_CONST_ERROR

-
WHITELIST_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_VAR_ERROR

-
WHITELIST_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_GLOBAL_ERROR

-
WHITELIST_GLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_SUPERGLOBAL_ERROR

-
WHITELIST_SUPERGLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_MAGIC_CONST_ERROR

-
WHITELIST_MAGIC_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_CLASS_ERROR

-
WHITELIST_CLASS_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_TYPE_ERROR

-
WHITELIST_TYPE_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_INTERFACE_ERROR

-
WHITELIST_INTERFACE_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_TRAIT_ERROR

-
WHITELIST_TRAIT_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_NAMESPACE_ERROR

-
WHITELIST_NAMESPACE_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_ALIAS_ERROR

-
WHITELIST_ALIAS_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_OPERATOR_ERROR

-
WHITELIST_OPERATOR_ERROR
-

- - -
-
- -
- -
-
- -
-

WHITELIST_PRIMITIVE_ERROR

-
WHITELIST_PRIMITIVE_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_FUNC_ERROR

-
BLACKLIST_FUNC_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_KEYWORD_ERROR

-
BLACKLIST_KEYWORD_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_CONST_ERROR

-
BLACKLIST_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_VAR_ERROR

-
BLACKLIST_VAR_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_GLOBAL_ERROR

-
BLACKLIST_GLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_SUPERGLOBAL_ERROR

-
BLACKLIST_SUPERGLOBAL_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_MAGIC_CONST_ERROR

-
BLACKLIST_MAGIC_CONST_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_CLASS_ERROR

-
BLACKLIST_CLASS_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_TYPE_ERROR

-
BLACKLIST_TYPE_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_INTERFACE_ERROR

-
BLACKLIST_INTERFACE_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_TRAIT_ERROR

-
BLACKLIST_TRAIT_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_NAMESPACE_ERROR

-
BLACKLIST_NAMESPACE_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_ALIAS_ERROR

-
BLACKLIST_ALIAS_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_OPERATOR_ERROR

-
BLACKLIST_OPERATOR_ERROR
-

- - -
-
- -
- -
-
- -
-

BLACKLIST_PRIMITIVE_ERROR

-
BLACKLIST_PRIMITIVE_ERROR
-

- - -
-
- -
- - - -
-
-

Properties

-
- -
- -
-
- -
-

$node

-
$node : \PHPParser_Node|null
-

- - - -

Type

- \PHPParser_Node|null - — The node of the Error
-
- -
- -
-
- -
-

$data

-
$data : mixed
-

- - - -

Type

- mixed - — The data of the Error
-
- -
- - - -
-

Methods

- -
- -
-
- -
-

__construct()

- -
__construct(string $message, int $code, \PHPParser_node $node, mixed $data, \Exception $previous)
-

Constructs the Error

- - - -

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - -
string$message

The message to pass to the Error

-
int$code

The error code to pass to the Error

-
\PHPParser_node$node

The parser node to pass to the Error

-
mixed$data

The error data to pass to the Error

-
\Exception$previous

The previous exception to pass to the Error

-
- - -
-
- -
- -
-
- -
-

get_data()

- -
get_data() : mixed
-

Returns data of the Error

- - - - - -

Returns

- mixed - —

The data of the error to return

- -
-
- -
- -
-
- -
-

getData()

- -
getData() : mixed
-

Returns data of the Error

- - - - - -

Returns

- mixed - —

The data of the error to return

- -
-
- -
- -
-
- -
-

get_node()

- -
get_node() : \PHPParser_Node|null
-

Returns parser node of the Error

- - - - - -

Returns

- \PHPParser_Node|null - —

The parser node of the error to return

- -
-
- -
- -
-
- -
-

getNode()

- -
getNode() : \PHPParser_Node|null
-

Returns parser node of the Error

- - - - - -

Returns

- \PHPParser_Node|null - —

The parser node of the error to return

- -
-
- -
- -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.PHPSandbox.html b/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.PHPSandbox.html deleted file mode 100644 index 5a44382..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.PHPSandbox.html +++ /dev/null @@ -1,20543 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

\PHPSandboxPHPSandbox

-

PHPSandbox class for PHP Sandboxes.

-

This class encapsulates the entire functionality of a PHPSandbox so that an end user -only has to create a PHPSandbox instance, configure its options, and run their code

- - -
-

Summary

-
-
- Methods -
-
- Properties -
-
- Constants -
-
-
-
- __construct()
- create()
- __invoke()
- __sleep()
- __wakeup()
- import()
- importJSON()
- get_name()
- set_option()
- set_options()
- reset_options()
- get_option()
- set_validator()
- get_validator()
- unset_validator()
- set_func_validator()
- get_func_validator()
- unset_func_validator()
- set_var_validator()
- get_var_validator()
- unset_var_validator()
- set_global_validator()
- get_global_validator()
- unset_global_validator()
- set_superglobal_validator()
- get_superglobal_validator()
- unset_superglobal_validator()
- set_const_validator()
- get_const_validator()
- unset_const_validator()
- set_magic_const_validator()
- get_magic_const_validator()
- unset_magic_const_validator()
- set_namespace_validator()
- get_namespace_validator()
- unset_namespace_validator()
- set_alias_validator()
- get_alias_validator()
- unset_alias_validator()
- set_use_validator()
- get_use_validator()
- unset_use_validator()
- set_class_validator()
- get_class_validator()
- unset_class_validator()
- set_interface_validator()
- get_interface_validator()
- unset_interface_validator()
- set_trait_validator()
- get_trait_validator()
- unset_trait_validator()
- set_keyword_validator()
- get_keyword_validator()
- unset_keyword_validator()
- set_operator_validator()
- get_operator_validator()
- unset_operator_validator()
- set_primitive_validator()
- get_primitive_validator()
- unset_primitive_validator()
- set_type_validator()
- get_type_validator()
- unset_type_validator()
- set_prepended_code()
- set_appended_code()
- set_preparsed_code()
- set_parsed_ast()
- set_prepared_code()
- set_prepared_ast()
- set_generated_code()
- set_code()
- get_prepended_code()
- get_appended_code()
- get_preparsed_code()
- get_parsed_ast()
- get_prepared_code()
- get_prepared_ast()
- get_generated_code()
- get_code()
- _get_defined_functions()
- _get_defined_vars()
- _get_superglobal()
- _get_magic_const()
- _get_defined_constants()
- _get_declared_classes()
- _get_declared_interfaces()
- _get_declared_traits()
- _func_get_args()
- _func_get_arg()
- _func_num_args()
- _wrap()
- _var_dump()
- _print_r()
- _var_export()
- _intval()
- _floatval()
- _boolval()
- _arrayval()
- _objectval()
- _is_string()
- _is_object()
- _is_scalar()
- _is_callable()
- call_func()
- define()
- undefine()
- define_func()
- define_funcs()
- has_defined_funcs()
- is_defined_func()
- undefine_func()
- undefine_funcs()
- define_var()
- define_vars()
- has_defined_vars()
- is_defined_var()
- undefine_var()
- undefine_vars()
- define_superglobal()
- define_superglobals()
- has_defined_superglobals()
- is_defined_superglobal()
- undefine_superglobal()
- undefine_superglobals()
- define_const()
- define_consts()
- has_defined_consts()
- is_defined_const()
- undefine_const()
- undefine_consts()
- define_magic_const()
- define_magic_consts()
- has_defined_magic_consts()
- is_defined_magic_const()
- undefine_magic_const()
- undefine_magic_consts()
- define_namespace()
- define_namespaces()
- has_defined_namespaces()
- is_defined_namespace()
- get_defined_namespace()
- undefine_namespace()
- undefine_namespaces()
- define_alias()
- define_aliases()
- has_defined_aliases()
- is_defined_alias()
- undefine_alias()
- undefine_aliases()
- define_use()
- define_uses()
- has_defined_uses()
- is_defined_use()
- undefine_use()
- undefine_uses()
- define_class()
- define_classes()
- has_defined_classes()
- is_defined_class()
- get_defined_class()
- undefine_class()
- undefine_classes()
- define_interface()
- define_interfaces()
- has_defined_interfaces()
- is_defined_interface()
- get_defined_interface()
- undefine_interface()
- undefine_interfaces()
- define_trait()
- define_traits()
- has_defined_traits()
- is_defined_trait()
- get_defined_trait()
- undefine_trait()
- undefine_traits()
- whitelist()
- blacklist()
- dewhitelist()
- deblacklist()
- has_whitelist()
- has_blacklist()
- is_whitelisted()
- is_blacklisted()
- has_whitelist_funcs()
- has_blacklist_funcs()
- is_whitelisted_func()
- is_blacklisted_func()
- has_whitelist_vars()
- has_blacklist_vars()
- is_whitelisted_var()
- is_blacklisted_var()
- has_whitelist_globals()
- has_blacklist_globals()
- is_whitelisted_global()
- is_blacklisted_global()
- has_whitelist_superglobals()
- has_blacklist_superglobals()
- is_whitelisted_superglobal()
- is_blacklisted_superglobal()
- has_whitelist_consts()
- has_blacklist_consts()
- is_whitelisted_const()
- is_blacklisted_const()
- has_whitelist_magic_consts()
- has_blacklist_magic_consts()
- is_whitelisted_magic_const()
- is_blacklisted_magic_const()
- has_whitelist_namespaces()
- has_blacklist_namespaces()
- is_whitelisted_namespace()
- is_blacklisted_namespace()
- has_whitelist_aliases()
- has_blacklist_aliases()
- is_whitelisted_alias()
- is_blacklisted_alias()
- has_whitelist_uses()
- has_blacklist_uses()
- is_whitelisted_use()
- is_blacklisted_use()
- has_whitelist_classes()
- has_blacklist_classes()
- is_whitelisted_class()
- is_blacklisted_class()
- has_whitelist_interfaces()
- has_blacklist_interfaces()
- is_whitelisted_interface()
- is_blacklisted_interface()
- has_whitelist_traits()
- has_blacklist_traits()
- is_whitelisted_trait()
- is_blacklisted_trait()
- has_whitelist_keywords()
- has_blacklist_keywords()
- is_whitelisted_keyword()
- is_blacklisted_keyword()
- has_whitelist_operators()
- has_blacklist_operators()
- is_whitelisted_operator()
- is_blacklisted_operator()
- has_whitelist_primitives()
- has_blacklist_primitives()
- is_whitelisted_primitive()
- is_blacklisted_primitive()
- has_whitelist_types()
- has_blacklist_types()
- is_whitelisted_type()
- is_blacklisted_type()
- whitelist_func()
- blacklist_func()
- dewhitelist_func()
- deblacklist_func()
- whitelist_var()
- blacklist_var()
- dewhitelist_var()
- deblacklist_var()
- whitelist_global()
- blacklist_global()
- dewhitelist_global()
- deblacklist_global()
- whitelist_superglobal()
- blacklist_superglobal()
- dewhitelist_superglobal()
- deblacklist_superglobal()
- whitelist_const()
- blacklist_const()
- dewhitelist_const()
- deblacklist_const()
- whitelist_magic_const()
- blacklist_magic_const()
- dewhitelist_magic_const()
- deblacklist_magic_const()
- whitelist_namespace()
- blacklist_namespace()
- dewhitelist_namespace()
- deblacklist_namespace()
- whitelist_alias()
- blacklist_alias()
- dewhitelist_alias()
- deblacklist_alias()
- whitelist_use()
- blacklist_use()
- dewhitelist_use()
- deblacklist_use()
- whitelist_class()
- blacklist_class()
- dewhitelist_class()
- deblacklist_class()
- whitelist_interface()
- blacklist_interface()
- dewhitelist_interface()
- deblacklist_interface()
- whitelist_trait()
- blacklist_trait()
- dewhitelist_trait()
- deblacklist_trait()
- whitelist_keyword()
- blacklist_keyword()
- dewhitelist_keyword()
- deblacklist_keyword()
- whitelist_operator()
- blacklist_operator()
- dewhitelist_operator()
- deblacklist_operator()
- whitelist_primitive()
- blacklist_primitive()
- dewhitelist_primitive()
- deblacklist_primitive()
- whitelist_type()
- blacklist_type()
- dewhitelist_type()
- deblacklist_type()
- check_func()
- check_var()
- check_global()
- check_superglobal()
- check_const()
- check_magic_const()
- check_namespace()
- check_alias()
- check_use()
- check_class()
- check_interface()
- check_trait()
- check_keyword()
- check_operator()
- check_primitive()
- check_type()
- prepend()
- append()
- clear()
- clear_trusted_code()
- clear_prepend()
- clear_append()
- clear_code()
- get_prepared_time()
- get_execution_time()
- get_time()
- validate()
- prepare()
- execute()
- set_error_handler()
- get_error_handler()
- unset_error_handler()
- get_last_error()
- error()
- set_exception_handler()
- get_exception_handler()
- unset_exception_handler()
- get_last_exception()
- exception()
- set_validation_error_handler()
- get_validation_error_handler()
- unset_validation_error_handler()
- get_last_validation_error()
- validation_error()
- getSandbox()
- getIterator()
-
-
- $superglobals
- $magic_constants
- $defined_funcs
- $arg_funcs
- $sandboxed_string_funcs
- $name
- $validate_functions
- $validate_variables
- $validate_globals
- $validate_superglobals
- $validate_constants
- $validate_magic_constants
- $validate_namespaces
- $validate_aliases
- $validate_classes
- $validate_interfaces
- $validate_traits
- $validate_keywords
- $validate_operators
- $validate_primitives
- $validate_types
- $error_level
- $restore_error_level
- $convert_errors
- $capture_output
- $auto_whitelist_trusted_code
- $auto_whitelist_functions
- $auto_whitelist_constants
- $auto_whitelist_globals
- $auto_whitelist_classes
- $auto_whitelist_interfaces
- $auto_whitelist_traits
- $auto_define_vars
- $overwrite_defined_funcs
- $overwrite_func_get_args
- $overwrite_sandboxed_string_funcs
- $overwrite_superglobals
- $allow_functions
- $allow_closures
- $allow_variables
- $allow_static_variables
- $allow_objects
- $allow_constants
- $allow_globals
- $allow_namespaces
- $allow_aliases
- $allow_classes
- $allow_interfaces
- $allow_traits
- $allow_generators
- $allow_escaping
- $allow_casting
- $allow_error_suppressing
- $allow_references
- $allow_backticks
- $allow_halting
- $prepended_code
- $appended_code
- $prepare_time
- $execution_time
- $preparsed_code
- $parsed_ast
- $prepared_code
- $prepared_ast
- $generated_code
-
-
- SANDBOX_PREFIX
- IMPORT_ALL
- IMPORT_OPTIONS
- IMPORT_DEFINITIONS
- IMPORT_WHITELIST
- IMPORT_BLACKLIST
- IMPORT_TRUSTED_CODE
- IMPORT_CODE
-
-
-
-
- normalize_func()
- normalize_superglobal()
- normalize_magic_const()
- normalize_namespace()
- normalize_alias()
- normalize_use()
- normalize_class()
- normalize_interface()
- normalize_trait()
- normalize_keyword()
- normalize_operator()
- normalize_primitive()
- normalize_type()
- prepare_vars()
- prepare_consts()
- prepare_namespaces()
- prepare_aliases()
- prepare_uses()
- disassemble()
- auto_whitelist()
- auto_define()
-
-
- $definitions
- $whitelist
- $blacklist
- $validation
- $sandboxes
- $error_handler
- $error_handler_types
- $last_error
- $exception_handler
- $last_exception
- $validation_error_handler
- $last_validation_error
-
-
- N/A -
-
-
-
- No private methods found -
-
- No private properties found -
-
- N/A -
-
-
-
- -
- - -
-
-

Constants

-
- -
- -
-
- -
-

SANDBOX_PREFIX

-
SANDBOX_PREFIX
-

- - -
-
- -
- -
-
- -
-

IMPORT_ALL

-
IMPORT_ALL
-

- - -
-
- -
- -
-
- -
-

IMPORT_OPTIONS

-
IMPORT_OPTIONS
-

- - -
-
- -
- -
-
- -
-

IMPORT_DEFINITIONS

-
IMPORT_DEFINITIONS
-

- - -
-
- -
- -
-
- -
-

IMPORT_WHITELIST

-
IMPORT_WHITELIST
-

- - -
-
- -
- -
-
- -
-

IMPORT_BLACKLIST

-
IMPORT_BLACKLIST
-

- - -
-
- -
- -
-
- -
-

IMPORT_TRUSTED_CODE

-
IMPORT_TRUSTED_CODE
-

- - -
-
- -
- -
-
- -
-

IMPORT_CODE

-
IMPORT_CODE
-

- - -
-
- -
- - - -
-
-

Properties

-
- -
- -
-
- -
-

$superglobals

-
$superglobals : array
-

- - - -

Type

- array - — A static array of superglobal names used for redefining superglobal values
-
- -
- -
-
- -
-

$magic_constants

-
$magic_constants : array
-

- - - -

Type

- array - — A static array of magic constant names used for redefining magic constant values
-
- -
- -
-
- -
-

$defined_funcs

-
$defined_funcs : array
-

- - - -

Type

- array - — A static array of defined_* and declared_* functions names used for redefining defined_* and declared_* values
-
- -
- -
-
- -
-

$arg_funcs

-
$arg_funcs : array
-

- - - -

Type

- array - — A static array of func_get_args, func_get_arg, and func_num_args used for redefining those functions
-
- -
- -
-
- -
-

$sandboxed_string_funcs

-
$sandboxed_string_funcs : array
-

- - - -

Type

- array - — A static array of var_dump, print_r and var_export, intval, floatval, is_string, is_object, - is_scalar and is_callable for redefining those functions
-
- -
- -
-
- -
-

$name

-
$name : string
-

- - - -

Type

- string - — The randomly generated name of the PHPSandbox variable passed to the generated closure
-
- -
- -
-
- -
-

$validate_functions

-
$validate_functions : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate functions
-
- -
- -
-
- -
-

$validate_variables

-
$validate_variables : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate variables
-
- -
- -
-
- -
-

$validate_globals

-
$validate_globals : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate globals
-
- -
- -
-
- -
-

$validate_superglobals

-
$validate_superglobals : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate superglobals
-
- -
- -
-
- -
-

$validate_constants

-
$validate_constants : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate constants
-
- -
- -
-
- -
-

$validate_magic_constants

-
$validate_magic_constants : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate magic constants
-
- -
- -
-
- -
-

$validate_namespaces

-
$validate_namespaces : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate namespaces
-
- -
- -
-
- -
-

$validate_aliases

-
$validate_aliases : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate aliases (aka use)
-
- -
- -
-
- -
-

$validate_classes

-
$validate_classes : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate classes
-
- -
- -
-
- -
-

$validate_interfaces

-
$validate_interfaces : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate interfaces
-
- -
- -
-
- -
-

$validate_traits

-
$validate_traits : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate traits
-
- -
- -
-
- -
-

$validate_keywords

-
$validate_keywords : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate keywords
-
- -
- -
-
- -
-

$validate_operators

-
$validate_operators : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate operators
-
- -
- -
-
- -
-

$validate_primitives

-
$validate_primitives : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate primitives
-
- -
- -
-
- -
-

$validate_types

-
$validate_types : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should validate types
-
- -
- -
-
- -
-

$error_level

-
$error_level : int
-

- - - -

Type

- int - — The error_reporting level to set the PHPSandbox scope to when executing the generated closure, if set to null it will use parent scope error level.
-
- -
- -
-
- -
-

$restore_error_level

-
$restore_error_level : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should return error_reporting to its previous level after execution
-
- -
- -
-
- -
-

$convert_errors

-
$convert_errors : bool
-

- - - -

Type

- bool - — Flag to indicate whether the sandbox should convert errors to exceptions
-
- -
- -
-
- -
-

$capture_output

-
$capture_output : bool
-

- - - -

Type

- bool - — Flag whether to return output via an output buffer
-
- -
- -
-
- -
-

$auto_whitelist_trusted_code

-
$auto_whitelist_trusted_code : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist prepended and appended code?
-
- -
- -
-
- -
-

$auto_whitelist_functions

-
$auto_whitelist_functions : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist functions created in sandboxed code if $allow_functions is true?
-
- -
- -
-
- -
-

$auto_whitelist_constants

-
$auto_whitelist_constants : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist constants created in sandboxed code if $allow_constants is true?
-
- -
- -
-
- -
-

$auto_whitelist_globals

-
$auto_whitelist_globals : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist global variables created in sandboxed code if $allow_globals is true? (Used to whitelist them in the variables list)
-
- -
- -
-
- -
-

$auto_whitelist_classes

-
$auto_whitelist_classes : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist classes created in sandboxed code if $allow_classes is true?
-
- -
- -
-
- -
-

$auto_whitelist_interfaces

-
$auto_whitelist_interfaces : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist interfaces created in sandboxed code if $allow_interfaces is true?
-
- -
- -
-
- -
-

$auto_whitelist_traits

-
$auto_whitelist_traits : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically whitelist traits created in sandboxed code if $allow_traits is true?
-
- -
- -
-
- -
-

$auto_define_vars

-
$auto_define_vars : bool
-

- - - -

Type

- bool - — Should PHPSandbox automagically define variables passed to prepended, appended and prepared code closures?
-
- -
- -
-
- -
-

$overwrite_defined_funcs

-
$overwrite_defined_funcs : bool
-

- - - -

Type

- bool - — Should PHPSandbox overwrite get_defined_functions, get_defined_vars, get_defined_constants, get_declared_classes, get_declared_interfaces and get_declared_traits?
-
- -
- -
-
- -
-

$overwrite_func_get_args

-
$overwrite_func_get_args : bool
-

- - - -

Type

- bool - — Should PHPSandbox overwrite func_get_args, func_get_arg and func_num_args?
-
- -
- -
-
- -
-

$overwrite_sandboxed_string_funcs

-
$overwrite_sandboxed_string_funcs : bool
-

- - - -

Type

- bool - — Should PHPSandbox overwrite functions to help hide SandboxedStrings?
-
- -
- -
-
- -
-

$overwrite_superglobals

-
$overwrite_superglobals : bool
-

- - - -

Type

- bool - — Should PHPSandbox overwrite $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST, $_SERVER, $_SESSION and $GLOBALS superglobals? If so, unless alternate superglobal values have been defined they will return as empty arrays.
-
- -
- -
-
- -
-

$allow_functions

-
$allow_functions : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to declare functions?
-
- -
- -
-
- -
-

$allow_closures

-
$allow_closures : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to declare closures?
-
- -
- -
-
- -
-

$allow_variables

-
$allow_variables : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to create variables?
-
- -
- -
-
- -
-

$allow_static_variables

-
$allow_static_variables : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to create static variables?
-
- -
- -
-
- -
-

$allow_objects

-
$allow_objects : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to create objects of allow classes (e.g. new keyword)?
-
- -
- -
-
- -
-

$allow_constants

-
$allow_constants : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to define constants?
-
- -
- -
-
- -
-

$allow_globals

-
$allow_globals : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to use global keyword to access variables in the global scope?
-
- -
- -
-
- -
-

$allow_namespaces

-
$allow_namespaces : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to declare namespaces (utilizing the define_namespace function?)
-
- -
- -
-
- -
-

$allow_aliases

-
$allow_aliases : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to use namespaces and declare namespace aliases (utilizing the define_alias function?)
-
- -
- -
-
- -
-

$allow_classes

-
$allow_classes : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to declare classes?
-
- -
- -
-
- -
-

$allow_interfaces

-
$allow_interfaces : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to declare interfaces?
-
- -
- -
-
- -
-

$allow_traits

-
$allow_traits : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to declare traits?
-
- -
- -
-
- -
-

$allow_generators

-
$allow_generators : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to create generators?
-
- -
- -
-
- -
-

$allow_escaping

-
$allow_escaping : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to escape to HTML?
-
- -
- -
-
- -
-

$allow_casting

-
$allow_casting : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to cast types? (This will still be subject to allowed classes)
-
- -
- -
-
- -
-

$allow_error_suppressing

-
$allow_error_suppressing : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to suppress errors (e.g. the @ operator?)
-
- -
- -
-
- -
-

$allow_references

-
$allow_references : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to assign references?
-
- -
- -
-
- -
-

$allow_backticks

-
$allow_backticks : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to use backtick execution? (e.g. $var = \`ping google.com\`; This will also be disabled if shell_exec is not whitelisted or if it is blacklisted, and will be converted to a defined shell_exec function call if one is defined)
-
- -
- -
-
- -
-

$allow_halting

-
$allow_halting : bool
-

- - - -

Type

- bool - — Should PHPSandbox allow sandboxed code to halt the PHP compiler?
-
- -
- -
-
- -
-

$prepended_code

-
$prepended_code : string
-

- - - -

Type

- string - — String of prepended code, will be automagically whitelisted for functions, variables, globals, constants, classes, interfaces and traits if $auto_whitelist_trusted_code is true
-
- -
- -
-
- -
-

$appended_code

-
$appended_code : string
-

- - - -

Type

- string - — String of appended code, will be automagically whitelisted for functions, variables, globals, constants, classes, interfaces and traits if $auto_whitelist_trusted_code is true
-
- -
- -
-
- -
-

$prepare_time

-
$prepare_time : float|null
-

- - - -

Type

- float|null - — Float of the number of microseconds it took to prepare the sandbox
-
- -
- -
-
- -
-

$execution_time

-
$execution_time : float|null
-

- - - -

Type

- float|null - — Float of the number of microseconds it took to execute the sandbox
-
- -
- -
-
- -
-

$preparsed_code

-
$preparsed_code : string
-

- - - -

Type

- string - — String of preparsed code, for debugging and serialization purposes
-
- -
- -
-
- -
-

$parsed_ast

-
$parsed_ast : array
-

- - - -

Type

- array - — Array of parsed code broken down into AST tokens, for debugging and serialization purposes
-
- -
- -
-
- -
-

$prepared_code

-
$prepared_code : string
-

- - - -

Type

- string - — String of prepared code, for debugging and serialization purposes
-
- -
- -
-
- -
-

$prepared_ast

-
$prepared_ast : array
-

- - - -

Type

- array - — Array of prepared code broken down into AST tokens, for debugging and serialization purposes
-
- -
- -
-
- -
-

$generated_code

-
$generated_code : string
-

- - - -

Type

- string - — String of generated code, for debugging and serialization purposes
-
- -
- -
-
- -
-

$definitions

-
$definitions : array
-

- - - -

Type

- array - — Array of defined functions, superglobals, etc. If an array type contains elements, then it overwrites its external counterpart
-
- -
- -
-
- -
-

$whitelist

-
$whitelist : array
-

- - - -

Type

- array - — Array of whitelisted functions, classes, etc. If an array type contains elements, then it overrides its blacklist counterpart
-
- -
- -
-
- -
-

$blacklist

-
$blacklist : array
-

- - - -

Type

- array - — Array of blacklisted functions, classes, etc. Any whitelisted array types override their counterpart in this array
-
- -
- -
-
- -
-

$validation

-
$validation : array
-

- - - -

Type

- array - — Array of custom validation functions
-
- -
- -
-
- -
-

$sandboxes

-
$sandboxes : \PHPSandbox\PHPSandbox[]
-

- - - -

Type

- \PHPSandbox\PHPSandbox[] - — Array of PHPSandboxes
-
- -
- -
-
- -
-

$error_handler

-
$error_handler : null|callable
-

- - - -

Type

- null|callable - — Callable that handles any errors when set
-
- -
- -
-
- -
-

$error_handler_types

-
$error_handler_types : int
-

- - - -

Type

- int - — Integer value of the error types to handle (default is E_ALL)
-
- -
- -
-
- -
-

$last_error

-
$last_error : array
-

- - - -

Type

- array - — The last error thrown by the sandbox
-
- -
- -
-
- -
-

$exception_handler

-
$exception_handler : null|callable
-

- - - -

Type

- null|callable - — Callable that handles any thrown exceptions when set
-
- -
- -
-
- -
-

$last_exception

-
$last_exception : \Exception
-

- - - -

Type

- \Exception - — The last exception thrown by the sandbox
-
- -
- -
-
- -
-

$validation_error_handler

-
$validation_error_handler : null|callable
-

- - - -

Type

- null|callable - — Callable that handles any thrown validation errors when set
-
- -
- -
-
- -
-

$last_validation_error

-
$last_validation_error : \Exception|\PHPSandbox\Error
-

- - - -

Type

- \Exception|\PHPSandbox\Error - — The last validation error thrown by the sandbox
-
- -
- - - -
-

Methods

- -
- -
-
- -
-

__construct()

- -
__construct(array $options, array $functions, array $variables, array $constants, array $namespaces, array $aliases, array $superglobals, array $magic_constants, array $classes, array $interfaces, array $traits) : \PHPSandbox\PHPSandbox
-

PHPSandbox class constructor

- - - -

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
array$options

Optional array of options to set for the sandbox

-
array$functions

Optional array of functions to define for the sandbox

-
array$variables

Optional array of variables to define for the sandbox

-
array$constants

Optional array of constants to define for the sandbox

-
array$namespaces

Optional array of namespaces to define for the sandbox

-
array$aliases

Optional array of aliases to define for the sandbox

-
array$superglobals

Optional array of superglobals to define for the sandbox

-
array$magic_constants

Optional array of magic constants to define for the sandbox

-
array$classes

Optional array of classes to define for the sandbox

-
array$interfaces

Optional array of interfaces to define for the sandbox

-
array$traits

Optional array of traits to define for the sandbox

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

The returned PHPSandbox variable

- -
-
- -
- -
-
- -
-

create()

- -
create(array $options, array $functions, array $variables, array $constants, array $namespaces, array $aliases, array $superglobals, array $magic_constants, array $classes, array $interfaces, array $traits) : \PHPSandbox\PHPSandbox
-

PHPSandbox static factory method

-

You can pass optional arrays of predefined functions, variables, etc. to the sandbox through the constructor

- - -

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
array$options

Optional array of options to set for the sandbox

-
array$functions

Optional array of functions to define for the sandbox

-
array$variables

Optional array of variables to define for the sandbox

-
array$constants

Optional array of constants to define for the sandbox

-
array$namespaces

Optional array of namespaces to define for the sandbox

-
array$aliases

Optional array of aliases to define for the sandbox

-
array$superglobals

Optional array of superglobals to define for the sandbox

-
array$magic_constants

Optional array of magic constants to define for the sandbox

-
array$classes

Optional array of classes to define for the sandbox

-
array$interfaces

Optional array of interfaces to define for the sandbox

-
array$traits

Optional array of traits to define for the sandbox

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

The returned PHPSandbox variable

- -
-
- -
- -
-
- -
-

__invoke()

- -
__invoke(\Closure|callable|string $code) : mixed
-

PHPSandbox __invoke magic method

-

Besides the code or closure to be executed, you can also pass additional arguments that will overwrite the default values of their respective arguments defined in the code

- - -

Parameters

- - - - - - -
\Closure|callable|string$code

The closure, callable or string of code to execute

-
- - -

Returns

- mixed - —

The output of the executed sandboxed code

- -
-
- -
- -
-
- -
-

__sleep()

- -
__sleep() : array
-

PHPSandbox __sleep magic method

- - - - - -

Returns

- array - —

An array of property keys to be serialized

- -
-
- -
- -
-
- -
-

__wakeup()

- -
__wakeup()
-

PHPSandbox __wakeup magic method

- - - - - -
-
- -
- -
-
- -
-

import()

- -
import(array|string $template, int $import_flag) : \PHPSandbox\PHPSandbox
-

Import JSON template into sandbox

- - - -

Parameters

- - - - - - - - - - - -
array|string$template

The JSON array or string template to import

-
int$import_flag

Binary flags signifying which parts of the JSON template to import

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if JSON template could not be imported

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

importJSON()

- -
importJSON(array|string $template, int $import_flag) : \PHPSandbox\PHPSandbox
-

Import JSON template into sandbox

- - - -

Parameters

- - - - - - - - - - - -
array|string$template

The JSON array or string template to import

-
int$import_flag

Binary flags signifying which parts of the JSON template to import

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if JSON template could not be imported

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_name()

- -
get_name() : string
-

Get name of PHPSandbox variable

- - - - - -

Returns

- string - —

The name of the PHPSandbox variable

- -
-
- -
- -
-
- -
-

set_option()

- -
set_option(string|array $option, bool|int|null $value) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox option

-

You can pass an $option name to set to $value, an array of $option names to set to $value, or an associative array of $option names and their values to set.

- - -

Parameters

- - - - - - - - - - - -
string|array$option

String or array of strings or associative array of keys of option names to set $value to

-
bool|int|null$value

Boolean, integer or null $value to set $option to (optional)

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_options()

- -
set_options(array|string $options, bool|int|null $value) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox options by array

-

You can pass an array of option names to set to $value, or an associative array of option names and their values to set.

- - -

Parameters

- - - - - - - - - - - -
array|string$options

Array of strings or associative array of keys of option names to set $value to, or JSON array or string template to import

-
bool|int|null$value

Boolean, integer or null $value to set $option to (optional)

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

reset_options()

- -
reset_options() : \PHPSandbox\PHPSandbox
-

Reset PHPSandbox options to their default values

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_option()

- -
get_option(string $option) : boolean|int|null
-

Get PHPSandbox option

-

You pass a string $option name to get its associated value

- - -

Parameters

- - - - - - -
string$option

String of $option name to get

-
- - -

Returns

- boolean|int|null - —

Returns the value of the requested option

- -
-
- -
- -
-
- -
-

set_validator()

- -
set_validator(string $type, callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for specified $type

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - - - - - - -
string$type

String of $type name to set validator for

-
callable$callable

Callable that validates the passed element

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_validator()

- -
get_validator(string $type) : callable|null
-

Get validation callable for specified $type

- - - -

Parameters

- - - - - - -
string$type

String of $type to return

-
- - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_validator()

- -
unset_validator(string $type) : \PHPSandbox\PHPSandbox
-

Unset validation callable for specified $type

- - - -

Parameters

- - - - - - -
string$type

String of $type to unset

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_func_validator()

- -
set_func_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for functions

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance. NOTE: Normalized function names include the namespace and are lowercase!

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the normalized passed function name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_func_validator()

- -
get_func_validator() : callable|null
-

Get validation for functions

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_func_validator()

- -
unset_func_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for functions

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_var_validator()

- -
set_var_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for variables

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed variable name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_var_validator()

- -
get_var_validator() : callable|null
-

Get validation callable for variables

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_var_validator()

- -
unset_var_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for variables

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_global_validator()

- -
set_global_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for globals

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed global name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_global_validator()

- -
get_global_validator() : callable|null
-

Get validation callable for globals

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_global_validator()

- -
unset_global_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for globals

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_superglobal_validator()

- -
set_superglobal_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for superglobals

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance. NOTE: Normalized superglobal names are uppercase and without a leading _

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed superglobal name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_superglobal_validator()

- -
get_superglobal_validator() : callable|null
-

Get validation callable for superglobals

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_superglobal_validator()

- -
unset_superglobal_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for superglobals

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_const_validator()

- -
set_const_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for constants

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed constant name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_const_validator()

- -
get_const_validator() : callable|null
-

Get validation callable for constants

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_const_validator()

- -
unset_const_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for constants

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_magic_const_validator()

- -
set_magic_const_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for magic constants

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance. NOTE: Normalized magic constant names are upper case and trimmed of __

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed magic constant name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_magic_const_validator()

- -
get_magic_const_validator() : callable|null
-

Get validation callable for magic constants

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_magic_const_validator()

- -
unset_magic_const_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for magic constants

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_namespace_validator()

- -
set_namespace_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for namespaces

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed namespace name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_namespace_validator()

- -
get_namespace_validator() : callable|null
-

Get validation callable for namespaces

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_namespace_validator()

- -
unset_namespace_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for namespaces

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_alias_validator()

- -
set_alias_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for aliases

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed alias name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_alias_validator()

- -
get_alias_validator() : callable|null
-

Get validation callable for aliases

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_alias_validator()

- -
unset_alias_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for aliases

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_use_validator()

- -
set_use_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for uses (aka aliases)

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed use (aka alias) name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_use_validator()

- -
get_use_validator() : callable|null
-

Get validation callable for uses (aka aliases)

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_use_validator()

- -
unset_use_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for uses (aka aliases)

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_class_validator()

- -
set_class_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for classes

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance. NOTE: Normalized class names are lowercase

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed class name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_class_validator()

- -
get_class_validator() : callable|null
-

Get validation callable for classes

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_class_validator()

- -
unset_class_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for classes

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_interface_validator()

- -
set_interface_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for interfaces

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance. NOTE: Normalized interface names are lowercase

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed interface name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_interface_validator()

- -
get_interface_validator() : callable|null
-

Get validation callable for interfaces

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_interface_validator()

- -
unset_interface_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for interfaces

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_trait_validator()

- -
set_trait_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for traits

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance. NOTE: Normalized trait names are lowercase

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed trait name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_trait_validator()

- -
get_trait_validator() : callable|null
-

Get validation callable for traits

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_trait_validator()

- -
unset_trait_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for traits

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_keyword_validator()

- -
set_keyword_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for keywords

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed keyword name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_keyword_validator()

- -
get_keyword_validator() : callable|null
-

Get validation callable for keywords

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_keyword_validator()

- -
unset_keyword_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for keywords

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_operator_validator()

- -
set_operator_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for operators

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed operator name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_operator_validator()

- -
get_operator_validator() : callable|null
-

Get validation callable for operators

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_operator_validator()

- -
unset_operator_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for operators

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_primitive_validator()

- -
set_primitive_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for primitives

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed primitive name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_primitive_validator()

- -
get_primitive_validator() : callable|null
-

Get validation callable for primitives

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_primitive_validator()

- -
unset_primitive_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for primitives

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_type_validator()

- -
set_type_validator(callable $callable) : \PHPSandbox\PHPSandbox
-

Set validation callable for types

-

Validator callable must accept two parameters: a string of the normalized name of the checked element, -and the PHPSandbox instance

- - -

Parameters

- - - - - - -
callable$callable

Callable that validates the passed type name

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_type_validator()

- -
get_type_validator() : callable|null
-

Get validation callable for types

- - - - - -

Returns

- callable|null -
-
- -
- -
-
- -
-

unset_type_validator()

- -
unset_type_validator() : \PHPSandbox\PHPSandbox
-

Unset validation callable for types

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_prepended_code()

- -
set_prepended_code(string $prepended_code) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox prepended code

- - - -

Parameters

- - - - - - -
string$prepended_code

Sets a string of the prepended code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_appended_code()

- -
set_appended_code(string $appended_code) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox appended code

- - - -

Parameters

- - - - - - -
string$appended_code

Sets a string of the appended code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_preparsed_code()

- -
set_preparsed_code(string $preparsed_code) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox preparsed code

- - - -

Parameters

- - - - - - -
string$preparsed_code

Sets a string of the preparsed code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_parsed_ast()

- -
set_parsed_ast(array $parsed_ast) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox parsed AST array

- - - -

Parameters

- - - - - - -
array$parsed_ast

Sets an array of the parsed AST code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_prepared_code()

- -
set_prepared_code(string $prepared_code) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox prepared code

- - - -

Parameters

- - - - - - -
string$prepared_code

Sets a string of the prepared code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_prepared_ast()

- -
set_prepared_ast(array $prepared_ast) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox prepared AST array

- - - -

Parameters

- - - - - - -
array$prepared_ast

Sets an array of the prepared AST code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_generated_code()

- -
set_generated_code(string $generated_code) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox generated code

- - - -

Parameters

- - - - - - -
string$generated_code

Sets a string of the generated code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

set_code()

- -
set_code(string $generated_code) : \PHPSandbox\PHPSandbox
-

Set PHPSandbox generated code

- - - -

Parameters

- - - - - - -
string$generated_code

Sets a string of the generated code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_prepended_code()

- -
get_prepended_code() : string
-

Get PHPSandbox prepended code

- - - - - -

Returns

- string - —

Returns a string of the prepended code

- -
-
- -
- -
-
- -
-

get_appended_code()

- -
get_appended_code() : string
-

Get PHPSandbox appended code

- - - - - -

Returns

- string - —

Returns a string of the appended code

- -
-
- -
- -
-
- -
-

get_preparsed_code()

- -
get_preparsed_code() : string
-

Get PHPSandbox preparsed code

- - - - - -

Returns

- string - —

Returns a string of the preparsed code

- -
-
- -
- -
-
- -
-

get_parsed_ast()

- -
get_parsed_ast() : array
-

Get PHPSandbox parsed AST array

- - - - - -

Returns

- array - —

Returns an array of the parsed AST code

- -
-
- -
- -
-
- -
-

get_prepared_code()

- -
get_prepared_code() : string
-

Get PHPSandbox prepared code

- - - - - -

Returns

- string - —

Returns a string of the prepared code

- -
-
- -
- -
-
- -
-

get_prepared_ast()

- -
get_prepared_ast() : array
-

Get PHPSandbox prepared AST array

- - - - - -

Returns

- array - —

Returns an array of the prepared AST code

- -
-
- -
- -
-
- -
-

get_generated_code()

- -
get_generated_code() : string
-

Get PHPSandbox generated code

- - - - - -

Returns

- string - —

Returns a string of the generated code

- -
-
- -
- -
-
- -
-

get_code()

- -
get_code() : string
-

Get PHPSandbox generated code

- - - - - -

Returns

- string - —

Returns a string of the generated code

- -
-
- -
- -
-
- -
-

_get_defined_functions()

- -
_get_defined_functions(array $functions) : array
-

Get PHPSandbox redefined functions in place of get_defined_functions(). This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
array$functions

Array result from get_defined_functions() is passed here

-
- - -

Returns

- array - —

Returns the redefined functions array

- -
-
- -
- -
-
- -
-

_get_defined_vars()

- -
_get_defined_vars(array $variables) : array
-

Get PHPSandbox redefined variables in place of get_defined_vars(). This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
array$variables

Array result from get_defined_vars() is passed here

-
- - -

Returns

- array - —

Returns the redefined variables array

- -
-
- -
- -
-
- -
-

_get_superglobal()

- -
_get_superglobal(string $name) : array
-

Get PHPSandbox redefined superglobal. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

Requested superglobal name (e.g. _GET, _POST, etc.)

-
- - -

Returns

- array - —

Returns the redefined superglobal

- -
-
- -
- -
-
- -
-

_get_magic_const()

- -
_get_magic_const(string $name) : array
-

Get PHPSandbox redefined magic constant. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

Requested magic constant name (e.g. FILE, LINE, etc.)

-
- - -

Returns

- array - —

Returns the redefined magic constant

- -
-
- -
- -
-
- -
-

_get_defined_constants()

- -
_get_defined_constants(array $constants) : array
-

Get PHPSandbox redefined constants in place of get_defined_constants(). This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
array$constants

Array result from get_defined_constants() is passed here

-
- - -

Returns

- array - —

Returns the redefined constants

- -
-
- -
- -
-
- -
-

_get_declared_classes()

- -
_get_declared_classes(array $classes) : array
-

Get PHPSandbox redefined classes in place of get_declared_classes(). This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
array$classes

Array result from get_declared_classes() is passed here

-
- - -

Returns

- array - —

Returns the redefined classes

- -
-
- -
- -
-
- -
-

_get_declared_interfaces()

- -
_get_declared_interfaces(array $interfaces) : array
-

Get PHPSandbox redefined interfaces in place of get_declared_interfaces(). This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
array$interfaces

Array result from get_declared_interfaces() is passed here

-
- - -

Returns

- array - —

Returns the redefined interfaces

- -
-
- -
- -
-
- -
-

_get_declared_traits()

- -
_get_declared_traits(array $traits) : array
-

Get PHPSandbox redefined traits in place of get_declared_traits(). This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
array$traits

Array result from get_declared_traits() is passed here

-
- - -

Returns

- array - —

Returns the redefined traits

- -
-
- -
- -
-
- -
-

_func_get_args()

- -
_func_get_args(array $arguments) : array
-

Get PHPSandbox redefined function arguments array

- - - -

Parameters

- - - - - - -
array$arguments

Array result from func_get_args() is passed here

-
- - -

Returns

- array - —

Returns the redefined arguments array

- -
-
- -
- -
-
- -
-

_func_get_arg()

- -
_func_get_arg(array $arguments, int $index) : array
-

Get PHPSandbox redefined function argument

- - - -

Parameters

- - - - - - - - - - - -
array$arguments

Array result from func_get_args() is passed here

-
int$index

Requested func_get_arg index is passed here

-
- - -

Returns

- array - —

Returns the redefined argument

- -
-
- -
- -
-
- -
-

_func_num_args()

- -
_func_num_args(array $arguments) : int
-

Get PHPSandbox redefined number of function arguments

- - - -

Parameters

- - - - - - -
array$arguments

Array result from func_get_args() is passed here

-
- - -

Returns

- int - —

Returns the redefined number of function arguments

- -
-
- -
- -
-
- -
-

_wrap()

- -
_wrap(mixed $value) : mixed|\PHPSandbox\SandboxedString
-

Wrap output value in SandboxString

- - - -

Parameters

- - - - - - -
mixed$value

Value to wrap

-
- - -

Returns

- mixed|\PHPSandbox\SandboxedString - —

Returns the wrapped value

- -
-
- -
- -
-
- -
-

_var_dump()

- -
_var_dump() : array
-

Get PHPSandbox redefined var_dump

- - - - - -

Returns

- array - —

Returns the redefined var_dump

- -
-
- -
- -
-
- -
-

_print_r()

- -
_print_r() : array
-

Get PHPSandbox redefined print_r

- - - - - -

Returns

- array - —

Returns the redefined print_r

- -
-
- -
- -
-
- -
-

_var_export()

- -
_var_export() : array
-

Get PHPSandbox redefined var_export

- - - - - -

Returns

- array - —

Returns the redefined var_export

- -
-
- -
- -
-
- -
-

_intval()

- -
_intval(mixed $value) : int
-

Return integer value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to return as integer

-
- - -

Returns

- int - —

Returns the integer value

- -
-
- -
- -
-
- -
-

_floatval()

- -
_floatval(mixed $value) : float
-

Return float value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to return as float

-
- - -

Returns

- float - —

Returns the float value

- -
-
- -
- -
-
- -
-

_boolval()

- -
_boolval(mixed $value) : boolean
-

Return boolean value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to return as boolean

-
- - -

Returns

- boolean - —

Returns the boolean value

- -
-
- -
- -
-
- -
-

_arrayval()

- -
_arrayval(mixed $value) : array
-

Return array value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to return as array

-
- - -

Returns

- array - —

Returns the array value

- -
-
- -
- -
-
- -
-

_objectval()

- -
_objectval(mixed $value) : object
-

Return object value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to return as object

-
- - -

Returns

- object - —

Returns the object value

- -
-
- -
- -
-
- -
-

_is_string()

- -
_is_string(mixed $value) : bool
-

Return is_string value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to check if is_string

-
- - -

Returns

- bool - —

Returns the is_string value

- -
-
- -
- -
-
- -
-

_is_object()

- -
_is_object(mixed $value) : bool
-

Return is_object value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to check if is_object

-
- - -

Returns

- bool - —

Returns the is_object value

- -
-
- -
- -
-
- -
-

_is_scalar()

- -
_is_scalar(mixed $value) : bool
-

Return is_scalar value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to check if is_scalar

-
- - -

Returns

- bool - —

Returns the is_scalar value

- -
-
- -
- -
-
- -
-

_is_callable()

- -
_is_callable(mixed $value) : bool
-

Return is_callable value of SandboxedString or mixed value

- - - -

Parameters

- - - - - - -
mixed$value

Value to check if is_callable

-
- - -

Returns

- bool - —

Returns the is_callable value

- -
-
- -
- -
-
- -
-

call_func()

- -
call_func() : mixed
-

Get PHPSandbox redefined function. This is an internal PHPSandbox function but requires public access to work.

- - - - -

Throws

-
-
\PHPSandbox\Error
-

Will throw exception if invalid function requested

-
-
- -

Returns

- mixed - —

Returns the redefined function result

- -
-
- -
- -
-
- -
-

define()

- -
define(string|array $type, string|array|null $name, mixed|null $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox definitions, such as functions, constants, namespaces, etc.

-

You can pass a string of the $type, $name and $value, or pass an associative array of definitions types and -an associative array of their corresponding values

- - -

Parameters

- - - - - - - - - - - - - - - - -
string|array$type

Associative array or string of definition type to define

-
string|array|null$name

Associative array or string of definition name to define

-
mixed|null$value

Value of definition to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine()

- -
undefine(string|array $type, string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox definitions, such as functions, constants, namespaces, etc.

-

You can pass a string of the $type and $name to undefine, or pass an associative array of definitions types -and an array of key names to undefine

- - -

Parameters

- - - - - - - - - - - -
string|array$type

Associative array or string of definition type to undefine

-
string|array$name

Associative array or string of definition name to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_func()

- -
define_func(string|array $name, callable $function, bool $pass_sandbox) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox function

-

You can pass the function $name and $function closure or callable to define, or an associative array of -functions to define, which can have callable values or arrays of the function callable and $pass_sandbox flag

- - -

Parameters

- - - - - - - - - - - - - - - - -
string|array$name

Associative array or string of function $name to define

-
callable$function

Callable to define $function to

-
bool$pass_sandbox

Pass PHPSandbox instance to defined function when called? Default is false

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed or uncallable $function is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_funcs()

- -
define_funcs(array $functions) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox functions by array

-

You can pass an associative array of functions to define

- - -

Parameters

- - - - - - -
array$functions

Associative array of $functions to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_funcs()

- -
has_defined_funcs() : int
-

Query whether PHPSandbox instance has defined functions

- - - - - -

Returns

- int - —

Returns the number of functions this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_func()

- -
is_defined_func(string $name) : bool
-

Check if PHPSandbox instance has $name function defined

- - - -

Parameters

- - - - - - -
string$name

String of function $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined function, false otherwise

- -
-
- -
- -
-
- -
-

undefine_func()

- -
undefine_func(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox function

-

You can pass a string of function $name to undefine, or pass an array of function names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of function name or array of function names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_funcs()

- -
undefine_funcs(array $functions) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox functions by array

-

You can pass an array of function names to undefine, or an empty array or null argument to undefine all functions

- - -

Parameters

- - - - - - -
array$functions

Array of function names to undefine. Passing an empty array or no argument will result in undefining all functions

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_var()

- -
define_var(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox variable

-

You can pass the variable $name and $value to define, or an associative array of variables to define

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of variable $name or associative array to define

-
mixed$value

Value to define variable to

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed variable is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_vars()

- -
define_vars(array $variables) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox variables by array

-

You can pass an associative array of variables to define

- - -

Parameters

- - - - - - -
array$variables

Associative array of $variables to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_vars()

- -
has_defined_vars() : int
-

Query whether PHPSandbox instance has defined variables

- - - - - -

Returns

- int - —

Returns the number of variables this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_var()

- -
is_defined_var(string $name) : bool
-

Check if PHPSandbox instance has $name variable defined

- - - -

Parameters

- - - - - - -
string$name

String of variable $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined variable, false otherwise

- -
-
- -
- -
-
- -
-

undefine_var()

- -
undefine_var(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox variable

-

You can pass a string of variable $name to undefine, or an array of variable names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of variable name or an array of variable names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_vars()

- -
undefine_vars(array $variables) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox variables by array

-

You can pass an array of variable names to undefine, or an empty array or null argument to undefine all variables

- - -

Parameters

- - - - - - -
array$variables

Array of variable names to undefine. Passing an empty array or no argument will result in undefining all variables

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_superglobal()

- -
define_superglobal(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox superglobal

-

You can pass the superglobal $name and $value to define, or an associative array of superglobals to define, or a third variable to define the $key

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of superglobal $name or associative array of superglobal names to define

-
mixed$value

Value to define superglobal to, can be callable

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed superglobal is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_superglobals()

- -
define_superglobals(array $superglobals) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox superglobals by array

-

You can pass an associative array of superglobals to define

- - -

Parameters

- - - - - - -
array$superglobals

Associative array of $superglobals to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_superglobals()

- -
has_defined_superglobals(string|null $name) : int|bool
-

Query whether PHPSandbox instance has defined superglobals, or if superglobal $name has defined keys

- - - -

Parameters

- - - - - - -
string|null$name

String of superglobal $name to check for keys

-
- - -

Returns

- int|bool - —

Returns the number of superglobals or superglobal keys this instance has defined, or false if invalid superglobal name specified

- -
-
- -
- -
-
- -
-

is_defined_superglobal()

- -
is_defined_superglobal(string $name, string|null $key) : bool
-

Check if PHPSandbox instance has $name superglobal defined, or if superglobal $name key is defined

- - - -

Parameters

- - - - - - - - - - - -
string$name

String of superglobal $name to query

-
string|null$key

String of key to to query in superglobal

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined superglobal, false otherwise

- -
-
- -
- -
-
- -
-

undefine_superglobal()

- -
undefine_superglobal(string|array $name, string|null $key) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox superglobal or superglobal key

-

You can pass a string of superglobal $name to undefine, or a superglobal $key to undefine, or an array of -superglobal names to undefine, or an an associative array of superglobal names and keys to undefine

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of superglobal $name, or array of superglobal names, or associative array of superglobal names and keys to undefine

-
string|null$key

String of superglobal $key to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_superglobals()

- -
undefine_superglobals(array $superglobals) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox superglobals by array

-

You can pass an array of superglobal names to undefine, or an associative array of superglobals names and key -to undefine, or an empty array or null to undefine all superglobals

- - -

Parameters

- - - - - - -
array$superglobals

Associative array of superglobal names and keys or array of superglobal names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_const()

- -
define_const(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox constant

-

You can pass the constant $name and $value to define, or an associative array of constants to define

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of constant $name or associative array to define

-
mixed$value

Value to define constant to

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed constant is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_consts()

- -
define_consts(array $constants) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox constants by array

-

You can pass an associative array of constants to define

- - -

Parameters

- - - - - - -
array$constants

Associative array of $constants to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_consts()

- -
has_defined_consts() : int
-

Query whether PHPSandbox instance has defined constants

- - - - - -

Returns

- int - —

Returns the number of constants this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_const()

- -
is_defined_const(string $name) : bool
-

Check if PHPSandbox instance has $name constant defined

- - - -

Parameters

- - - - - - -
string$name

String of constant $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined constant, false otherwise

- -
-
- -
- -
-
- -
-

undefine_const()

- -
undefine_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox constant

-

You can pass a string of constant $name to undefine, or an array of constant names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of constant name or array of constant names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_consts()

- -
undefine_consts(array $constants) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox constants by array

-

You can pass an array of constant names to undefine, or an empty array or null argument to undefine all constants

- - -

Parameters

- - - - - - -
array$constants

Array of constant names to undefine. Passing an empty array or no argument will result in undefining all constants

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_magic_const()

- -
define_magic_const(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox magic constant

-

You can pass the magic constant $name and $value to define, or an associative array of magic constants to define

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of magic constant $name or associative array to define

-
mixed$value

Value to define magic constant to, can be callable

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed magic constant is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_magic_consts()

- -
define_magic_consts(array $magic_constants) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox magic constants by array

-

You can pass an associative array of magic constants to define

- - -

Parameters

- - - - - - -
array$magic_constants

Associative array of $magic_constants to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_magic_consts()

- -
has_defined_magic_consts() : int
-

Query whether PHPSandbox instance has defined magic constants

- - - - - -

Returns

- int - —

Returns the number of magic constants this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_magic_const()

- -
is_defined_magic_const(string $name) : bool
-

Check if PHPSandbox instance has $name magic constant defined

- - - -

Parameters

- - - - - - -
string$name

String of magic constant $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined magic constant, false otherwise

- -
-
- -
- -
-
- -
-

undefine_magic_const()

- -
undefine_magic_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox magic constant

-

You can pass an a string of magic constant $name to undefine, or array of magic constant names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of magic constant name, or array of magic constant names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_magic_consts()

- -
undefine_magic_consts(array $magic_constants) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox magic constants by array

-

You can pass an array of magic constant names to undefine, or an empty array or null argument to undefine all magic constants

- - -

Parameters

- - - - - - -
array$magic_constants

Array of magic constant names to undefine. Passing an empty array or no argument will result in undefining all magic constants

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_namespace()

- -
define_namespace(string|array $name) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox namespace

-

You can pass the namespace $name and $value to define, or an array of namespaces to define

- - -

Parameters

- - - - - - -
string|array$name

String of namespace $name, or an array of namespace names to define

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed namespace is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_namespaces()

- -
define_namespaces(array $namespaces) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox namespaces by array

-

You can pass an array of namespaces to define

- - -

Parameters

- - - - - - -
array$namespaces

Array of $namespaces to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_namespaces()

- -
has_defined_namespaces() : int
-

Query whether PHPSandbox instance has defined namespaces

- - - - - -

Returns

- int - —

Returns the number of namespaces this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_namespace()

- -
is_defined_namespace(string $name) : bool
-

Check if PHPSandbox instance has $name namespace defined

- - - -

Parameters

- - - - - - -
string$name

String of namespace $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined namespace, false otherwise

- -
-
- -
- -
-
- -
-

get_defined_namespace()

- -
get_defined_namespace(string $name) : string
-

Get defined namespace of $name

- - - -

Parameters

- - - - - - -
string$name

String of namespace $name to get

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws an exception if an invalid namespace name is requested

-
-
- -

Returns

- string - —

Returns string of defined namespace value

- -
-
- -
- -
-
- -
-

undefine_namespace()

- -
undefine_namespace(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox namespace

-

You can pass a string of namespace $name to undefine, or an array of namespace names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of namespace $name, or an array of namespace names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_namespaces()

- -
undefine_namespaces(array $namespaces) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox namespaces by array

-

You can pass an array of namespace names to undefine, or an empty array or null argument to undefine all namespaces

- - -

Parameters

- - - - - - -
array$namespaces

Array of namespace names to undefine. Passing an empty array or no argument will result in undefining all namespaces

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_alias()

- -
define_alias(string|array $name, string|null $alias) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox alias

-

You can pass the namespace $name and $alias to use, an array of namespaces to use, or an associative array of namespaces to use and their aliases

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of namespace $name to use, or or an array of namespaces to use, or an associative array of namespaces and their aliases to use

-
string|null$alias

String of $alias to use

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed namespace is used

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_aliases()

- -
define_aliases(array $aliases) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox aliases by array

-

You can pass an array of namespaces to use, or an associative array of namespaces to use and their aliases

- - -

Parameters

- - - - - - -
array$aliases

Array of namespaces to use, or an associative array of namespaces and their aliases to use

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed namespace is used

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_aliases()

- -
has_defined_aliases() : int
-

Query whether PHPSandbox instance has defined aliases

- - - - - -

Returns

- int - —

Returns the number of aliases this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_alias()

- -
is_defined_alias(string $name) : bool
-

Check if PHPSandbox instance has $name alias defined

- - - -

Parameters

- - - - - - -
string$name

String of alias $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined aliases, false otherwise

- -
-
- -
- -
-
- -
-

undefine_alias()

- -
undefine_alias(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox alias

-

You can pass a string of alias $name to undefine, or an array of alias names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of alias name, or array of alias names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_aliases()

- -
undefine_aliases(array $aliases) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox aliases by array

-

You can pass an array of alias names to undefine, or an empty array or null argument to undefine all aliases

- - -

Parameters

- - - - - - -
array$aliases

Array of alias names to undefine. Passing an empty array or no argument will result in undefining all aliases

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_use()

- -
define_use(string|array $name, string|null $alias) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox use (or alias)

- - - -

Parameters

- - - - - - - - - - - -
string|array$name

String of namespace $name to use, or or an array of namespaces to use, or an associative array of namespaces and their aliases to use

-
string|null$alias

String of $alias to use

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed namespace is used

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_uses()

- -
define_uses(array $uses) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox uses (or aliases) by array

- - - -

Parameters

- - - - - - -
array$uses

Array of namespaces to use, or an associative array of namespaces and their aliases to use

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed namespace is used

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_uses()

- -
has_defined_uses() : int
-

Query whether PHPSandbox instance has defined uses (or aliases)

- - - - - -

Returns

- int - —

Returns the number of uses (or aliases) this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_use()

- -
is_defined_use(string $name) : bool
-

Check if PHPSandbox instance has $name uses (or alias) defined

- - - -

Parameters

- - - - - - -
string$name

String of use (or alias) $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined uses (or aliases) and false otherwise

- -
-
- -
- -
-
- -
-

undefine_use()

- -
undefine_use(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox use (or alias)

-

You can pass a string of use (or alias) $name to undefine, or an array of use (or alias) names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of use (or alias) name, or array of use (or alias) names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_uses()

- -
undefine_uses(array $uses) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox uses (or aliases) by array

- - - -

Parameters

- - - - - - -
array$uses

Array of use (or alias) names to undefine. Passing an empty array or no argument will result in undefining all uses (or aliases)

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_class()

- -
define_class(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox class

-

You can pass the class $name and $value to define, or an associative array of classes to define

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of class $name or associative array to define

-
mixed$value

Value to define class to

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed class is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_classes()

- -
define_classes(array $classes) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox classes by array

-

You can pass an associative array of classes to define

- - -

Parameters

- - - - - - -
array$classes

Associative array of $classes to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_classes()

- -
has_defined_classes() : int
-

Query whether PHPSandbox instance has defined classes

- - - - - -

Returns

- int - —

Returns the number of classes this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_class()

- -
is_defined_class(string $name) : bool
-

Check if PHPSandbox instance has $name class defined

- - - -

Parameters

- - - - - - -
string$name

String of class $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined class, false otherwise

- -
-
- -
- -
-
- -
-

get_defined_class()

- -
get_defined_class(string $name) : string
-

Get defined class of $name

- - - -

Parameters

- - - - - - -
string$name

String of class $name to get

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws an exception if an invalid class name is requested

-
-
- -

Returns

- string - —

Returns string of defined class value

- -
-
- -
- -
-
- -
-

undefine_class()

- -
undefine_class(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox class

-

You can pass a string of class $name to undefine, or an array of class names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of class name or an array of class names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_classes()

- -
undefine_classes(array $classes) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox classes by array

-

You can pass an array of class names to undefine, or an empty array or null argument to undefine all classes

- - -

Parameters

- - - - - - -
array$classes

Array of class names to undefine. Passing an empty array or no argument will result in undefining all classes

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_interface()

- -
define_interface(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox interface

-

You can pass the interface $name and $value to define, or an associative array of interfaces to define

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of interface $name or associative array to define

-
mixed$value

Value to define interface to

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed interface is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_interfaces()

- -
define_interfaces(array $interfaces) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox interfaces by array

-

You can pass an associative array of interfaces to define

- - -

Parameters

- - - - - - -
array$interfaces

Associative array of $interfaces to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_interfaces()

- -
has_defined_interfaces() : int
-

Query whether PHPSandbox instance has defined interfaces

- - - - - -

Returns

- int - —

Returns the number of interfaces this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_interface()

- -
is_defined_interface(string $name) : bool
-

Check if PHPSandbox instance has $name interface defined

- - - -

Parameters

- - - - - - -
string$name

String of interface $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined interface, false otherwise

- -
-
- -
- -
-
- -
-

get_defined_interface()

- -
get_defined_interface(string $name) : string
-

Get defined interface of $name

- - - -

Parameters

- - - - - - -
string$name

String of interface $name to get

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws an exception if an invalid interface name is requested

-
-
- -

Returns

- string - —

Returns string of defined interface value

- -
-
- -
- -
-
- -
-

undefine_interface()

- -
undefine_interface(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox interface

-

You can pass a string of interface $name to undefine, or an array of interface names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of interface name or an array of interface names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_interfaces()

- -
undefine_interfaces(array $interfaces) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox interfaces by array

-

You can pass an array of interface names to undefine, or an empty array or null argument to undefine all interfaces

- - -

Parameters

- - - - - - -
array$interfaces

Array of interface names to undefine. Passing an empty array or no argument will result in undefining all interfaces

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_trait()

- -
define_trait(string|array $name, mixed $value) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox trait

-

You can pass the trait $name and $value to define, or an associative array of traits to define

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of trait $name or associative array to define

-
mixed$value

Value to define trait to

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if unnamed trait is defined

-
-
- -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

define_traits()

- -
define_traits(array $traits) : \PHPSandbox\PHPSandbox
-

Define PHPSandbox traits by array

-

You can pass an associative array of traits to define

- - -

Parameters

- - - - - - -
array$traits

Associative array of $traits to define

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_defined_traits()

- -
has_defined_traits() : int
-

Query whether PHPSandbox instance has defined traits

- - - - - -

Returns

- int - —

Returns the number of traits this instance has defined

- -
-
- -
- -
-
- -
-

is_defined_trait()

- -
is_defined_trait(string $name) : bool
-

Check if PHPSandbox instance has $name trait defined

- - - -

Parameters

- - - - - - -
string$name

String of trait $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has defined trait, false otherwise

- -
-
- -
- -
-
- -
-

get_defined_trait()

- -
get_defined_trait(string $name) : string
-

Get defined trait of $name

- - - -

Parameters

- - - - - - -
string$name

String of trait $name to get

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws an exception if an invalid trait name is requested

-
-
- -

Returns

- string - —

Returns string of defined trait value

- -
-
- -
- -
-
- -
-

undefine_trait()

- -
undefine_trait(string|array $name) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox trait

-

You can pass a string of trait $name to undefine, or an array of trait names to undefine

- - -

Parameters

- - - - - - -
string|array$name

String of trait name or an array of trait names to undefine

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

undefine_traits()

- -
undefine_traits(array $traits) : \PHPSandbox\PHPSandbox
-

Undefine PHPSandbox traits by array

-

You can pass an array of trait names to undefine, or an empty array or null argument to undefine all traits

- - -

Parameters

- - - - - - -
array$traits

Array of trait names to undefine. Passing an empty array or no argument will result in undefining all traits

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist()

- -
whitelist(string|array $type, string|array|null $name) : \PHPSandbox\PHPSandbox
-

Whitelist PHPSandbox definitions, such as functions, constants, classes, etc. to set

-

You can pass an associative array of whitelist types and their names, or a string $type and array of $names, or pass a string of the $type and $name

- - -

Parameters

- - - - - - - - - - - -
string|array$type

Associative array or string of whitelist type to set

-
string|array|null$name

Array or string of whitelist name to set

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist()

- -
blacklist(string|array $type, string|array|null $name) : \PHPSandbox\PHPSandbox
-

Blacklist PHPSandbox definitions, such as functions, constants, classes, etc. to set

-

You can pass an associative array of blacklist types and their names, or a string $type and array of $names, or pass a string of the $type and $name

- - -

Parameters

- - - - - - - - - - - -
string|array$type

Associative array or string of blacklist type to set

-
string|array|null$name

Array or string of blacklist name to set

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist()

- -
dewhitelist(string|array $type, string|array|null $name) : \PHPSandbox\PHPSandbox
-

Remove PHPSandbox definitions, such as functions, constants, classes, etc. from whitelist

-

You can pass an associative array of whitelist types and their names, or a string $type and array of $names, or pass a string of the $type and $name to unset

- - -

Parameters

- - - - - - - - - - - -
string|array$type

Associative array or string of whitelist type to unset

-
string|array|null$name

Array or string of whitelist name to unset

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist()

- -
deblacklist(string|array $type, string|array|null $name) : \PHPSandbox\PHPSandbox
-

Remove PHPSandbox definitions, such as functions, constants, classes, etc. from blacklist

-

You can pass an associative array of blacklist types and their names, or a string $type and array of $names, or pass a string of the $type and $name to unset

- - -

Parameters

- - - - - - - - - - - -
string|array$type

Associative array or string of blacklist type to unset

-
string|array|null$name

Array or string of blacklist name to unset

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

has_whitelist()

- -
has_whitelist(string $type) : int
-

Query whether PHPSandbox instance has whitelist type

- - - -

Parameters

- - - - - - -
string$type

The whitelist type to query

-
- - -

Returns

- int - —

Returns the number of whitelists this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist()

- -
has_blacklist(string $type) : int
-

Query whether PHPSandbox instance has blacklist type.

- - - -

Parameters

- - - - - - -
string$type

The blacklist type to query

-
- - -

Returns

- int - —

Returns the number of blacklists this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted()

- -
is_whitelisted(string $type, string $name) : bool
-

Check if PHPSandbox instance has whitelist type and name set

- - - -

Parameters

- - - - - - - - - - - -
string$type

String of whitelist $type to query

-
string$name

String of whitelist $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted $type and $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted()

- -
is_blacklisted(string $type, string $name) : bool
-

Check if PHPSandbox instance has blacklist type and name set

- - - -

Parameters

- - - - - - - - - - - -
string$type

String of blacklist $type to query

-
string$name

String of blacklist $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted $type and $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_funcs()

- -
has_whitelist_funcs() : int
-

Query whether PHPSandbox instance has whitelisted functions.

- - - - - -

Returns

- int - —

Returns the number of whitelisted functions this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_funcs()

- -
has_blacklist_funcs() : int
-

Query whether PHPSandbox instance has blacklisted functions.

- - - - - -

Returns

- int - —

Returns the number of blacklisted functions this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_func()

- -
is_whitelisted_func(string $name) : bool
-

Check if PHPSandbox instance has whitelisted function name set

- - - -

Parameters

- - - - - - -
string$name

String of function $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted function $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_func()

- -
is_blacklisted_func(string $name) : bool
-

Check if PHPSandbox instance has blacklisted function name set

- - - -

Parameters

- - - - - - -
string$name

String of function $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted function $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_vars()

- -
has_whitelist_vars() : int
-

Query whether PHPSandbox instance has whitelisted variables.

- - - - - -

Returns

- int - —

Returns the number of whitelisted variables this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_vars()

- -
has_blacklist_vars() : int
-

Query whether PHPSandbox instance has blacklisted variables.

- - - - - -

Returns

- int - —

Returns the number of blacklisted variables this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_var()

- -
is_whitelisted_var(string $name) : bool
-

Check if PHPSandbox instance has whitelisted variable name set

- - - -

Parameters

- - - - - - -
string$name

String of variable $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted variable $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_var()

- -
is_blacklisted_var(string $name) : bool
-

Check if PHPSandbox instance has blacklisted variable name set

- - - -

Parameters

- - - - - - -
string$name

String of variable $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted variable $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_globals()

- -
has_whitelist_globals() : int
-

Query whether PHPSandbox instance has whitelisted globals.

- - - - - -

Returns

- int - —

Returns the number of whitelisted globals this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_globals()

- -
has_blacklist_globals() : int
-

Query whether PHPSandbox instance has blacklisted globals.

- - - - - -

Returns

- int - —

Returns the number of blacklisted globals this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_global()

- -
is_whitelisted_global(string $name) : bool
-

Check if PHPSandbox instance has whitelisted global name set

- - - -

Parameters

- - - - - - -
string$name

String of global $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted global $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_global()

- -
is_blacklisted_global(string $name) : bool
-

Check if PHPSandbox instance has blacklisted global name set

- - - -

Parameters

- - - - - - -
string$name

String of global $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted global $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_superglobals()

- -
has_whitelist_superglobals(string $name) : int
-

Query whether PHPSandbox instance has whitelisted superglobals, or superglobal keys

- - - -

Parameters

- - - - - - -
string$name

The whitelist superglobal key to query

-
- - -

Returns

- int - —

Returns the number of whitelisted superglobals or superglobal keys this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_superglobals()

- -
has_blacklist_superglobals(string $name) : int
-

Query whether PHPSandbox instance has blacklisted superglobals, or superglobal keys

- - - -

Parameters

- - - - - - -
string$name

The blacklist superglobal key to query

-
- - -

Returns

- int - —

Returns the number of blacklisted superglobals or superglobal keys this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_superglobal()

- -
is_whitelisted_superglobal(string $name, string $key) : bool
-

Check if PHPSandbox instance has whitelisted superglobal or superglobal key set

- - - -

Parameters

- - - - - - - - - - - -
string$name

String of whitelisted superglobal $name to query

-
string$key

String of whitelisted superglobal $key to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted superglobal key or superglobal, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_superglobal()

- -
is_blacklisted_superglobal(string $name, string $key) : bool
-

Check if PHPSandbox instance has blacklisted superglobal or superglobal key set

- - - -

Parameters

- - - - - - - - - - - -
string$name

String of blacklisted superglobal $name to query

-
string$key

String of blacklisted superglobal $key to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted superglobal key or superglobal, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_consts()

- -
has_whitelist_consts() : int
-

Query whether PHPSandbox instance has whitelisted constants.

- - - - - -

Returns

- int - —

Returns the number of whitelisted constants this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_consts()

- -
has_blacklist_consts() : int
-

Query whether PHPSandbox instance has blacklisted constants.

- - - - - -

Returns

- int - —

Returns the number of blacklisted constants this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_const()

- -
is_whitelisted_const(string $name) : bool
-

Check if PHPSandbox instance has whitelisted constant name set

- - - -

Parameters

- - - - - - -
string$name

String of constant $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted constant $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_const()

- -
is_blacklisted_const(string $name) : bool
-

Check if PHPSandbox instance has blacklisted constant name set

- - - -

Parameters

- - - - - - -
string$name

String of constant $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted constant $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_magic_consts()

- -
has_whitelist_magic_consts() : int
-

Query whether PHPSandbox instance has whitelisted magic constants.

- - - - - -

Returns

- int - —

Returns the number of whitelisted magic constants this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_magic_consts()

- -
has_blacklist_magic_consts() : int
-

Query whether PHPSandbox instance has blacklisted magic constants.

- - - - - -

Returns

- int - —

Returns the number of blacklisted magic constants this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_magic_const()

- -
is_whitelisted_magic_const(string $name) : bool
-

Check if PHPSandbox instance has whitelisted magic constant name set

- - - -

Parameters

- - - - - - -
string$name

String of magic constant $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted magic constant $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_magic_const()

- -
is_blacklisted_magic_const(string $name) : bool
-

Check if PHPSandbox instance has blacklisted magic constant name set

- - - -

Parameters

- - - - - - -
string$name

String of magic constant $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted magic constant $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_namespaces()

- -
has_whitelist_namespaces() : int
-

Query whether PHPSandbox instance has whitelisted namespaces.

- - - - - -

Returns

- int - —

Returns the number of whitelisted namespaces this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_namespaces()

- -
has_blacklist_namespaces() : int
-

Query whether PHPSandbox instance has blacklisted namespaces.

- - - - - -

Returns

- int - —

Returns the number of blacklisted namespaces this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_namespace()

- -
is_whitelisted_namespace(string $name) : bool
-

Check if PHPSandbox instance has whitelisted namespace name set

- - - -

Parameters

- - - - - - -
string$name

String of namespace $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted namespace $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_namespace()

- -
is_blacklisted_namespace(string $name) : bool
-

Check if PHPSandbox instance has blacklisted namespace name set

- - - -

Parameters

- - - - - - -
string$name

String of namespace $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted namespace $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_aliases()

- -
has_whitelist_aliases() : int
-

Query whether PHPSandbox instance has whitelisted aliases.

- - - - - -

Returns

- int - —

Returns the number of whitelisted aliases this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_aliases()

- -
has_blacklist_aliases() : int
-

Query whether PHPSandbox instance has blacklisted aliases.

- - - - - -

Returns

- int - —

Returns the number of blacklisted aliases this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_alias()

- -
is_whitelisted_alias(string $name) : bool
-

Check if PHPSandbox instance has whitelisted alias name set

- - - -

Parameters

- - - - - - -
string$name

String of alias $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted alias $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_alias()

- -
is_blacklisted_alias(string $name) : bool
-

Check if PHPSandbox instance has blacklisted alias name set

- - - -

Parameters

- - - - - - -
string$name

String of alias $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted alias $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_uses()

- -
has_whitelist_uses() : int
-

Query whether PHPSandbox instance has whitelisted uses (or aliases.)

- - - - - -

Returns

- int - —

Returns the number of whitelisted uses (or aliases) this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_uses()

- -
has_blacklist_uses() : int
-

Query whether PHPSandbox instance has blacklisted uses (or aliases.)

- - - - - -

Returns

- int - —

Returns the number of blacklisted uses (or aliases) this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_use()

- -
is_whitelisted_use(string $name) : bool
-

Check if PHPSandbox instance has whitelisted use (or alias) name set

- - - -

Parameters

- - - - - - -
string$name

String of use (or alias) $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted use (or alias) $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_use()

- -
is_blacklisted_use(string $name) : bool
-

Check if PHPSandbox instance has blacklisted use (or alias) name set

- - - -

Parameters

- - - - - - -
string$name

String of use (or alias) $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted use (or alias) $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_classes()

- -
has_whitelist_classes() : int
-

Query whether PHPSandbox instance has whitelisted classes.

- - - - - -

Returns

- int - —

Returns the number of whitelisted classes this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_classes()

- -
has_blacklist_classes() : int
-

Query whether PHPSandbox instance has blacklisted classes.

- - - - - -

Returns

- int - —

Returns the number of blacklisted classes this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_class()

- -
is_whitelisted_class(string $name) : bool
-

Check if PHPSandbox instance has whitelisted class name set

- - - -

Parameters

- - - - - - -
string$name

String of class $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted class $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_class()

- -
is_blacklisted_class(string $name) : bool
-

Check if PHPSandbox instance has blacklisted class name set

- - - -

Parameters

- - - - - - -
string$name

String of class $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted class $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_interfaces()

- -
has_whitelist_interfaces() : int
-

Query whether PHPSandbox instance has whitelisted interfaces.

- - - - - -

Returns

- int - —

Returns the number of whitelisted interfaces this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_interfaces()

- -
has_blacklist_interfaces() : int
-

Query whether PHPSandbox instance has blacklisted interfaces.

- - - - - -

Returns

- int - —

Returns the number of blacklisted interfaces this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_interface()

- -
is_whitelisted_interface(string $name) : bool
-

Check if PHPSandbox instance has whitelisted interface name set

- - - -

Parameters

- - - - - - -
string$name

String of interface $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted interface $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_interface()

- -
is_blacklisted_interface(string $name) : bool
-

Check if PHPSandbox instance has blacklisted interface name set

- - - -

Parameters

- - - - - - -
string$name

String of interface $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted interface $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_traits()

- -
has_whitelist_traits() : int
-

Query whether PHPSandbox instance has whitelisted traits.

- - - - - -

Returns

- int - —

Returns the number of whitelisted traits this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_traits()

- -
has_blacklist_traits() : int
-

Query whether PHPSandbox instance has blacklisted traits.

- - - - - -

Returns

- int - —

Returns the number of blacklisted traits this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_trait()

- -
is_whitelisted_trait(string $name) : bool
-

Check if PHPSandbox instance has whitelisted trait name set

- - - -

Parameters

- - - - - - -
string$name

String of trait $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted trait $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_trait()

- -
is_blacklisted_trait(string $name) : bool
-

Check if PHPSandbox instance has blacklisted trait name set

- - - -

Parameters

- - - - - - -
string$name

String of trait $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted trait $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_keywords()

- -
has_whitelist_keywords() : int
-

Query whether PHPSandbox instance has whitelisted keywords.

- - - - - -

Returns

- int - —

Returns the number of whitelisted keywords this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_keywords()

- -
has_blacklist_keywords() : int
-

Query whether PHPSandbox instance has blacklisted keywords.

- - - - - -

Returns

- int - —

Returns the number of blacklisted keywords this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_keyword()

- -
is_whitelisted_keyword(string $name) : bool
-

Check if PHPSandbox instance has whitelisted keyword name set

- - - -

Parameters

- - - - - - -
string$name

String of keyword $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted keyword $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_keyword()

- -
is_blacklisted_keyword(string $name) : bool
-

Check if PHPSandbox instance has blacklisted keyword name set

- - - -

Parameters

- - - - - - -
string$name

String of keyword $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted keyword $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_operators()

- -
has_whitelist_operators() : int
-

Query whether PHPSandbox instance has whitelisted operators.

- - - - - -

Returns

- int - —

Returns the number of whitelisted operators this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_operators()

- -
has_blacklist_operators() : int
-

Query whether PHPSandbox instance has blacklisted operators.

- - - - - -

Returns

- int - —

Returns the number of blacklisted operators this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_operator()

- -
is_whitelisted_operator(string $name) : bool
-

Check if PHPSandbox instance has whitelisted operator name set

- - - -

Parameters

- - - - - - -
string$name

String of operator $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted operator $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_operator()

- -
is_blacklisted_operator(string $name) : bool
-

Check if PHPSandbox instance has blacklisted operator name set

- - - -

Parameters

- - - - - - -
string$name

String of operator $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted operator $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_primitives()

- -
has_whitelist_primitives() : int
-

Query whether PHPSandbox instance has whitelisted primitives.

- - - - - -

Returns

- int - —

Returns the number of whitelisted primitives this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_primitives()

- -
has_blacklist_primitives() : int
-

Query whether PHPSandbox instance has blacklisted primitives.

- - - - - -

Returns

- int - —

Returns the number of blacklisted primitives this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_primitive()

- -
is_whitelisted_primitive(string $name) : bool
-

Check if PHPSandbox instance has whitelisted primitive name set

- - - -

Parameters

- - - - - - -
string$name

String of primitive $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted primitive $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_primitive()

- -
is_blacklisted_primitive(string $name) : bool
-

Check if PHPSandbox instance has blacklisted primitive name set

- - - -

Parameters

- - - - - - -
string$name

String of primitive $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted primitive $name, false otherwise

- -
-
- -
- -
-
- -
-

has_whitelist_types()

- -
has_whitelist_types() : int
-

Query whether PHPSandbox instance has whitelisted types.

- - - - - -

Returns

- int - —

Returns the number of whitelisted types this instance has defined

- -
-
- -
- -
-
- -
-

has_blacklist_types()

- -
has_blacklist_types() : int
-

Query whether PHPSandbox instance has blacklisted types.

- - - - - -

Returns

- int - —

Returns the number of blacklisted types this instance has defined

- -
-
- -
- -
-
- -
-

is_whitelisted_type()

- -
is_whitelisted_type(string $name) : bool
-

Check if PHPSandbox instance has whitelisted type name set

- - - -

Parameters

- - - - - - -
string$name

String of type $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has whitelisted type $name, false otherwise

- -
-
- -
- -
-
- -
-

is_blacklisted_type()

- -
is_blacklisted_type(string $name) : bool
-

Check if PHPSandbox instance has blacklisted type name set

- - - -

Parameters

- - - - - - -
string$name

String of type $name to query

-
- - -

Returns

- bool - —

Returns true if PHPSandbox instance has blacklisted type $name, false otherwise

- -
-
- -
- -
-
- -
-

whitelist_func()

- -
whitelist_func(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist function

-

You can pass a string of the function name, or pass an array of function names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of function name, or array of function names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_func()

- -
blacklist_func(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist function

-

You can pass a string of the function name, or pass an array of function names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of function name, or array of function names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_func()

- -
dewhitelist_func(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove function from whitelist

-

You can pass a string of the function name, or pass an array of function names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of function name or array of function names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_func()

- -
deblacklist_func(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove function from blacklist

-

You can pass a string of the function name, or pass an array of function names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of function name or array of function names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_var()

- -
whitelist_var(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist variable

-

You can pass a string of variable name, or pass an array of the variable names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of variable name or array of variable names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_var()

- -
blacklist_var(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist variable

-

You can pass a string of variable name, or pass an array of the variable names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of variable name or array of variable names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_var()

- -
dewhitelist_var(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove variable from whitelist

-

You can pass a string of variable name, or pass an array of the variable names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of variable name or array of variable names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_var()

- -
deblacklist_var(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove function from blacklist

-

You can pass a string of variable name, or pass an array of the variable names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of variable name or array of variable names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_global()

- -
whitelist_global(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist global

-

You can pass a string of global name, or pass an array of the global names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of global name or array of global names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_global()

- -
blacklist_global(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist global

-

You can pass a string of global name, or pass an array of the global names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of global name or array of global names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_global()

- -
dewhitelist_global(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove global from whitelist

-

You can pass a string of global name, or pass an array of the global names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of global name or array of global names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_global()

- -
deblacklist_global(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove global from blacklist

-

You can pass a string of global name, or pass an array of the global names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of global name or array of global names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_superglobal()

- -
whitelist_superglobal(string|array $name, string $key) : \PHPSandbox\PHPSandbox
-

Whitelist superglobal or superglobal key

-

You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, -or pass an array of superglobal names, or an associative array of superglobal names and their keys to whitelist

- - -

Parameters

- - - - - - - - - - - -
string|array$name

String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to whitelist

-
string$key

String of superglobal key to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_superglobal()

- -
blacklist_superglobal(string|array $name, string $key) : \PHPSandbox\PHPSandbox
-

Blacklist superglobal or superglobal key -* -You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, -or pass an array of superglobal names, or an associative array of superglobal names and their keys to blacklist

- - - -

Parameters

- - - - - - - - - - - -
string|array$name

String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to blacklist

-
string$key

String of superglobal key to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_superglobal()

- -
dewhitelist_superglobal(string|array $name, string $key) : \PHPSandbox\PHPSandbox
-

Remove superglobal or superglobal key from whitelist -* -You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, -or pass an array of superglobal names, or an associative array of superglobal names and their keys to remove from whitelist

- - - -

Parameters

- - - - - - - - - - - -
string|array$name

String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to remove from whitelist

-
string$key

String of superglobal key to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_superglobal()

- -
deblacklist_superglobal(string|array $name, string $key) : \PHPSandbox\PHPSandbox
-

Remove superglobal or superglobal key from blacklist -* -You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, -or pass an array of superglobal names, or an associative array of superglobal names and their keys to remove from blacklist

- - - -

Parameters

- - - - - - - - - - - -
string|array$name

String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to remove from blacklist

-
string$key

String of superglobal key to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_const()

- -
whitelist_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist constant

-

You can pass a string of constant name, or pass an array of the constant names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of constant name or array of constant names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_const()

- -
blacklist_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist constant

-

You can pass a string of constant name, or pass an array of the constant names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of constant name or array of constant names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_const()

- -
dewhitelist_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove constant from whitelist

-

You can pass a string of constant name, or pass an array of the constant names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of constant name or array of constant names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_const()

- -
deblacklist_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove constant from blacklist

-

You can pass a string of constant name, or pass an array of the constant names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of constant name or array of constant names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_magic_const()

- -
whitelist_magic_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist magic constant

-

You can pass a string of magic constant name, or pass an array of the magic constant names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of magic constant name or array of magic constant names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_magic_const()

- -
blacklist_magic_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist magic constant

-

You can pass a string of magic constant name, or pass an array of the magic constant names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of magic constant name or array of magic constant names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_magic_const()

- -
dewhitelist_magic_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove magic constant from whitelist

-

You can pass a string of magic constant name, or pass an array of the magic constant names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of magic constant name or array of magic constant names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_magic_const()

- -
deblacklist_magic_const(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove magic constant from blacklist

-

You can pass a string of magic constant name, or pass an array of the magic constant names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of magic constant name or array of magic constant names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_namespace()

- -
whitelist_namespace(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist namespace

-

You can pass a string of namespace name, or pass an array of the namespace names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of namespace name or array of namespace names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_namespace()

- -
blacklist_namespace(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist namespace

-

You can pass a string of namespace name, or pass an array of the namespace names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of namespace name or array of namespace names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_namespace()

- -
dewhitelist_namespace(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove namespace from whitelist

-

You can pass a string of namespace name, or pass an array of the namespace names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of namespace name or array of namespace names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_namespace()

- -
deblacklist_namespace(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove namespace from blacklist

-

You can pass a string of namespace name, or pass an array of the namespace names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of namespace name or array of namespace names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_alias()

- -
whitelist_alias(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist alias

-

You can pass a string of alias name, or pass an array of the alias names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of alias names or array of alias names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_alias()

- -
blacklist_alias(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist alias

-

You can pass a string of alias name, or pass an array of the alias names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of alias name or array of alias names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_alias()

- -
dewhitelist_alias(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove alias from whitelist

-

You can pass a string of alias name, or pass an array of the alias names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of alias name or array of alias names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_alias()

- -
deblacklist_alias(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove alias from blacklist

-

You can pass a string of alias name, or pass an array of the alias names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of alias name or array of alias names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_use()

- -
whitelist_use(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist use (or alias)

-

You can pass a string of use (or alias) name, or pass an array of the use (or alias) names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of use (or alias) name or array of use (or alias) names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_use()

- -
blacklist_use(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist use (or alias)

-

You can pass a string of use (or alias) name, or pass an array of the use (or alias) names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of use (or alias) name or array of use (or alias) names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_use()

- -
dewhitelist_use(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove use (or alias) from whitelist

-

You can pass a string of use (or alias name, or pass an array of the use (or alias) names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of use (or alias) name or array of use (or alias) names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_use()

- -
deblacklist_use(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove use (or alias) from blacklist

-

You can pass a string of use (or alias name, or pass an array of the use (or alias) names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of use (or alias) name or array of use (or alias) names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_class()

- -
whitelist_class(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist class

-

You can pass a string of class name, or pass an array of the class names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of class name or array of class names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_class()

- -
blacklist_class(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist class

-

You can pass a string of class name, or pass an array of the class names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of class name or array of class names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_class()

- -
dewhitelist_class(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove class from whitelist

-

You can pass a string of class name, or pass an array of the class names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of class name or array of class names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_class()

- -
deblacklist_class(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove class from blacklist

-

You can pass a string of class name, or pass an array of the class names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of class name or array of class names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_interface()

- -
whitelist_interface(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist interface

-

You can pass a string of interface name, or pass an array of the interface names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of interface name or array of interface names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_interface()

- -
blacklist_interface(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist interface

-

You can pass a string of interface name, or pass an array of the interface names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of interface name or array of interface names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_interface()

- -
dewhitelist_interface(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove interface from whitelist

-

You can pass a string of interface name, or pass an array of the interface names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of interface name or array of interface names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_interface()

- -
deblacklist_interface(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove interface from blacklist

-

You can pass a string of interface name, or pass an array of the interface names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of interface name or array of interface names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_trait()

- -
whitelist_trait(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist trait

-

You can pass a string of trait name, or pass an array of the trait names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of trait name or array of trait names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_trait()

- -
blacklist_trait(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist trait

-

You can pass a string of trait name, or pass an array of the trait names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of trait name or array of trait names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_trait()

- -
dewhitelist_trait(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove trait from whitelist

-

You can pass a string of trait name, or pass an array of the trait names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of trait name or array of trait names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_trait()

- -
deblacklist_trait(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove trait from blacklist

-

You can pass a string of trait name, or pass an array of the trait names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of trait name or array of trait names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_keyword()

- -
whitelist_keyword(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist keyword

-

You can pass a string of keyword name, or pass an array of the keyword names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of keyword name or array of keyword names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_keyword()

- -
blacklist_keyword(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist keyword

-

You can pass a string of keyword name, or pass an array of the keyword names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of keyword name or array of keyword names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_keyword()

- -
dewhitelist_keyword(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove keyword from whitelist

-

You can pass a string of keyword name, or pass an array of the keyword names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of keyword name or array of keyword names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_keyword()

- -
deblacklist_keyword(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove keyword from blacklist

-

You can pass a string of keyword name, or pass an array of the keyword names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of keyword name or array of keyword names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_operator()

- -
whitelist_operator(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist operator

-

You can pass a string of operator name, or pass an array of the operator names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of operator name or array of operator names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_operator()

- -
blacklist_operator(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist operator

-

You can pass a string of operator name, or pass an array of the operator names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of operator name or array of operator names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_operator()

- -
dewhitelist_operator(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove operator from whitelist

-

You can pass a string of operator name, or pass an array of the operator names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of operator name or array of operator names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_operator()

- -
deblacklist_operator(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove operator from blacklist

-

You can pass a string of operator name, or pass an array of the operator names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of operator name or array of operator names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_primitive()

- -
whitelist_primitive(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist primitive

-

You can pass a string of primitive name, or pass an array of the primitive names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of primitive name or array of primitive names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_primitive()

- -
blacklist_primitive(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist primitive

-

You can pass a string of primitive name, or pass an array of the primitive names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of primitive name or array of primitive names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_primitive()

- -
dewhitelist_primitive(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove primitive from whitelist

-

You can pass a string of primitive name, or pass an array of the primitive names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of primitive name or array of primitive names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_primitive()

- -
deblacklist_primitive(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove primitive from blacklist

-

You can pass a string of primitive name, or pass an array of the primitive names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of primitive name or array of primitive names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

whitelist_type()

- -
whitelist_type(string|array $name) : \PHPSandbox\PHPSandbox
-

Whitelist type

-

You can pass a string of type name, or pass an array of the type names to whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of type name or array of type names to whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

blacklist_type()

- -
blacklist_type(string|array $name) : \PHPSandbox\PHPSandbox
-

Blacklist type

-

You can pass a string of type name, or pass an array of the type names to blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of type name or array of type names to blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

dewhitelist_type()

- -
dewhitelist_type(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove type from whitelist

-

You can pass a string of type name, or pass an array of the type names to remove from whitelist

- - -

Parameters

- - - - - - -
string|array$name

String of type name or array of type names to remove from whitelist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

deblacklist_type()

- -
deblacklist_type(string|array $name) : \PHPSandbox\PHPSandbox
-

Remove type from blacklist

-

You can pass a string of type name, or pass an array of the type names to remove from blacklist

- - -

Parameters

- - - - - - -
string|array$name

String of type name or array of type names to remove from blacklist

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

check_func()

- -
check_func(string $name) : bool
-

Check function name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the function name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if function is valid, this is also used for testing closures

- -
-
- -
- -
-
- -
-

check_var()

- -
check_var(string $name) : bool
-

Check variable name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the variable name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if variable is valid

- -
-
- -
- -
-
- -
-

check_global()

- -
check_global(string $name) : bool
-

Check global name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the global name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if global is valid

- -
-
- -
- -
-
- -
-

check_superglobal()

- -
check_superglobal(string $name) : bool
-

Check superglobal name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the superglobal name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if superglobal is valid

- -
-
- -
- -
-
- -
-

check_const()

- -
check_const(string $name) : bool
-

Check constant name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the constant name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if constant is valid

- -
-
- -
- -
-
- -
-

check_magic_const()

- -
check_magic_const(string $name) : bool
-

Check magic constant name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the magic constant name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if magic constant is valid

- -
-
- -
- -
-
- -
-

check_namespace()

- -
check_namespace(string $name) : bool
-

Check namespace name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the namespace name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if namespace is valid

- -
-
- -
- -
-
- -
-

check_alias()

- -
check_alias(string $name) : bool
-

Check alias name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the alias name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if alias is valid

- -
-
- -
- -
-
- -
-

check_use()

- -
check_use(string $name) : bool
-

Check use (or alias) name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the use (or alias) name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if use (or alias) is valid

- -
-
- -
- -
-
- -
-

check_class()

- -
check_class(string $name, bool $extends) : bool
-

Check class name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - - - - - - -
string$name

String of the class name to check

-
bool$extends

Flag whether this is an extended class

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if class is valid

- -
-
- -
- -
-
- -
-

check_interface()

- -
check_interface(string $name) : bool
-

Check interface name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the interface name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if interface is valid

- -
-
- -
- -
-
- -
-

check_trait()

- -
check_trait(string $name) : bool
-

Check trait name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the trait name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if trait is valid

- -
-
- -
- -
-
- -
-

check_keyword()

- -
check_keyword(string $name) : bool
-

Check keyword name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the keyword name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if keyword is valid

- -
-
- -
- -
-
- -
-

check_operator()

- -
check_operator(string $name) : bool
-

Check operator name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the type operator to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if operator is valid

- -
-
- -
- -
-
- -
-

check_primitive()

- -
check_primitive(string $name) : bool
-

Check primitive name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the primitive name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if primitive is valid

- -
-
- -
- -
-
- -
-

check_type()

- -
check_type(string $name) : bool
-

Check type name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work.

- - - -

Parameters

- - - - - - -
string$name

String of the type name to check

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if validation error occurs

-
-
- -

Returns

- bool - —

Returns true if type is valid

- -
-
- -
- -
-
- -
-

prepend()

- -
prepend(string|callable $code) : \PHPSandbox\PHPSandbox
-

Prepend trusted code

- - - -

Parameters

- - - - - - -
string|callable$code

String or callable of trusted $code to prepend to generated code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

append()

- -
append(string|callable $code) : \PHPSandbox\PHPSandbox
-

Append trusted code

- - - -

Parameters

- - - - - - -
string|callable$code

String or callable of trusted $code to append to generated code

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

clear()

- -
clear() : \PHPSandbox\PHPSandbox
-

Clear all trusted and sandboxed code

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

clear_trusted_code()

- -
clear_trusted_code() : \PHPSandbox\PHPSandbox
-

Clear all trusted code

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

clear_prepend()

- -
clear_prepend() : \PHPSandbox\PHPSandbox
-

Clear all prepended trusted code

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

clear_append()

- -
clear_append() : \PHPSandbox\PHPSandbox
-

Clear all appended trusted code

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

clear_code()

- -
clear_code() : \PHPSandbox\PHPSandbox
-

Clear generated code

- - - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_prepared_time()

- -
get_prepared_time(int|null $round) : float
-

Return the amount of time the sandbox spent preparing the sandboxed code

-

You can pass the number of digits you wish to round the return value

- - -

Parameters

- - - - - - -
int|null$round

The number of digits to round the return value

-
- - -

Returns

- float - —

The amount of time in microseconds it took to prepare the sandboxed code

- -
-
- -
- -
-
- -
-

get_execution_time()

- -
get_execution_time(int|null $round) : float
-

Return the amount of time the sandbox spent executing the sandboxed code

-

You can pass the number of digits you wish to round the return value

- - -

Parameters

- - - - - - -
int|null$round

The number of digits to round the return value

-
- - -

Returns

- float - —

The amount of time in microseconds it took to execute the sandboxed code

- -
-
- -
- -
-
- -
-

get_time()

- -
get_time(int|null $round) : float
-

Return the amount of time the sandbox spent preparing and executing the sandboxed code

-

You can pass the number of digits you wish to round the return value

- - -

Parameters

- - - - - - -
int|null$round

The number of digits to round the return value

-
- - -

Returns

- float - —

The amount of time in microseconds it took to prepare and execute the sandboxed code

- -
-
- -
- -
-
- -
-

validate()

- -
validate( $code)
-

Validates passed callable for execution

- - - -

Parameters

- - - - - - -
$code -
- - -
-
- -
- -
-
- -
-

prepare()

- -
prepare(callable $code, boolean $skip_validation) : string
-

Prepare passed callable for execution

-

This function validates your code and automatically whitelists it according to your specified configuration

- - -

Parameters

- - - - - - - - - - - -
callable$code

The callable to prepare for execution

-
boolean$skip_validation

Boolean flag to indicate whether the sandbox should skip validation. Default is false.

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if error occurs in parsing, validation or whitelisting

-
-
- -

Returns

- string - —

The generated code (this can also be accessed via $sandbox->generated_code)

- -
-
- -
- -
-
- -
-

execute()

- -
execute(callable|string $callable, boolean $skip_validation) : mixed
-

Prepare and execute callable and return output

-

This function validates your code and automatically whitelists it according to your specified configuration, then executes it.

- - -

Parameters

- - - - - - - - - - - -
callable|string$callable

Callable or string of PHP code to prepare and execute within the sandbox

-
boolean$skip_validation

Boolean flag to indicate whether the sandbox should skip validation of the pass callable. Default is false.

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if error occurs in parsing, validation or whitelisting or if generated closure is invalid

-
-
- -

Returns

- mixed - —

The output from the executed sandboxed code

- -
-
- -
- -
-
- -
-

set_error_handler()

- -
set_error_handler(callable $handler, int $error_types) : \PHPSandbox\PHPSandbox
-

Set callable to handle errors

-

This function sets the sandbox error handler and the handled error types. The handler accepts the error number, -the error message, the error file, the error line, the error context and the sandbox instance as arguments. -If the error handler does not handle errors correctly then the sandbox's security may become compromised!

- - -

Parameters

- - - - - - - - - - - -
callable$handler

Callable to handle thrown Errors

-
int$error_types

Integer flag of the error types to handle (default is E_ALL)

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_error_handler()

- -
get_error_handler() : null|callable
-

Get error handler

-

This function returns the sandbox error handler.

- - - - -

Returns

- null|callable -
-
- -
- -
-
- -
-

unset_error_handler()

- -
unset_error_handler() : \PHPSandbox\PHPSandbox
-

Unset error handler

-

This function unsets the sandbox error handler.

- - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_last_error()

- -
get_last_error() : array
-

Gets the last sandbox error

- - - - - -

Returns

- array -
-
- -
- -
-
- -
-

error()

- -
error(int $errno, string $errstr, string $errfile, int $errline, array $errcontext) : mixed
-

Invoke sandbox error handler

- - - -

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - -
int$errno

Error number

-
string$errstr

Error message

-
string$errfile

Error file

-
int$errline

Error line number

-
array$errcontext

Error context array

-
- - -

Returns

- mixed -
-
- -
- -
-
- -
-

set_exception_handler()

- -
set_exception_handler(callable $handler) : \PHPSandbox\PHPSandbox
-

Set callable to handle thrown exceptions

-

This function sets the sandbox exception handler. The handler accepts the thrown exception and the sandbox instance -as arguments. If the exception handler does not handle exceptions correctly then the sandbox's security may -become compromised!

- - -

Parameters

- - - - - - -
callable$handler

Callable to handle thrown exceptions

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_exception_handler()

- -
get_exception_handler() : null|callable
-

Get exception handler

-

This function returns the sandbox exception handler.

- - - - -

Returns

- null|callable -
-
- -
- -
-
- -
-

unset_exception_handler()

- -
unset_exception_handler() : \PHPSandbox\PHPSandbox
-

Unset exception handler

-

This function unsets the sandbox exception handler.

- - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_last_exception()

- -
get_last_exception() : \Exception|\PHPSandbox\Error
-

Gets the last exception thrown by the sandbox

- - - - - -

Returns

- \Exception|\PHPSandbox\Error -
-
- -
- -
-
- -
-

exception()

- -
exception(\Exception $exception) : mixed
-

Invoke sandbox exception handler

- - - -

Parameters

- - - - - - -
\Exception$exception

Error number

-
- -

Throws

-
-
\Exception
-
-
-
- -

Returns

- mixed -
-
- -
- -
-
- -
-

set_validation_error_handler()

- -
set_validation_error_handler(callable $handler) : \PHPSandbox\PHPSandbox
-

Set callable to handle thrown validation Errors

-

This function sets the sandbox validation Error handler. The handler accepts the thrown Error and the sandbox -instance as arguments. If the error handler does not handle validation errors correctly then the sandbox's -security may become compromised!

- - -

Parameters

- - - - - - -
callable$handler

Callable to handle thrown validation Errors

-
- - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_validation_error_handler()

- -
get_validation_error_handler() : null|callable
-

Get validation error handler

-

This function returns the sandbox validation error handler.

- - - - -

Returns

- null|callable -
-
- -
- -
-
- -
-

unset_validation_error_handler()

- -
unset_validation_error_handler() : \PHPSandbox\PHPSandbox
-

Unset validation error handler

-

This function unsets the sandbox validation error handler.

- - - - -

Returns

- \PHPSandbox\PHPSandbox - —

Returns the PHPSandbox instance for chainability

- -
-
- -
- -
-
- -
-

get_last_validation_error()

- -
get_last_validation_error() : \Exception|\PHPSandbox\Error
-

Gets the last validation error thrown by the sandbox

- - - - - -

Returns

- \Exception|\PHPSandbox\Error -
-
- -
- -
-
- -
-

validation_error()

- -
validation_error(\Exception|\PHPSandbox\Error|string $error, int $code, \PHPParser_Node|null $node, mixed $data, \Exception|\PHPSandbox\Error|null $previous) : mixed
-

Invoke sandbox error validation handler if it exists, throw Error otherwise

- - - -

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - -
\Exception|\PHPSandbox\Error|string$error

Error to throw if Error is not handled, or error message string

-
int$code

The error code

-
\PHPParser_Node|null$node

The error parser node

-
mixed$data

The error data

-
\Exception|\PHPSandbox\Error|null$previous

The previous Error thrown

-
- -

Throws

-
-
\Exception|\PHPSandbox\Error
-
-
-
- -

Returns

- mixed -
-
- -
- -
-
- -
-

getSandbox()

- -
getSandbox(mixed $name) : null|\PHPSandbox\PHPSandbox
-

Get a named PHPSandbox instance (used to retrieve the sandbox instance from within sandboxed code)

- - - -

Parameters

- - - - - - -
mixed$name -
- - -

Returns

- null|\PHPSandbox\PHPSandbox -
-
- -
- -
-
- -
-

getIterator()

- -
getIterator()
-

- - - - - -
-
- -
- -
-
- -
-

normalize_func()

- -
normalize_func(string|array $name) : string|array
-

Normalize function name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the function $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized function string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_superglobal()

- -
normalize_superglobal(string|array $name) : string|array
-

Normalize superglobal name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the superglobal $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized superglobal string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_magic_const()

- -
normalize_magic_const(string|array $name) : string|array
-

Normalize magic constant name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the magic constant $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized magic constant string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_namespace()

- -
normalize_namespace(string|array $name) : string|array
-

Normalize namespace name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the namespace $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized namespace string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_alias()

- -
normalize_alias(string|array $name) : string|array
-

Normalize alias name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the alias $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized alias string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_use()

- -
normalize_use(string|array $name) : string|array
-

Normalize use (or alias) name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the use (or alias) $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized use (or alias) string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_class()

- -
normalize_class(string|array $name) : string|array
-

Normalize class name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the class $name to normalize

-
- - -

Returns

- string|array - —

Returns the normalized class string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_interface()

- -
normalize_interface(string|array $name) : string|array
-

Normalize interface name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the interface $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized interface string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_trait()

- -
normalize_trait(string|array $name) : string|array
-

Normalize trait name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the trait $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized trait string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_keyword()

- -
normalize_keyword(string|array $name) : string|array
-

Normalize keyword name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the keyword $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized keyword string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_operator()

- -
normalize_operator(string|array $name) : string|array
-

Normalize operator name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the operator $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized operator string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_primitive()

- -
normalize_primitive(string|array $name) : string|array
-

Normalize primitive name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the primitive $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized primitive string or an array of normalized strings

- -
-
- -
- -
-
- -
-

normalize_type()

- -
normalize_type(string|array $name) : string|array
-

Normalize type name. This is an internal PHPSandbox function.

- - - -

Parameters

- - - - - - -
string|array$name

String of the type $name, or array of strings to normalize

-
- - -

Returns

- string|array - —

Returns the normalized type string or an array of normalized strings

- -
-
- -
- -
-
- -
-

prepare_vars()

- -
prepare_vars() : string
-

Prepare defined variables for execution

- - - - -

Throws

-
-
\PHPSandbox\Error
-

Throws exception if variable preparation error occurs

-
-
- -

Returns

- string - —

Prepared string of variable output

- -
-
- -
- -
-
- -
-

prepare_consts()

- -
prepare_consts()
-

Prepare defined constants for execution

- - - - - -
-
- -
- -
-
- -
-

prepare_namespaces()

- -
prepare_namespaces()
-

Prepare defined namespaces for execution

- - - - - -
-
- -
- -
-
- -
-

prepare_aliases()

- -
prepare_aliases()
-

Prepare defined aliases for execution

- - - - - -
-
- -
- -
-
- -
-

prepare_uses()

- -
prepare_uses()
-

Prepare defined uses (or aliases) for execution

- - - - - -
-
- -
- -
-
- -
-

disassemble()

- -
disassemble(callable $closure) : string
-

Disassemble callable to string

- - - -

Parameters

- - - - - - -
callable$closure

The callable to disassemble

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throw exception if callable is passed and FunctionParser library is missing

-
-
- -

Returns

- string - —

Return the disassembled code string

- -
-
- -
- -
-
- -
-

auto_whitelist()

- -
auto_whitelist(string $code, bool $appended) : mixed
-

Automatically whitelisted trusted code

- - - -

Parameters

- - - - - - - - - - - -
string$code

String of trusted $code to automatically whitelist

-
bool$appended

Flag if this code ir prended or appended (true = appended)

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throw exception if code cannot be parsed for whitelisting

-
-
- -

Returns

- mixed - —

Return result of error handler if $code could not be parsed

- -
-
- -
- -
-
- -
-

auto_define()

- -
auto_define(\FunctionParser\FunctionParser $disassembled_closure)
-

Automatically define variables passed to disassembled closure

- - - -

Parameters

- - - - - - -
\FunctionParser\FunctionParser$disassembled_closure -
- - -
-
- -
- -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxWhitelistVisitor.html b/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxWhitelistVisitor.html deleted file mode 100644 index 6951237..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxWhitelistVisitor.html +++ /dev/null @@ -1,466 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

\PHPSandboxSandboxWhitelistVisitor

-

SandboxWhitelister class for PHP Sandboxes.

-

This class takes parsed AST code and checks it against the passed PHPSandbox instance configuration to -autmatically whitelist sandboxed code functions, classes, etc. if the appropriate settings are configured.

- - -
-

Summary

-
-
- Methods -
-
- Properties -
-
- Constants -
-
-
-
- __construct()
- leaveNode()
-
-
- No public properties found -
-
- No constants found -
-
-
-
- No protected methods found -
-
- $sandbox
-
-
- N/A -
-
-
-
- No private methods found -
-
- No private properties found -
-
- N/A -
-
-
-
- -
- - - -
-
-

Properties

-
- -
- -
-
- -
-

$sandbox

-
$sandbox : \PHPSandbox\PHPSandbox
-

The PHPSandbox instance to check against

- - - -

Type

- \PHPSandbox\PHPSandbox -
-
- -
- - - -
-

Methods

- -
- -
-
- -
-

__construct()

- -
__construct(\PHPSandbox\PHPSandbox $sandbox)
-

SandboxWhitelistVisitor class constructor

-

This constructor takes a passed PHPSandbox instance to check against for whitelisting sandboxed code.

- - -

Parameters

- - - - - - -
\PHPSandbox\PHPSandbox$sandbox

The PHPSandbox instance to check against

-
- - -
-
- -
- -
-
- -
-

leaveNode()

- -
leaveNode(\PHPParser_Node $node)
-

Examine the current PHPParser_Node node against the PHPSandbox configuration for whitelisting sandboxed code

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The sandboxed $node to examine

-
- - -
-
- -
- -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxedString.html b/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxedString.html deleted file mode 100644 index 15ace0c..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.SandboxedString.html +++ /dev/null @@ -1,706 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

\PHPSandboxSandboxedString

-

Sandboxed string class for PHP Sandboxes.

-

This class wraps sandboxed strings to intercept and check callable invocations

- - -
-

Summary

-
-
- Methods -
-
- Properties -
-
- Constants -
-
-
-
- __construct()
- __toString()
- __invoke()
- offsetSet()
- offsetGet()
- offsetExists()
- offsetUnset()
- getIterator()
-
-
- No public properties found -
-
- No constants found -
-
-
-
- No protected methods found -
-
- No protected properties found -
-
- N/A -
-
-
-
- No private methods found -
-
- $value
- $sandbox
-
-
- N/A -
-
-
-
- -
- - - -
-
-

Properties

-
- -
- -
-
- -
-

$value

-
$value : string
-

- - - -

Type

- string -
-
- -
- -
-
- - -
- -
- - - -
-

Methods

- -
- -
-
- -
-

__construct()

- -
__construct(string $value, \PHPSandbox\PHPSandbox $sandbox)
-

Constructs the SandboxedString

- - - -

Parameters

- - - - - - - - - - - -
string$value

Original string value

-
\PHPSandbox\PHPSandbox$sandbox

The current sandbox instance to test against

-
- - -
-
- -
- -
-
- -
-

__toString()

- -
__toString() : string
-

Returns the original string value

- - - - - -

Returns

- string -
-
- -
- -
-
- -
-

__invoke()

- -
__invoke() : mixed|null
-

Checks the string value against the sandbox function whitelists and blacklists for callback violations

- - - - - -

Returns

- mixed|null -
-
- -
- -
-
- -
-

offsetSet()

- -
offsetSet(mixed $offset, mixed $value)
-

Set string value at specified offset

- - - -

Parameters

- - - - - - - - - - - -
mixed$offset

Offset to set value

-
mixed$value

Value to set

-
- - -
-
- -
- -
-
- -
-

offsetGet()

- -
offsetGet(mixed $offset) : string
-

Get string value at specified offset

- - - -

Parameters

- - - - - - -
mixed$offset

Offset to get value

-
- - -

Returns

- string - —

Value to return

- -
-
- -
- -
-
- -
-

offsetExists()

- -
offsetExists(mixed $offset) : bool
-

Check if specified offset exists in string value

- - - -

Parameters

- - - - - - -
mixed$offset

Offset to check

-
- - -

Returns

- bool - —

Return true if offset exists, false otherwise

- -
-
- -
- -
-
- -
-

offsetUnset()

- -
offsetUnset(mixed $offset)
-

Unset string value at specified offset

- - - -

Parameters

- - - - - - -
mixed$offset

Offset to unset

-
- - -
-
- -
- -
-
- -
-

getIterator()

- -
getIterator() : \ArrayIterator
-

Return iterator for string value

- - - - - -

Returns

- \ArrayIterator - —

Array iterator to return

- -
-
- -
- -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.ValidatorVisitor.html b/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.ValidatorVisitor.html deleted file mode 100644 index 39c13cb..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.ValidatorVisitor.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

\PHPSandboxValidatorVisitor

-

Validator class for PHP Sandboxes.

-

This class takes parsed AST code and checks it against the passed PHPSandbox instance -configuration for errors, and throws exceptions if they are found

- - -
-

Summary

-
-
- Methods -
-
- Properties -
-
- Constants -
-
-
-
- __construct()
- leaveNode()
-
-
- No public properties found -
-
- No constants found -
-
-
-
- is_magic_const()
- is_keyword()
- is_operator()
- is_primitive()
-
-
- $sandbox
-
-
- N/A -
-
-
-
- No private methods found -
-
- No private properties found -
-
- N/A -
-
-
-
- -
- - - -
-
-

Properties

-
- -
- -
-
- -
-

$sandbox

-
$sandbox : \PHPSandbox\PHPSandbox
-

The PHPSandbox instance to check against

- - - -

Type

- \PHPSandbox\PHPSandbox -
-
- -
- - - -
-

Methods

- -
- -
-
- -
-

__construct()

- -
__construct(\PHPSandbox\PHPSandbox $sandbox)
-

ValidatorVisitor class constructor

-

This constructor takes a passed PHPSandbox instance to check against for validating sandboxed code.

- - -

Parameters

- - - - - - -
\PHPSandbox\PHPSandbox$sandbox

The PHPSandbox instance to check against

-
- - -
-
- -
- -
-
- -
-

leaveNode()

- -
leaveNode(\PHPParser_Node $node) : \PHPParser_Node|bool|null
-

Examine the current PHPParser_Node node against the PHPSandbox configuration for validating sandboxed code

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The sandboxed $node to validate

-
- -

Throws

-
-
\PHPSandbox\Error
-

Throws an exception if validation fails

-
-
- -

Returns

- \PHPParser_Node|bool|null - —

Return rewritten node, false if node must be removed, or null if no changes to the node are made

- -
-
- -
- -
-
- -
-

is_magic_const()

- -
is_magic_const(\PHPParser_Node $node) : string|null
-

Test the current PHPParser_Node node to see if it is a magic constant, and return the name if it is and null if it is not

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The sandboxed $node to test

-
- - -

Returns

- string|null - —

Return string name of node, or null if it is not a magic constant

- -
-
- -
- -
-
- -
-

is_keyword()

- -
is_keyword(\PHPParser_Node $node) : string|null
-

Test the current PHPParser_Node node to see if it is a keyword, and return the name if it is and null if it is not

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The sandboxed $node to test

-
- - -

Returns

- string|null - —

Return string name of node, or null if it is not a keyword

- -
-
- -
- -
-
- -
-

is_operator()

- -
is_operator(\PHPParser_Node $node) : string|null
-

Test the current PHPParser_Node node to see if it is an operator, and return the name if it is and null if it is not

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The sandboxed $node to test

-
- - -

Returns

- string|null - —

Return string name of node, or null if it is not an operator

- -
-
- -
- -
-
- -
-

is_primitive()

- -
is_primitive(\PHPParser_Node $node) : string|null
-

Test the current PHPParser_Node node to see if it is a primitive, and return the name if it is and null if it is not

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The sandboxed $node to test

-
- - -

Returns

- string|null - —

Return string name of node, or null if it is not a primitive

- -
-
- -
- -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.WhitelistVisitor.html b/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.WhitelistVisitor.html deleted file mode 100644 index 73b4ca5..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/classes/PHPSandbox.WhitelistVisitor.html +++ /dev/null @@ -1,470 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

\PHPSandboxWhitelistVisitor

-

Whitelister class for PHP Sandboxes.

-

This class takes parsed AST code and checks it against the passed PHPSandbox instance configuration to -autmatically whitelist trusted code functions, classes, etc. if the appropriate settings are configured.

- - -
-

Summary

-
-
- Methods -
-
- Properties -
-
- Constants -
-
-
-
- __construct()
- leaveNode()
-
-
- No public properties found -
-
- No constants found -
-
-
-
- No protected methods found -
-
- $sandbox
-
-
- N/A -
-
-
-
- No private methods found -
-
- No private properties found -
-
- N/A -
-
-
-
- -
- - - -
-
-

Properties

-
- -
- -
-
- -
-

$sandbox

-
$sandbox : \PHPSandbox\PHPSandbox
-

The PHPSandbox instance to check against

- - - -

Type

- \PHPSandbox\PHPSandbox -
-
- -
- - - -
-

Methods

- -
- -
-
- -
-

__construct()

- -
__construct(\PHPSandbox\PHPSandbox $sandbox)
-

WhitelistVisitor class constructor

-

This constructor takes a passed PHPSandbox instance to check against for whitelisting trusted code.

- - -

Parameters

- - - - - - -
\PHPSandbox\PHPSandbox$sandbox

The PHPSandbox instance to check against

-
- - -
-
- -
- -
-
- -
-

leaveNode()

- -
leaveNode(\PHPParser_Node $node) : null|bool
-

Examine the current PHPParser_Node node against the PHPSandbox configuration for whitelisting trusted code

- - - -

Parameters

- - - - - - -
\PHPParser_Node$node

The trusted $node to examine

-
- - -

Returns

- null|bool - —

Return false if node must be removed, or null if no changes to the node are made

- -
-
- -
- -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/css/jquery.iviewer.css b/vendor/fieryprophet/php-sandbox/docs/css/jquery.iviewer.css deleted file mode 100644 index 11f5f09..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/jquery.iviewer.css +++ /dev/null @@ -1,65 +0,0 @@ -.viewer { - -ms-touch-action: none; -} - -.iviewer_common { - position:absolute; - bottom:10px; - border: 1px solid #000; - height: 28px; - z-index: 5000; -} - -.iviewer_cursor { - cursor: url(../images/iviewer/hand.cur) 6 8, pointer; -} - -.iviewer_drag_cursor { - cursor: url(../images/iviewer/grab.cur) 6 8, pointer; -} - -.iviewer_button { - width: 28px; - cursor: pointer; - background-position: center center; - background-repeat: no-repeat; -} - -.iviewer_zoom_in { - left: 20px; - background: url(../images/iviewer/iviewer.zoom_in.png); -} - -.iviewer_zoom_out { - left: 55px; - background: url(../images/iviewer/iviewer.zoom_out.png); -} - -.iviewer_zoom_zero { - left: 90px; - background: url(../images/iviewer/iviewer.zoom_zero.png); -} - -.iviewer_zoom_fit { - left: 125px; - background: url(../images/iviewer/iviewer.zoom_fit.png); -} - -.iviewer_zoom_status { - left: 160px; - font: 1em/28px Sans; - color: #000; - background-color: #fff; - text-align: center; - width: 60px; -} - -.iviewer_rotate_left { - left: 227px; - background: #fff url(../images/iviewer/iviewer.rotate_left.png) center center no-repeat; -} - -.iviewer_rotate_right { - left: 262px; - background: #fff url(../images/iviewer/iviewer.rotate_right.png) center center no-repeat; -} diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/Read Me.txt b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/Read Me.txt deleted file mode 100644 index 9d2b9e5..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/Read Me.txt +++ /dev/null @@ -1,3 +0,0 @@ -To modify your generated font, use the *dev.svg* file, located in the *fonts* folder in this package. You can import this dev.svg file to the IcoMoon app. All the tags (class names) and the Unicode points of your glyphs are saved in this file. - -See the documentation for more info on how to use this package: http://icomoon.io/#docs/font-face \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.dev.svg b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.dev.svg deleted file mode 100644 index 8b543c1..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.dev.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.eot b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.eot deleted file mode 100644 index ef43f265ab2f344b7871c6d26a8722bae125b956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2324 zcmds3O>7%Q6#iy^oj7)E$FUn4$P!bB5}bP1`D;m0g&ens6e0)_5(i`)Cr%ar;5br2 z9CARMD%1m_w;nif;KTtT=!tTo5`s%_RLBQJ;1Vi9g@i=RH@n+3EeX(y6SJOu?|tvh zym>Qk=Q-X5SOGvlfouwN)n$lW6q1{p_hdwTN)0w8KbOC>eH*(&9W+p3UqT%vY@muV zYG_evB12@2a*;>|tCZ^G);T!wH=0F`XwqucwYFem3|WqOFi#vP;|ehb74wC{!r98p zi5VcE5gk08pDkb<24H?q*?R7UW6rTFH-fTM8{^x) zl%IR0cjgv?-no7q{_GR#;n7Z8foM|<_{Yxa`D=ID7?bup5|+EPx9Kio;zh`vlBptX zq}3^Q*#u|32ps`2CzdIn_USDQ;H|y6C5?B}iTwQX>=I73anoM|*Jf?*u0T3++lL;Z zoOB;<5)s)4-E}Y}DajQLa*Z-Y0=FYuP&Vv}AZXK4}7R)TE8*mWoa@#1qe{_EcT z*sJ^h@nM|7CVrQ@>1PY~Bq|iMjr2(P*qY7>n71(Qr5(R(rdnv3M-f8|>-P z_3rLSByl(r?FwmKfnYEkiX0Hj&Zm8`zKQ(dhe%Y#FqNZ*ZWu~n7W}o zu4<~Px{1%Id+?tBMG1bp<36t-h-IHwF@f)VUc-Pm10I{SELD&u5r4!i#q;J}$#-S#iEi{<9}YQ1LJW4u!TTaSOeW#u=wx0w|9=R_z% z6`Ih^joNA - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.ttf b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.ttf deleted file mode 100644 index 1937c7a31fdb7659063738dfe0a1fcc8bf325636..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 zcmds2O>7%Q6#iy^oj7*<7rUW`EHQN`!LD~5J84N#g&ens6e0)_5(i`)Cw3M8;5br2 z9CARMD#QW7tp^SqIB`G-dZL`Dgy7N}74iWQxRgpzAt4d-jlF5p(g2k>F{?N4eczjz z_ulO64g>%nwxMFFSX@3^eK9%@cr>!{(}jg1W?%s3_r%sS&mD7)UAi^_h!==g%JovK z8~x=f@t2fm*GrqNUXLrmyhgugedE=&t)22kKz*G4U#peU>L2qTAEi(F^HmaBp!WlP z5#mRx_0Dd`JjMBO;y}H0zJ;@3Y%xb{HA?kL-hSr`K(_$pT&ua+ z$$jwpD~x}E{w2uTDA(UBEWR{4e-mDX1n{;0vrlg8URQzW5_>Rk_veUiuZy%Kb|o!W z+TZj(W8!(ponml`=yRteWD{KVZRqfbMX^SF+SNBPjyL24o%^)c0(%Da(%Ql*PIYmE zS;-ujo3(u_gS`~-;b01Jtp9M6$ViFz^8gl!WZrS+n4$LURoGQ-fbWS-Mv<1K1qNd! z$tH|j0c9bB`uZNXyL&(O`~H8nA7`+Q-{o$)r-geG6b~yr9HP71FIYpY_nY`hT)`+N zV1cJRJZU^ABGD&=lRqhDk_j{GL`fLaVlqi0AG602V~JcMm%U&Y3igk(yZZUm+}xDx zeqPQle=DxIJe`jXcmTB^2s{%#|(0O68FmP;)ERxhK9YNkR1>D z{Sm)9Ivfl|LV;25$cU~F4+jF#!-3$CPaE=hy?$TdfLeAx4Tr+H!r=#~RK+lrqlRu6 zhHvD^_*gjP^Lb3&&>mGaRaN^3pH+|GUH6L;{B~ztTY(pAuB{@6?_68MxH#k5I=tdF z*EYysl3%1YM8@H|16x59PrJ5?b7;G^28Vye!5AG;@v>_h8-H&XAvAO8gP7(vwl diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.woff b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/fonts/phpdocumentor-clean-icons.woff deleted file mode 100644 index 32fe30d4d42925d3011635b139e0079025c8862c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1832 zcmZWqc{JPE9={}wwG~TEERWPuYc+{d2B|fq(o!IP5XdJ0fPaC!l_97Gcq&>t+B*=SbL1|E zfCe}KcX2JK^*ZNdt5;Xl|h3j8seJ(hz6Nr z^PYxV340V~7 zYl*hLsyt{o=Aq4QZ8|2|C3Yhy1GZgXhyAU??%JsgL6|K}ZpBWS+&c1FHhIeqwUoT(KKUIC4uI@oR zwRpPunVy;7ZAbGw7lQysa8x9XNR&|9ADOK!@STe{XuEvP-tFp;-r@~B`l{>wT-zdD zDs$sV2e%}BK0H60=v?eOcQs*{#qQ6WEPc7zdz!H=+Wu^q(MO*;E2M8CA__7*qHv`w z@(Z$iQ?5C)B0n&2?qAi%I_CROR%*&&__REW+mhQlC*FsxcfFJ+IVUXo=ou{d;jLn*}{c{w<7x9di{Ez-xyKTN8x-sNiy+=O3zR6;z*@-DMQdz-GGRRKXEw1|#% z>_Do^AwTzw!eSFg__;oQO-fQMVdxzbzu6NJt8Lo@tsHCyK?m3}LT_;l_aNXQni%Wj` z42G$=<>%;L)0Y7%{Py^e`r|K;1f7LTS$Qi;`WmHg@+t&6nCf<;K|^UDv7Gl8l!oKC z*6KNP4xU)trwgyfuw{7F)W?f$w`fcrOmr_NU71Y16mxv6d9?m%3rRYgULBLh@wFZ7 zCM4kvoAQaT2~@}pT&(7H8`dUSNk43Ato-cH&!cn|J(r%vxbO& ztJv#2euVwd^XlEmMigIZp{MiRtIJGfyQ96>+;FYCU$gAq9sZ=#B{^!$x6}CXpsJcN zb1H?;*B7wpBkcD4RdG(5wYp>n@k~5*?1OG|Op5NZRg#9{^PqWTgDUs8^shnpU9#!H z2`9qe$^_!awE{P^tLwI8b==22A2NHp!pts9!o%?vf7s2|&Me{G!np@TiIpox>Fq)M z6vA`!B1!(+jb#lEUqZrTnA;V4YhC81H{WEuGcFn1JyUxim=m1Vwy>1eOFFe&jx%=X zooho6QfRsE(-ForBd65sdA+1UbyR7xmT*lbT5kJeY_TteLh%F1#;qAIQiPFl77sW9 zz}Z4fZg&p&Qv4{CX_$`$0!i_qz-<*Vh-DOj$AF`|XZ}8vVmA9Zn{_f@fQ zPPi5f27_(H8MBi>at|^`aQo@>QsN8@_BLfl2K5D{j?p~=c|6^(3l3-kq^-32_dFDe zekF&5o<=F4fh-rA=DUQD1N@yf-ENhdTYcR zp`rEPI)P7$1N~$7XI>m_+TRBx?e=m&xFb`5LaBo`RcT5faGaOQ`k#N?(vC=qnmi2F zc?^M;P_Pl{1B~~uZ_s3fV(uEW|L}bQS7_w!-fPIghKOR34lJroy3@5BVVualk(0<| zSQ%Mwu4k4_pxom1+TN7VCV3ev?l6na>KWPXI?*IS* diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/lte-ie7.js b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/lte-ie7.js deleted file mode 100644 index 881c16e..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/lte-ie7.js +++ /dev/null @@ -1,30 +0,0 @@ -/* Load this script using conditional IE comments if you need to support IE 7 and IE 6. */ - -window.onload = function() { - function addIcon(el, entity) { - var html = el.innerHTML; - el.innerHTML = '' + entity + '' + html; - } - var icons = { - 'icon-trait' : '', - 'icon-interface' : '', - 'icon-class' : '' - }, - els = document.getElementsByTagName('*'), - i, attr, html, c, el; - for (i = 0; ; i += 1) { - el = els[i]; - if(!el) { - break; - } - attr = el.getAttribute('data-icon'); - if (attr) { - addIcon(el, attr); - } - c = el.className; - c = c.match(/icon-[^\s'"]+/); - if (c && icons[c[0]]) { - addIcon(el, icons[c[0]]); - } - } -}; \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/style.css b/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/style.css deleted file mode 100644 index f069ec1..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/phpdocumentor-clean-icons/style.css +++ /dev/null @@ -1,48 +0,0 @@ -@font-face { - font-family: 'phpdocumentor-clean-icons'; - src:url('fonts/phpdocumentor-clean-icons.eot'); - src:url('fonts/phpdocumentor-clean-icons.eot?#iefix') format('embedded-opentype'), - url('fonts/phpdocumentor-clean-icons.woff') format('woff'), - url('fonts/phpdocumentor-clean-icons.ttf') format('truetype'), - url('fonts/phpdocumentor-clean-icons.svg#phpdocumentor-clean-icons') format('svg'); - font-weight: normal; - font-style: normal; -} - -/* Use the following CSS code if you want to use data attributes for inserting your icons */ -[data-icon]:before { - font-family: 'phpdocumentor-clean-icons'; - content: attr(data-icon); - speak: none; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; -} - -/* Use the following CSS code if you want to have a class per icon */ -/* -Instead of a list of all class selectors, -you can use the generic selector below, but it's slower: -[class*="icon-"] { -*/ -.icon-trait, .icon-interface, .icon-class { - font-family: 'phpdocumentor-clean-icons'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; -} -.icon-trait:before { - content: "\e000"; -} -.icon-interface:before { - content: "\e001"; -} -.icon-class:before { - content: "\e002"; -} diff --git a/vendor/fieryprophet/php-sandbox/docs/css/prism.css b/vendor/fieryprophet/php-sandbox/docs/css/prism.css deleted file mode 100644 index 17876af..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/prism.css +++ /dev/null @@ -1,204 +0,0 @@ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ - -code[class*="language-"], -pre[class*="language-"] { - color: black; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - direction: ltr; - text-align: left; - white-space: pre; - word-spacing: normal; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -::selection { - text-shadow: none; - background: #b3d4fc; -} - -@media print { - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: #f5f2f0; -} - -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #a67f59; - background: hsla(0,0%,100%,.5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - - -.token.regex, -.token.important { - color: #e90; -} - -.token.important { - font-weight: bold; -} - -.token.entity { - cursor: help; -} -pre[data-line] { - position: relative; - padding: 1em 0 1em 3em; -} - -.line-highlight { - position: absolute; - left: 0; - right: 0; - padding: inherit 0; - margin-top: 1em; /* Same as .prism’s padding-top */ - - background: hsla(24, 20%, 50%,.08); - background: -moz-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); - background: -webkit-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); - background: -o-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); - background: linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); - - pointer-events: none; - - line-height: inherit; - white-space: pre; -} - - .line-highlight:before, - .line-highlight[data-end]:after { - content: attr(data-start); - position: absolute; - top: .4em; - left: .6em; - min-width: 1em; - padding: 0 .5em; - background-color: hsla(24, 20%, 50%,.4); - color: hsl(24, 20%, 95%); - font: bold 65%/1.5 sans-serif; - text-align: center; - vertical-align: .3em; - border-radius: 999px; - text-shadow: none; - box-shadow: 0 1px white; - } - - .line-highlight[data-end]:after { - content: attr(data-end); - top: auto; - bottom: .4em; - } -pre.line-numbers { - position: relative; - padding-left: 3.8em; - counter-reset: linenumber; -} - -pre.line-numbers > code { - position: relative; -} - -.line-numbers .line-numbers-rows { - position: absolute; - pointer-events: none; - top: 0; - font-size: 100%; - left: -3.8em; - width: 3em; /* works for line-numbers below 1000 lines */ - letter-spacing: -1px; - border-right: 1px solid #999; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -} - - .line-numbers-rows > span { - pointer-events: none; - display: block; - counter-increment: linenumber; - } - - .line-numbers-rows > span:before { - content: counter(linenumber); - color: #999; - display: block; - padding-right: 0.8em; - text-align: right; - } diff --git a/vendor/fieryprophet/php-sandbox/docs/css/template.css b/vendor/fieryprophet/php-sandbox/docs/css/template.css deleted file mode 100644 index d9a6f89..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/css/template.css +++ /dev/null @@ -1,418 +0,0 @@ -@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro); -@import url('phpdocumentor-clean-icons/style.css'); - -body { - padding-top: 40px; - background-color: #333333; -} - -a { - color: #6495ed; -} -a.anchor { - height: 40px; - margin-top: -40px; - display: block; -} - -h1, h2, h3, h4, h5, h6, .brand { - font-family: 'Source Sans Pro', sans-serif; - font-weight: normal; - letter-spacing: 0.05em; -} - -h2, h3, .detailsbar h1 { - overflow: hidden; - white-space: nowrap; - margin: 30px 0 20px 0; -} - -h2:after, h3:after, .detailsbar h1:after { - content: ''; - display: inline-block; - vertical-align: middle; - width: 100%; - height: 2px; - margin-left: 1em; - background: silver; -} - -h3 { - margin: 10px 0 20px 0; -} - -h4 { - margin: 20px 0 10px 0; - color: gray; - font-size: 18.5px; -} - -h3.public, h3.protected, h3.private { - padding-left: 10px; - text-overflow: ellipsis; -} - -.table tr:first-of-type th, .table tr:first-of-type td { - border-top: none; -} -.detailsbar { - color: #eeeeee; - background-color: #333333; - font-size: 0.9em; - overflow: hidden; - border-left: 2px solid gray; -} - -.detailsbar h1 { - font-size: 1.5em; - margin-bottom: 20px; - margin-top: 0; -} - -.detailsbar h2 { - font-size: 1.2em; - margin: 0; - padding: 0; -} - -.detailsbar h1:after { - background: gray; -} -.detailsbar h2:after, .detailsbar h3:after { - background: transparent; -} - -.detailsbar dt { - font-variant: small-caps; - text-transform: lowercase; - font-size: 1.1em; - letter-spacing: 0.1em; - color: silver; -} - -.hierarchy div:nth-of-type(2) { margin-left: 11px; } -.hierarchy div:nth-of-type(3) { margin-left: 22px; } -.hierarchy div:nth-of-type(4) { margin-left: 33px; } -.hierarchy div:nth-of-type(5) { margin-left: 44px; } -.hierarchy div:nth-of-type(6) { margin-left: 55px; } -.hierarchy div:nth-of-type(7) { margin-left: 66px; } -.hierarchy div:nth-of-type(8) { margin-left: 77px; } -.hierarchy div:nth-of-type(9) { margin-left: 88px; } -.hierarchy div:before { - content: "\f0da"; - font-family: FontAwesome; - margin-right: 5px; -} - -.row-fluid { - background-color: white; - overflow: hidden; -} - -footer.row-fluid, footer.row-fluid * { - background-color: #333333; - color: white; -} - -footer.row-fluid { - border-top: 2px dashed #555; - margin-top: 2px; -} - -.footer-sections .span4 { - border: 2px solid #555; - text-align: center; - border-radius: 10px; - margin-top: 70px; - margin-bottom: 20px; - background: #373737; -} - -.footer-sections .span4 h1 { - background: transparent; - margin-top: -30px; - margin-bottom: 20px; - font-size: 5em; -} - -.footer-sections .span4 h1 * { - background: transparent; -} - -.footer-sections .span4 div { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - padding: 10px; - min-height: 40px; -} -.footer-sections .span4 div, .footer-sections .span4 div * { - background-color: #555; -} -.footer-sections .span4 ul { - text-align: left; - list-style: none; - margin: 0; - padding: 0; -} - -.content { - background-color: white; - padding-right: 20px; -} - -.content nav { - text-align: center; - border-bottom: 1px solid silver; - margin: 5px 0 20px 0; - padding-bottom: 5px; -} - -.content > h1 { - padding-bottom: 15px; -} - -.content > h1 small { - display: block; - padding-bottom: 8px; - font-size: 0.6em; -} - -.deprecated { - text-decoration: line-through; -} - -.method { - margin-bottom: 20px; -} - -.method .signature .argument { - color: maroon; - font-weight: bold; -} - -.class #summary section.row-fluid { - overflow: hidden -} - -.class #summary .heading { - font-weight: bold; - text-align: center; -} - -.class #summary section .span4 { - padding: 3px; - overflow: hidden; - margin-bottom: -9999px; - padding-bottom: 9999px; - white-space: nowrap; - text-overflow: ellipsis; - border-left: 5px solid transparent; -} - -.class #summary section.public .span4:first-of-type:before, -.class #summary section.public .span6:first-of-type:before, -h3.public:before { - font-family: FontAwesome; - content: "\f046"; - color: green; - display: inline-block; - width: 1.2em; -} - -.class #summary section .span4:first-of-type, -.class #summary section .span6:first-of-type { - padding-left: 21px; -} -.class #summary section .span4:first-of-type:before, -.class #summary section .span6:first-of-type:before { - margin-left: -21px; -} -.class #summary section.protected .span4:first-of-type:before, -.class #summary section.protected .span6:first-of-type:before, -h3.protected:before { - font-family: FontAwesome; - content: "\f132"; - color: orange; - display: inline-block; - width: 1.2em; -} - -.class #summary section.private .span4:first-of-type:before, -.class #summary section.private .span6:first-of-type:before, -h3.private:before { - font-family: FontAwesome; - content: "\f023"; - color: red; - display: inline-block; - width: 1.2em; -} - -.class #summary section em { - font-size: 0.9em; - color: silver; -} -.class #summary .inherited { - color: gray; - font-style: italic; -} - -.accordion-group { - border: none; -} - -.accordion { - margin-bottom: 0; -} - -.accordion a:hover { - text-decoration: none; - background: #333333; - color: #eeeeee; -} - -.accordion-heading .accordion-toggle:before { - content: "\f078"; - font-family: FontAwesome; - margin-right: 5px; -} - -.accordion-heading .accordion-toggle.collapsed:before { - content: "\f054"; -} -.accordion-heading .accordion-toggle { - float: left; - width: 16px; - height: 16px; - padding: 4px 2px 4px 12px; -} -.accordion-heading a { - display: block; - padding: 4px 12px; -} - -.accordion-inner a { - display: block; - padding: 4px 12px; -} - -.accordion-inner > ul a:before { - font-family: 'phpdocumentor-clean-icons'; - content: "\e001"; - margin-right: 5px; -} - -.accordion-inner li.class a:before { - content: "\e002"; -} - -.accordion-inner li.interface a:before { - content: "\e001"; -} - -.accordion-inner li.trait a:before { - content: "\e000"; -} - -.accordion-inner { - padding: 4px 0 4px 12px; -} -.accordion-inner ul { - list-style: none; - padding: 0; - margin: 0; -} - -.row-fluid .span2 { - width: 16.5%; -} - -body .modal { - width: 90%; /* desired relative width */ - left: 5%; /* (100%-width)/2 */ - /* place center */ - margin-left:auto; - margin-right:auto; -} - -@media (min-width: 767px) { - .sidebar { - position: fixed; - top: 40px; - bottom: 0; - background-color: #f3f3f3; - left: 0; - border-right: 1px solid #e9e9e9; - overflow-y: scroll; - overflow-x: hidden; - padding-top: 10px; - } - - .sidebar::-webkit-scrollbar { - width: 10px; - } - - .sidebar::-webkit-scrollbar-thumb { - background: #cccccc; - background-clip: padding-box; - border: 3px solid #f3f3f3; - border-radius: 5px; - } - - .sidebar::-webkit-scrollbar-button { - display: none; - } - - .sidebar::-webkit-scrollbar-track { - background: #f3f3f3; - } -} - -@media (max-width: 979px) { - body { - padding-top: 0; - } -} - -@media (max-width: 767px) { - .class #summary .heading { - display: none; - } - - .detailsbar h1 { - display: none; - } - - body { - background-color: white; - } - - footer.row-fluid, footer.row-fluid * { - background-color: white; - } - - .footer-sections h1 { - color: #ccccd9; - } - - .detailsbar { - background-color: white; - color: #333; - border: none; - } -} - -@media (min-width: 767px) { - .detailsbar { - min-height: 100%; - margin-bottom: -99999px; - padding-bottom: 99999px; - padding-left: 20px; - padding-top: 10px; - } -} - -@media (min-width: 1200px) { - .row-fluid .span2 { - width: 16.5%; - } -} diff --git a/vendor/fieryprophet/php-sandbox/docs/files/Error.php.html b/vendor/fieryprophet/php-sandbox/docs/files/Error.php.html deleted file mode 100644 index 426c1ce..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/Error.php.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

Error.php

-

Error class declaration

- - - - - -

Classes

- - - - - -
ErrorError class for PHP Sandboxes.
-
- - -
- - - -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/files/Error.php.txt b/vendor/fieryprophet/php-sandbox/docs/files/Error.php.txt deleted file mode 100644 index f875b17..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/Error.php.txt +++ /dev/null @@ -1,160 +0,0 @@ - - * @version 1.3.6 - */ - class Error extends \Exception { - /* START ERROR CODES */ - /* MISC ERRORS (1-99) */ - const PARSER_ERROR = 1; - const ESCAPE_ERROR = 2; - const HALT_ERROR = 3; - const CAST_ERROR = 4; - const CLOSURE_ERROR = 5; - const BYREF_ERROR = 6; - const GENERATOR_ERROR = 7; - const GLOBALS_ERROR = 8; - const DYNAMIC_VAR_ERROR = 9; - const STATIC_VAR_ERROR = 10; - const ERROR_SUPPRESS_ERROR = 11; - const BACKTICKS_ERROR = 12; - const IMPORT_ERROR = 13; - - const DYNAMIC_STATIC_VAR_ERROR = 20; - const DYNAMIC_CONST_ERROR = 21; - const DYNAMIC_CLASS_ERROR = 22; - const SANDBOX_ACCESS_ERROR = 30; - const GLOBAL_CONST_ERROR = 31; - const CREATE_OBJECT_ERROR = 32; - /* VALIDATION ERRORS (100-199) */ - const VALID_FUNC_ERROR = 100; - const VALID_KEYWORD_ERROR = 101; - const VALID_CONST_ERROR = 102; - const VALID_VAR_ERROR = 103; - const VALID_GLOBAL_ERROR = 104; - const VALID_SUPERGLOBAL_ERROR = 105; - const VALID_MAGIC_CONST_ERROR = 106; - const VALID_CLASS_ERROR = 107; - const VALID_TYPE_ERROR = 108; - const VALID_INTERFACE_ERROR = 109; - const VALID_TRAIT_ERROR = 110; - const VALID_NAMESPACE_ERROR = 111; - const VALID_ALIAS_ERROR = 112; - const VALID_OPERATOR_ERROR = 113; - const VALID_PRIMITIVE_ERROR = 114; - /* DEFINITION ERRORS (200-299) */ - const DEFINE_FUNC_ERROR = 200; - const DEFINE_KEYWORD_ERROR = 201; - const DEFINE_CONST_ERROR = 202; - const DEFINE_VAR_ERROR = 203; - const DEFINE_GLOBAL_ERROR = 204; - const DEFINE_SUPERGLOBAL_ERROR = 205; - const DEFINE_MAGIC_CONST_ERROR = 206; - const DEFINE_CLASS_ERROR = 207; - const DEFINE_TYPE_ERROR = 208; - const DEFINE_INTERFACE_ERROR = 209; - const DEFINE_TRAIT_ERROR = 210; - const DEFINE_NAMESPACE_ERROR = 211; - const DEFINE_ALIAS_ERROR = 212; - const DEFINE_OPERATOR_ERROR = 213; - const DEFINE_PRIMITIVE_ERROR = 214; - /* WHITELIST ERRORS (300-399) */ - const WHITELIST_FUNC_ERROR = 300; - const WHITELIST_KEYWORD_ERROR = 301; - const WHITELIST_CONST_ERROR = 302; - const WHITELIST_VAR_ERROR = 303; - const WHITELIST_GLOBAL_ERROR = 304; - const WHITELIST_SUPERGLOBAL_ERROR = 305; - const WHITELIST_MAGIC_CONST_ERROR = 306; - const WHITELIST_CLASS_ERROR = 307; - const WHITELIST_TYPE_ERROR = 308; - const WHITELIST_INTERFACE_ERROR = 309; - const WHITELIST_TRAIT_ERROR = 310; - const WHITELIST_NAMESPACE_ERROR = 311; - const WHITELIST_ALIAS_ERROR = 312; - const WHITELIST_OPERATOR_ERROR = 313; - const WHITELIST_PRIMITIVE_ERROR = 314; - /* BLACKLIST ERRORS (400-499) */ - const BLACKLIST_FUNC_ERROR = 400; - const BLACKLIST_KEYWORD_ERROR = 401; - const BLACKLIST_CONST_ERROR = 402; - const BLACKLIST_VAR_ERROR = 403; - const BLACKLIST_GLOBAL_ERROR = 404; - const BLACKLIST_SUPERGLOBAL_ERROR = 405; - const BLACKLIST_MAGIC_CONST_ERROR = 406; - const BLACKLIST_CLASS_ERROR = 407; - const BLACKLIST_TYPE_ERROR = 408; - const BLACKLIST_INTERFACE_ERROR = 409; - const BLACKLIST_TRAIT_ERROR = 410; - const BLACKLIST_NAMESPACE_ERROR = 411; - const BLACKLIST_ALIAS_ERROR = 412; - const BLACKLIST_OPERATOR_ERROR = 413; - const BLACKLIST_PRIMITIVE_ERROR = 414; - /* END ERROR CODES */ - /** - * @var \PHPParser_Node|null The node of the Error - */ - protected $node; - /** - * @var mixed The data of the Error - */ - protected $data; - /** Constructs the Error - * @param string $message The message to pass to the Error - * @param int $code The error code to pass to the Error - * @param \PHPParser_node $node The parser node to pass to the Error - * @param mixed $data The error data to pass to the Error - * @param \Exception $previous The previous exception to pass to the Error - */ - public function __construct($message = '', $code = 0, \PHPParser_Node $node = null, $data = null, \Exception $previous = null){ - $this->node = $node; - $this->data = $data; - parent::__construct($message, $code, $previous); - } - /** Returns data of the Error - * - * @alias getData(); - * - * @return mixed The data of the error to return - */ - public function get_data(){ - return $this->data; - } - /** Returns data of the Error - * - * @alias get_data(); - * - * @return mixed The data of the error to return - */ - public function getData(){ - return $this->data; - } - /** Returns parser node of the Error - * - * @alias getNode(); - * - * @return \PHPParser_Node|null The parser node of the error to return - */ - public function get_node(){ - return $this->node; - } - /** Returns parser node of the Error - * - * @alias get_node(); - * - * @return \PHPParser_Node|null The parser node of the error to return - */ - public function getNode(){ - return $this->node; - } - } diff --git a/vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.html b/vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.html deleted file mode 100644 index e59552c..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

PHPSandbox.php

-

PHPSandbox class declaration

- - - - - -

Classes

- - - - - -
PHPSandboxPHPSandbox class for PHP Sandboxes.
-
- - -
- - - -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.txt b/vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.txt deleted file mode 100644 index ed669e9..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/PHPSandbox.php.txt +++ /dev/null @@ -1,7317 +0,0 @@ - - * @version 1.3.6 - */ - class PHPSandbox implements \IteratorAggregate { - /** - * @const string The prefix given to the obfuscated sandbox key passed to the generated code - */ - const SANDBOX_PREFIX = '__PHPSandbox_'; - /** - * @var int A bit flag for the import() method, signifies to import all data from a template - */ - const IMPORT_ALL = 0; - /** - * @var int A bit flag for the import() method, signifies to import only options from a template - */ - const IMPORT_OPTIONS = 1; - /** - * @var int A bit flag for the import() method, signifies to import only definitions from a template - */ - const IMPORT_DEFINITIONS = 2; - /** - * @var int A bit flag for the import() method, signifies to import only whitelists from a template - */ - const IMPORT_WHITELIST = 4; - /** - * @var int A bit flag for the import() method, signifies to import only blacklists from a template - */ - const IMPORT_BLACKLIST = 8; - /** - * @var int A bit flag for the import() method, signifies to import only trusted code from a template - */ - const IMPORT_TRUSTED_CODE = 16; - /** - * @var int A bit flag for the import() method, signifies to import only sandboxed code from a template - */ - const IMPORT_CODE = 32; - /** - * @var array A static array of superglobal names used for redefining superglobal values - */ - public static $superglobals = array( - '_GET', - '_POST', - '_COOKIE', - '_FILES', - '_ENV', - '_REQUEST', - '_SERVER', - '_SESSION', - 'GLOBALS' - ); - /** - * @var array A static array of magic constant names used for redefining magic constant values - */ - public static $magic_constants = array( - '__LINE__', - '__FILE__', - '__DIR__', - '__FUNCTION__', - '__CLASS__', - '__TRAIT__', - '__METHOD__', - '__NAMESPACE__' - ); - /** - * @var array A static array of defined_* and declared_* functions names used for redefining defined_* and declared_* values - */ - public static $defined_funcs = array( - 'get_defined_functions', - 'get_defined_vars', - 'get_defined_constants', - 'get_declared_classes', - 'get_declared_interfaces', - 'get_declared_traits' - ); - /** - * @var array A static array of func_get_args, func_get_arg, and func_num_args used for redefining those functions - */ - public static $arg_funcs = array( - 'func_get_args', - 'func_get_arg', - 'func_num_args' - ); - /** - * @var array A static array of var_dump, print_r and var_export, intval, floatval, is_string, is_object, - * is_scalar and is_callable for redefining those functions - */ - public static $sandboxed_string_funcs = array( - 'var_dump', - 'print_r', - 'var_export', - 'intval', - 'floatval', - 'boolval', - 'is_string', - 'is_object', - 'is_scalar', - 'is_callable' - ); - /** - * @var string The randomly generated name of the PHPSandbox variable passed to the generated closure - */ - public $name = ''; - /** - * @var array Array of defined functions, superglobals, etc. If an array type contains elements, then it overwrites its external counterpart - */ - protected $definitions = array( - 'functions' => array(), - 'variables' => array(), - 'superglobals' => array(), - 'constants' => array(), - 'magic_constants' => array(), - 'namespaces' => array(), - 'aliases' => array(), - 'classes' => array(), - 'interfaces' => array(), - 'traits' => array() - ); - /** - * @var array Array of whitelisted functions, classes, etc. If an array type contains elements, then it overrides its blacklist counterpart - */ - protected $whitelist = array( - 'functions' => array(), - 'variables' => array(), - 'globals' => array(), - 'superglobals' => array(), - 'constants' => array(), - 'magic_constants' => array(), - 'namespaces' => array(), - 'aliases' => array(), - 'classes' => array(), - 'interfaces' => array(), - 'traits' => array(), - 'keywords' => array(), - 'operators' => array(), - 'primitives' => array(), - 'types' => array() - ); - /** - * @var array Array of blacklisted functions, classes, etc. Any whitelisted array types override their counterpart in this array - */ - protected $blacklist = array( - 'functions' => array(), - 'variables' => array(), - 'globals' => array(), - 'superglobals' => array(), - 'constants' => array(), - 'magic_constants' => array(), - 'namespaces' => array(), - 'aliases' => array(), - 'classes' => array(), - 'interfaces' => array(), - 'traits' => array(), - 'keywords' => array( - 'declare' => true, - 'include' => true, - 'eval' => true, - 'exit' => true, - 'halt' => true - ), - 'operators' => array(), - 'primitives' => array(), - 'types' => array() - ); - /** - * @var array Array of custom validation functions - */ - protected $validation = array( - 'function' => null, - 'variable' => null, - 'global' => null, - 'superglobal' => null, - 'constant' => null, - 'magic_constant' => null, - 'namespace' => null, - 'alias' => null, - 'class' => null, - 'interface' => null, - 'trait' => null, - 'keyword' => null, - 'operator' => null, - 'primitive' => null, - 'type' => null - ); - /** - * @var PHPSandbox[] Array of PHPSandboxes - */ - protected static $sandboxes = array(); - /* CONFIGURATION OPTION FLAGS */ - /** - * @var bool Flag to indicate whether the sandbox should validate functions - * @default true - */ - public $validate_functions = true; - /** - * @var bool Flag to indicate whether the sandbox should validate variables - * @default true - */ - public $validate_variables = true; - /** - * @var bool Flag to indicate whether the sandbox should validate globals - * @default true - */ - public $validate_globals = true; - /** - * @var bool Flag to indicate whether the sandbox should validate superglobals - * @default true - */ - public $validate_superglobals = true; - /** - * @var bool Flag to indicate whether the sandbox should validate constants - * @default true - */ - public $validate_constants = true; - /** - * @var bool Flag to indicate whether the sandbox should validate magic constants - * @default true - */ - public $validate_magic_constants = true; - /** - * @var bool Flag to indicate whether the sandbox should validate namespaces - * @default true - */ - public $validate_namespaces = true; - /** - * @var bool Flag to indicate whether the sandbox should validate aliases (aka use) - * @default true - */ - public $validate_aliases = true; - /** - * @var bool Flag to indicate whether the sandbox should validate classes - * @default true - */ - public $validate_classes = true; - /** - * @var bool Flag to indicate whether the sandbox should validate interfaces - * @default true - */ - public $validate_interfaces = true; - /** - * @var bool Flag to indicate whether the sandbox should validate traits - * @default true - */ - public $validate_traits = true; - /** - * @var bool Flag to indicate whether the sandbox should validate keywords - * @default true - */ - public $validate_keywords = true; - /** - * @var bool Flag to indicate whether the sandbox should validate operators - * @default true - */ - public $validate_operators = true; - /** - * @var bool Flag to indicate whether the sandbox should validate primitives - * @default true - */ - public $validate_primitives = true; - /** - * @var bool Flag to indicate whether the sandbox should validate types - * @default true - */ - public $validate_types = true; - /** - * @var int The error_reporting level to set the PHPSandbox scope to when executing the generated closure, if set to null it will use parent scope error level. - * @default true - */ - public $error_level = null; - /** - * @var bool Flag to indicate whether the sandbox should return error_reporting to its previous level after execution - * @default true - */ - public $restore_error_level = true; - /** - * @var bool Flag to indicate whether the sandbox should convert errors to exceptions - * @default false - */ - public $convert_errors = false; - /** - * @var bool Flag whether to return output via an output buffer - * @default false - */ - public $capture_output = false; - /** - * @var bool Should PHPSandbox automagically whitelist prepended and appended code? - * @default true - */ - public $auto_whitelist_trusted_code = true; - /** - * @var bool Should PHPSandbox automagically whitelist functions created in sandboxed code if $allow_functions is true? - * @default true - */ - public $auto_whitelist_functions = true; - /** - * @var bool Should PHPSandbox automagically whitelist constants created in sandboxed code if $allow_constants is true? - * @default true - */ - public $auto_whitelist_constants = true; - /** - * @var bool Should PHPSandbox automagically whitelist global variables created in sandboxed code if $allow_globals is true? (Used to whitelist them in the variables list) - * @default true - */ - public $auto_whitelist_globals = true; - /** - * @var bool Should PHPSandbox automagically whitelist classes created in sandboxed code if $allow_classes is true? - * @default true - */ - public $auto_whitelist_classes = true; - /** - * @var bool Should PHPSandbox automagically whitelist interfaces created in sandboxed code if $allow_interfaces is true? - * @default true - */ - public $auto_whitelist_interfaces = true; - /** - * @var bool Should PHPSandbox automagically whitelist traits created in sandboxed code if $allow_traits is true? - * @default true - */ - public $auto_whitelist_traits = true; - /** - * @var bool Should PHPSandbox automagically define variables passed to prepended, appended and prepared code closures? - * @default true - */ - public $auto_define_vars = true; - /** - * @var bool Should PHPSandbox overwrite get_defined_functions, get_defined_vars, get_defined_constants, get_declared_classes, get_declared_interfaces and get_declared_traits? - * @default true - */ - public $overwrite_defined_funcs = true; - /** - * @var bool Should PHPSandbox overwrite func_get_args, func_get_arg and func_num_args? - * @default true - */ - public $overwrite_func_get_args = true; - /** - * @var bool Should PHPSandbox overwrite functions to help hide SandboxedStrings? - * @default true - */ - public $overwrite_sandboxed_string_funcs = true; - /** - * @var bool Should PHPSandbox overwrite $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST, $_SERVER, $_SESSION and $GLOBALS superglobals? If so, unless alternate superglobal values have been defined they will return as empty arrays. - * @default true - */ - public $overwrite_superglobals = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare functions? - * @default false - */ - public $allow_functions = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare closures? - * @default false - */ - public $allow_closures = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to create variables? - * @default true - */ - public $allow_variables = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to create static variables? - * @default true - */ - public $allow_static_variables = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to create objects of allow classes (e.g. new keyword)? - * @default true - */ - public $allow_objects = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to define constants? - * @default false - */ - public $allow_constants = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to use global keyword to access variables in the global scope? - * @default false - */ - public $allow_globals = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare namespaces (utilizing the define_namespace function?) - * @default false - */ - public $allow_namespaces = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to use namespaces and declare namespace aliases (utilizing the define_alias function?) - * @default false - */ - public $allow_aliases = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare classes? - * @default false - */ - public $allow_classes = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare interfaces? - * @default false - */ - public $allow_interfaces = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare traits? - * @default false - */ - public $allow_traits = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to create generators? - * @default true - */ - public $allow_generators = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to escape to HTML? - * @default false - */ - public $allow_escaping = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to cast types? (This will still be subject to allowed classes) - * @default false - */ - public $allow_casting = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to suppress errors (e.g. the @ operator?) - * @default false - */ - public $allow_error_suppressing = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to assign references? - * @default true - */ - public $allow_references = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to use backtick execution? (e.g. $var = \`ping google.com\`; This will also be disabled if shell_exec is not whitelisted or if it is blacklisted, and will be converted to a defined shell_exec function call if one is defined) - * @default false - */ - public $allow_backticks = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to halt the PHP compiler? - * @default false - */ - public $allow_halting = false; - /* TRUSTED CODE STRINGS */ - /** - * @var string String of prepended code, will be automagically whitelisted for functions, variables, globals, constants, classes, interfaces and traits if $auto_whitelist_trusted_code is true - */ - public $prepended_code = ''; - /** - * @var string String of appended code, will be automagically whitelisted for functions, variables, globals, constants, classes, interfaces and traits if $auto_whitelist_trusted_code is true - */ - public $appended_code = ''; - /* OUTPUT */ - /** - * @var float|null Float of the number of microseconds it took to prepare the sandbox - */ - public $prepare_time = null; - /** - * @var float|null Float of the number of microseconds it took to execute the sandbox - */ - public $execution_time = null; - /** - * @var string String of preparsed code, for debugging and serialization purposes - */ - public $preparsed_code = ''; - /** - * @var array Array of parsed code broken down into AST tokens, for debugging and serialization purposes - */ - public $parsed_ast = array(); - /** - * @var string String of prepared code, for debugging and serialization purposes - */ - public $prepared_code = ''; - /** - * @var array Array of prepared code broken down into AST tokens, for debugging and serialization purposes - */ - public $prepared_ast = array(); - /** - * @var string String of generated code, for debugging and serialization purposes - */ - public $generated_code = ''; - /** - * @var null|callable Callable that handles any errors when set - */ - protected $error_handler; - /** - * @var int Integer value of the error types to handle (default is E_ALL) - */ - protected $error_handler_types = E_ALL; - /** - * @var array The last error thrown by the sandbox - */ - protected $last_error; - /** - * @var null|callable Callable that handles any thrown exceptions when set - */ - protected $exception_handler; - /** - * @var \Exception The last exception thrown by the sandbox - */ - protected $last_exception; - /** - * @var null|callable Callable that handles any thrown validation errors when set - */ - protected $validation_error_handler; - /** - * @var \Exception|Error The last validation error thrown by the sandbox - */ - protected $last_validation_error; - /** PHPSandbox class constructor - * - * @example $sandbox = new PHPSandbox\PHPSandbox; - * - * You can pass optional arrays of predefined functions, variables, etc. to the sandbox through the constructor - * - * @param array $options Optional array of options to set for the sandbox - * @param array $functions Optional array of functions to define for the sandbox - * @param array $variables Optional array of variables to define for the sandbox - * @param array $constants Optional array of constants to define for the sandbox - * @param array $namespaces Optional array of namespaces to define for the sandbox - * @param array $aliases Optional array of aliases to define for the sandbox - * @param array $superglobals Optional array of superglobals to define for the sandbox - * @param array $magic_constants Optional array of magic constants to define for the sandbox - * @param array $classes Optional array of classes to define for the sandbox - * @param array $interfaces Optional array of interfaces to define for the sandbox - * @param array $traits Optional array of traits to define for the sandbox - * @return PHPSandbox The returned PHPSandbox variable - */ - public function __construct(array $options = array(), - array $functions = array(), - array $variables = array(), - array $constants = array(), - array $namespaces = array(), - array $aliases = array(), - array $superglobals = array(), - array $magic_constants = array(), - array $classes = array(), - array $interfaces = array(), - array $traits = array()){ - $this->name = static::SANDBOX_PREFIX . md5(uniqid()); - $this->set_options($options) - ->define_funcs($functions) - ->define_vars($variables) - ->define_consts($constants) - ->define_namespaces($namespaces) - ->define_aliases($aliases) - ->define_superglobals($superglobals) - ->define_magic_consts($magic_constants) - ->define_classes($classes) - ->define_interfaces($interfaces) - ->define_traits($traits); - return $this; - } - /** PHPSandbox static factory method - * - * You can pass optional arrays of predefined functions, variables, etc. to the sandbox through the constructor - * - * @example $sandbox = PHPSandbox\PHPSandbox::create(); - * - * @param array $options Optional array of options to set for the sandbox - * @param array $functions Optional array of functions to define for the sandbox - * @param array $variables Optional array of variables to define for the sandbox - * @param array $constants Optional array of constants to define for the sandbox - * @param array $namespaces Optional array of namespaces to define for the sandbox - * @param array $aliases Optional array of aliases to define for the sandbox - * @param array $superglobals Optional array of superglobals to define for the sandbox - * @param array $magic_constants Optional array of magic constants to define for the sandbox - * @param array $classes Optional array of classes to define for the sandbox - * @param array $interfaces Optional array of interfaces to define for the sandbox - * @param array $traits Optional array of traits to define for the sandbox - * - * @return PHPSandbox The returned PHPSandbox variable - */ - public static function create(array $options = array(), - array $functions = array(), - array $variables = array(), - array $constants = array(), - array $namespaces = array(), - array $aliases = array(), - array $superglobals = array(), - array $magic_constants = array(), - array $classes = array(), - array $interfaces = array(), - array $traits = array()){ - return new static($options, $functions, $variables, $constants, $namespaces, $aliases, $superglobals, $magic_constants, $classes, $interfaces, $traits); - } - /** PHPSandbox __invoke magic method - * - * Besides the code or closure to be executed, you can also pass additional arguments that will overwrite the default values of their respective arguments defined in the code - * - * @example $sandbox = new PHPSandbox\PHPSandbox; $sandbox(function(){ echo 'Hello world!'; }); - * - * @param \Closure|callable|string $code The closure, callable or string of code to execute - * - * @return mixed The output of the executed sandboxed code - */ - public function __invoke($code){ - return call_user_func(array($this, 'execute'), $code); - } - /** PHPSandbox __sleep magic method - * - * @example $sandbox = new PHPSandbox\PHPSandbox; serialize($sandbox); - * - * @return array An array of property keys to be serialized - */ - public function __sleep(){ - return array_keys(get_object_vars($this)); - } - /** PHPSandbox __wakeup magic method - * - * @example $sandbox = unserialize($sandbox_string); - */ - public function __wakeup(){} - /** Import JSON template into sandbox - * - * @example $sandbox->import(array('code' => 'echo "Hello World!";')); - * @example $sandbox->import(file_get_contents("template.json")); - * - * @param array|string $template The JSON array or string template to import - * @param int $import_flag Binary flags signifying which parts of the JSON template to import - * - * @throws Error Throws exception if JSON template could not be imported - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function import($template, $import_flag = 0){ - if(is_string($template)){ - $template = json_decode($template); - } - if(!is_array($template)){ - $this->validation_error("Sandbox could not import malformed JSON template!", Error::IMPORT_ERROR, null, $template); - } - if(isset($template['options']) && is_array($template['options']) && (!$import_flag || ($import_flag & static::IMPORT_OPTIONS))){ - $this->set_options($template['options']); - } - if(isset($template['definitions']) && is_array($template['definitions']) && (!$import_flag || ($import_flag & static::IMPORT_DEFINITIONS))){ - foreach($template['definitions'] as $type => $data){ - if(method_exists($this, 'define_' . $type)){ - switch($type){ - case 'func': - foreach($data as $key => $value){ - $function = function(){}; - @eval('$function = ' . $value["fullcode"] .';'); - if(!is_callable($function)){ - $this->validation_error("Could not import function $key! Please check your code for errors!", Error::IMPORT_ERROR, null, $function); - } - $this->define_func($key, $function, $value["pass"]); - } - break; - case 'superglobal': - foreach($data as $key => $value){ - $this->define_superglobal($key, $value["key"], $value["value"]); - } - break; - case 'namespace': - foreach($data as $key => $value){ - $this->define_namespace($key); - } - break; - case 'alias': - foreach($data as $key => $value){ - $this->define_alias($key, $value ? $value : null); - } - break; - case 'class': - foreach($data as $key => $value){ - $this->define_class($key, $value); - } - break; - case 'interface': - foreach($data as $key => $value){ - $this->define_interface($key, $value); - } - break; - case 'trait': - foreach($data as $key => $value){ - $this->define_trait($key, $value); - } - break; - - default: - foreach($data as $key => $value){ - call_user_func_array(array($this, 'define_' . $type), array($key, $value["value"])); - } - break; - } - } - } - } - if(isset($template['whitelist']) && is_array($template['whitelist']) && (!$import_flag || ($import_flag & static::IMPORT_WHITELIST))){ - foreach($template['whitelist'] as $type => $data){ - if(method_exists($this, 'whitelist_' . $type)){ - call_user_func_array(array($this, 'whitelist_' . $type), array($data)); - } - } - } - if(isset($template['blacklist']) && is_array($template['blacklist']) && (!$import_flag || ($import_flag & static::IMPORT_BLACKLIST))){ - foreach($template['blacklist'] as $type => $data){ - if(method_exists($this, 'blacklist_' . $type)){ - call_user_func_array(array($this, 'blacklist_' . $type), array($data)); - } - } - } - if(!$import_flag || ($import_flag & static::IMPORT_TRUSTED_CODE)){ - $this->clear_trusted_code(); - if(isset($template['prepend_code']) && $template['prepend_code']){ - $this->prepend($template['prepend_code']); - } - if(isset($template['append_code']) && $template['append_code']){ - $this->append($template['append_code']); - } - } - if(!$import_flag || ($import_flag & static::IMPORT_CODE)){ - $this->clear_code(); - if(isset($template['code']) && $template['code']){ - $this->prepare($template['code']); - } - } - return $this; - } - /** Import JSON template into sandbox - * - * @alias import(); - * - * @example $sandbox->importJSON(array('code' => 'echo "Hello World!";')); - * @example $sandbox->importJSON(file_get_contents("template.json")); - * - * @param array|string $template The JSON array or string template to import - * @param int $import_flag Binary flags signifying which parts of the JSON template to import - * - * @throws Error Throws exception if JSON template could not be imported - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function importJSON($template, $import_flag = 0){ - return $this->import($template, $import_flag); - } - /** Get name of PHPSandbox variable - * @return string The name of the PHPSandbox variable - */ - public function get_name(){ - return $this->name; - } - /** Set PHPSandbox option - * - * You can pass an $option name to set to $value, an array of $option names to set to $value, or an associative array of $option names and their values to set. - * - * @example $sandbox->set_option(array('allow_functions' => true)); - * - * @example $sandbox->set_option(array('allow_functions', 'allow_classes'), true); - * - * @example $sandbox->set_option('allow_functions', true); - * - * @param string|array $option String or array of strings or associative array of keys of option names to set $value to - * @param bool|int|null $value Boolean, integer or null $value to set $option to (optional) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_option($option, $value = null){ - if(is_array($option)){ - return $this->set_options($option, $value); - } - $option = strtolower($option); //normalize option names - switch($option){ - case 'validate_functions': - $this->validate_functions = $value ? true : false; - break; - case 'validate_variables': - $this->validate_variables = $value ? true : false; - break; - case 'validate_globals': - $this->validate_globals = $value ? true : false; - break; - case 'validate_superglobals': - $this->validate_superglobals = $value ? true : false; - break; - case 'validate_constants': - $this->validate_constants = $value ? true : false; - break; - case 'validate_magic_constants': - $this->validate_magic_constants = $value ? true : false; - break; - case 'validate_namespaces': - $this->validate_namespaces = $value ? true : false; - break; - case 'validate_aliases': - $this->validate_aliases = $value ? true : false; - break; - case 'validate_classes': - $this->validate_classes = $value ? true : false; - break; - case 'validate_interfaces': - $this->validate_interfaces = $value ? true : false; - break; - case 'validate_traits': - $this->validate_traits = $value ? true : false; - break; - case 'validate_keywords': - $this->validate_keywords = $value ? true : false; - break; - case 'validate_operators': - $this->validate_operators = $value ? true : false; - break; - case 'validate_primitives': - $this->validate_primitives = $value ? true : false; - break; - case 'validate_types': - $this->validate_types = $value ? true : false; - break; - case 'error_level': - $this->error_level = is_numeric($value) ? intval($value) : null; - break; - case 'restore_error_level': - $this->restore_error_level = $value ? true : false; - break; - case 'convert_errors': - $this->convert_errors = $value ? true : false; - break; - case 'capture_output': - $this->capture_output = $value ? true : false; - break; - case 'auto_whitelist_trusted_code': - $this->auto_whitelist_trusted_code = $value ? true : false; - break; - case 'auto_whitelist_functions': - $this->auto_whitelist_functions = $value ? true : false; - break; - case 'auto_whitelist_constants': - $this->auto_whitelist_constants = $value ? true : false; - break; - case 'auto_whitelist_globals': - $this->auto_whitelist_globals = $value ? true : false; - break; - case 'auto_whitelist_classes': - $this->auto_whitelist_classes = $value ? true : false; - break; - case 'auto_whitelist_interfaces': - $this->auto_whitelist_interfaces = $value ? true : false; - break; - case 'auto_whitelist_traits': - $this->auto_whitelist_traits = $value ? true : false; - break; - case 'auto_define_vars': - $this->auto_define_vars = $value ? true : false; - break; - case 'overwrite_defined_funcs': - $this->overwrite_defined_funcs = $value ? true : false; - break; - case 'overwrite_sandboxed_string_funcs': - $this->overwrite_sandboxed_string_funcs = $value ? true : false; - break; - case 'overwrite_func_get_args': - $this->overwrite_func_get_args = $value ? true : false; - break; - case 'overwrite_superglobals': - $this->overwrite_superglobals = $value ? true : false; - break; - case 'allow_functions': - $this->allow_functions = $value ? true : false; - break; - case 'allow_closures': - $this->allow_closures = $value ? true : false; - break; - case 'allow_variables': - $this->allow_variables = $value ? true : false; - break; - case 'allow_static_variables': - $this->allow_static_variables = $value ? true : false; - break; - case 'allow_objects': - $this->allow_objects = $value ? true : false; - break; - case 'allow_constants': - $this->allow_constants = $value ? true : false; - break; - case 'allow_globals': - $this->allow_globals = $value ? true : false; - break; - case 'allow_namespaces': - $this->allow_namespaces = $value ? true : false; - break; - case 'allow_aliases': - $this->allow_aliases = $value ? true : false; - break; - case 'allow_classes': - $this->allow_classes = $value ? true : false; - break; - case 'allow_interfaces': - $this->allow_interfaces = $value ? true : false; - break; - case 'allow_traits': - $this->allow_traits = $value ? true : false; - break; - case 'allow_generators': - $this->allow_generators = $value ? true : false; - break; - case 'allow_escaping': - $this->allow_escaping = $value ? true : false; - break; - case 'allow_casting': - $this->allow_casting = $value ? true : false; - break; - case 'allow_error_suppressing': - $this->allow_error_suppressing = $value ? true : false; - break; - case 'allow_references': - $this->allow_references = $value ? true : false; - break; - case 'allow_backticks': - $this->allow_backticks = $value ? true : false; - break; - case 'allow_halting': - $this->allow_halting = $value ? true : false; - break; - } - return $this; - } - /** Set PHPSandbox options by array - * - * You can pass an array of option names to set to $value, or an associative array of option names and their values to set. - * - * @example $sandbox->set_option(array('allow_functions' => true)); - * - * @example $sandbox->set_option(array('allow_functions', 'allow_classes'), true); - * - * @param array|string $options Array of strings or associative array of keys of option names to set $value to, or JSON array or string template to import - * @param bool|int|null $value Boolean, integer or null $value to set $option to (optional) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_options($options, $value = null){ - if(is_string($options) || (is_array($options) && isset($options["options"]))){ - return $this->import($options); - } - foreach($options as $name => $_value){ - $this->set_option(is_int($name) ? $_value : $name, is_int($name) ? $value : $_value); - } - return $this; - } - /** Reset PHPSandbox options to their default values - * - * @example $sandbox->reset_options(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function reset_options(){ - foreach(get_class_vars(__CLASS__) as $option => $value){ - if($option == 'error_level' || is_bool($value)){ - $this->set_option($option, $value); - } - } - return $this; - } - /** Get PHPSandbox option - * - * You pass a string $option name to get its associated value - * - * @example $sandbox->get_option('allow_functions'); - * - * @param string $option String of $option name to get - * - * @return boolean|int|null Returns the value of the requested option - */ - public function get_option($option){ - $option = strtolower($option); //normalize option names - switch($option){ - case 'validate_functions': - return $this->validate_functions; - break; - case 'validate_variables': - return $this->validate_variables; - break; - case 'validate_globals': - return $this->validate_globals; - break; - case 'validate_superglobals': - return $this->validate_superglobals; - break; - case 'validate_constants': - return $this->validate_constants; - break; - case 'validate_magic_constants': - return $this->validate_magic_constants; - break; - case 'validate_namespaces': - return $this->validate_namespaces; - break; - case 'validate_aliases': - return $this->validate_aliases; - break; - case 'validate_classes': - return $this->validate_classes; - break; - case 'validate_interfaces': - return $this->validate_interfaces; - break; - case 'validate_traits': - return $this->validate_traits; - break; - case 'validate_keywords': - return $this->validate_keywords; - break; - case 'validate_operators': - return $this->validate_operators; - break; - case 'validate_primitives': - return $this->validate_primitives; - break; - case 'validate_types': - return $this->validate_types; - break; - case 'error_level': - return $this->error_level; - case 'restore_error_level': - return $this->restore_error_level; - case 'convert_errors': - return $this->convert_errors; - case 'capture_output': - return $this->capture_output; - case 'auto_whitelist_trusted_code': - return $this->auto_whitelist_trusted_code; - case 'auto_whitelist_functions': - return $this->auto_whitelist_functions; - case 'auto_whitelist_constants': - return $this->auto_whitelist_constants; - case 'auto_whitelist_globals': - return $this->auto_whitelist_globals; - case 'auto_whitelist_classes': - return $this->auto_whitelist_classes; - case 'auto_whitelist_interfaces': - return $this->auto_whitelist_interfaces; - case 'auto_whitelist_traits': - return $this->auto_whitelist_traits; - case 'auto_define_vars': - return $this->auto_define_vars; - case 'overwrite_defined_funcs': - return $this->overwrite_defined_funcs; - case 'overwrite_sandboxed_string_funcs': - return $this->overwrite_sandboxed_string_funcs; - case 'overwrite_func_get_args': - return $this->overwrite_func_get_args; - case 'overwrite_superglobals': - return $this->overwrite_superglobals; - case 'allow_functions': - return $this->allow_functions; - case 'allow_closures': - return $this->allow_closures; - case 'allow_variables': - return $this->allow_variables; - case 'allow_static_variables': - return $this->allow_static_variables; - case 'allow_objects': - return $this->allow_objects; - case 'allow_constants': - return $this->allow_constants; - case 'allow_globals': - return $this->allow_globals; - case 'allow_namespaces': - return $this->allow_namespaces; - case 'allow_aliases': - return $this->allow_aliases; - case 'allow_classes': - return $this->allow_classes; - case 'allow_interfaces': - return $this->allow_interfaces; - case 'allow_traits': - return $this->allow_traits; - case 'allow_generators': - return $this->allow_generators; - case 'allow_escaping': - return $this->allow_escaping; - case 'allow_casting': - return $this->allow_casting; - case 'allow_error_suppressing': - return $this->allow_error_suppressing; - case 'allow_references': - return $this->allow_references; - case 'allow_backticks': - return $this->allow_backticks; - case 'allow_halting': - return $this->allow_halting; - } - return null; - } - /** Set validation callable for specified $type - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_validator('function', function($function, PHPSandbox $sandbox){ return true; }); - * - * @param string $type String of $type name to set validator for - * @param callable $callable Callable that validates the passed element - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_validator($type, $callable){ - $type = strtolower($type); //normalize type - if(array_key_exists($type, $this->validation)){ - $this->validation[$type] = $callable; - } - return $this; - } - /** Get validation callable for specified $type - * - * @example $sandbox->get_validator('function'); //return callable - * - * @param string $type String of $type to return - * - * @return callable|null - */ - public function get_validator($type){ - $type = strtolower($type); //normalize type - return isset($this->validation[$type]) ? $this->validation[$type] : null; - } - /** Unset validation callable for specified $type - * - * @example $sandbox->unset_validator('function'); //clear custom validation - * - * @param string $type String of $type to unset - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_validator($type){ - $type = strtolower($type); //normalize type - if(isset($this->validation[$type])){ - $this->validation[$type] = null; - } - return $this; - } - /** Set validation callable for functions - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized function names include the namespace and are lowercase! - * - * @example $sandbox->set_func_validator(function($function, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the normalized passed function name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_func_validator($callable){ - $this->validation['function'] = $callable; - return $this; - } - /** Get validation for functions - * - * @example $sandbox->get_func_validator(); //return callable - * - * @return callable|null - */ - public function get_func_validator(){ - return isset($this->validation['function']) ? $this->validation['function'] : null; - } - /** Unset validation callable for functions - * - * @example $sandbox->unset_func_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_func_validator(){ - $this->validation['function'] = null; - return $this; - } - /** Set validation callable for variables - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_var_validator(function($variable, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed variable name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_var_validator($callable){ - $this->validation['variable'] = $callable; - return $this; - } - /** Get validation callable for variables - * - * @example $sandbox->get_var_validator(); //return callable - * - * @return callable|null - */ - public function get_var_validator(){ - return isset($this->validation['variable']) ? $this->validation['variable'] : null; - } - /** Unset validation callable for variables - * - * @example $sandbox->unset_var_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_var_validator(){ - $this->validation['variable'] = null; - return $this; - } - /** Set validation callable for globals - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_global_validator(function($global, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed global name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_global_validator($callable){ - $this->validation['global'] = $callable; - return $this; - } - /** Get validation callable for globals - * - * @example $sandbox->get_global_validator(); //return callable - * - * @return callable|null - */ - public function get_global_validator(){ - return isset($this->validation['global']) ? $this->validation['global'] : null; - } - /** Unset validation callable for globals - * - * @example $sandbox->unset_global_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_global_validator(){ - $this->validation['global'] = null; - return $this; - } - /** Set validation callable for superglobals - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized superglobal names are uppercase and without a leading _ - * - * @example $sandbox->set_superglobal_validator(function($superglobal, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed superglobal name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_superglobal_validator($callable){ - $this->validation['superglobal'] = $callable; - return $this; - } - /** Get validation callable for superglobals - * - * @example $sandbox->get_superglobal_validator(); //return callable - * - * @return callable|null - */ - public function get_superglobal_validator(){ - return isset($this->validation['superglobal']) ? $this->validation['superglobal'] : null; - } - /** Unset validation callable for superglobals - * - * @example $sandbox->unset_superglobal_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_superglobal_validator(){ - $this->validation['superglobal'] = null; - return $this; - } - /** Set validation callable for constants - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_const_validator(function($constant, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed constant name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_const_validator($callable){ - $this->validation['constant'] = $callable; - return $this; - } - /** Get validation callable for constants - * - * @example $sandbox->get_const_validator(); //return callable - * - * @return callable|null - */ - public function get_const_validator(){ - return isset($this->validation['constant']) ? $this->validation['constant'] : null; - } - /** Unset validation callable for constants - * - * @example $sandbox->unset_const_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_const_validator(){ - $this->validation['constant'] = null; - return $this; - } - /** Set validation callable for magic constants - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized magic constant names are upper case and trimmed of __ - * - * @example $sandbox->set_magic_const_validator(function($magic_constant, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed magic constant name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_magic_const_validator($callable){ - $this->validation['magic_constant'] = $callable; - return $this; - } - /** Get validation callable for magic constants - * - * @example $sandbox->get_magic_const_validator(); //return callable - * - * @return callable|null - */ - public function get_magic_const_validator(){ - return isset($this->validation['magic_constant']) ? $this->validation['magic_constant'] : null; - } - /** Unset validation callable for magic constants - * - * @example $sandbox->unset_magic_const_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_magic_const_validator(){ - $this->validation['magic_constant'] = null; - return $this; - } - /** Set validation callable for namespaces - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_namespace_validator(function($namespace, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed namespace name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_namespace_validator($callable){ - $this->validation['namespace'] = $callable; - return $this; - } - /** Get validation callable for namespaces - * - * @example $sandbox->get_namespace_validator(); //return callable - * - * @return callable|null - */ - public function get_namespace_validator(){ - return isset($this->validation['namespace']) ? $this->validation['namespace'] : null; - } - /** Unset validation callable for namespaces - * - * @example $sandbox->unset_namespace_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_namespace_validator(){ - $this->validation['namespace'] = null; - return $this; - } - /** Set validation callable for aliases - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_alias_validator(function($alias, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed alias name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_alias_validator($callable){ - $this->validation['alias'] = $callable; - return $this; - } - /** Get validation callable for aliases - * - * @example $sandbox->get_alias_validator(); //return callable - * - * @return callable|null - */ - public function get_alias_validator(){ - return isset($this->validation['alias']) ? $this->validation['alias'] : null; - } - /** Unset validation callable for aliases - * - * @example $sandbox->unset_alias_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_alias_validator(){ - $this->validation['alias'] = null; - return $this; - } - /** Set validation callable for uses (aka aliases) - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @alias set_alias_validator(); - * - * @example $sandbox->set_use_validator(function($use, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed use (aka alias) name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_use_validator($callable){ - return $this->set_alias_validator($callable); - } - /** Get validation callable for uses (aka aliases) - * - * @alias get_alias_validator(); - * - * @example $sandbox->get_use_validator(); //return callable - * - * @return callable|null - */ - public function get_use_validator(){ - return $this->get_alias_validator(); - } - /** Unset validation callable for uses (aka aliases) - * - * @alias unset_alias_validator(); - * - * @example $sandbox->unset_use_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_use_validator(){ - return $this->unset_alias_validator(); - } - /** Set validation callable for classes - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized class names are lowercase - * - * @example $sandbox->set_class_validator(function($class, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed class name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_class_validator($callable){ - $this->validation['class'] = $callable; - return $this; - } - /** Get validation callable for classes - * - * @example $sandbox->get_class_validator(); //return callable - * - * @return callable|null - */ - public function get_class_validator(){ - return isset($this->validation['class']) ? $this->validation['class'] : null; - } - /** Unset validation callable for classes - * - * @example $sandbox->unset_class_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_class_validator(){ - $this->validation['class'] = null; - return $this; - } - /** Set validation callable for interfaces - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized interface names are lowercase - * - * @example $sandbox->set_interface_validator(function($interface, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed interface name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_interface_validator($callable){ - $this->validation['interface'] = $callable; - return $this; - } - /** Get validation callable for interfaces - * - * @example $sandbox->get_interface_validator(); //return callable - * - * @return callable|null - */ - public function get_interface_validator(){ - return isset($this->validation['interface']) ? $this->validation['interface'] : null; - } - /** Unset validation callable for interfaces - * - * @example $sandbox->unset_interface_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_interface_validator(){ - $this->validation['interface'] = null; - return $this; - } - /** Set validation callable for traits - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized trait names are lowercase - * - * @example $sandbox->set_trait_validator(function($trait, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed trait name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_trait_validator($callable){ - $this->validation['trait'] = $callable; - return $this; - } - /** Get validation callable for traits - * - * @example $sandbox->get_trait_validator(); //return callable - * - * @return callable|null - */ - public function get_trait_validator(){ - return isset($this->validation['trait']) ? $this->validation['trait'] : null; - } - /** Unset validation callable for traits - * - * @example $sandbox->unset_trait_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_trait_validator(){ - $this->validation['trait'] = null; - return $this; - } - /** Set validation callable for keywords - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_keyword_validator(function($keyword, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed keyword name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_keyword_validator($callable){ - $this->validation['keyword'] = $callable; - return $this; - } - /** Get validation callable for keywords - * - * @example $sandbox->get_keyword_validator(); //return callable - * - * @return callable|null - */ - public function get_keyword_validator(){ - return isset($this->validation['keyword']) ? $this->validation['keyword'] : null; - } - /** Unset validation callable for keywords - * - * @example $sandbox->unset_keyword_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_keyword_validator(){ - $this->validation['keyword'] = null; - return $this; - } - /** Set validation callable for operators - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_operator_validator(function($operator, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed operator name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_operator_validator($callable){ - $this->validation['operator'] = $callable; - return $this; - } - /** Get validation callable for operators - * - * @example $sandbox->get_operator_validator(); //return callable - * - * @return callable|null - */ - public function get_operator_validator(){ - return isset($this->validation['operator']) ? $this->validation['operator'] : null; - } - /** Unset validation callable for operators - * - * @example $sandbox->unset_operator_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_operator_validator(){ - $this->validation['operator'] = null; - return $this; - } - /** Set validation callable for primitives - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_primitive_validator(function($primitive, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed primitive name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_primitive_validator($callable){ - $this->validation['primitive'] = $callable; - return $this; - } - /** Get validation callable for primitives - * - * @example $sandbox->get_primitive_validator(); //return callable - * - * @return callable|null - */ - public function get_primitive_validator(){ - return isset($this->validation['primitive']) ? $this->validation['primitive'] : null; - } - /** Unset validation callable for primitives - * - * @example $sandbox->unset_primitive_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_primitive_validator(){ - $this->validation['primitive'] = null; - return $this; - } - /** Set validation callable for types - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_type_validator(function($type, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed type name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_type_validator($callable){ - $this->validation['type'] = $callable; - return $this; - } - /** Get validation callable for types - * - * @example $sandbox->get_type_validator(); //return callable - * - * @return callable|null - */ - public function get_type_validator(){ - return isset($this->validation['type']) ? $this->validation['type'] : null; - } - /** Unset validation callable for types - * - * @example $sandbox->unset_type_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_type_validator(){ - $this->validation['type'] = null; - return $this; - } - /** Set PHPSandbox prepended code - * - * @param string $prepended_code Sets a string of the prepended code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_prepended_code($prepended_code = ''){ - $this->prepended_code = $prepended_code; - return $this; - } - /** Set PHPSandbox appended code - * - * @param string $appended_code Sets a string of the appended code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_appended_code($appended_code = ''){ - $this->appended_code = $appended_code; - return $this; - } - /** Set PHPSandbox preparsed code - * - * @param string $preparsed_code Sets a string of the preparsed code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_preparsed_code($preparsed_code = ''){ - $this->preparsed_code = $preparsed_code; - return $this; - } - /** Set PHPSandbox parsed AST array - * - * @param array $parsed_ast Sets an array of the parsed AST code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_parsed_ast(array $parsed_ast = array()){ - $this->parsed_ast = $parsed_ast; - return $this; - } - /** Set PHPSandbox prepared code - * - * @param string $prepared_code Sets a string of the prepared code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_prepared_code($prepared_code = ''){ - $this->prepared_code = $prepared_code; - return $this; - } - /** Set PHPSandbox prepared AST array - * - * @param array $prepared_ast Sets an array of the prepared AST code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_prepared_ast(array $prepared_ast = array()){ - $this->prepared_ast = $prepared_ast; - return $this; - } - /** Set PHPSandbox generated code - * - * @param string $generated_code Sets a string of the generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_generated_code($generated_code = ''){ - $this->generated_code = $generated_code; - return $this; - } - /** Set PHPSandbox generated code - * - * @alias set_generated_code(); - * - * @param string $generated_code Sets a string of the generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_code($generated_code = ''){ - $this->generated_code = $generated_code; - return $this; - } - /** Get PHPSandbox prepended code - * @return string Returns a string of the prepended code - */ - public function get_prepended_code(){ - return $this->prepended_code; - } - /** Get PHPSandbox appended code - * @return string Returns a string of the appended code - */ - public function get_appended_code(){ - return $this->appended_code; - } - /** Get PHPSandbox preparsed code - * @return string Returns a string of the preparsed code - */ - public function get_preparsed_code(){ - return $this->preparsed_code; - } - /** Get PHPSandbox parsed AST array - * @return array Returns an array of the parsed AST code - */ - public function get_parsed_ast(){ - return $this->parsed_ast; - } - /** Get PHPSandbox prepared code - * @return string Returns a string of the prepared code - */ - public function get_prepared_code(){ - return $this->prepared_code; - } - /** Get PHPSandbox prepared AST array - * @return array Returns an array of the prepared AST code - */ - public function get_prepared_ast(){ - return $this->prepared_ast; - } - /** Get PHPSandbox generated code - * @return string Returns a string of the generated code - */ - public function get_generated_code(){ - return $this->generated_code; - } - /** Get PHPSandbox generated code - * @alias get_generated_code(); - * @return string Returns a string of the generated code - */ - public function get_code(){ - return $this->generated_code; - } - /** Get PHPSandbox redefined functions in place of get_defined_functions(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $functions Array result from get_defined_functions() is passed here - * - * @return array Returns the redefined functions array - */ - public function _get_defined_functions(array $functions = array()){ - if(count($this->whitelist['functions'])){ - $functions = array(); - foreach($this->whitelist['functions'] as $name => $value){ - if(isset($this->definitions['functions'][$name]) && is_callable($this->definitions['functions'][$name])){ - $functions[$name] = $name; - } else if(is_callable($name) && is_string($name)){ - $functions[$name] = $name; - } - } - foreach($this->definitions['functions'] as $name => $function){ - if(is_callable($function)){ - $functions[$name] = $name; - } - } - return array_values($functions); - } else if(count($this->blacklist['functions'])){ - foreach($functions as $index => $name){ - if(isset($this->blacklist['functions'][$name])){ - unset($functions[$index]); - } - } - reset($functions); - return $functions; - } - return array(); - } - /** Get PHPSandbox redefined variables in place of get_defined_vars(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $variables Array result from get_defined_vars() is passed here - * - * @return array Returns the redefined variables array - */ - public function _get_defined_vars(array $variables = array()){ - if(isset($variables[$this->name])){ - unset($variables[$this->name]); //hide PHPSandbox variable - } - return $variables; - } - /** Get PHPSandbox redefined superglobal. This is an internal PHPSandbox function but requires public access to work. - * - * @param string $name Requested superglobal name (e.g. _GET, _POST, etc.) - * - * @return array Returns the redefined superglobal - */ - public function _get_superglobal($name){ - $original_name = strtoupper($name); - $name = $this->normalize_superglobal($name); - if(isset($this->definitions['superglobals'][$name])){ - $superglobal = $this->definitions['superglobals'][$name]; - if(is_callable($superglobal)){ - return call_user_func_array($superglobal, array($this)); - } - return $superglobal; - } else if(isset($this->whitelist['superglobals'][$name])){ - if(count($this->whitelist['superglobals'][$name])){ - if(isset($GLOBALS[$original_name])){ - $whitelisted_superglobal = array(); - foreach($this->whitelist['superglobals'][$name] as $key => $value){ - if(isset($GLOBALS[$original_name][$key])){ - $whitelisted_superglobal[$key] = $GLOBALS[$original_name][$key]; - } - } - return $whitelisted_superglobal; - } - } else if(isset($GLOBALS[$original_name])) { - return $GLOBALS[$original_name]; - } - } else if(isset($this->blacklist['superglobals'][$name])){ - if(count($this->blacklist['superglobals'][$name])){ - if(isset($GLOBALS[$original_name])){ - $blacklisted_superglobal = $GLOBALS[$original_name]; - foreach($this->blacklist['superglobals'][$name] as $key => $value){ - if(isset($blacklisted_superglobal[$key])){ - unset($blacklisted_superglobal[$key]); - } - } - return $blacklisted_superglobal; - } - } - } - return array(); - } - /** Get PHPSandbox redefined magic constant. This is an internal PHPSandbox function but requires public access to work. - * - * @param string $name Requested magic constant name (e.g. __FILE__, __LINE__, etc.) - * - * @return array Returns the redefined magic constant - */ - public function _get_magic_const($name){ - $name = $this->normalize_magic_const($name); - if(isset($this->definitions['magic_constants'][$name])){ - $magic_constant = $this->definitions['magic_constants'][$name]; - if(is_callable($magic_constant)){ - return call_user_func_array($magic_constant, array($this)); - } - return $magic_constant; - } - return null; - } - /** Get PHPSandbox redefined constants in place of get_defined_constants(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $constants Array result from get_defined_constants() is passed here - * - * @return array Returns the redefined constants - */ - public function _get_defined_constants(array $constants = array()){ - if(count($this->whitelist['constants'])){ - $constants = array(); - foreach($this->whitelist['constants'] as $name => $value){ - if(defined($name)){ - $constants[$name] = $name; - } - } - foreach($this->definitions['constants'] as $name => $value){ - if(defined($name)){ //these shouldn't be undefined, but just in case they are we don't want to report inaccurate information - $constants[$name] = $name; - } - } - return array_values($constants); - } else if(count($this->blacklist['constants'])){ - foreach($constants as $index => $name){ - if(isset($this->blacklist['constants'][$name])){ - unset($constants[$index]); - } - } - reset($constants); - return $constants; - } - return array(); - } - /** Get PHPSandbox redefined classes in place of get_declared_classes(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $classes Array result from get_declared_classes() is passed here - * - * @return array Returns the redefined classes - */ - public function _get_declared_classes(array $classes = array()){ - if(count($this->whitelist['classes'])){ - $classes = array(); - foreach($this->whitelist['classes'] as $name => $value){ - if(class_exists($name)){ - $classes[strtolower($name)] = $name; - } - } - foreach($this->definitions['classes'] as $name => $value){ - if(class_exists($value)){ - $classes[strtolower($name)] = $value; - } - } - return array_values($classes); - } else if(count($this->blacklist['classes'])){ - $valid_classes = array(); - foreach($classes as $class){ - $valid_classes[$this->normalize_class($class)] = $class; - } - foreach($this->definitions['classes'] as $name => $value){ - if(class_exists($value)){ - $valid_classes[$this->normalize_class($name)] = $value; - } - } - foreach($valid_classes as $index => $name){ - if(isset($this->blacklist['classes'][$this->normalize_class($name)])){ - unset($valid_classes[$index]); - } - } - return array_values($classes); - } - $classes = array(); - foreach($this->definitions['classes'] as $value){ - if(class_exists($value)){ - $classes[strtolower($value)] = $value; - } - } - return array_values($classes); - } - /** Get PHPSandbox redefined interfaces in place of get_declared_interfaces(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $interfaces Array result from get_declared_interfaces() is passed here - * - * @return array Returns the redefined interfaces - */ - public function _get_declared_interfaces(array $interfaces = array()){ - if(count($this->whitelist['interfaces'])){ - $interfaces = array(); - foreach($this->whitelist['interfaces'] as $name => $value){ - if(interface_exists($name)){ - $interfaces[strtolower($name)] = $name; - } - } - foreach($this->definitions['interfaces'] as $name => $value){ - if(interface_exists($value)){ - $interfaces[strtolower($name)] = $value; - } - } - return array_values($interfaces); - } else if(count($this->blacklist['interfaces'])){ - $valid_interfaces = array(); - foreach($interfaces as $interface){ - $valid_interfaces[$this->normalize_interface($interface)] = $interface; - } - foreach($this->definitions['interfaces'] as $name => $value){ - if(interface_exists($value)){ - $valid_interfaces[$this->normalize_interface($name)] = $value; - } - } - foreach($valid_interfaces as $index => $name){ - if(isset($this->blacklist['interfaces'][$this->normalize_interface($name)])){ - unset($valid_interfaces[$index]); - } - } - return array_values($interfaces); - } - $interfaces = array(); - foreach($this->definitions['interfaces'] as $value){ - if(interface_exists($value)){ - $interfaces[strtolower($value)] = $value; - } - } - return array_values($interfaces); - } - /** Get PHPSandbox redefined traits in place of get_declared_traits(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $traits Array result from get_declared_traits() is passed here - * - * @return array Returns the redefined traits - */ - public function _get_declared_traits(array $traits = array()){ - if(count($this->whitelist['traits'])){ - $traits = array(); - foreach($this->whitelist['traits'] as $name => $value){ - if(trait_exists($name)){ - $traits[strtolower($name)] = $name; - } - } - foreach($this->definitions['traits'] as $name => $value){ - if(trait_exists($value)){ - $traits[strtolower($name)] = $value; - } - } - return array_values($traits); - } else if(count($this->blacklist['traits'])){ - $valid_traits = array(); - foreach($traits as $trait){ - $valid_traits[$this->normalize_trait($trait)] = $trait; - } - foreach($this->definitions['traits'] as $name => $value){ - if(trait_exists($value)){ - $valid_traits[$this->normalize_trait($name)] = $value; - } - } - foreach($valid_traits as $index => $name){ - if(isset($this->blacklist['traits'][$this->normalize_trait($name)])){ - unset($valid_traits[$index]); - } - } - return array_values($traits); - } - $traits = array(); - foreach($this->definitions['traits'] as $value){ - if(trait_exists($value)){ - $traits[strtolower($value)] = $value; - } - } - return array_values($traits); - } - /** Get PHPSandbox redefined function arguments array - * - * @param array $arguments Array result from func_get_args() is passed here - * - * @return array Returns the redefined arguments array - */ - public function _func_get_args(array $arguments = array()){ - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } - } - return $arguments; - } - /** Get PHPSandbox redefined function argument - * - * @param array $arguments Array result from func_get_args() is passed here - * - * @param int $index Requested func_get_arg index is passed here - * - * @return array Returns the redefined argument - */ - public function _func_get_arg(array $arguments = array(), $index = 0){ - if($arguments[$index] instanceof self){ - $index++; //get next argument instead - } - return isset($arguments[$index]) && !($arguments[$index] instanceof self) ? $arguments[$index] : null; - } - /** Get PHPSandbox redefined number of function arguments - * - * @param array $arguments Array result from func_get_args() is passed here - * - * @return int Returns the redefined number of function arguments - */ - public function _func_num_args(array $arguments = array()){ - $count = count($arguments); - foreach($arguments as $argument){ - if($argument instanceof self){ - $count--; - } - } - return $count > 0 ? $count : 0; - } - /** Wrap output value in SandboxString - * - * @param mixed $value Value to wrap - * - * @return mixed|SandboxedString Returns the wrapped value - */ - public function _wrap($value){ - if(is_object($value) && method_exists($value, '__toString')){ - return $this->_wrap(strval($value)); - } else if(is_string($value) && is_callable($value)){ - return new SandboxedString($value, $this); - } - return $value; - } - /** Get PHPSandbox redefined var_dump - * - * @return array Returns the redefined var_dump - */ - public function _var_dump(){ - $arguments = func_get_args(); - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } else if($value instanceof SandboxedString){ - $arguments[$index] = strval($value); - } - } - return call_user_func_array('var_dump', $arguments); - } - /** Get PHPSandbox redefined print_r - * - * @return array Returns the redefined print_r - */ - public function _print_r(){ - $arguments = func_get_args(); - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } else if($value instanceof SandboxedString){ - $arguments[$index] = strval($value); - } - } - return call_user_func_array('print_r', $arguments); - } - /** Get PHPSandbox redefined var_export - * - * @return array Returns the redefined var_export - */ - public function _var_export(){ - $arguments = func_get_args(); - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } else if($value instanceof SandboxedString){ - $arguments[$index] = strval($value); - } - } - return call_user_func_array('var_export', $arguments); - } - /** Return integer value of SandboxedString or mixed value - * - * @param mixed $value Value to return as integer - * - * @return int Returns the integer value - */ - public function _intval($value){ - return intval($value instanceof SandboxedString ? strval($value) : $value); - } - /** Return float value of SandboxedString or mixed value - * - * @param mixed $value Value to return as float - * - * @return float Returns the float value - */ - public function _floatval($value){ - return floatval($value instanceof SandboxedString ? strval($value) : $value); - } - /** Return boolean value of SandboxedString or mixed value - * - * @param mixed $value Value to return as boolean - * - * @return boolean Returns the boolean value - */ - public function _boolval($value){ - if($value instanceof SandboxedString){ - return (bool)strval($value); - } - return is_bool($value) ? $value : (bool)$value; - } - /** Return array value of SandboxedString or mixed value - * - * @param mixed $value Value to return as array - * - * @return array Returns the array value - */ - public function _arrayval($value){ - if($value instanceof SandboxedString){ - return (array)strval($value); - } - return is_array($value) ? $value : (array)$value; - } - /** Return object value of SandboxedString or mixed value - * - * @param mixed $value Value to return as object - * - * @return object Returns the object value - */ - public function _objectval($value){ - if($value instanceof SandboxedString){ - return (object)strval($value); - } - return is_object($value) ? $value : (object)$value; - } - /** Return is_string value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_string - * - * @return bool Returns the is_string value - */ - public function _is_string($value){ - return ($value instanceof SandboxedString) ? true : is_string($value); - } - /** Return is_object value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_object - * - * @return bool Returns the is_object value - */ - public function _is_object($value){ - return ($value instanceof SandboxedString) ? false : is_object($value); - } - /** Return is_scalar value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_scalar - * - * @return bool Returns the is_scalar value - */ - public function _is_scalar($value){ - return ($value instanceof SandboxedString) ? true : is_scalar($value); - } - /** Return is_callable value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_callable - * - * @return bool Returns the is_callable value - */ - public function _is_callable($value){ - if($value instanceof SandboxedString){ - $value = strval($value); - } - return is_callable($value); - } - /** Get PHPSandbox redefined function. This is an internal PHPSandbox function but requires public access to work. - * - * @throws Error Will throw exception if invalid function requested - * - * @return mixed Returns the redefined function result - */ - public function call_func(){ - $arguments = func_get_args(); - $name = array_shift($arguments); - $original_name = $name; - $name = $this->normalize_func($name); - if(isset($this->definitions['functions'][$name]) && is_callable($this->definitions['functions'][$name]['function'])){ - $function = $this->definitions['functions'][$name]['function']; - if($this->definitions['functions'][$name]['pass_sandbox']){ //pass the PHPSandbox instance to the defined function? - array_unshift($arguments, $this); //push PHPSandbox instance into first argument so user can test against it - } - return call_user_func_array($function, $arguments); - } - if(is_callable($name)){ - return call_user_func_array($name, $arguments); - } - return $this->validation_error("Sandboxed code attempted to call invalid function: $original_name", Error::VALID_FUNC_ERROR, null, $original_name); - } - /** Define PHPSandbox definitions, such as functions, constants, namespaces, etc. - * - * You can pass a string of the $type, $name and $value, or pass an associative array of definitions types and - * an associative array of their corresponding values - * - * @example $sandbox->define('functions', 'test', function(){ echo 'test'; }); - * - * @example $sandbox->define(array('functions' => array('test' => function(){ echo 'test'; })); - * - * @param string|array $type Associative array or string of definition type to define - * @param string|array|null $name Associative array or string of definition name to define - * @param mixed|null $value Value of definition to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define($type, $name = null, $value = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($_type) && $_type && is_array($name)){ - foreach($name as $_name => $_value){ - $this->define($_type, (is_int($_name) ? $_value : $_name), (is_int($_name) ? $value : $_value)); - } - } - } - } else if($type && is_array($name)){ - foreach($name as $_name => $_value){ - $this->define($type, (is_int($_name) ? $_value : $_name), (is_int($_name) ? $value : $_value)); - } - } else if($type && $name){ - switch($type){ - case 'functions': - return $this->define_func($name, $value); - case 'variables': - return $this->define_var($name, $value); - case 'superglobals': - return $this->define_superglobal($name, $value); - case 'constants': - return $this->define_const($name, $value); - case 'magic_constants': - return $this->define_magic_const($name, $value); - case 'namespaces': - return $this->define_namespace($name); - case 'aliases': - return $this->define_alias($name, $value); - case 'classes': - return $this->define_class($name, $value); - case 'interfaces': - return $this->define_interface($name, $value); - case 'traits': - return $this->define_trait($name, $value); - } - } - return $this; - } - /** Undefine PHPSandbox definitions, such as functions, constants, namespaces, etc. - * - * You can pass a string of the $type and $name to undefine, or pass an associative array of definitions types - * and an array of key names to undefine - * - * @example $sandbox->undefine('functions', 'test'); - * - * @example $sandbox->undefine(array('functions' => array('test')); - * - * @param string|array $type Associative array or string of definition type to undefine - * @param string|array $name Associative array or string of definition name to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine($type, $name = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($_type) && $_type && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->undefine($type, $name); - } - } - } - } - } else if(is_string($type) && $type && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->undefine($type, $name); - } - } - } else if($type && $name){ - switch($type){ - case 'functions': - return $this->undefine_func($name); - case 'variables': - return $this->undefine_var($name); - case 'superglobals': - return $this->undefine_superglobal($name); - case 'constants': - return $this->undefine_const($name); - case 'magic_constants': - return $this->undefine_magic_const($name); - case 'namespaces': - return $this->undefine_namespace($name); - case 'aliases': - return $this->undefine_alias($name); - case 'classes': - return $this->undefine_class($name); - case 'interfaces': - return $this->undefine_interface($name); - case 'traits': - return $this->undefine_trait($name); - } - } - return $this; - } - /** Define PHPSandbox function - * - * You can pass the function $name and $function closure or callable to define, or an associative array of - * functions to define, which can have callable values or arrays of the function callable and $pass_sandbox flag - * - * @example $sandbox->define_func('test', function(){ echo 'test'; }); - * - * @example $sandbox->define_func(array('test' => function(){ echo 'test'; })); - * - * @example $sandbox->define_func(array('test' => array(function(){ echo 'test'; }, true))); - * - * @param string|array $name Associative array or string of function $name to define - * @param callable $function Callable to define $function to - * @param bool $pass_sandbox Pass PHPSandbox instance to defined function when called? Default is false - * - * @throws Error Throws exception if unnamed or uncallable $function is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_func($name, $function, $pass_sandbox = false){ - if(is_array($name)){ - return $this->define_funcs($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed function!", Error::DEFINE_FUNC_ERROR, null, ''); - } - if(is_array($function) && count($function)){ //so you can pass array of function names and array of function and pass_sandbox flag - $pass_sandbox = isset($function[1]) ? $function[1] : false; - $function = $function[0]; - } - $original_name = $name; - $name = $this->normalize_func($name); - if(!is_callable($function)){ - $this->validation_error("Cannot define uncallable function : $original_name", Error::DEFINE_FUNC_ERROR, null, $original_name); - } - $this->definitions['functions'][$name] = array( - 'function' => $function, - 'pass_sandbox' => $pass_sandbox - ); - return $this; - } - /** Define PHPSandbox functions by array - * - * You can pass an associative array of functions to define - * - * @example $sandbox->define_funcs(array('test' => function(){ echo 'test'; })); - * - * @param array $functions Associative array of $functions to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_funcs(array $functions = array()){ - foreach($functions as $name => $function){ - $this->define_func($name, $function); - } - return $this; - } - /** Query whether PHPSandbox instance has defined functions - * - * @example $sandbox->has_defined_funcs(); //returns number of defined functions, or zero if none defined - * - * @return int Returns the number of functions this instance has defined - */ - public function has_defined_funcs(){ - return count($this->definitions['functions']); - } - /** Check if PHPSandbox instance has $name function defined - * - * @example $sandbox->is_defined_func('test'); - * - * @param string $name String of function $name to query - * - * @return bool Returns true if PHPSandbox instance has defined function, false otherwise - */ - public function is_defined_func($name){ - $name = $this->normalize_func($name); - return isset($this->definitions['functions'][$name]); - } - /** Undefine PHPSandbox function - * - * You can pass a string of function $name to undefine, or pass an array of function names to undefine - * - * @example $sandbox->undefine_func('test'); - * - * @example $sandbox->undefine_func(array('test', 'test2')); - * - * @param string|array $name String of function name or array of function names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_func($name){ - if(is_array($name)){ - return $this->undefine_funcs($name); - } - $name = $this->normalize_func($name); - if(isset($this->definitions['functions'][$name])){ - unset($this->definitions['functions'][$name]); - } - return $this; - } - /** Undefine PHPSandbox functions by array - * - * You can pass an array of function names to undefine, or an empty array or null argument to undefine all functions - * - * @example $sandbox->undefine_funcs(array('test', 'test2')); - * - * @example $sandbox->undefine_funcs(); //WILL UNDEFINE ALL FUNCTIONS! - * - * @param array $functions Array of function names to undefine. Passing an empty array or no argument will result in undefining all functions - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_funcs($functions = array()){ - if(count($functions)){ - foreach($functions as $function){ - $this->undefine_func($function); - } - } else { - $this->definitions['functions'] = array(); - } - return $this; - } - /** Define PHPSandbox variable - * - * You can pass the variable $name and $value to define, or an associative array of variables to define - * - * @example $sandbox->define_var('test', 1); - * - * @example $sandbox->define_var(array('test' => 1)); - * - * @param string|array $name String of variable $name or associative array to define - * @param mixed $value Value to define variable to - * - * @throws Error Throws exception if unnamed variable is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_var($name, $value){ - if(is_array($name)){ - return $this->define_vars($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed variable!", Error::DEFINE_VAR_ERROR, null, ''); - } - $this->definitions['variables'][$name] = $value; - return $this; - } - /** Define PHPSandbox variables by array - * - * You can pass an associative array of variables to define - * - * @example $sandbox->define_vars(array('test' => 1)); - * - * @param array $variables Associative array of $variables to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_vars(array $variables = array()){ - foreach($variables as $name => $value){ - $this->define_var($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined variables - * - * @example $sandbox->has_defined_vars(); //returns number of defined variables, or zero if none defined - * - * @return int Returns the number of variables this instance has defined - */ - public function has_defined_vars(){ - return count($this->definitions['variables']); - } - /** Check if PHPSandbox instance has $name variable defined - * - * @example $sandbox->is_defined_var('test'); - * - * @param string $name String of variable $name to query - * - * @return bool Returns true if PHPSandbox instance has defined variable, false otherwise - */ - public function is_defined_var($name){ - return isset($this->definitions['variables'][$name]); - } - /** Undefine PHPSandbox variable - * - * You can pass a string of variable $name to undefine, or an array of variable names to undefine - * - * @example $sandbox->undefine_var('test'); - * - * @example $sandbox->undefine_var(array('test', 'test2')); - * - * @param string|array $name String of variable name or an array of variable names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_var($name){ - if(is_array($name)){ - return $this->undefine_vars($name); - } - if(isset($this->definitions['variables'][$name])){ - unset($this->definitions['variables'][$name]); - } - return $this; - } - /** Undefine PHPSandbox variables by array - * - * You can pass an array of variable names to undefine, or an empty array or null argument to undefine all variables - * - * @example $sandbox->undefine_vars(array('test', 'test2')); - * - * @example $sandbox->undefine_vars(); //WILL UNDEFINE ALL VARIABLES! - * - * @param array $variables Array of variable names to undefine. Passing an empty array or no argument will result in undefining all variables - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_vars(array $variables = array()){ - if(count($variables)){ - foreach($variables as $variable){ - $this->undefine_var($variable); - } - } else { - $this->definitions['variables'] = array(); - } - return $this; - } - /** Define PHPSandbox superglobal - * - * You can pass the superglobal $name and $value to define, or an associative array of superglobals to define, or a third variable to define the $key - * - * @example $sandbox->define_superglobal('_GET', array('page' => 1)); - * - * @example $sandbox->define_superglobal(array('_GET' => array('page' => 1))); - * - * @example $sandbox->define_superglobal('_GET', 'page', 1); - * - * @param string|array $name String of superglobal $name or associative array of superglobal names to define - * @param mixed $value Value to define superglobal to, can be callable - * - * @throws Error Throws exception if unnamed superglobal is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_superglobal($name, $value){ - if(is_array($name)){ - return $this->define_superglobals($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed superglobal!", Error::DEFINE_SUPERGLOBAL_ERROR, null, ''); - } - $name = $this->normalize_superglobal($name); - if(func_num_args() > 2){ - $key = $value; - $value = func_get_arg(2); - $this->definitions['superglobals'][$name][$key] = $value; - } else { - $this->definitions['superglobals'][$name] = $value; - } - return $this; - } - /** Define PHPSandbox superglobals by array - * - * You can pass an associative array of superglobals to define - * - * @example $sandbox->define_superglobals(array('_GET' => array('page' => 1))); - * - * @param array $superglobals Associative array of $superglobals to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_superglobals(array $superglobals = array()){ - foreach($superglobals as $name => $value){ - $this->define_superglobal($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined superglobals, or if superglobal $name has defined keys - * - * @example $sandbox->has_defined_superglobals(); //returns number of defined superglobals, or zero if none defined - * - * @example $sandbox->has_defined_superglobals('_GET'); //returns number of defined superglobal _GET keys, or zero if none defined - * - * @param string|null $name String of superglobal $name to check for keys - * - * @return int|bool Returns the number of superglobals or superglobal keys this instance has defined, or false if invalid superglobal name specified - */ - public function has_defined_superglobals($name = null){ - $name = $name ? $this->normalize_superglobal($name) : null; - return $name ? (isset($this->definitions['superglobals'][$name]) ? count($this->definitions['superglobals'][$name]) : false) : count($this->definitions['superglobals']); - } - /** Check if PHPSandbox instance has $name superglobal defined, or if superglobal $name key is defined - * - * @example $sandbox->is_defined_superglobal('_GET'); - * - * @example $sandbox->is_defined_superglobal('_GET', 'page'); - * - * @param string $name String of superglobal $name to query - * @param string|null $key String of key to to query in superglobal - * - * @return bool Returns true if PHPSandbox instance has defined superglobal, false otherwise - */ - public function is_defined_superglobal($name, $key = null){ - $name = $this->normalize_superglobal($name); - return $key !== null ? isset($this->definitions['superglobals'][$name][$key]) : isset($this->definitions['superglobals'][$name]); - } - /** Undefine PHPSandbox superglobal or superglobal key - * - * You can pass a string of superglobal $name to undefine, or a superglobal $key to undefine, or an array of - * superglobal names to undefine, or an an associative array of superglobal names and keys to undefine - * - * @example $sandbox->undefine_superglobal('_GET'); - * - * @example $sandbox->undefine_superglobal('_GET', 'page'); - * - * @example $sandbox->undefine_superglobal(array('_GET', '_POST')); - * - * @param string|array $name String of superglobal $name, or array of superglobal names, or associative array of superglobal names and keys to undefine - * @param string|null $key String of superglobal $key to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_superglobal($name, $key = null){ - if(is_array($name)){ - return $this->undefine_superglobals($name); - } - $name = $this->normalize_superglobal($name); - if($key !== null && is_array($this->definitions['superglobals'][$name])){ - if(isset($this->definitions['superglobals'][$name][$key])){ - unset($this->definitions['superglobals'][$name][$key]); - } - } else if(isset($this->definitions['superglobals'][$name])){ - $this->definitions['superglobals'][$name] = array(); - } - return $this; - } - /** Undefine PHPSandbox superglobals by array - * - * You can pass an array of superglobal names to undefine, or an associative array of superglobals names and key - * to undefine, or an empty array or null to undefine all superglobals - * - * @example $sandbox->undefine_superglobals(array('_GET', '_POST')); - * - * @example $sandbox->undefine_superglobals(array('_GET' => 'page', '_POST' => 'page')); - * - * @example $sandbox->undefine_superglobals(); //WILL UNDEFINE ALL SUPERGLOBALS! - * - * @param array $superglobals Associative array of superglobal names and keys or array of superglobal names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_superglobals(array $superglobals = array()){ - if(count($superglobals)){ - foreach($superglobals as $superglobal => $name){ - $name = $this->normalize_superglobal($name); - $this->undefine_superglobal(is_int($superglobal) ? $name : $superglobal, is_int($superglobal) || !is_string($name) ? null : $name); - } - } else { - $this->definitions['superglobals'] = array(); - } - return $this; - } - /** Define PHPSandbox constant - * - * You can pass the constant $name and $value to define, or an associative array of constants to define - * - * @example $sandbox->define_const('TEST', 1); - * - * @example $sandbox->define_const(array('TEST' => 1)); - * - * @param string|array $name String of constant $name or associative array to define - * @param mixed $value Value to define constant to - * - * @throws Error Throws exception if unnamed constant is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_const($name, $value){ - if(is_array($name)){ - return $this->define_consts($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed constant!", Error::DEFINE_CONST_ERROR, null, ''); - } - $this->definitions['constants'][$name] = $value; - return $this; - } - /** Define PHPSandbox constants by array - * - * You can pass an associative array of constants to define - * - * @example $sandbox->define_consts(array('test' => 1)); - * - * @param array $constants Associative array of $constants to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_consts(array $constants = array()){ - foreach($constants as $name => $value){ - $this->define_const($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined constants - * - * @example $sandbox->has_defined_consts(); //returns number of defined constants, or zero if none defined - * - * @return int Returns the number of constants this instance has defined - */ - public function has_defined_consts(){ - return count($this->definitions['constants']); - } - /** Check if PHPSandbox instance has $name constant defined - * - * @example $sandbox->is_defined_const('test'); - * - * @param string $name String of constant $name to query - * - * @return bool Returns true if PHPSandbox instance has defined constant, false otherwise - */ - public function is_defined_const($name){ - return isset($this->definitions['constants'][$name]); - } - /** Undefine PHPSandbox constant - * - * You can pass a string of constant $name to undefine, or an array of constant names to undefine - * - * @example $sandbox->undefine_const('test'); - * - * @example $sandbox->undefine_const(array('test', 'test2')); - * - * @param string|array $name String of constant name or array of constant names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_const($name){ - if(is_array($name)){ - return $this->undefine_consts($name); - } - if(isset($this->definitions['constants'][$name])){ - unset($this->definitions['constants'][$name]); - } - return $this; - } - /** Undefine PHPSandbox constants by array - * - * You can pass an array of constant names to undefine, or an empty array or null argument to undefine all constants - * - * @example $sandbox->undefine_consts(array('test', 'test2')); - * - * @example $sandbox->undefine_consts(); //WILL UNDEFINE ALL CONSTANTS! - * - * @param array $constants Array of constant names to undefine. Passing an empty array or no argument will result in undefining all constants - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_consts(array $constants = array()){ - if(count($constants)){ - foreach($constants as $constant){ - $this->undefine_const($constant); - } - } else { - $this->definitions['constants'] = array(); - } - return $this; - } - /** Define PHPSandbox magic constant - * - * You can pass the magic constant $name and $value to define, or an associative array of magic constants to define - * - * @example $sandbox->define_magic_const('__LINE__', 1); - * - * @example $sandbox->define_magic_const(array('__LINE__' => 1)); - * - * @param string|array $name String of magic constant $name or associative array to define - * @param mixed $value Value to define magic constant to, can be callable - * - * @throws Error Throws exception if unnamed magic constant is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_magic_const($name, $value){ - if(is_array($name)){ - return $this->define_magic_consts($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed magic constant!", Error::DEFINE_MAGIC_CONST_ERROR, null, ''); - } - $name = $this->normalize_magic_const($name); - $this->definitions['magic_constants'][$name] = $value; - return $this; - } - /** Define PHPSandbox magic constants by array - * - * You can pass an associative array of magic constants to define - * - * @example $sandbox->define_magic_consts(array('__LINE__' => 1)); - * - * @param array $magic_constants Associative array of $magic_constants to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_magic_consts(array $magic_constants = array()){ - foreach($magic_constants as $name => $value){ - $this->define_magic_const($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined magic constants - * - * @example $sandbox->has_defined_magic_consts(); //returns number of defined magic constants, or zero if none defined - * - * @return int Returns the number of magic constants this instance has defined - */ - public function has_defined_magic_consts(){ - return count($this->definitions['magic_constants']); - } - /** Check if PHPSandbox instance has $name magic constant defined - * - * @example $sandbox->is_defined_magic_const('__LINE__'); - * - * @param string $name String of magic constant $name to query - * - * @return bool Returns true if PHPSandbox instance has defined magic constant, false otherwise - */ - public function is_defined_magic_const($name){ - $name = $this->normalize_magic_const($name); - return isset($this->definitions['magic_constants'][$name]); - } - /** Undefine PHPSandbox magic constant - * - * You can pass an a string of magic constant $name to undefine, or array of magic constant names to undefine - * - * @example $sandbox->undefine_magic_const('__LINE__'); - * - * @example $sandbox->undefine_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name, or array of magic constant names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_magic_const($name){ - if(is_array($name)){ - return $this->undefine_magic_consts($name); - } - $name = $this->normalize_magic_const($name); - if(isset($this->definitions['magic_constants'][$name])){ - unset($this->definitions['magic_constants'][$name]); - } - return $this; - } - /** Undefine PHPSandbox magic constants by array - * - * You can pass an array of magic constant names to undefine, or an empty array or null argument to undefine all magic constants - * - * @example $sandbox->undefine_magic_consts(array('__LINE__', '__FILE__')); - * - * @example $sandbox->undefine_magic_consts(); //WILL UNDEFINE ALL MAGIC CONSTANTS! - * - * @param array $magic_constants Array of magic constant names to undefine. Passing an empty array or no argument will result in undefining all magic constants - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_magic_consts(array $magic_constants = array()){ - if(count($magic_constants)){ - foreach($magic_constants as $magic_constant){ - $this->undefine_magic_const($magic_constant); - } - } else { - $this->definitions['magic_constants'] = array(); - } - return $this; - } - /** Define PHPSandbox namespace - * - * You can pass the namespace $name and $value to define, or an array of namespaces to define - * - * @example $sandbox->define_namespace('Foo'); - * - * @example $sandbox->define_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace $name, or an array of namespace names to define - * - * @throws Error Throws exception if unnamed namespace is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_namespace($name){ - if(is_array($name)){ - return $this->define_namespaces($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed namespace!", Error::DEFINE_NAMESPACE_ERROR, null, ''); - } - $normalized_name = $this->normalize_namespace($name); - $this->definitions['namespaces'][$normalized_name] = $name; - return $this; - } - /** Define PHPSandbox namespaces by array - * - * You can pass an array of namespaces to define - * - * @example $sandbox->define_namespaces(array('Foo', 'Bar')); - * - * @param array $namespaces Array of $namespaces to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_namespaces(array $namespaces = array()){ - foreach($namespaces as $name){ - $this->define_namespace($name); - } - return $this; - } - /** Query whether PHPSandbox instance has defined namespaces - * - * @example $sandbox->has_defined_namespaces(); //returns number of defined namespaces, or zero if none defined - * - * @return int Returns the number of namespaces this instance has defined - */ - public function has_defined_namespaces(){ - return count($this->definitions['namespaces']); - } - /** Check if PHPSandbox instance has $name namespace defined - * - * @example $sandbox->is_defined_namespace('Foo'); - * - * @param string $name String of namespace $name to query - * - * @return bool Returns true if PHPSandbox instance has defined namespace, false otherwise - */ - public function is_defined_namespace($name){ - $name = $this->normalize_namespace($name); - return isset($this->definitions['namespaces'][$name]); - } - /** Get defined namespace of $name - * - * @example $sandbox->get_defined_namespace('Test'); - * - * @param string $name String of namespace $name to get - * - * @throws Error Throws an exception if an invalid namespace name is requested - * - * @return string Returns string of defined namespace value - */ - public function get_defined_namespace($name){ - $name = $this->normalize_namespace($name); - if(!isset($this->definitions['namespaces'][$name])){ - $this->validation_error("Could not get undefined namespace: $name", Error::VALID_NAMESPACE_ERROR, null, $name); - } - return $this->definitions['namespaces'][$name]; - } - /** Undefine PHPSandbox namespace - * - * You can pass a string of namespace $name to undefine, or an array of namespace names to undefine - * - * @example $sandbox->undefine_namespace('Foo'); - * - * @example $sandbox->undefine_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace $name, or an array of namespace names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_namespace($name){ - if(is_array($name)){ - return $this->undefine_namespaces($name); - } - $name = $this->normalize_namespace($name); - if(isset($this->definitions['namespaces'][$name])){ - unset($this->definitions['namespaces'][$name]); - } - return $this; - } - /** Undefine PHPSandbox namespaces by array - * - * You can pass an array of namespace names to undefine, or an empty array or null argument to undefine all namespaces - * - * @example $sandbox->undefine_namespaces(array('Foo', 'Bar')); - * - * @example $sandbox->undefine_namespaces(); //WILL UNDEFINE ALL NAMESPACES! - * - * @param array $namespaces Array of namespace names to undefine. Passing an empty array or no argument will result in undefining all namespaces - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_namespaces(array $namespaces = array()){ - if(count($namespaces)){ - foreach($namespaces as $namespace){ - $this->undefine_namespace($namespace); - } - } else { - $this->definitions['namespaces'] = array(); - } - return $this; - } - /** Define PHPSandbox alias - * - * You can pass the namespace $name and $alias to use, an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_alias('Foo'); //use Foo; - * - * @example $sandbox->define_alias('Foo', 'Bar'); //use Foo as Bar; - * - * @example $sandbox->define_alias(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_alias(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param string|array $name String of namespace $name to use, or or an array of namespaces to use, or an associative array of namespaces and their aliases to use - * @param string|null $alias String of $alias to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_alias($name, $alias = null){ - if(is_array($name)){ - return $this->define_aliases($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed namespace alias!", Error::DEFINE_ALIAS_ERROR, null, ''); - } - $original_name = $name; - $name = $this->normalize_alias($name); - $this->definitions['aliases'][$name] = array('original' => $original_name, 'alias' => $alias); - return $this; - } - /** Define PHPSandbox aliases by array - * - * You can pass an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_aliases(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_aliases(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param array $aliases Array of namespaces to use, or an associative array of namespaces and their aliases to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_aliases(array $aliases = array()){ - foreach($aliases as $name => $alias){ - $this->define_alias($name, $alias); - } - return $this; - } - /** Query whether PHPSandbox instance has defined aliases - * - * @example $sandbox->has_defined_aliases(); //returns number of defined aliases, or zero if none defined - * - * @return int Returns the number of aliases this instance has defined - */ - public function has_defined_aliases(){ - return count($this->definitions['aliases']); - } - /** Check if PHPSandbox instance has $name alias defined - * - * @example $sandbox->is_defined_alias('Foo'); - * - * @param string $name String of alias $name to query - * - * @return bool Returns true if PHPSandbox instance has defined aliases, false otherwise - */ - public function is_defined_alias($name){ - $name = $this->normalize_alias($name); - return isset($this->definitions['aliases'][$name]); - } - /** Undefine PHPSandbox alias - * - * You can pass a string of alias $name to undefine, or an array of alias names to undefine - * - * @example $sandbox->undefine_alias('Foo'); - * - * @example $sandbox->undefine_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name, or array of alias names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_alias($name){ - if(is_array($name)){ - return $this->undefine_aliases($name); - } - $name = $this->normalize_alias($name); - if(isset($this->definitions['aliases'][$name])){ - unset($this->definitions['aliases'][$name]); - } - return $this; - } - /** Undefine PHPSandbox aliases by array - * - * You can pass an array of alias names to undefine, or an empty array or null argument to undefine all aliases - * - * @example $sandbox->undefine_aliases(array('Foo', 'Bar')); - * - * @example $sandbox->undefine_aliases(); //WILL UNDEFINE ALL ALIASES! - * - * @param array $aliases Array of alias names to undefine. Passing an empty array or no argument will result in undefining all aliases - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_aliases(array $aliases = array()){ - if(count($aliases)){ - foreach($aliases as $alias){ - $this->undefine_alias($alias); - } - } else { - $this->definitions['aliases'] = array(); - } - return $this; - } - /** Define PHPSandbox use (or alias) - * - * @alias define_alias(); - * - * You can pass the namespace $name and $alias to use, an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_use('Foo'); //use Foo; - * - * @example $sandbox->define_use('Foo', 'Bar'); //use Foo as Bar; - * - * @example $sandbox->define_use(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_use(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param string|array $name String of namespace $name to use, or or an array of namespaces to use, or an associative array of namespaces and their aliases to use - * @param string|null $alias String of $alias to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_use($name, $alias = null){ - return $this->define_alias($name, $alias); - } - /** Define PHPSandbox uses (or aliases) by array - * - * @alias define_aliases(); - * - * You can pass an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_uses(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_uses(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param array $uses Array of namespaces to use, or an associative array of namespaces and their aliases to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_uses(array $uses = array()){ - return $this->define_aliases($uses); - } - /** Query whether PHPSandbox instance has defined uses (or aliases) - * - * @alias has_defined_aliases(); - * - * @example $sandbox->has_defined_uses(); //returns number of defined uses (or aliases) or zero if none defined - * - * @return int Returns the number of uses (or aliases) this instance has defined - */ - public function has_defined_uses(){ - return $this->has_defined_aliases(); - } - /** Check if PHPSandbox instance has $name uses (or alias) defined - * - * @alias is_defined_alias(); - * - * @example $sandbox->is_defined_use('Foo'); - * - * @param string $name String of use (or alias) $name to query - * - * @return bool Returns true if PHPSandbox instance has defined uses (or aliases) and false otherwise - */ - public function is_defined_use($name){ - return $this->is_defined_alias($name); - } - /** Undefine PHPSandbox use (or alias) - * - * You can pass a string of use (or alias) $name to undefine, or an array of use (or alias) names to undefine - * - * @example $sandbox->undefine_use('Foo'); - * - * @example $sandbox->undefine_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name, or array of use (or alias) names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_use($name){ - return $this->undefine_alias($name); - } - /** Undefine PHPSandbox uses (or aliases) by array - * - * @alias undefine_aliases(); - * - * You can pass an array of use (or alias) names to undefine, or an empty array or null argument to undefine all uses (or aliases) - * - * @example $sandbox->undefine_uses(array('Foo', 'Bar')); - * - * @example $sandbox->undefine_uses(); //WILL UNDEFINE ALL USES (OR ALIASES!) - * - * @param array $uses Array of use (or alias) names to undefine. Passing an empty array or no argument will result in undefining all uses (or aliases) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_uses(array $uses = array()){ - return $this->undefine_aliases($uses); - } - /** Define PHPSandbox class - * - * You can pass the class $name and $value to define, or an associative array of classes to define - * - * @example $sandbox->define_class('Test', 'Test2'); - * - * @example $sandbox->define_class(array('Test' => 'Test2')); - * - * @param string|array $name String of class $name or associative array to define - * @param mixed $value Value to define class to - * - * @throws Error Throws exception if unnamed class is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_class($name, $value){ - if(is_array($name)){ - return $this->define_classes($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed class!", Error::DEFINE_CLASS_ERROR, null, ''); - } - $name = $this->normalize_class($name); - $this->definitions['classes'][$name] = $value; - return $this; - } - /** Define PHPSandbox classes by array - * - * You can pass an associative array of classes to define - * - * @example $sandbox->define_classes(array('Test' => 'Test2')); - * - * @param array $classes Associative array of $classes to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_classes(array $classes = array()){ - foreach($classes as $name => $value){ - $this->define_class($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined classes - * - * @example $sandbox->has_defined_classes(); //returns number of defined classes, or zero if none defined - * - * @return int Returns the number of classes this instance has defined - */ - public function has_defined_classes(){ - return count($this->definitions['classes']); - } - /** Check if PHPSandbox instance has $name class defined - * - * @example $sandbox->is_defined_class('Test'); - * - * @param string $name String of class $name to query - * - * @return bool Returns true if PHPSandbox instance has defined class, false otherwise - */ - public function is_defined_class($name){ - $name = $this->normalize_class($name); - return isset($this->definitions['classes'][$name]); - } - /** Get defined class of $name - * - * @example $sandbox->get_defined_class('Test'); - * - * @param string $name String of class $name to get - * - * @throws Error Throws an exception if an invalid class name is requested - * - * @return string Returns string of defined class value - */ - public function get_defined_class($name){ - $name = $this->normalize_class($name); - if(!isset($this->definitions['classes'][$name])){ - $this->validation_error("Could not get undefined class: $name", Error::VALID_CLASS_ERROR, null, $name); - } - return $this->definitions['classes'][$name]; - } - /** Undefine PHPSandbox class - * - * You can pass a string of class $name to undefine, or an array of class names to undefine - * - * @example $sandbox->undefine_class('Test'); - * - * @example $sandbox->undefine_class(array('Test', 'Test2')); - * - * @param string|array $name String of class name or an array of class names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_class($name){ - if(is_array($name)){ - return $this->undefine_classes($name); - } - $name = $this->normalize_class($name); - if(isset($this->definitions['classes'][$name])){ - unset($this->definitions['classes'][$name]); - } - return $this; - } - /** Undefine PHPSandbox classes by array - * - * You can pass an array of class names to undefine, or an empty array or null argument to undefine all classes - * - * @example $sandbox->undefine_classes(array('Test', 'Test2')); - * - * @example $sandbox->undefine_classes(); //WILL UNDEFINE ALL CLASSES! - * - * @param array $classes Array of class names to undefine. Passing an empty array or no argument will result in undefining all classes - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_classes(array $classes = array()){ - if(count($classes)){ - foreach($classes as $class){ - $this->undefine_class($class); - } - } else { - $this->definitions['classes'] = array(); - } - return $this; - } - /** Define PHPSandbox interface - * - * You can pass the interface $name and $value to define, or an associative array of interfaces to define - * - * @example $sandbox->define_interface('Test', 'Test2'); - * - * @example $sandbox->define_interface(array('Test' => 'Test2')); - * - * @param string|array $name String of interface $name or associative array to define - * @param mixed $value Value to define interface to - * - * @throws Error Throws exception if unnamed interface is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_interface($name, $value){ - if(is_array($name)){ - return $this->define_interfaces($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed interface!", Error::DEFINE_INTERFACE_ERROR, null, ''); - } - $name = $this->normalize_interface($name); - $this->definitions['interfaces'][$name] = $value; - return $this; - } - /** Define PHPSandbox interfaces by array - * - * You can pass an associative array of interfaces to define - * - * @example $sandbox->define_interfaces(array('Test' => 'Test2')); - * - * @param array $interfaces Associative array of $interfaces to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_interfaces(array $interfaces = array()){ - foreach($interfaces as $name => $value){ - $this->define_interface($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined interfaces - * - * @example $sandbox->has_defined_interfaces(); //returns number of defined interfaces, or zero if none defined - * - * @return int Returns the number of interfaces this instance has defined - */ - public function has_defined_interfaces(){ - return count($this->definitions['interfaces']); - } - /** Check if PHPSandbox instance has $name interface defined - * - * @example $sandbox->is_defined_interface('Test'); - * - * @param string $name String of interface $name to query - * - * @return bool Returns true if PHPSandbox instance has defined interface, false otherwise - */ - public function is_defined_interface($name){ - $name = $this->normalize_interface($name); - return isset($this->definitions['interfaces'][$name]); - } - /** Get defined interface of $name - * - * @example $sandbox->get_defined_interface('Test'); - * - * @param string $name String of interface $name to get - * - * @throws Error Throws an exception if an invalid interface name is requested - * - * @return string Returns string of defined interface value - */ - public function get_defined_interface($name){ - $name = $this->normalize_interface($name); - if(!isset($this->definitions['interfaces'][$name])){ - $this->validation_error("Could not get undefined interface: $name", Error::VALID_INTERFACE_ERROR, null, $name); - } - return $this->definitions['interfaces'][$name]; - } - /** Undefine PHPSandbox interface - * - * You can pass a string of interface $name to undefine, or an array of interface names to undefine - * - * @example $sandbox->undefine_interface('Test'); - * - * @example $sandbox->undefine_interface(array('Test', 'Test2')); - * - * @param string|array $name String of interface name or an array of interface names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_interface($name){ - if(is_array($name)){ - return $this->undefine_interfaces($name); - } - $name = $this->normalize_interface($name); - if(isset($this->definitions['interfaces'][$name])){ - unset($this->definitions['interfaces'][$name]); - } - return $this; - } - /** Undefine PHPSandbox interfaces by array - * - * You can pass an array of interface names to undefine, or an empty array or null argument to undefine all interfaces - * - * @example $sandbox->undefine_interfaces(array('Test', 'Test2')); - * - * @example $sandbox->undefine_interfaces(); //WILL UNDEFINE ALL INTERFACES! - * - * @param array $interfaces Array of interface names to undefine. Passing an empty array or no argument will result in undefining all interfaces - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_interfaces(array $interfaces = array()){ - if(count($interfaces)){ - foreach($interfaces as $interface){ - $this->undefine_interface($interface); - } - } else { - $this->definitions['interfaces'] = array(); - } - return $this; - } - /** Define PHPSandbox trait - * - * You can pass the trait $name and $value to define, or an associative array of traits to define - * - * @example $sandbox->define_trait('Test', 'Test2'); - * - * @example $sandbox->define_trait(array('Test' => 'Test2')); - * - * @param string|array $name String of trait $name or associative array to define - * @param mixed $value Value to define trait to - * - * @throws Error Throws exception if unnamed trait is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_trait($name, $value){ - if(is_array($name)){ - return $this->define_traits($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed trait!", Error::DEFINE_TRAIT_ERROR, null, ''); - } - $name = $this->normalize_trait($name); - $this->definitions['traits'][$name] = $value; - return $this; - } - /** Define PHPSandbox traits by array - * - * You can pass an associative array of traits to define - * - * @example $sandbox->define_traits(array('Test' => 'Test2')); - * - * @param array $traits Associative array of $traits to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_traits(array $traits = array()){ - foreach($traits as $name => $value){ - $this->define_trait($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined traits - * - * @example $sandbox->has_defined_traits(); //returns number of defined traits, or zero if none defined - * - * @return int Returns the number of traits this instance has defined - */ - public function has_defined_traits(){ - return count($this->definitions['traits']); - } - /** Check if PHPSandbox instance has $name trait defined - * - * @example $sandbox->is_defined_trait('Test'); - * - * @param string $name String of trait $name to query - * - * @return bool Returns true if PHPSandbox instance has defined trait, false otherwise - */ - public function is_defined_trait($name){ - $name = $this->normalize_trait($name); - return isset($this->definitions['traits'][$name]); - } - /** Get defined trait of $name - * - * @example $sandbox->get_defined_trait('Test'); - * - * @param string $name String of trait $name to get - * - * @throws Error Throws an exception if an invalid trait name is requested - * - * @return string Returns string of defined trait value - */ - public function get_defined_trait($name){ - $name = $this->normalize_trait($name); - if(!isset($this->definitions['traits'][$name])){ - $this->validation_error("Could not get undefined trait: $name", Error::VALID_TRAIT_ERROR, null, $name); - } - return $this->definitions['traits'][$name]; - } - /** Undefine PHPSandbox trait - * - * You can pass a string of trait $name to undefine, or an array of trait names to undefine - * - * @example $sandbox->undefine_trait('Test'); - * - * @example $sandbox->undefine_trait(array('Test', 'Test2')); - * - * @param string|array $name String of trait name or an array of trait names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_trait($name){ - if(is_array($name)){ - return $this->undefine_traits($name); - } - $name = $this->normalize_trait($name); - if(isset($this->definitions['traits'][$name])){ - unset($this->definitions['traits'][$name]); - } - return $this; - } - /** Undefine PHPSandbox traits by array - * - * You can pass an array of trait names to undefine, or an empty array or null argument to undefine all traits - * - * @example $sandbox->undefine_traits(array('Test', 'Test2')); - * - * @example $sandbox->undefine_traits(); //WILL UNDEFINE ALL TRAITS! - * - * @param array $traits Array of trait names to undefine. Passing an empty array or no argument will result in undefining all traits - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_traits(array $traits = array()){ - if(count($traits)){ - foreach($traits as $trait){ - $this->undefine_trait($trait); - } - } else { - $this->definitions['traits'] = array(); - } - return $this; - } - /** Normalize function name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the function $name, or array of strings to normalize - * - * @return string|array Returns the normalized function string or an array of normalized strings - */ - protected function normalize_func($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_func($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize superglobal name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the superglobal $name, or array of strings to normalize - * - * @return string|array Returns the normalized superglobal string or an array of normalized strings - */ - protected function normalize_superglobal($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_superglobal($value); - } - return $name; - } - return strtoupper(ltrim($name, '_')); - } - /** Normalize magic constant name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the magic constant $name, or array of strings to normalize - * - * @return string|array Returns the normalized magic constant string or an array of normalized strings - */ - protected function normalize_magic_const($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_magic_const($value); - } - return $name; - } - return strtoupper(trim($name, '_')); - } - /** Normalize namespace name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the namespace $name, or array of strings to normalize - * - * @return string|array Returns the normalized namespace string or an array of normalized strings - */ - protected function normalize_namespace($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_namespace($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize alias name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the alias $name, or array of strings to normalize - * - * @return string|array Returns the normalized alias string or an array of normalized strings - */ - protected function normalize_alias($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_alias($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize use (or alias) name. This is an internal PHPSandbox function. - * - * @alias normalize_alias(); - * - * @param string|array $name String of the use (or alias) $name, or array of strings to normalize - * - * @return string|array Returns the normalized use (or alias) string or an array of normalized strings - */ - protected function normalize_use($name){ - return $this->normalize_alias($name); - } - /** Normalize class name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the class $name to normalize - * - * @return string|array Returns the normalized class string or an array of normalized strings - */ - protected function normalize_class($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_class($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize interface name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the interface $name, or array of strings to normalize - * - * @return string|array Returns the normalized interface string or an array of normalized strings - */ - protected function normalize_interface($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_interface($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize trait name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the trait $name, or array of strings to normalize - * - * @return string|array Returns the normalized trait string or an array of normalized strings - */ - protected function normalize_trait($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_trait($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize keyword name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the keyword $name, or array of strings to normalize - * - * @return string|array Returns the normalized keyword string or an array of normalized strings - */ - protected function normalize_keyword($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_keyword($value); - } - return $name; - } - $name = strtolower($name); - switch($name){ - case 'die': - return 'exit'; - case 'include_once': - case 'require': - case 'require_once': - return 'include'; - case 'label': //not a real keyword, only for defining purposes, can't use labels without goto - return 'goto'; - case 'print': //for our purposes print is treated as functionally equivalent to echo - return 'echo'; - case 'else': //no point in using ifs without else - case 'elseif': //no point in using ifs without elseif - return 'if'; - case 'case': - return 'switch'; - case 'catch': //no point in using catch without try - case 'finally': //no point in using try, catch or finally without try - return 'try'; - case 'do': //no point in using do without while - return 'while'; - case 'foreach': //no point in using foreach without for - return 'for'; - case '__halt_compiler': - return 'halt'; - case 'alias': //for consistency with alias and use descriptions - return 'use'; - } - return $name; - } - /** Normalize operator name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the operator $name, or array of strings to normalize - * - * @return string|array Returns the normalized operator string or an array of normalized strings - */ - protected function normalize_operator($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_operator($value); - } - return $name; - } - $name = strtolower($name); - if(strpos($name, '++') !== false){ - $name = (strpos($name, '++') === 0) ? '++n' : 'n++'; - } else if(strpos($name, '--') !== false){ - $name = (strpos($name, '--') === 0) ? '--n' : 'n--'; - } else if(strpos($name, '+') !== false && strlen($name) > 1){ - $name = '+n'; - } else if(strpos($name, '-') !== false && strlen($name) > 1){ - $name = '-n'; - } - return $name; - } - /** Normalize primitive name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the primitive $name, or array of strings to normalize - * - * @return string|array Returns the normalized primitive string or an array of normalized strings - */ - protected function normalize_primitive($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_primitive($value); - } - return $name; - } - $name = strtolower($name); - if($name == 'double'){ - $name = 'float'; - } else if($name == 'integer'){ - $name = 'int'; - } - return $name; - } - /** Normalize type name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the type $name, or array of strings to normalize - * - * @return string|array Returns the normalized type string or an array of normalized strings - */ - protected function normalize_type($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_type($value); - } - return $name; - } - return strtolower($name); - } - /** Whitelist PHPSandbox definitions, such as functions, constants, classes, etc. to set - * - * You can pass an associative array of whitelist types and their names, or a string $type and array of $names, or pass a string of the $type and $name - * - * @example $sandbox->whitelist(array('functions' => array('test'))); - * - * @example $sandbox->whitelist('functions', array('test')); - * - * @example $sandbox->whitelist('functions', 'test'); - * - * @param string|array $type Associative array or string of whitelist type to set - * @param string|array|null $name Array or string of whitelist name to set - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist($type, $name = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($name) && $name && isset($this->whitelist[$_type])){ - $this->whitelist[$_type][$name] = true; - } else if(isset($this->whitelist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->whitelist[$_type][$_name] = true; - } - } - } - } - } else if(isset($this->whitelist[$type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->whitelist[$type][$_name] = true; - } - } - } else if(is_string($name) && $name && isset($this->whitelist[$type])){ - $this->whitelist[$type][$name] = true; - } - return $this; - } - /** Blacklist PHPSandbox definitions, such as functions, constants, classes, etc. to set - * - * You can pass an associative array of blacklist types and their names, or a string $type and array of $names, or pass a string of the $type and $name - * - * @example $sandbox->blacklist(array('functions' => array('test'))); - * - * @example $sandbox->blacklist('functions', array('test')); - * - * @example $sandbox->blacklist('functions', 'test'); - * - * @param string|array $type Associative array or string of blacklist type to set - * @param string|array|null $name Array or string of blacklist name to set - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist($type, $name = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($name) && $name && isset($this->blacklist[$_type])){ - $this->blacklist[$_type][$name] = true; - } else if(isset($this->blacklist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->blacklist[$_type][$_name] = true; - } - } - } - } - } else if(isset($this->blacklist[$type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->blacklist[$type][$_name] = true; - } - } - } else if(is_string($name) && $name && isset($this->blacklist[$type])){ - $this->blacklist[$type][$name] = true; - } - return $this; - } - /** Remove PHPSandbox definitions, such as functions, constants, classes, etc. from whitelist - * - * You can pass an associative array of whitelist types and their names, or a string $type and array of $names, or pass a string of the $type and $name to unset - * - * @example $sandbox->dewhitelist(array('functions' => array('test'))); - * - * @example $sandbox->dewhitelist('functions', array('test')); - * - * @example $sandbox->dewhitelist('functions', 'test'); - * - * @param string|array $type Associative array or string of whitelist type to unset - * @param string|array|null $name Array or string of whitelist name to unset - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist($type, $name){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(isset($this->whitelist[$_type]) && is_string($name) && $name && isset($this->whitelist[$_type][$name])){ - unset($this->whitelist[$_type][$name]); - } else if(isset($this->whitelist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name && isset($this->whitelist[$_type][$_name])){ - unset($this->whitelist[$_type][$_name]); - } - } - } - } - } else if(isset($this->whitelist[$type]) && is_string($name) && $name && isset($this->whitelist[$type][$name])){ - unset($this->whitelist[$type][$name]); - } - return $this; - } - /** Remove PHPSandbox definitions, such as functions, constants, classes, etc. from blacklist - * - * You can pass an associative array of blacklist types and their names, or a string $type and array of $names, or pass a string of the $type and $name to unset - * - * @example $sandbox->deblacklist(array('functions' => array('test'))); - * - * @example $sandbox->deblacklist('functions', array('test')); - * - * @example $sandbox->deblacklist('functions', 'test'); - * - * @param string|array $type Associative array or string of blacklist type to unset - * @param string|array|null $name Array or string of blacklist name to unset - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist($type, $name){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(isset($this->blacklist[$_type]) && is_string($name) && $name && isset($this->blacklist[$_type][$name])){ - unset($this->blacklist[$_type][$name]); - } else if(isset($this->blacklist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name && isset($this->blacklist[$_type][$_name])){ - unset($this->blacklist[$_type][$_name]); - } - } - } - } - } else if(isset($this->blacklist[$type]) && is_string($name) && $name && isset($this->blacklist[$type][$name])){ - unset($this->blacklist[$type][$name]); - } - return $this; - } - /** Query whether PHPSandbox instance has whitelist type - * - * @example $sandbox->has_whitelist('functions'); //returns number of whitelisted functions, or zero if none whitelisted - * - * @param string $type The whitelist type to query - * - * @return int Returns the number of whitelists this instance has defined - */ - public function has_whitelist($type){ - return count($this->whitelist[$type]); - } - /** Query whether PHPSandbox instance has blacklist type. - * - * @example $sandbox->has_blacklist('functions'); //returns number of blacklisted functions, or zero if none blacklisted - * - * @param string $type The blacklist type to query - * - * @return int Returns the number of blacklists this instance has defined - */ - public function has_blacklist($type){ - return count($this->blacklist[$type]); - } - /** Check if PHPSandbox instance has whitelist type and name set - * - * @example $sandbox->is_whitelisted('functions', 'test'); - * - * @param string $type String of whitelist $type to query - * @param string $name String of whitelist $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted $type and $name, false otherwise - */ - public function is_whitelisted($type, $name){ - return isset($this->whitelist[$type][$name]); - } - /** Check if PHPSandbox instance has blacklist type and name set - * - * @example $sandbox->is_blacklisted('functions', 'test'); - * - * @param string $type String of blacklist $type to query - * @param string $name String of blacklist $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted $type and $name, false otherwise - */ - public function is_blacklisted($type, $name){ - return isset($this->blacklist[$type][$name]); - } - /** Query whether PHPSandbox instance has whitelisted functions. - * - * @example $sandbox->has_whitelist_funcs(); //returns number of whitelisted functions, or zero if none whitelisted - * - * @return int Returns the number of whitelisted functions this instance has defined - */ - public function has_whitelist_funcs(){ - return count($this->whitelist['functions']); - } - /** Query whether PHPSandbox instance has blacklisted functions. - * - * @example $sandbox->has_blacklist_funcs(); //returns number of blacklisted functions, or zero if none blacklisted - * - * @return int Returns the number of blacklisted functions this instance has defined - */ - public function has_blacklist_funcs(){ - return count($this->blacklist['functions']); - } - /** Check if PHPSandbox instance has whitelisted function name set - * - * @example $sandbox->is_whitelisted_func('test'); - * - * @param string $name String of function $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted function $name, false otherwise - */ - public function is_whitelisted_func($name){ - $name = $this->normalize_func($name); - return isset($this->whitelist['functions'][$name]); - } - /** Check if PHPSandbox instance has blacklisted function name set - * - * @example $sandbox->is_blacklisted_func('test'); - * - * @param string $name String of function $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted function $name, false otherwise - */ - public function is_blacklisted_func($name){ - $name = $this->normalize_func($name); - return isset($this->blacklist['functions'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted variables. - * - * @example $sandbox->has_whitelist_vars(); //returns number of whitelisted variables, or zero if none whitelisted - * - * @return int Returns the number of whitelisted variables this instance has defined - */ - public function has_whitelist_vars(){ - return count($this->whitelist['variables']); - } - /** Query whether PHPSandbox instance has blacklisted variables. - * - * @example $sandbox->has_blacklist_vars(); //returns number of blacklisted variables, or zero if none blacklisted - * - * @return int Returns the number of blacklisted variables this instance has defined - */ - public function has_blacklist_vars(){ - return count($this->blacklist['variables']); - } - /** Check if PHPSandbox instance has whitelisted variable name set - * - * @example $sandbox->is_whitelisted_var('test'); - * - * @param string $name String of variable $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted variable $name, false otherwise - */ - public function is_whitelisted_var($name){ - return isset($this->whitelist['variables'][$name]); - } - /** Check if PHPSandbox instance has blacklisted variable name set - * - * @example $sandbox->is_blacklisted_var('test'); - * - * @param string $name String of variable $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted variable $name, false otherwise - */ - public function is_blacklisted_var($name){ - return isset($this->blacklist['variables'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted globals. - * - * @example $sandbox->has_whitelist_globals(); //returns number of whitelisted globals, or zero if none whitelisted - * - * @return int Returns the number of whitelisted globals this instance has defined - */ - public function has_whitelist_globals(){ - return count($this->whitelist['globals']); - } - /** Query whether PHPSandbox instance has blacklisted globals. - * - * @example $sandbox->has_blacklist_globals(); //returns number of blacklisted globals, or zero if none blacklisted - * - * @return int Returns the number of blacklisted globals this instance has defined - */ - public function has_blacklist_globals(){ - return count($this->blacklist['globals']); - } - /** Check if PHPSandbox instance has whitelisted global name set - * - * @example $sandbox->is_whitelisted_global('test'); - * - * @param string $name String of global $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted global $name, false otherwise - */ - public function is_whitelisted_global($name){ - return isset($this->whitelist['globals'][$name]); - } - /** Check if PHPSandbox instance has blacklisted global name set - * - * @example $sandbox->is_blacklisted_global('test'); - * - * @param string $name String of global $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted global $name, false otherwise - */ - public function is_blacklisted_global($name){ - return isset($this->blacklist['globals'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted superglobals, or superglobal keys - * - * @example $sandbox->has_whitelist_superglobals(); //returns number of whitelisted superglobals, or zero if none whitelisted - * - * @example $sandbox->has_whitelist_superglobals('_GET'); //returns number of whitelisted superglobal keys, or zero if none whitelisted - * - * @param string $name The whitelist superglobal key to query - * - * @return int Returns the number of whitelisted superglobals or superglobal keys this instance has defined - */ - public function has_whitelist_superglobals($name = null){ - $name = $this->normalize_superglobal($name); - return $name !== null ? (isset($this->whitelist['superglobals'][$name]) ? count($this->whitelist['superglobals'][$name]) : 0) : count($this->whitelist['superglobals']); - } - /** Query whether PHPSandbox instance has blacklisted superglobals, or superglobal keys - * - * @example $sandbox->has_blacklist_superglobals(); //returns number of blacklisted superglobals, or zero if none blacklisted - * - * @example $sandbox->has_blacklist_superglobals('_GET'); //returns number of blacklisted superglobal keys, or zero if none blacklisted - * - * @param string $name The blacklist superglobal key to query - * - * @return int Returns the number of blacklisted superglobals or superglobal keys this instance has defined - */ - public function has_blacklist_superglobals($name = null){ - $name = $this->normalize_superglobal($name); - return $name !== null ? (isset($this->blacklist['superglobals'][$name]) ? count($this->blacklist['superglobals'][$name]) : 0) : count($this->blacklist['superglobals']); - } - /** Check if PHPSandbox instance has whitelisted superglobal or superglobal key set - * - * @example $sandbox->is_whitelisted_superglobal('_GET'); - * - * @example $sandbox->is_whitelisted_superglobal('_GET', 'page'); - * - * @param string $name String of whitelisted superglobal $name to query - * @param string $key String of whitelisted superglobal $key to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted superglobal key or superglobal, false otherwise - */ - public function is_whitelisted_superglobal($name, $key = null){ - $name = $this->normalize_superglobal($name); - return $key !== null ? isset($this->whitelist['superglobals'][$name][$key]) : isset($this->whitelist['superglobals'][$name]); - } - /** Check if PHPSandbox instance has blacklisted superglobal or superglobal key set - * - * @example $sandbox->is_blacklisted_superglobal('_GET'); - * - * @example $sandbox->is_blacklisted_superglobal('_GET', 'page'); - * - * @param string $name String of blacklisted superglobal $name to query - * @param string $key String of blacklisted superglobal $key to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted superglobal key or superglobal, false otherwise - */ - public function is_blacklisted_superglobal($name, $key = null){ - $name = $this->normalize_superglobal($name); - return $key !== null ? isset($this->blacklist['superglobals'][$name][$key]) : isset($this->blacklist['superglobals'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted constants. - * - * @example $sandbox->has_whitelist_consts(); //returns number of whitelisted constants, or zero if none whitelisted - * - * @return int Returns the number of whitelisted constants this instance has defined - */ - public function has_whitelist_consts(){ - return count($this->whitelist['constants']); - } - /** Query whether PHPSandbox instance has blacklisted constants. - * - * @example $sandbox->has_blacklist_consts(); //returns number of blacklisted constants, or zero if none blacklisted - * - * @return int Returns the number of blacklisted constants this instance has defined - */ - public function has_blacklist_consts(){ - return count($this->blacklist['constants']); - } - /** Check if PHPSandbox instance has whitelisted constant name set - * - * @example $sandbox->is_whitelisted_const('TEST'); - * - * @param string $name String of constant $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted constant $name, false otherwise - */ - public function is_whitelisted_const($name){ - return isset($this->whitelist['constants'][$name]); - } - /** Check if PHPSandbox instance has blacklisted constant name set - * - * @example $sandbox->is_blacklisted_const('TEST'); - * - * @param string $name String of constant $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted constant $name, false otherwise - */ - public function is_blacklisted_const($name){ - return isset($this->blacklist['constants'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted magic constants. - * - * @example $sandbox->has_whitelist_magic_consts(); //returns number of whitelisted magic constants, or zero if none whitelisted - * - * @return int Returns the number of whitelisted magic constants this instance has defined - */ - public function has_whitelist_magic_consts(){ - return count($this->whitelist['magic_constants']); - } - /** Query whether PHPSandbox instance has blacklisted magic constants. - * - * @example $sandbox->has_blacklist_magic_consts(); //returns number of blacklisted magic constants, or zero if none blacklisted - * - * @return int Returns the number of blacklisted magic constants this instance has defined - */ - public function has_blacklist_magic_consts(){ - return count($this->blacklist['magic_constants']); - } - /** Check if PHPSandbox instance has whitelisted magic constant name set - * - * @example $sandbox->is_whitelisted_magic_const('__LINE__'); - * - * @param string $name String of magic constant $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted magic constant $name, false otherwise - */ - public function is_whitelisted_magic_const($name){ - $name = $this->normalize_magic_const($name); - return isset($this->whitelist['magic_constants'][$name]); - } - /** Check if PHPSandbox instance has blacklisted magic constant name set - * - * @example $sandbox->is_blacklisted_magic_const('__LINE__'); - * - * @param string $name String of magic constant $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted magic constant $name, false otherwise - */ - public function is_blacklisted_magic_const($name){ - $name = $this->normalize_magic_const($name); - return isset($this->blacklist['magic_constants'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted namespaces. - * - * @example $sandbox->has_whitelist_namespaces(); //returns number of whitelisted namespaces, or zero if none whitelisted - * - * @return int Returns the number of whitelisted namespaces this instance has defined - */ - public function has_whitelist_namespaces(){ - return count($this->whitelist['namespaces']); - } - /** Query whether PHPSandbox instance has blacklisted namespaces. - * - * @example $sandbox->has_blacklist_namespaces(); //returns number of blacklisted namespaces, or zero if none blacklisted - * - * @return int Returns the number of blacklisted namespaces this instance has defined - */ - public function has_blacklist_namespaces(){ - return count($this->blacklist['namespaces']); - } - /** Check if PHPSandbox instance has whitelisted namespace name set - * - * @example $sandbox->is_whitelisted_namespace('Test'); - * - * @param string $name String of namespace $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted namespace $name, false otherwise - */ - public function is_whitelisted_namespace($name){ - $name = $this->normalize_namespace($name); - return isset($this->whitelist['namespaces'][$name]); - } - /** Check if PHPSandbox instance has blacklisted namespace name set - * - * @example $sandbox->is_blacklisted_namespace('Test'); - * - * @param string $name String of namespace $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted namespace $name, false otherwise - */ - public function is_blacklisted_namespace($name){ - $name = $this->normalize_namespace($name); - return isset($this->blacklist['namespaces'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted aliases. - * - * @example $sandbox->has_whitelist_aliases(); //returns number of whitelisted aliases, or zero if none whitelisted - * - * @return int Returns the number of whitelisted aliases this instance has defined - */ - public function has_whitelist_aliases(){ - return count($this->whitelist['aliases']); - } - /** Query whether PHPSandbox instance has blacklisted aliases. - * - * @example $sandbox->has_blacklist_aliases(); //returns number of blacklisted aliases, or zero if none blacklisted - * - * @return int Returns the number of blacklisted aliases this instance has defined - */ - public function has_blacklist_aliases(){ - return count($this->blacklist['aliases']); - } - /** Check if PHPSandbox instance has whitelisted alias name set - * - * @example $sandbox->is_whitelisted_alias('Test'); - * - * @param string $name String of alias $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted alias $name, false otherwise - */ - public function is_whitelisted_alias($name){ - $name = $this->normalize_alias($name); - return isset($this->whitelist['aliases'][$name]); - } - /** Check if PHPSandbox instance has blacklisted alias name set - * - * @example $sandbox->is_blacklisted_alias('Test'); - * - * @param string $name String of alias $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted alias $name, false otherwise - */ - public function is_blacklisted_alias($name){ - $name = $this->normalize_alias($name); - return isset($this->blacklist['aliases'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted uses (or aliases.) - * - * @alias has_whitelist_aliases(); - * - * @example $sandbox->has_whitelist_uses(); //returns number of whitelisted uses (or aliases) or zero if none whitelisted - * - * @return int Returns the number of whitelisted uses (or aliases) this instance has defined - */ - public function has_whitelist_uses(){ - return $this->has_whitelist_aliases(); - } - /** Query whether PHPSandbox instance has blacklisted uses (or aliases.) - * - * @alias has_blacklist_aliases(); - * - * @example $sandbox->has_blacklist_uses(); //returns number of blacklisted uses (or aliases) or zero if none blacklisted - * - * @return int Returns the number of blacklisted uses (or aliases) this instance has defined - */ - public function has_blacklist_uses(){ - return $this->has_blacklist_aliases(); - } - /** Check if PHPSandbox instance has whitelisted use (or alias) name set - * - * @alias is_whitelisted_alias(); - * - * @example $sandbox->is_whitelisted_use('Test'); - * - * @param string $name String of use (or alias) $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted use (or alias) $name, false otherwise - */ - public function is_whitelisted_use($name){ - return $this->is_whitelisted_alias($name); - } - /** Check if PHPSandbox instance has blacklisted use (or alias) name set - * - * @alias is_blacklisted_alias(); - * - * @example $sandbox->is_blacklisted_use('Test'); - * - * @param string $name String of use (or alias) $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted use (or alias) $name, false otherwise - */ - public function is_blacklisted_use($name){ - return $this->is_blacklisted_alias($name); - } - /** Query whether PHPSandbox instance has whitelisted classes. - * - * @example $sandbox->has_whitelist_classes(); //returns number of whitelisted classes, or zero if none whitelisted - * - * @return int Returns the number of whitelisted classes this instance has defined - */ - public function has_whitelist_classes(){ - return count($this->whitelist['classes']); - } - /** Query whether PHPSandbox instance has blacklisted classes. - * - * @example $sandbox->has_blacklist_classes(); //returns number of blacklisted classes, or zero if none blacklisted - * - * @return int Returns the number of blacklisted classes this instance has defined - */ - public function has_blacklist_classes(){ - return count($this->blacklist['classes']); - } - /** Check if PHPSandbox instance has whitelisted class name set - * - * @example $sandbox->is_whitelisted_class('Test'); - * - * @param string $name String of class $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted class $name, false otherwise - */ - public function is_whitelisted_class($name){ - $name = $this->normalize_class($name); - return isset($this->whitelist['classes'][$name]); - } - /** Check if PHPSandbox instance has blacklisted class name set - * - * @example $sandbox->is_blacklisted_class('Test'); - * - * @param string $name String of class $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted class $name, false otherwise - */ - public function is_blacklisted_class($name){ - $name = $this->normalize_class($name); - return isset($this->blacklist['classes'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted interfaces. - * - * @example $sandbox->has_whitelist_interfaces(); //returns number of whitelisted interfaces, or zero if none whitelisted - * - * @return int Returns the number of whitelisted interfaces this instance has defined - */ - public function has_whitelist_interfaces(){ - return count($this->whitelist['interfaces']); - } - /** Query whether PHPSandbox instance has blacklisted interfaces. - * - * @example $sandbox->has_blacklist_interfaces(); //returns number of blacklisted interfaces, or zero if none blacklisted - * - * @return int Returns the number of blacklisted interfaces this instance has defined - */ - public function has_blacklist_interfaces(){ - return count($this->blacklist['interfaces']); - } - /** Check if PHPSandbox instance has whitelisted interface name set - * - * @example $sandbox->is_whitelisted_interface('Test'); - * - * @param string $name String of interface $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted interface $name, false otherwise - */ - public function is_whitelisted_interface($name){ - $name = $this->normalize_interface($name); - return isset($this->whitelist['interfaces'][$name]); - } - /** Check if PHPSandbox instance has blacklisted interface name set - * - * @example $sandbox->is_blacklisted_interface('Test'); - * - * @param string $name String of interface $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted interface $name, false otherwise - */ - public function is_blacklisted_interface($name){ - $name = $this->normalize_interface($name); - return isset($this->blacklist['interfaces'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted traits. - * - * @example $sandbox->has_whitelist_traits(); //returns number of whitelisted traits, or zero if none whitelisted - * - * @return int Returns the number of whitelisted traits this instance has defined - */ - public function has_whitelist_traits(){ - return count($this->whitelist['traits']); - } - /** Query whether PHPSandbox instance has blacklisted traits. - * - * @example $sandbox->has_blacklist_traits(); //returns number of blacklisted traits, or zero if none blacklisted - * - * @return int Returns the number of blacklisted traits this instance has defined - */ - public function has_blacklist_traits(){ - return count($this->blacklist['traits']); - } - /** Check if PHPSandbox instance has whitelisted trait name set - * - * @example $sandbox->is_whitelisted_trait('Test'); - * - * @param string $name String of trait $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted trait $name, false otherwise - */ - public function is_whitelisted_trait($name){ - $name = $this->normalize_trait($name); - return isset($this->whitelist['traits'][$name]); - } - /** Check if PHPSandbox instance has blacklisted trait name set - * - * @example $sandbox->is_blacklisted_trait('Test'); - * - * @param string $name String of trait $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted trait $name, false otherwise - */ - public function is_blacklisted_trait($name){ - $name = $this->normalize_trait($name); - return isset($this->blacklist['traits'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted keywords. - * - * @example $sandbox->has_whitelist_keywords(); //returns number of whitelisted keywords, or zero if none whitelisted - * - * @return int Returns the number of whitelisted keywords this instance has defined - */ - public function has_whitelist_keywords(){ - return count($this->whitelist['keywords']); - } - /** Query whether PHPSandbox instance has blacklisted keywords. - * - * @example $sandbox->has_blacklist_keywords(); //returns number of blacklisted keywords, or zero if none blacklisted - * - * @return int Returns the number of blacklisted keywords this instance has defined - */ - public function has_blacklist_keywords(){ - return count($this->blacklist['keywords']); - } - /** Check if PHPSandbox instance has whitelisted keyword name set - * - * @example $sandbox->is_whitelisted_keyword('echo'); - * - * @param string $name String of keyword $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted keyword $name, false otherwise - */ - public function is_whitelisted_keyword($name){ - $name = $this->normalize_keyword($name); - return isset($this->whitelist['keywords'][$name]); - } - /** Check if PHPSandbox instance has blacklisted keyword name set - * - * @example $sandbox->is_blacklisted_keyword('echo'); - * - * @param string $name String of keyword $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted keyword $name, false otherwise - */ - public function is_blacklisted_keyword($name){ - $name = $this->normalize_keyword($name); - return isset($this->blacklist['keywords'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted operators. - * - * @example $sandbox->has_whitelist_operators(); //returns number of whitelisted operators, or zero if none whitelisted - * - * @return int Returns the number of whitelisted operators this instance has defined - */ - public function has_whitelist_operators(){ - return count($this->whitelist['operators']); - } - /** Query whether PHPSandbox instance has blacklisted operators. - * - * @example $sandbox->has_blacklist_operators(); //returns number of blacklisted operators, or zero if none blacklisted - * - * @return int Returns the number of blacklisted operators this instance has defined - */ - public function has_blacklist_operators(){ - return count($this->blacklist['operators']); - } - /** Check if PHPSandbox instance has whitelisted operator name set - * - * @example $sandbox->is_whitelisted_operator('+'); - * - * @param string $name String of operator $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted operator $name, false otherwise - */ - public function is_whitelisted_operator($name){ - $name = $this->normalize_operator($name); - return isset($this->whitelist['operators'][$name]); - } - /** Check if PHPSandbox instance has blacklisted operator name set - * - * @example $sandbox->is_blacklisted_operator('+'); - * - * @param string $name String of operator $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted operator $name, false otherwise - */ - public function is_blacklisted_operator($name){ - $name = $this->normalize_operator($name); - return isset($this->blacklist['operators'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted primitives. - * - * @example $sandbox->has_whitelist_primitives(); //returns number of whitelisted primitives, or zero if none whitelisted - * - * @return int Returns the number of whitelisted primitives this instance has defined - */ - public function has_whitelist_primitives(){ - return count($this->whitelist['primitives']); - } - /** Query whether PHPSandbox instance has blacklisted primitives. - * - * @example $sandbox->has_blacklist_primitives(); //returns number of blacklisted primitives, or zero if none blacklisted - * - * @return int Returns the number of blacklisted primitives this instance has defined - */ - public function has_blacklist_primitives(){ - return count($this->blacklist['primitives']); - } - /** Check if PHPSandbox instance has whitelisted primitive name set - * - * @example $sandbox->is_whitelisted_primitive('array'); - * - * @param string $name String of primitive $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted primitive $name, false otherwise - */ - public function is_whitelisted_primitive($name){ - $name = $this->normalize_primitive($name); - return isset($this->whitelist['primitives'][$name]); - } - /** Check if PHPSandbox instance has blacklisted primitive name set - * - * @example $sandbox->is_blacklisted_primitive('array'); - * - * @param string $name String of primitive $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted primitive $name, false otherwise - */ - public function is_blacklisted_primitive($name){ - $name = $this->normalize_primitive($name); - return isset($this->blacklist['primitives'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted types. - * - * @example $sandbox->has_whitelist_types(); //returns number of whitelisted types, or zero if none whitelisted - * - * @return int Returns the number of whitelisted types this instance has defined - */ - public function has_whitelist_types(){ - return count($this->whitelist['types']); - } - /** Query whether PHPSandbox instance has blacklisted types. - * - * @example $sandbox->has_blacklist_types(); //returns number of blacklisted types, or zero if none blacklisted - * - * @return int Returns the number of blacklisted types this instance has defined - */ - public function has_blacklist_types(){ - return count($this->blacklist['types']); - } - /** Check if PHPSandbox instance has whitelisted type name set - * - * @example $sandbox->is_whitelisted_type('array'); - * - * @param string $name String of type $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted type $name, false otherwise - */ - public function is_whitelisted_type($name){ - $name = $this->normalize_type($name); - return isset($this->whitelist['types'][$name]); - } - /** Check if PHPSandbox instance has blacklisted type name set - * - * @example $sandbox->is_blacklisted_type('array'); - * - * @param string $name String of type $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted type $name, false otherwise - */ - public function is_blacklisted_type($name){ - $name = $this->normalize_type($name); - return isset($this->blacklist['types'][$name]); - } - /** Whitelist function - * - * You can pass a string of the function name, or pass an array of function names to whitelist - * - * @example $sandbox->whitelist_func('var_dump'); - * - * @example $sandbox->whitelist_func('var_dump', 'print_r'); - * - * @example $sandbox->whitelist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name, or array of function names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_func($name){ - if(func_num_args() > 1){ - return $this->whitelist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->whitelist('functions', $name); - } - /** Blacklist function - * - * You can pass a string of the function name, or pass an array of function names to blacklist - * - * @example $sandbox->blacklist_func('var_dump'); - * - * @example $sandbox->blacklist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name, or array of function names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_func($name){ - if(func_num_args() > 1){ - return $this->blacklist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->blacklist('functions', $name); - } - /** Remove function from whitelist - * - * You can pass a string of the function name, or pass an array of function names to remove from whitelist - * - * @example $sandbox->dewhitelist_func('var_dump'); - * - * @example $sandbox->dewhitelist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name or array of function names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_func($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->dewhitelist('functions', $name); - } - /** Remove function from blacklist - * - * You can pass a string of the function name, or pass an array of function names to remove from blacklist - * - * @example $sandbox->deblacklist_func('var_dump'); - * - * @example $sandbox->deblacklist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name or array of function names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_func($name){ - if(func_num_args() > 1){ - return $this->deblacklist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->deblacklist('functions', $name); - } - /** Whitelist variable - * - * You can pass a string of variable name, or pass an array of the variable names to whitelist - * - * @example $sandbox->whitelist_var('a'); - * - * @example $sandbox->whitelist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_var($name){ - if(func_num_args() > 1){ - return $this->whitelist_var(func_get_args()); - } - return $this->whitelist('variables', $name); - } - /** Blacklist variable - * - * You can pass a string of variable name, or pass an array of the variable names to blacklist - * - * @example $sandbox->blacklist_var('a'); - * - * @example $sandbox->blacklist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_var($name){ - if(func_num_args() > 1){ - return $this->blacklist_var(func_get_args()); - } - return $this->blacklist('variables', $name); - } - /** Remove variable from whitelist - * - * You can pass a string of variable name, or pass an array of the variable names to remove from whitelist - * - * @example $sandbox->dewhitelist_var('a'); - * - * @example $sandbox->dewhitelist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_var($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_var(func_get_args()); - } - return $this->dewhitelist('variables', $name); - } - /** Remove function from blacklist - * - * You can pass a string of variable name, or pass an array of the variable names to remove from blacklist - * - * @example $sandbox->deblacklist_var('a'); - * - * @example $sandbox->deblacklist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_var($name){ - if(func_num_args() > 1){ - return $this->deblacklist_var(func_get_args()); - } - return $this->deblacklist('variables', $name); - } - /** Whitelist global - * - * You can pass a string of global name, or pass an array of the global names to whitelist - * - * @example $sandbox->whitelist_global('a'); - * - * @example $sandbox->whitelist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_global($name){ - if(func_num_args() > 1){ - return $this->whitelist_global(func_get_args()); - } - return $this->whitelist('globals', $name); - } - /** Blacklist global - * - * You can pass a string of global name, or pass an array of the global names to blacklist - * - * @example $sandbox->blacklist_global('a'); - * - * @example $sandbox->blacklist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_global($name){ - if(func_num_args() > 1){ - return $this->blacklist_global(func_get_args()); - } - return $this->blacklist('globals', $name); - } - /** Remove global from whitelist - * - * You can pass a string of global name, or pass an array of the global names to remove from whitelist - * - * @example $sandbox->dewhitelist_global('a'); - * - * @example $sandbox->dewhitelist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_global($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_global(func_get_args()); - } - return $this->dewhitelist('globals', $name); - } - /** Remove global from blacklist - * - * You can pass a string of global name, or pass an array of the global names to remove from blacklist - * - * @example $sandbox->deblacklist_global('a'); - * - * @example $sandbox->deblacklist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_global($name){ - if(func_num_args() > 1){ - return $this->deblacklist_global(func_get_args()); - } - return $this->deblacklist('globals', $name); - } - /** Whitelist superglobal or superglobal key - * - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to whitelist - * - * @example $sandbox->whitelist_superglobal('_GET'); - * - * @example $sandbox->whitelist_superglobal('_GET', 'page'); - * - * @example $sandbox->whitelist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->whitelist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to whitelist - * @param string $key String of superglobal key to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_string($name) && $name && !isset($this->whitelist['superglobals'][$name])){ - $this->whitelist['superglobals'][$name] = array(); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(is_string($key) && $key){ - $this->whitelist['superglobals'][$key] = array(); - } - } else { - $_name = $this->normalize_superglobal($_name); - if(is_string($_name) && $_name && !isset($this->whitelist['superglobals'][$_name])){ - $this->whitelist['superglobals'][$_name] = array(); - } - if(is_string($key) && $key && isset($this->whitelist['superglobals'][$_name])){ - $this->whitelist['superglobals'][$_name][$key] = true; - } else if(isset($this->whitelist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->whitelist['superglobals'][$_name][$_name] = true; - } - } - } - } - } - } else if(isset($this->whitelist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->whitelist['superglobals'][$name][$_key] = true; - } - } - } else if(is_string($key) && $key && isset($this->whitelist['superglobals'][$name])){ - $this->whitelist['superglobals'][$name][$key] = true; - } - return $this; - } - /** Blacklist superglobal or superglobal key - ** - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to blacklist - * - * @example $sandbox->blacklist_superglobal('_GET'); - * - * @example $sandbox->blacklist_superglobal('_GET', 'page'); - * - * @example $sandbox->blacklist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->blacklist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to blacklist - * @param string $key String of superglobal key to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_string($name) && $name && !isset($this->blacklist['superglobals'][$name])){ - $this->blacklist['superglobals'][$name] = array(); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(is_string($key) && $key){ - $this->blacklist['superglobals'][$key] = array(); - } - } else { - $_name = $this->normalize_superglobal($_name); - if(is_string($_name) && $_name && !isset($this->blacklist['superglobals'][$_name])){ - $this->blacklist['superglobals'][$_name] = array(); - } - if(is_string($key) && $key && isset($this->blacklist['superglobals'][$_name])){ - $this->blacklist['superglobals'][$_name][$key] = true; - } else if(isset($this->blacklist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->blacklist['superglobals'][$_name][$_name] = true; - } - } - } - } - } - } else if(isset($this->blacklist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->blacklist['superglobals'][$name][$_key] = true; - } - } - } else if(is_string($key) && $key && isset($this->blacklist['superglobals'][$name])){ - $this->blacklist['superglobals'][$name][$key] = true; - } - return $this; - } - /** Remove superglobal or superglobal key from whitelist - ** - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to remove from whitelist - * - * @example $sandbox->dewhitelist_superglobal('_GET'); - * - * @example $sandbox->dewhitelist_superglobal('_GET', 'page'); - * - * @example $sandbox->dewhitelist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->dewhitelist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to remove from whitelist - * @param string $key String of superglobal key to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(isset($this->whitelist['superglobals'][$key])){ - $this->whitelist['superglobals'][$key] = array(); - } - } else if(isset($this->whitelist['superglobals'][$_name]) && is_string($key) && $key && isset($this->whitelist['superglobals'][$_name][$key])){ - unset($this->whitelist['superglobals'][$_name][$key]); - } else if(isset($this->whitelist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->whitelist['superglobals'][$_name][$_key])){ - unset($this->whitelist['superglobals'][$_name][$_key]); - } - } - } - } - } else if(isset($this->whitelist['superglobals'][$name]) && is_string($key) && $key && isset($this->whitelist['superglobals'][$name][$key])){ - unset($this->whitelist['superglobals'][$name][$key]); - } else if(isset($this->whitelist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->whitelist['superglobals'][$name][$_key])){ - unset($this->whitelist['superglobals'][$name][$_key]); - } - } - } else if(isset($this->whitelist['superglobals'][$name])){ - unset($this->whitelist['superglobals'][$name]); - } - return $this; - } - /** Remove superglobal or superglobal key from blacklist - ** - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to remove from blacklist - * - * @example $sandbox->deblacklist_superglobal('_GET'); - * - * @example $sandbox->deblacklist_superglobal('_GET', 'page'); - * - * @example $sandbox->deblacklist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->deblacklist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to remove from blacklist - * @param string $key String of superglobal key to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(isset($this->blacklist['superglobals'][$key])){ - $this->blacklist['superglobals'][$key] = array(); - } - } else if(isset($this->blacklist['superglobals'][$_name]) && is_string($key) && $key && isset($this->blacklist['superglobals'][$_name][$key])){ - unset($this->blacklist['superglobals'][$_name][$key]); - } else if(isset($this->blacklist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->blacklist['superglobals'][$_name][$_key])){ - unset($this->blacklist['superglobals'][$_name][$_key]); - } - } - } - } - } else if(isset($this->blacklist['superglobals'][$name]) && is_string($key) && $key && isset($this->blacklist['superglobals'][$name][$key])){ - unset($this->blacklist['superglobals'][$name][$key]); - } else if(isset($this->blacklist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->blacklist['superglobals'][$name][$_key])){ - unset($this->blacklist['superglobals'][$name][$_key]); - } - } - } else if(isset($this->blacklist['superglobals'][$name])){ - unset($this->blacklist['superglobals'][$name]); - } - return $this; - } - /** Whitelist constant - * - * You can pass a string of constant name, or pass an array of the constant names to whitelist - * - * @example $sandbox->whitelist_const('FOO'); - * - * @example $sandbox->whitelist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_const($name){ - if(func_num_args() > 1){ - return $this->whitelist_const(func_get_args()); - } - return $this->whitelist('constants', $name); - } - /** Blacklist constant - * - * You can pass a string of constant name, or pass an array of the constant names to blacklist - * - * @example $sandbox->blacklist_const('FOO'); - * - * @example $sandbox->blacklist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_const($name){ - if(func_num_args() > 1){ - return $this->blacklist_const(func_get_args()); - } - return $this->blacklist('constants', $name); - } - /** Remove constant from whitelist - * - * You can pass a string of constant name, or pass an array of the constant names to remove from whitelist - * - * @example $sandbox->dewhitelist_const('FOO'); - * - * @example $sandbox->dewhitelist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_const($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_const(func_get_args()); - } - return $this->dewhitelist('constants', $name); - } - /** Remove constant from blacklist - * - * You can pass a string of constant name, or pass an array of the constant names to remove from blacklist - * - * @example $sandbox->deblacklist_const('FOO'); - * - * @example $sandbox->deblacklist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_const($name){ - if(func_num_args() > 1){ - return $this->deblacklist_const(func_get_args()); - } - return $this->deblacklist('constants', $name); - } - /** Whitelist magic constant - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to whitelist - * - * @example $sandbox->whitelist_magic_const('__LINE__'); - * - * @example $sandbox->whitelist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_magic_const($name){ - if(func_num_args() > 1){ - return $this->whitelist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->whitelist('magic_constants', $name); - } - /** Blacklist magic constant - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to blacklist - * - * @example $sandbox->blacklist_magic_const('__LINE__'); - * - * @example $sandbox->blacklist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_magic_const($name){ - if(func_num_args() > 1){ - return $this->blacklist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->blacklist('magic_constants', $name); - } - /** Remove magic constant from whitelist - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to remove from whitelist - * - * @example $sandbox->dewhitelist_magic_const('__LINE__'); - * - * @example $sandbox->dewhitelist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_magic_const($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->dewhitelist('magic_constants', $name); - } - /** Remove magic constant from blacklist - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to remove from blacklist - * - * @example $sandbox->deblacklist_magic_const('__LINE__'); - * - * @example $sandbox->deblacklist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_magic_const($name){ - if(func_num_args() > 1){ - return $this->deblacklist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->deblacklist('magic_constants', $name); - } - /** Whitelist namespace - * - * You can pass a string of namespace name, or pass an array of the namespace names to whitelist - * - * @example $sandbox->whitelist_namespace('Foo'); - * - * @example $sandbox->whitelist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_namespace($name){ - if(func_num_args() > 1){ - return $this->whitelist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->whitelist('namespaces', $name); - } - /** Blacklist namespace - * - * You can pass a string of namespace name, or pass an array of the namespace names to blacklist - * - * @example $sandbox->blacklist_namespace('Foo'); - * - * @example $sandbox->blacklist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_namespace($name){ - if(func_num_args() > 1){ - return $this->blacklist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->blacklist('namespaces', $name); - } - /** Remove namespace from whitelist - * - * You can pass a string of namespace name, or pass an array of the namespace names to remove from whitelist - * - * @example $sandbox->dewhitelist_namespace('Foo'); - * - * @example $sandbox->dewhitelist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_namespace($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->dewhitelist('namespaces', $name); - } - /** Remove namespace from blacklist - * - * You can pass a string of namespace name, or pass an array of the namespace names to remove from blacklist - * - * @example $sandbox->deblacklist_namespace('Foo'); - * - * @example $sandbox->deblacklist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_namespace($name){ - if(func_num_args() > 1){ - return $this->deblacklist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->deblacklist('namespaces', $name); - } - /** Whitelist alias - * - * You can pass a string of alias name, or pass an array of the alias names to whitelist - * - * @example $sandbox->whitelist_alias('Foo'); - * - * @example $sandbox->whitelist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias names or array of alias names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_alias($name){ - if(func_num_args() > 1){ - return $this->whitelist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->whitelist('aliases', $name); - } - /** Blacklist alias - * - * You can pass a string of alias name, or pass an array of the alias names to blacklist - * - * @example $sandbox->blacklist_alias('Foo'); - * - * @example $sandbox->blacklist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name or array of alias names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_alias($name){ - if(func_num_args() > 1){ - return $this->blacklist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->blacklist('aliases', $name); - } - /** Remove alias from whitelist - * - * You can pass a string of alias name, or pass an array of the alias names to remove from whitelist - * - * @example $sandbox->dewhitelist_alias('Foo'); - * - * @example $sandbox->dewhitelist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name or array of alias names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_alias($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->dewhitelist('aliases', $name); - } - /** Remove alias from blacklist - * - * You can pass a string of alias name, or pass an array of the alias names to remove from blacklist - * - * @example $sandbox->deblacklist_alias('Foo'); - * - * @example $sandbox->deblacklist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name or array of alias names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_alias($name){ - if(func_num_args() > 1){ - return $this->deblacklist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->deblacklist('aliases', $name); - } - /** Whitelist use (or alias) - * - * You can pass a string of use (or alias) name, or pass an array of the use (or alias) names to whitelist - * - * @alias whitelist_alias(); - * - * @example $sandbox->whitelist_use('Foo'); - * - * @example $sandbox->whitelist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_use($name){ - if(func_num_args() > 1){ - return $this->whitelist_alias(func_get_args()); - } - return $this->whitelist_alias($name); - } - /** Blacklist use (or alias) - * - * You can pass a string of use (or alias) name, or pass an array of the use (or alias) names to blacklist - * - * @alias blacklist_alias(); - * - * @example $sandbox->blacklist_use('Foo'); - * - * @example $sandbox->blacklist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_use($name){ - if(func_num_args() > 1){ - return $this->blacklist_alias(func_get_args()); - } - return $this->blacklist_alias($name); - } - /** Remove use (or alias) from whitelist - * - * You can pass a string of use (or alias name, or pass an array of the use (or alias) names to remove from whitelist - * - * @alias dewhitelist_alias(); - * - * @example $sandbox->dewhitelist_use('Foo'); - * - * @example $sandbox->dewhitelist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_use($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_alias(func_get_args()); - } - return $this->dewhitelist_alias($name); - } - /** Remove use (or alias) from blacklist - * - * You can pass a string of use (or alias name, or pass an array of the use (or alias) names to remove from blacklist - * - * @alias deblacklist_alias(); - * - * @example $sandbox->deblacklist_use('Foo'); - * - * @example $sandbox->deblacklist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_use($name){ - if(func_num_args() > 1){ - return $this->deblacklist_alias(func_get_args()); - } - return $this->deblacklist_alias($name); - } - /** Whitelist class - * - * You can pass a string of class name, or pass an array of the class names to whitelist - * - * @example $sandbox->whitelist_class('Foo'); - * - * @example $sandbox->whitelist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_class($name){ - if(func_num_args() > 1){ - return $this->whitelist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->whitelist('classes', $name); - } - /** Blacklist class - * - * You can pass a string of class name, or pass an array of the class names to blacklist - * - * @example $sandbox->blacklist_class('Foo'); - * - * @example $sandbox->blacklist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_class($name){ - if(func_num_args() > 1){ - return $this->blacklist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->blacklist('classes', $name); - } - /** Remove class from whitelist - * - * You can pass a string of class name, or pass an array of the class names to remove from whitelist - * - * @example $sandbox->dewhitelist_class('Foo'); - * - * @example $sandbox->dewhitelist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_class($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->dewhitelist('classes', $name); - } - /** Remove class from blacklist - * - * You can pass a string of class name, or pass an array of the class names to remove from blacklist - * - * @example $sandbox->deblacklist_class('Foo'); - * - * @example $sandbox->deblacklist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_class($name){ - if(func_num_args() > 1){ - return $this->deblacklist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->deblacklist('classes', $name); - } - /** Whitelist interface - * - * You can pass a string of interface name, or pass an array of the interface names to whitelist - * - * @example $sandbox->whitelist_interface('Foo'); - * - * @example $sandbox->whitelist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_interface($name){ - if(func_num_args() > 1){ - return $this->whitelist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->whitelist('interfaces', $name); - } - /** Blacklist interface - * - * You can pass a string of interface name, or pass an array of the interface names to blacklist - * - * @example $sandbox->blacklist_interface('Foo'); - * - * @example $sandbox->blacklist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_interface($name){ - if(func_num_args() > 1){ - return $this->blacklist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->blacklist('interfaces', $name); - } - /** Remove interface from whitelist - * - * You can pass a string of interface name, or pass an array of the interface names to remove from whitelist - * - * @example $sandbox->dewhitelist_interface('Foo'); - * - * @example $sandbox->dewhitelist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_interface($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->dewhitelist('interfaces', $name); - } - /** Remove interface from blacklist - * - * You can pass a string of interface name, or pass an array of the interface names to remove from blacklist - * - * @example $sandbox->deblacklist_interface('Foo'); - * - * @example $sandbox->deblacklist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_interface($name){ - if(func_num_args() > 1){ - return $this->deblacklist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->deblacklist('interfaces', $name); - } - /** Whitelist trait - * - * You can pass a string of trait name, or pass an array of the trait names to whitelist - * - * @example $sandbox->whitelist_trait('Foo'); - * - * @example $sandbox->whitelist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_trait($name){ - if(func_num_args() > 1){ - return $this->whitelist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->whitelist('traits', $name); - } - /** Blacklist trait - * - * You can pass a string of trait name, or pass an array of the trait names to blacklist - * - * @example $sandbox->blacklist_trait('Foo'); - * - * @example $sandbox->blacklist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_trait($name){ - if(func_num_args() > 1){ - return $this->blacklist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->blacklist('traits', $name); - } - /** Remove trait from whitelist - * - * You can pass a string of trait name, or pass an array of the trait names to remove from whitelist - * - * @example $sandbox->dewhitelist_trait('Foo'); - * - * @example $sandbox->dewhitelist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_trait($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->dewhitelist('traits', $name); - } - /** Remove trait from blacklist - * - * You can pass a string of trait name, or pass an array of the trait names to remove from blacklist - * - * @example $sandbox->deblacklist_trait('Foo'); - * - * @example $sandbox->deblacklist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_trait($name){ - if(func_num_args() > 1){ - return $this->deblacklist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->deblacklist('traits', $name); - } - /** Whitelist keyword - * - * You can pass a string of keyword name, or pass an array of the keyword names to whitelist - * - * @example $sandbox->whitelist_keyword('echo'); - * - * @example $sandbox->whitelist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_keyword($name){ - if(func_num_args() > 1){ - return $this->whitelist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->whitelist('keywords', $name); - } - /** Blacklist keyword - * - * You can pass a string of keyword name, or pass an array of the keyword names to blacklist - * - * @example $sandbox->blacklist_keyword('echo'); - * - * @example $sandbox->blacklist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_keyword($name){ - if(func_num_args() > 1){ - return $this->blacklist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->blacklist('keywords', $name); - } - /** Remove keyword from whitelist - * - * You can pass a string of keyword name, or pass an array of the keyword names to remove from whitelist - * - * @example $sandbox->dewhitelist_keyword('echo'); - * - * @example $sandbox->dewhitelist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_keyword($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->dewhitelist('keywords', $name); - } - /** Remove keyword from blacklist - * - * You can pass a string of keyword name, or pass an array of the keyword names to remove from blacklist - * - * @example $sandbox->deblacklist_keyword('echo'); - * - * @example $sandbox->deblacklist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_keyword($name){ - if(func_num_args() > 1){ - return $this->deblacklist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->deblacklist('keywords', $name); - } - /** Whitelist operator - * - * You can pass a string of operator name, or pass an array of the operator names to whitelist - * - * @example $sandbox->whitelist_operator('+'); - * - * @example $sandbox->whitelist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_operator($name){ - if(func_num_args() > 1){ - return $this->whitelist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->whitelist('operators', $name); - } - /** Blacklist operator - * - * You can pass a string of operator name, or pass an array of the operator names to blacklist - * - * @example $sandbox->blacklist_operator('+'); - * - * @example $sandbox->blacklist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_operator($name){ - if(func_num_args() > 1){ - return $this->blacklist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->blacklist('operators', $name); - } - /** Remove operator from whitelist - * - * You can pass a string of operator name, or pass an array of the operator names to remove from whitelist - * - * @example $sandbox->dewhitelist_operator('+'); - * - * @example $sandbox->dewhitelist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_operator($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->dewhitelist('operators', $name); - } - /** Remove operator from blacklist - * - * You can pass a string of operator name, or pass an array of the operator names to remove from blacklist - * - * @example $sandbox->deblacklist_operator('+'); - * - * @example $sandbox->deblacklist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_operator($name){ - if(func_num_args() > 1){ - return $this->deblacklist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->deblacklist('operators', $name); - } - /** Whitelist primitive - * - * You can pass a string of primitive name, or pass an array of the primitive names to whitelist - * - * @example $sandbox->whitelist_primitive('int'); - * - * @example $sandbox->whitelist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_primitive($name){ - if(func_num_args() > 1){ - return $this->whitelist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->whitelist('primitives', $name); - } - /** Blacklist primitive - * - * You can pass a string of primitive name, or pass an array of the primitive names to blacklist - * - * @example $sandbox->blacklist_primitive('int'); - * - * @example $sandbox->blacklist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_primitive($name){ - if(func_num_args() > 1){ - return $this->blacklist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->blacklist('primitives', $name); - } - /** Remove primitive from whitelist - * - * You can pass a string of primitive name, or pass an array of the primitive names to remove from whitelist - * - * @example $sandbox->dewhitelist_primitive('int'); - * - * @example $sandbox->dewhitelist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_primitive($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->dewhitelist('primitives', $name); - } - /** Remove primitive from blacklist - * - * You can pass a string of primitive name, or pass an array of the primitive names to remove from blacklist - * - * @example $sandbox->deblacklist_primitive('int'); - * - * @example $sandbox->deblacklist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_primitive($name){ - if(func_num_args() > 1){ - return $this->deblacklist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->deblacklist('primitives', $name); - } - /** Whitelist type - * - * You can pass a string of type name, or pass an array of the type names to whitelist - * - * @example $sandbox->whitelist_type('PHPSandbox'); - * - * @example $sandbox->whitelist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_type($name){ - if(func_num_args() > 1){ - return $this->whitelist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->whitelist('types', $name); - } - /** Blacklist type - * - * You can pass a string of type name, or pass an array of the type names to blacklist - * - * @example $sandbox->blacklist_type('PHPSandbox'); - * - * @example $sandbox->blacklist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_type($name){ - if(func_num_args() > 1){ - return $this->blacklist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->blacklist('types', $name); - } - /** Remove type from whitelist - * - * You can pass a string of type name, or pass an array of the type names to remove from whitelist - * - * @example $sandbox->dewhitelist_type('PHPSandbox'); - * - * @example $sandbox->dewhitelist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_type($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->dewhitelist('types', $name); - } - /** Remove type from blacklist - * - * You can pass a string of type name, or pass an array of the type names to remove from blacklist - * - * @example $sandbox->deblacklist_type('PHPSandbox'); - * - * @example $sandbox->deblacklist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_type($name){ - if(func_num_args() > 1){ - return $this->deblacklist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->deblacklist('types', $name); - } - /** Check function name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the function name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if function is valid, this is also used for testing closures - */ - public function check_func($name){ - if(!$this->validate_functions){ - return true; - } - $original_name = $name; - if($name instanceof \Closure){ - if(!$this->allow_closures){ - $this->validation_error("Sandboxed code attempted to call closure!", Error::CLOSURE_ERROR); - } - return true; - } else if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name || !is_string($name)){ - $this->validation_error("Sandboxed code attempted to call unnamed function!", Error::VALID_FUNC_ERROR, null, ''); - } - $name = $this->normalize_func($name); - if(is_callable($this->validation['function'])){ - return call_user_func_array($this->validation['function'], array($name, $this)); - } - if(!isset($this->definitions['functions'][$name]) || !is_callable($this->definitions['functions'][$name]['function'])){ - if(count($this->whitelist['functions'])){ - if(!isset($this->whitelist['functions'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted function: $original_name", Error::WHITELIST_FUNC_ERROR, null, $original_name); - } - } else if(count($this->blacklist['functions'])){ - if(isset($this->blacklist['functions'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted function: $original_name", Error::BLACKLIST_FUNC_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid function: $original_name", Error::VALID_FUNC_ERROR, null, $original_name); - } - } - return true; - } - /** Check variable name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the variable name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if variable is valid - */ - public function check_var($name){ - if(!$this->validate_variables){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed variable!", Error::VALID_VAR_ERROR, null, ''); - } - if(is_callable($this->validation['variable'])){ - return call_user_func_array($this->validation['variable'], array($name, $this)); - } - if(!isset($this->definitions['variables'][$name])){ - if(count($this->whitelist['variables'])){ - if(!isset($this->whitelist['variables'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted variable: $original_name", Error::WHITELIST_VAR_ERROR, null, $original_name); - } - } else if(count($this->blacklist['variables'])){ - if(isset($this->blacklist['variables'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted variable: $original_name", Error::BLACKLIST_VAR_ERROR, null, $original_name); - } - } else if(!$this->allow_variables){ - $this->validation_error("Sandboxed code attempted to call invalid variable: $original_name", Error::VALID_VAR_ERROR, null, $original_name); - } - } - return true; - } - /** Check global name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the global name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if global is valid - */ - public function check_global($name){ - if(!$this->validate_globals){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed global!", Error::VALID_GLOBAL_ERROR, null, ''); - } - if(is_callable($this->validation['global'])){ - return call_user_func_array($this->validation['global'], array($name, $this)); - } - if(count($this->whitelist['globals'])){ - if(!isset($this->whitelist['globals'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted global: $original_name", Error::WHITELIST_GLOBAL_ERROR, null, $original_name); - } - } else if(count($this->blacklist['globals'])){ - if(isset($this->blacklist['globals'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted global: $original_name", Error::BLACKLIST_GLOBAL_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid global: $original_name", Error::VALID_GLOBAL_ERROR, null, $original_name); - } - return true; - } - /** Check superglobal name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the superglobal name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if superglobal is valid - */ - public function check_superglobal($name){ - if(!$this->validate_superglobals){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed superglobal!", Error::VALID_SUPERGLOBAL_ERROR, null, ''); - } - $name = $this->normalize_superglobal($name); - if(is_callable($this->validation['superglobal'])){ - return call_user_func_array($this->validation['superglobal'], array($name, $this)); - } - if(!isset($this->definitions['superglobals'][$name])){ - if(count($this->whitelist['superglobals'])){ - if(!isset($this->whitelist['superglobals'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted superglobal: $original_name", Error::WHITELIST_SUPERGLOBAL_ERROR, null, $original_name); - } - } else if(count($this->blacklist['superglobals'])){ - if(isset($this->blacklist['superglobals'][$name]) && !count($this->blacklist['superglobals'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted superglobal: $original_name", Error::BLACKLIST_SUPERGLOBAL_ERROR, null, $original_name); - } - } else if(!$this->overwrite_superglobals){ - $this->validation_error("Sandboxed code attempted to call invalid superglobal: $original_name", Error::VALID_SUPERGLOBAL_ERROR, null, $original_name); - } - } - return true; - } - /** Check constant name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the constant name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if constant is valid - */ - public function check_const($name){ - if(!$this->validate_constants){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed constant!", Error::VALID_CONST_ERROR, null, ''); - } - if(strtolower($name) == 'true' || strtolower($name) == 'false'){ - return $this->check_primitive('bool'); - } - if(strtolower($name) == 'null'){ - return $this->check_primitive('null'); - } - if(is_callable($this->validation['constant'])){ - return call_user_func_array($this->validation['constant'], array($name, $this)); - } - if(!isset($this->definitions['constants'][$name])){ - if(count($this->whitelist['constants'])){ - if(!isset($this->whitelist['constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted constant: $original_name", Error::WHITELIST_CONST_ERROR, null, $original_name); - } - } else if(count($this->blacklist['constants'])){ - if(isset($this->blacklist['constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted constant: $original_name", Error::BLACKLIST_CONST_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid constant: $original_name", Error::VALID_CONST_ERROR, null, $original_name); - } - } - return true; - } - /** Check magic constant name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the magic constant name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if magic constant is valid - */ - public function check_magic_const($name){ - if(!$this->validate_magic_constants){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed magic constant!", Error::VALID_MAGIC_CONST_ERROR, null, ''); - } - $name = $this->normalize_magic_const($name); - if(is_callable($this->validation['magic_constant'])){ - return call_user_func_array($this->validation['magic_constant'], array($name, $this)); - } - if(!isset($this->definitions['magic_constants'][$name])){ - if(count($this->whitelist['magic_constants'])){ - if(!isset($this->whitelist['magic_constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted magic constant: $original_name", Error::WHITELIST_MAGIC_CONST_ERROR, null, $original_name); - } - } else if(count($this->blacklist['magic_constants'])){ - if(isset($this->blacklist['magic_constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted magic constant: $original_name", Error::BLACKLIST_MAGIC_CONST_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid magic constant: $original_name", Error::VALID_MAGIC_CONST_ERROR, null, $original_name); - } - } - return true; - } - /** Check namespace name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the namespace name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if namespace is valid - */ - public function check_namespace($name){ - if(!$this->validate_namespaces){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed namespace!", Error::VALID_NAMESPACE_ERROR, null, ''); - } - $name = $this->normalize_namespace($name); - if(is_callable($this->validation['namespace'])){ - return call_user_func_array($this->validation['namespace'], array($name, $this)); - } - if(!isset($this->definitions['namespaces'][$name])){ - if(count($this->whitelist['namespaces'])){ - if(!isset($this->whitelist['namespaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted namespace: $original_name", Error::WHITELIST_NAMESPACE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['namespaces'])){ - if(isset($this->blacklist['namespaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted namespace: $original_name", Error::BLACKLIST_NAMESPACE_ERROR, null, $original_name); - } - } else if(!$this->allow_namespaces){ - $this->validation_error("Sandboxed code attempted to call invalid namespace: $original_name", Error::VALID_NAMESPACE_ERROR, null, $original_name); - } - } - return true; - } - /** Check alias name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the alias name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if alias is valid - */ - public function check_alias($name){ - if(!$this->validate_aliases){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed alias!", Error::VALID_ALIAS_ERROR, null, ''); - } - $name = $this->normalize_alias($name); - if(is_callable($this->validation['alias'])){ - return call_user_func_array($this->validation['alias'], array($name, $this)); - } - if(count($this->whitelist['aliases'])){ - if(!isset($this->whitelist['aliases'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted alias: $original_name", Error::WHITELIST_ALIAS_ERROR, null, $original_name); - } - } else if(count($this->blacklist['aliases'])){ - if(isset($this->blacklist['aliases'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted alias: $original_name", Error::BLACKLIST_ALIAS_ERROR, null, $original_name); - } - } else if(!$this->allow_aliases){ - $this->validation_error("Sandboxed code attempted to call invalid alias: $original_name", Error::VALID_ALIAS_ERROR, null, $original_name); - } - return true; - } - /** Check use (or alias) name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * - * @alias check_alias(); - * - * @param string $name String of the use (or alias) name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if use (or alias) is valid - */ - public function check_use($name){ - return $this->check_alias($name); - } - /** Check class name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the class name to check - * @param bool $extends Flag whether this is an extended class - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if class is valid - */ - public function check_class($name, $extends = false){ - if(!$this->validate_classes){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - $action = $extends ? 'extend' : 'call'; - if(!$name){ - $this->validation_error("Sandboxed code attempted to $action unnamed class!", Error::VALID_CLASS_ERROR, null, ''); - } - $name = $this->normalize_class($name); - if($name == 'self' || $name == 'static' || $name == 'parent'){ - return true; - } - if(is_callable($this->validation['class'])){ - return call_user_func_array($this->validation['class'], array($name, $this)); - } - if(!isset($this->definitions['classes'][$name])){ - if(count($this->whitelist['classes'])){ - if(!isset($this->whitelist['classes'][$name])){ - $this->validation_error("Sandboxed code attempted to $action non-whitelisted class: $original_name", Error::WHITELIST_CLASS_ERROR, null, $original_name); - } - } else if(count($this->blacklist['classes'])){ - if(isset($this->blacklist['classes'][$name])){ - $this->validation_error("Sandboxed code attempted to $action blacklisted class: $original_name", Error::BLACKLIST_CLASS_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to $action invalid class: $original_name", Error::VALID_CLASS_ERROR, null, $original_name); - } - } - return true; - } - /** Check interface name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the interface name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if interface is valid - */ - public function check_interface($name){ - if(!$this->validate_interfaces){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed interface!", Error::VALID_INTERFACE_ERROR, null, ''); - } - $name = $this->normalize_interface($name); - if(is_callable($this->validation['interface'])){ - return call_user_func_array($this->validation['interface'], array($name, $this)); - } - if(!isset($this->definitions['interfaces'][$name])){ - if(count($this->whitelist['interfaces'])){ - if(!isset($this->whitelist['interfaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted interface: $original_name", Error::WHITELIST_INTERFACE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['interfaces'])){ - if(isset($this->blacklist['interfaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted interface: $original_name", Error::BLACKLIST_INTERFACE_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalidnterface: $original_name", Error::VALID_INTERFACE_ERROR, null, $original_name); - } - } - return true; - } - /** Check trait name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the trait name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if trait is valid - */ - public function check_trait($name){ - if(!$this->validate_traits){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed trait!", Error::VALID_TRAIT_ERROR, null, ''); - } - $name = $this->normalize_trait($name); - if(is_callable($this->validation['trait'])){ - return call_user_func_array($this->validation['trait'], array($name, $this)); - } - if(!isset($this->definitions['traits'][$name])){ - if(count($this->whitelist['traits'])){ - if(!isset($this->whitelist['traits'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted trait: $original_name", Error::WHITELIST_TRAIT_ERROR, null, $original_name); - } - } else if(count($this->blacklist['traits'])){ - if(isset($this->blacklist['traits'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted trait: $original_name", Error::BLACKLIST_TRAIT_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid trait: $original_name", Error::VALID_TRAIT_ERROR, null, $original_name); - } - } - return true; - } - /** Check keyword name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the keyword name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if keyword is valid - */ - public function check_keyword($name){ - if(!$this->validate_keywords){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed keyword!", Error::VALID_KEYWORD_ERROR, null, ''); - } - $name = $this->normalize_keyword($name); - if(is_callable($this->validation['keyword'])){ - return call_user_func_array($this->validation['keyword'], array($name, $this)); - } - if(count($this->whitelist['keywords'])){ - if(!isset($this->whitelist['keywords'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted keyword: $original_name", Error::WHITELIST_KEYWORD_ERROR, null, $original_name); - } - } else if(count($this->blacklist['keywords'])){ - if(isset($this->blacklist['keywords'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted keyword: $original_name", Error::BLACKLIST_KEYWORD_ERROR, null, $original_name); - } - } - return true; - } - /** Check operator name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the type operator to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if operator is valid - */ - public function check_operator($name){ - if(!$this->validate_operators){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed operator!", Error::VALID_OPERATOR_ERROR, null, ''); - } - $name = $this->normalize_operator($name); - if(is_callable($this->validation['operator'])){ - return call_user_func_array($this->validation['operator'], array($name, $this)); - } - if(count($this->whitelist['operators'])){ - if(!isset($this->whitelist['operators'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted operator: $original_name", Error::WHITELIST_OPERATOR_ERROR, null, $original_name); - } - } else if(count($this->blacklist['operators'])){ - if(isset($this->blacklist['operators'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted operator: $original_name", Error::BLACKLIST_OPERATOR_ERROR, null, $original_name); - } - } - return true; - } - /** Check primitive name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the primitive name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if primitive is valid - */ - public function check_primitive($name){ - if(!$this->validate_primitives){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed primitive!", Error::VALID_PRIMITIVE_ERROR, null, ''); - } - $name = $this->normalize_primitive($name); - if(is_callable($this->validation['primitive'])){ - return call_user_func_array($this->validation['primitive'], array($name, $this)); - } - if(count($this->whitelist['primitives'])){ - if(!isset($this->whitelist['primitives'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted primitive: $original_name", Error::WHITELIST_PRIMITIVE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['primitives'])){ - if(isset($this->blacklist['primitives'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted primitive: $original_name", Error::BLACKLIST_PRIMITIVE_ERROR, null, $original_name); - } - } - return true; - } - /** Check type name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the type name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if type is valid - */ - public function check_type($name){ - if(!$this->validate_types){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed type!", Error::VALID_TYPE_ERROR, null, ''); - } - $name = $this->normalize_type($name); - if(is_callable($this->validation['type'])){ - return call_user_func_array($this->validation['type'], array($name, $this)); - } - if(!isset($this->definitions['classes'][$name])){ - if(count($this->whitelist['types'])){ - if(!isset($this->whitelist['types'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted type: $original_name", Error::WHITELIST_TYPE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['types'])){ - if(isset($this->blacklist['types'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted type: $original_name", Error::BLACKLIST_TYPE_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid type: $original_name", Error::VALID_TYPE_ERROR, null, $original_name); - } - } - return true; - } - /** Prepare defined variables for execution - * - * @throws Error Throws exception if variable preparation error occurs - * @return string Prepared string of variable output - */ - protected function prepare_vars(){ - $output = array(); - foreach($this->definitions['variables'] as $name => $value){ - if(is_int($name)){ //can't define numeric variable names - $this->validation_error("Cannot define variable name that begins with an integer!", Error::DEFINE_VAR_ERROR, null, $name); - } - if(is_scalar($value) || is_null($value)){ - if(is_bool($value)){ - $output[] = '$' . $name . ' = ' . ($value ? 'true' : 'false'); - } else if(is_int($value)){ - $output[] = '$' . $name . ' = ' . ($value ? $value : '0'); - } else if(is_float($value)){ - $output[] = '$' . $name . ' = ' . ($value ? $value : '0.0'); - } else if(is_string($value)){ - $output[] = '$' . $name . " = '" . addcslashes($value, "'") . "'"; - } else { - $output[] = '$' . $name . " = null"; - } - } else { - $output[] = '$' . $name . " = unserialize('" . addcslashes(serialize($value), "'") . "')"; - } - } - return count($output) ? "\r\n" . implode(";\r\n", $output) . ";\r\n" : ''; - } - /** Prepare defined constants for execution - */ - protected function prepare_consts(){ - $output = array(); - foreach($this->definitions['constants'] as $name => $value){ - if(is_scalar($value) || is_null($value)){ - if(is_bool($value)){ - $output[] = '\define(' . "'" . $name . "', " . ($value ? 'true' : 'false') . ');'; - } else if(is_int($value)){ - $output[] = '\define(' . "'" . $name . "', " . ($value ? $value : '0') . ');'; - } else if(is_float($value)){ - $output[] = '\define(' . "'" . $name . "', " . ($value ? $value : '0.0') . ');'; - } else if(is_string($value)){ - $output[] = '\define(' . "'" . $name . "', '" . addcslashes($value, "'") . "');"; - } else { - $output[] = '\define(' . "'" . $name . "', null);"; - } - } else { - $this->validation_error("Sandboxed code attempted to define non-scalar constant value: $name", Error::DEFINE_CONST_ERROR, null, $name); - } - } - return count($output) ? implode("\r\n", $output) ."\r\n" : ''; - } - /** Prepare defined namespaces for execution - */ - protected function prepare_namespaces(){ - $output = array(); - foreach($this->definitions['namespaces'] as $name){ - if(is_string($name) && $name){ - $output[] = 'namespace ' . $name . ';'; - } else { - $this->validation_error("Sandboxed code attempted to create invalid namespace: $name", Error::DEFINE_NAMESPACE_ERROR, null, $name); - } - } - return count($output) ? implode("\r\n", $output) ."\r\n" : ''; - } - /** Prepare defined aliases for execution - */ - protected function prepare_aliases(){ - $output = array(); - foreach($this->definitions['aliases'] as $alias){ - if(is_array($alias) && isset($alias['original']) && is_string($alias['original']) && $alias['original']){ - $output[] = 'use ' . $alias['original'] . ((isset($alias['alias']) && is_string($alias['alias']) && $alias['alias']) ? ' as ' . $alias['alias'] : '') . ';'; - } else { - $this->validation_error("Sandboxed code attempted to use invalid namespace alias: " . $alias['original'], Error::DEFINE_ALIAS_ERROR, null, $alias['original']); - } - } - return count($output) ? implode("\r\n", $output) ."\r\n" : ''; - } - /** Prepare defined uses (or aliases) for execution - * @alias prepare_aliases(); - */ - protected function prepare_uses(){ - return $this->prepare_aliases(); - } - /** Disassemble callable to string - * - * @param callable $closure The callable to disassemble - * - * @throws Error Throw exception if callable is passed and FunctionParser library is missing - * - * @return string Return the disassembled code string - */ - protected function disassemble($closure){ - if(is_string($closure) && !is_callable($closure)){ - return substr($closure, 0, 2) == 'auto_define_vars){ - $this->auto_define($disassembled_closure); - } - return 'getBody(); - } - /** Automatically whitelisted trusted code - * - * @param string $code String of trusted $code to automatically whitelist - * @param bool $appended Flag if this code ir prended or appended (true = appended) - * - * @return mixed Return result of error handler if $code could not be parsed - * - * @throws Error Throw exception if code cannot be parsed for whitelisting - */ - protected function auto_whitelist($code, $appended = false){ - $parser = new \PHPParser_Parser(new \PHPParser_Lexer); - try { - $statements = $parser->parse($code); - } catch (\PHPParser_Error $error) { - return $this->validation_error('Error parsing ' . ($appended ? 'appended' : 'prepended') . ' sandboxed code for auto-whitelisting!', Error::PARSER_ERROR, null, $code, $error); - } - $traverser = new \PHPParser_NodeTraverser; - $whitelister = new WhitelistVisitor($this); - $traverser->addVisitor($whitelister); - $traverser->traverse($statements); - return true; - } - /** Automatically define variables passed to disassembled closure - * @param FunctionParser $disassembled_closure - */ - protected function auto_define(FunctionParser $disassembled_closure){ - $parameters = $disassembled_closure->getReflection()->getParameters(); - foreach($parameters as $param){ - /** - * @var \ReflectionParameter $param - */ - $this->define_var($param->getName(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null); - } - } - /** Prepend trusted code - * @param string|callable $code String or callable of trusted $code to prepend to generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function prepend($code){ - if(!$code){ - return $this; - } - $code = $this->disassemble($code); - if($this->auto_whitelist_trusted_code){ - $this->auto_whitelist($code); - } - $this->prepended_code .= substr($code, 6) . "\r\n"; //remove opening php tag - return $this; - } - /** Append trusted code - * @param string|callable $code String or callable of trusted $code to append to generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function append($code){ - if(!$code){ - return $this; - } - $code = $this->disassemble($code); - if($this->auto_whitelist_trusted_code){ - $this->auto_whitelist($code, true); - } - $this->appended_code .= "\r\n" . substr($code, 6) . "\r\n"; //remove opening php tag - return $this; - } - /** Clear all trusted and sandboxed code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear(){ - $this->prepended_code = ''; - $this->generated_code = null; - $this->appended_code = ''; - } - /** Clear all trusted code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_trusted_code(){ - $this->prepended_code = ''; - $this->appended_code = ''; - return $this; - } - /** Clear all prepended trusted code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_prepend(){ - $this->prepended_code = ''; - return $this; - } - /** Clear all appended trusted code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_append(){ - $this->appended_code = ''; - return $this; - } - /** Clear generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_code(){ - $this->generated_code = null; - return $this; - } - /** Return the amount of time the sandbox spent preparing the sandboxed code - * - * You can pass the number of digits you wish to round the return value - * - * @example $sandbox->get_prepared_time(); - * - * @example $sandbox->get_prepared_time(3); - * - * @param int|null $round The number of digits to round the return value - * - * @return float The amount of time in microseconds it took to prepare the sandboxed code - */ - public function get_prepared_time($round = null){ - return $round ? round($this->prepare_time, $round) : $this->prepare_time; - } - /** Return the amount of time the sandbox spent executing the sandboxed code - * - * You can pass the number of digits you wish to round the return value - * - * @example $sandbox->get_execution_time(); - * - * @example $sandbox->get_execution_time(3); - * - * @param int|null $round The number of digits to round the return value - * - * @return float The amount of time in microseconds it took to execute the sandboxed code - */ - public function get_execution_time($round = null){ - return $round ? round($this->execution_time, $round) : $this->execution_time; - } - /** Return the amount of time the sandbox spent preparing and executing the sandboxed code - * - * You can pass the number of digits you wish to round the return value - * - * @example $sandbox->get_time(); - * - * @example $sandbox->get_time(3); - * - * @param int|null $round The number of digits to round the return value - * - * @return float The amount of time in microseconds it took to prepare and execute the sandboxed code - */ - public function get_time($round = null){ - return $round ? round($this->prepare_time + $this->execution_time, $round) : ($this->prepare_time + $this->execution_time); - } - /** - * Validates passed callable for execution - */ - public function validate($code){ - $this->preparsed_code = $this->disassemble($code); - $parser = new \PHPParser_Parser(new \PHPParser_Lexer_Emulative); - - try { - $this->parsed_ast = $parser->parse($this->preparsed_code); - } catch (\PHPParser_Error $error) { - $this->validation_error("Could not parse sandboxed code!", Error::PARSER_ERROR, null, $this->preparsed_code, $error); - } - - $prettyPrinter = new \PHPParser_PrettyPrinter_Default; - - if(($this->allow_functions && $this->auto_whitelist_functions) || - ($this->allow_constants && $this->auto_whitelist_constants) || - ($this->allow_classes && $this->auto_whitelist_classes) || - ($this->allow_interfaces && $this->auto_whitelist_interfaces) || - ($this->allow_traits && $this->auto_whitelist_traits) || - ($this->allow_globals && $this->auto_whitelist_globals)){ - - $traverser = new \PHPParser_NodeTraverser; - $whitelister = new SandboxWhitelistVisitor($this); - $traverser->addVisitor($whitelister); - $traverser->traverse($this->parsed_ast); - } - - $traverser = new \PHPParser_NodeTraverser; - - $validator = new ValidatorVisitor($this); - - $traverser->addVisitor($validator); - - $this->prepared_ast = $traverser->traverse($this->parsed_ast); - - $this->prepared_code = $prettyPrinter->prettyPrint($this->prepared_ast); - } - /** Prepare passed callable for execution - * - * This function validates your code and automatically whitelists it according to your specified configuration - * - * @example $sandbox->prepare(function(){ var_dump('Hello world!'); }); - * - * @param callable $code The callable to prepare for execution - * @param boolean $skip_validation Boolean flag to indicate whether the sandbox should skip validation. Default is false. - * - * @throws Error Throws exception if error occurs in parsing, validation or whitelisting - * - * @return string The generated code (this can also be accessed via $sandbox->generated_code) - */ - public function prepare($code, $skip_validation = false){ - $this->prepare_time = microtime(true); - - if($this->allow_constants && !$this->is_defined_func('define') && ($this->has_whitelist_funcs() || !$this->has_blacklist_funcs())){ - $this->whitelist_func('define'); //makes no sense to allow constants if you can't define them! - } - - if(!$skip_validation){ - $this->validate($code); - } - - static::$sandboxes[$this->name] = $this; - - $this->generated_code = $this->prepare_namespaces() . - $this->prepare_aliases() . - $this->prepare_consts() . - "\r\n" . '$closure = function(){' . - $this->prepare_vars() . - $this->prepended_code . - ($skip_validation ? $code : $this->prepared_code) . - $this->appended_code . - "\r\n" . '};' . - "\r\n" . 'if(method_exists($closure, "bindTo")){ $closure = $closure->bindTo(null); }' . - "\r\n" . 'return $closure();'; - - usleep(1); //guarantee at least some time passes - $this->prepare_time = (microtime(true) - $this->prepare_time); - return $this->generated_code; - } - /** Prepare and execute callable and return output - * - * This function validates your code and automatically whitelists it according to your specified configuration, then executes it. - * - * @example $sandbox->execute(function(){ var_dump('Hello world!'); }); - * - * @param callable|string $callable Callable or string of PHP code to prepare and execute within the sandbox - * @param boolean $skip_validation Boolean flag to indicate whether the sandbox should skip validation of the pass callable. Default is false. - * - * @throws Error Throws exception if error occurs in parsing, validation or whitelisting or if generated closure is invalid - * - * @return mixed The output from the executed sandboxed code - */ - public function execute($callable = null, $skip_validation = false){ - if($callable !== null){ - $this->prepare($callable, $skip_validation); - } - $saved_error_level = null; - if($this->error_level !== null){ - $saved_error_level = error_reporting(); - error_reporting(intval($this->error_level)); - } - if(is_callable($this->error_handler) || $this->convert_errors){ - set_error_handler(array($this, 'error'), $this->error_handler_types); - } - $this->execution_time = microtime(true); - $exception = null; - $result = null; - try { - if($this->capture_output){ - ob_start(); - eval($this->generated_code); - $result = ob_get_clean(); - } else { - $result = eval($this->generated_code); - } - } catch(\Exception $exception){ - //swallow any exceptions - } - if(is_callable($this->error_handler) || $this->convert_errors){ - restore_error_handler(); - } - usleep(1); //guarantee at least some time passes - $this->execution_time = (microtime(true) - $this->execution_time); - if($this->error_level !== null && $this->restore_error_level){ - error_reporting($saved_error_level); - } - return $exception instanceof \Exception ? $this->exception($exception) : $result; - } - /** Set callable to handle errors - * - * This function sets the sandbox error handler and the handled error types. The handler accepts the error number, - * the error message, the error file, the error line, the error context and the sandbox instance as arguments. - * If the error handler does not handle errors correctly then the sandbox's security may become compromised! - * - * @example $sandbox->set_error_handler(function($errno, $errstr, $errfile, $errline, $errcontext, PHPSandbox $s){ - * return false; - * }, E_ALL); //ignore all errors, INSECURE - * - * @param callable $handler Callable to handle thrown Errors - * @param int $error_types Integer flag of the error types to handle (default is E_ALL) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_error_handler($handler, $error_types = E_ALL){ - $this->error_handler = $handler; - $this->error_handler_types = $error_types; - return $this; - } - /** Get error handler - * - * This function returns the sandbox error handler. - * - * @example $sandbox->get_error_handler(); //callable - * - * @return null|callable - */ - public function get_error_handler(){ - return $this->error_handler; - } - /** Unset error handler - * - * This function unsets the sandbox error handler. - * - * @example $sandbox->unset_error_handler(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_error_handler(){ - $this->error_handler = null; - return $this; - } - /** Gets the last sandbox error - * @return array - */ - public function get_last_error(){ - return $this->last_error; - } - /** Invoke sandbox error handler - * - * @example $sandbox->error(0, "Unknown error"); - * - * @param int $errno Error number - * @param string $errstr Error message - * @param string $errfile Error file - * @param int $errline Error line number - * @param array $errcontext Error context array - * @return mixed - */ - public function error($errno, $errstr, $errfile, $errline, $errcontext){ - $this->last_error = error_get_last(); - if($this->convert_errors){ - return $this->exception(new \ErrorException($errstr, 0, $errno, $errfile, $errline)); - } - return is_callable($this->error_handler) ? call_user_func_array($this->error_handler, array($errno, $errstr, $errfile, $errline, $errcontext, $this)) : null; - } - /** Set callable to handle thrown exceptions - * - * This function sets the sandbox exception handler. The handler accepts the thrown exception and the sandbox instance - * as arguments. If the exception handler does not handle exceptions correctly then the sandbox's security may - * become compromised! - * - * @example $sandbox->set_exception_handler(function(Exception $e, PHPSandbox $s){}); //ignore all thrown exceptions, INSECURE - * - * @param callable $handler Callable to handle thrown exceptions - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_exception_handler($handler){ - $this->exception_handler = $handler; - return $this; - } - /** Get exception handler - * - * This function returns the sandbox exception handler. - * - * @example $sandbox->get_exception_handler(); //callable - * - * @return null|callable - */ - public function get_exception_handler(){ - return $this->exception_handler; - } - /** Unset exception handler - * - * This function unsets the sandbox exception handler. - * - * @example $sandbox->unset_exception_handler(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_exception_handler(){ - $this->exception_handler = null; - return $this; - } - /** Gets the last exception thrown by the sandbox - * @return \Exception|Error - */ - public function get_last_exception(){ - return $this->last_exception; - } - /** Invoke sandbox exception handler - * - * @example $sandbox->exception(new Exception("Unknown error!", 0)); - * - * @param \Exception $exception Error number - * @throws \Exception - * - * @return mixed - */ - public function exception(\Exception $exception){ - $this->last_exception = $exception; - if(is_callable($this->exception_handler)){ - return call_user_func_array($this->exception_handler, array($exception, $this)); - } - throw $exception; - } - /** Set callable to handle thrown validation Errors - * - * This function sets the sandbox validation Error handler. The handler accepts the thrown Error and the sandbox - * instance as arguments. If the error handler does not handle validation errors correctly then the sandbox's - * security may become compromised! - * - * @example $sandbox->set_validation_error_handler(function(Error $e, PHPSandbox $s){}); //ignore all thrown Errors, INSECURE - * - * @param callable $handler Callable to handle thrown validation Errors - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_validation_error_handler($handler){ - $this->validation_error_handler = $handler; - return $this; - } - /** Get validation error handler - * - * This function returns the sandbox validation error handler. - * - * @example $sandbox->get_validation_error_handler(); //callable - * - * @return null|callable - */ - public function get_validation_error_handler(){ - return $this->validation_error_handler; - } - /** Unset validation error handler - * - * This function unsets the sandbox validation error handler. - * - * @example $sandbox->unset_validation_error_handler(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_validation_error_handler(){ - $this->validation_error_handler = null; - return $this; - } - - /** Gets the last validation error thrown by the sandbox - * @return \Exception|Error - */ - public function get_last_validation_error(){ - return $this->last_validation_error; - } - /** Invoke sandbox error validation handler if it exists, throw Error otherwise - * - * @example $sandbox->validation_error("Error!", 10000); - * - * @param \Exception|Error|string $error Error to throw if Error is not handled, or error message string - * @param int $code The error code - * @param \PHPParser_Node|null $node The error parser node - * @param mixed $data The error data - * @param \Exception|Error|null $previous The previous Error thrown - * - * @throws \Exception|Error - * @return mixed - */ - public function validation_error($error, $code = 0, \PHPParser_Node $node = null, $data = null, \Exception $previous = null){ - $error = ($error instanceof \Exception) - ? (($error instanceof Error) - ? new Error($error->getMessage(), $error->getCode(), $error->getNode(), $error->getData(), $error->getPrevious() ?: $this->last_validation_error) - : new Error($error->getMessage(), $error->getCode(), null, null, $error->getPrevious() ?: $this->last_validation_error)) - : new Error($error, $code, $node, $data, $previous ?: $this->last_validation_error); - $this->last_validation_error = $error; - if($this->validation_error_handler && is_callable($this->validation_error_handler)){ - $result = call_user_func_array($this->validation_error_handler, array($error, $this)); - if($result instanceof \Exception){ - throw $result; - } - return $result; - } else { - throw $error; - } - } - /** Get a named PHPSandbox instance (used to retrieve the sandbox instance from within sandboxed code) - * @param $name - * @return null|PHPSandbox - */ - public static function getSandbox($name){ - return isset(static::$sandboxes[$name]) ? static::$sandboxes[$name] : null; - } - - public function getIterator(){ - return new \ArrayIterator(get_object_vars($this)); - } - } diff --git a/vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.html b/vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.html deleted file mode 100644 index 9b07da8..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

SandboxWhitelistVisitor.php

-

SandboxWhitelistVisitor class declaration

- - - - - -

Classes

- - - - - -
SandboxWhitelistVisitorSandboxWhitelister class for PHP Sandboxes.
-
- - -
- - - -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.txt b/vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.txt deleted file mode 100644 index e1df988..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/SandboxWhitelistVisitor.php.txt +++ /dev/null @@ -1,62 +0,0 @@ - - * @version 1.3.6 - */ - class SandboxWhitelistVisitor extends \PHPParser_NodeVisitorAbstract { - /** The PHPSandbox instance to check against - * @var PHPSandbox - */ - protected $sandbox; - /** SandboxWhitelistVisitor class constructor - * - * This constructor takes a passed PHPSandbox instance to check against for whitelisting sandboxed code. - * - * @param PHPSandbox $sandbox The PHPSandbox instance to check against - */ - public function __construct(PHPSandbox $sandbox){ - $this->sandbox = $sandbox; - } - /** Examine the current PHPParser_Node node against the PHPSandbox configuration for whitelisting sandboxed code - * - * @param \PHPParser_Node $node The sandboxed $node to examine - */ - public function leaveNode(\PHPParser_Node $node){ - if($node instanceof \PHPParser_Node_Stmt_Class && is_string($node->name) && $this->sandbox->allow_classes && $this->sandbox->auto_whitelist_classes && !$this->sandbox->has_blacklist_classes()){ - $this->sandbox->whitelist_class($node->name); - $this->sandbox->whitelist_type($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Interface && is_string($node->name) && $this->sandbox->allow_interfaces && $this->sandbox->auto_whitelist_interfaces && !$this->sandbox->has_blacklist_interfaces()){ - $this->sandbox->whitelist_interface($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Trait && is_string($node->name) && $this->sandbox->allow_traits && $this->sandbox->auto_whitelist_traits && !$this->sandbox->has_blacklist_traits()){ - $this->sandbox->whitelist_trait($node->name); - } else if($node instanceof \PHPParser_Node_Expr_FuncCall && $node->name instanceof \PHPParser_Node_Name && $node->name->toString() == 'define' && $this->sandbox->allow_constants && $this->sandbox->auto_whitelist_constants && !$this->sandbox->is_defined_func('define') && !$this->sandbox->has_blacklist_consts()){ - $name = isset($node->args[0]) ? $node->args[0] : null; - if($name && $name instanceof \PHPParser_Node_Arg && $name->value instanceof \PHPParser_Node_Scalar_String && is_string($name->value->value) && $name->value->value){ - $this->sandbox->whitelist_const($name->value->value); - } - } else if($node instanceof \PHPParser_Node_Stmt_Global && $this->sandbox->allow_globals && $this->sandbox->auto_whitelist_globals && $this->sandbox->has_whitelist_vars()){ - foreach($node->vars as $var){ - /** - * @var \PHPParser_Node_Expr_Variable $var - */ - if($var instanceof \PHPParser_Node_Expr_Variable){ - $this->sandbox->whitelist_var($var->name); - } - } - } else if($node instanceof \PHPParser_Node_Stmt_Function && is_string($node->name) && $node->name && $this->sandbox->allow_functions && $this->sandbox->auto_whitelist_functions && !$this->sandbox->has_blacklist_funcs()){ - $this->sandbox->whitelist_func($node->name); - } - } - } diff --git a/vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.html b/vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.html deleted file mode 100644 index 508e6f0..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

SandboxedString.php

-

Sandboxed string class declaration

- - - - - -

Classes

- - - - - -
SandboxedStringSandboxed string class for PHP Sandboxes.
-
- - -
- - - -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.txt b/vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.txt deleted file mode 100644 index 42d6350..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/SandboxedString.php.txt +++ /dev/null @@ -1,93 +0,0 @@ - - * @version 1.3.6 - */ - class SandboxedString implements \ArrayAccess, \IteratorAggregate { - /** - * @var string - */ - private $value; - /** - * @var PHPSandbox - */ - private $sandbox; - /** Constructs the SandboxedString - * @param string $value Original string value - * @param PHPSandbox $sandbox The current sandbox instance to test against - */ - public function __construct($value, PHPSandbox $sandbox){ - $this->value = $value; - $this->sandbox = $sandbox; - } - /** Returns the original string value - * @return string - */ - public function __toString(){ - return strval($this->value); - } - /** Checks the string value against the sandbox function whitelists and blacklists for callback violations - * @return mixed|null - */ - public function __invoke(){ - if($this->sandbox->check_func($this->value)){ - $name = strtolower($this->value); - if((in_array($name, PHPSandbox::$defined_funcs) && $this->sandbox->overwrite_defined_funcs) - || (in_array($name, PHPSandbox::$sandboxed_string_funcs) && $this->sandbox->overwrite_sandboxed_string_funcs) - || (in_array($name, PHPSandbox::$arg_funcs) && $this->sandbox->overwrite_func_get_args)){ - return call_user_func_array(array($this->sandbox, '_' . $this->value), func_get_args()); - } - return call_user_func_array($name, func_get_args()); - } - return ''; - } - /** Set string value at specified offset - * @param mixed $offset Offset to set value - * @param mixed $value Value to set - */ - public function offsetSet($offset, $value){ - if($offset === null){ - $this->value .= $value; - } else { - $this->value[$offset] = $value; - } - } - /** Get string value at specified offset - * @param mixed $offset Offset to get value - * - * @return string Value to return - */ - public function offsetGet($offset){ - return $this->value[$offset]; - } - /** Check if specified offset exists in string value - * @param mixed $offset Offset to check - * - * @return bool Return true if offset exists, false otherwise - */ - public function offsetExists($offset){ - return isset($this->value[$offset]); - } - /** Unset string value at specified offset - * @param mixed $offset Offset to unset - */ - public function offsetUnset($offset){ - unset($this->value[$offset]); - } - /** Return iterator for string value - * @return \ArrayIterator Array iterator to return - */ - public function getIterator(){ - return new \ArrayIterator(str_split(strval($this->value))); - } - } diff --git a/vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.html b/vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.html deleted file mode 100644 index 0ae0026..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

ValidatorVisitor.php

-

ValidatorVisitor class declaration

- - - - - -

Classes

- - - - - -
ValidatorVisitorValidator class for PHP Sandboxes.
-
- - -
- - - -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.txt b/vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.txt deleted file mode 100644 index 26941ec..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/ValidatorVisitor.php.txt +++ /dev/null @@ -1,623 +0,0 @@ - - * @version 1.3.6 - */ - class ValidatorVisitor extends \PHPParser_NodeVisitorAbstract { - /** The PHPSandbox instance to check against - * @var PHPSandbox - */ - protected $sandbox; - /** ValidatorVisitor class constructor - * - * This constructor takes a passed PHPSandbox instance to check against for validating sandboxed code. - * - * @param PHPSandbox $sandbox The PHPSandbox instance to check against - */ - public function __construct(PHPSandbox $sandbox){ - $this->sandbox = $sandbox; - } - /** Examine the current PHPParser_Node node against the PHPSandbox configuration for validating sandboxed code - * - * @param \PHPParser_Node $node The sandboxed $node to validate - * - * @throws Error Throws an exception if validation fails - * - * @return \PHPParser_Node|bool|null Return rewritten node, false if node must be removed, or null if no changes to the node are made - */ - public function leaveNode(\PHPParser_Node $node){ - if($node instanceof \PHPParser_Node_Arg){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_wrap', array($node), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Stmt_InlineHTML){ - if(!$this->sandbox->allow_escaping){ - $this->sandbox->validation_error("Sandboxed code attempted to escape to HTML!", Error::ESCAPE_ERROR, $node); - } - }else if($node instanceof \PHPParser_Node_Expr_Cast){ - if(!$this->sandbox->allow_casting){ - $this->sandbox->validation_error("Sandboxed code attempted to cast!", Error::CAST_ERROR, $node); - } - if($node instanceof \PHPParser_Node_Expr_Cast_Int){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_intval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Double){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_floatval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Bool){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_boolval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Array){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_arrayval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Object){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_objectval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } - } else if($node instanceof \PHPParser_Node_Expr_FuncCall){ - if($node->name instanceof \PHPParser_Node_Name){ - $name = strtolower($node->name->toString()); - if(!$this->sandbox->check_func($name)){ - $this->sandbox->validation_error("Function failed custom validation!", Error::VALID_FUNC_ERROR, $node); - } - if($this->sandbox->is_defined_func($name)){ - $args = $node->args; - array_unshift($args, new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String($name))); - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), 'call_func', $args, $node->getAttributes()); - } - if($this->sandbox->overwrite_defined_funcs && in_array($name, PHPSandbox::$defined_funcs)){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, array(new \PHPParser_Node_Arg(new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name(array($name))))), $node->getAttributes()); - } - if($this->sandbox->overwrite_sandboxed_string_funcs && in_array($name, PHPSandbox::$sandboxed_string_funcs)){ - $args = $node->args; - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, $args, $node->getAttributes()); - } - if($this->sandbox->overwrite_func_get_args && in_array($name, PHPSandbox::$arg_funcs)){ - if($name == 'func_get_arg'){ - $index = new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_LNumber(0)); - if(isset($node->args[0]) && $node->args[0] instanceof \PHPParser_Node_Arg){ - $index = $node->args[0]; - } - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, array(new \PHPParser_Node_Arg(new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name(array('func_get_args')))), $index), $node->getAttributes()); - } - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, array(new \PHPParser_Node_Arg(new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name(array('func_get_args'))))), $node->getAttributes()); - } - } else { - return new \PHPParser_Node_Expr_Ternary( - new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), 'check_func', array(new \PHPParser_Node_Arg($node->name)), $node->getAttributes()), - $node, - new \PHPParser_Node_Expr_ConstFetch(new \PHPParser_Node_Name('null')) - ); - } - } else if($node instanceof \PHPParser_Node_Stmt_Function){ - if(!$this->sandbox->allow_functions){ - $this->sandbox->validation_error("Sandboxed code attempted to define function!", Error::DEFINE_FUNC_ERROR, $node); - } - if(!$this->sandbox->check_keyword('function')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'function'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed function!", Error::DEFINE_FUNC_ERROR, $node, ''); - } - if($this->sandbox->is_defined_func($node->name)){ - $this->sandbox->validation_error("Sandboxed code attempted to redefine function!", Error::DEFINE_FUNC_ERROR, $node, $node->name); - } - if($node->byRef && !$this->sandbox->allow_references){ - $this->sandbox->validation_error("Sandboxed code attempted to define function return by reference!", Error::BYREF_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Expr_Closure){ - if(!$this->sandbox->allow_closures){ - $this->sandbox->validation_error("Sandboxed code attempted to create a closure!", Error::CLOSURE_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Stmt_Class){ - if(!$this->sandbox->allow_classes){ - $this->sandbox->validation_error("Sandboxed code attempted to define class!", Error::DEFINE_CLASS_ERROR, $node); - } - if(!$this->sandbox->check_keyword('class')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'class'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed class!", Error::DEFINE_CLASS_ERROR, $node, ''); - } - if(!$this->sandbox->check_class($node->name)){ - $this->sandbox->validation_error("Class failed custom validation!", Error::VALID_CLASS_ERROR, $node, $node->name); - } - if($node->extends instanceof \PHPParser_Node_Name){ - if(!$this->sandbox->check_keyword('extends')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'extends'); - } - if(!$node->extends->toString()){ - $this->sandbox->validation_error("Sandboxed code attempted to extend unnamed class!", Error::DEFINE_CLASS_ERROR, $node, ''); - } - if(!$this->sandbox->check_class($node->extends->toString(), true)){ - $this->sandbox->validation_error("Class extension failed custom validation!", Error::VALID_CLASS_ERROR, $node, $node->extends->toString()); - } - } - if(is_array($node->implements)){ - if(!$this->sandbox->check_keyword('implements')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'implements'); - } - foreach($node->implements as $implement){ - /** - * @var \PHPParser_Node_Name $implement - */ - if(!$implement->toString()){ - $this->sandbox->validation_error("Sandboxed code attempted to implement unnamed interface!", Error::DEFINE_INTERFACE_ERROR, $node, ''); - } - if(!$this->sandbox->check_interface($implement->toString())){ - $this->sandbox->validation_error("Interface failed custom validation!", Error::VALID_INTERFACE_ERROR, $node, $implement->toString()); - } - } - } - } else if($node instanceof \PHPParser_Node_Stmt_Interface){ - if(!$this->sandbox->allow_interfaces){ - $this->sandbox->validation_error("Sandboxed code attempted to define interface!", Error::DEFINE_INTERFACE_ERROR, $node); - } - if(!$this->sandbox->check_keyword('interface')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'interface'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed interface!", Error::DEFINE_INTERFACE_ERROR, $node, ''); - } - if(!$this->sandbox->check_interface($node->name)){ - $this->sandbox->validation_error("Interface failed custom validation!", Error::VALID_INTERFACE_ERROR, $node, $node->name); - } - } else if($node instanceof \PHPParser_Node_Stmt_Trait){ - if(!$this->sandbox->allow_traits){ - $this->sandbox->validation_error("Sandboxed code attempted to define trait!", Error::DEFINE_TRAIT_ERROR, $node); - } - if(!$this->sandbox->check_keyword('trait')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'trait'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed trait!", Error::DEFINE_TRAIT_ERROR, $node, ''); - } - if(!$this->sandbox->check_trait($node->name)){ - $this->sandbox->validation_error("Trait failed custom validation!", Error::VALID_TRAIT_ERROR, $node, $node->name); - } - } else if($node instanceof \PHPParser_Node_Stmt_TraitUse){ - if(!$this->sandbox->check_keyword('use')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'use'); - } - if(is_array($node->traits)){ - foreach($node->traits as $trait){ - /** - * @var \PHPParser_Node_Name $trait - */ - if(!$trait->toString()){ - $this->sandbox->validation_error("Sandboxed code attempted to use unnamed trait!", Error::DEFINE_TRAIT_ERROR, $node, ''); - } - if(!$this->sandbox->check_trait($trait->toString())){ - $this->sandbox->validation_error("Trait failed custom validation!", Error::VALID_TRAIT_ERROR, $node, $trait->toString()); - } - } - } - } else if($node instanceof \PHPParser_Node_Expr_Yield){ - if(!$this->sandbox->allow_generators){ - $this->sandbox->validation_error("Sandboxed code attempted to create a generator!", Error::GENERATOR_ERROR, $node); - } - if(!$this->sandbox->check_keyword('yield')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'yield'); - } - } else if($node instanceof \PHPParser_Node_Stmt_Global){ - if(!$this->sandbox->allow_globals){ - $this->sandbox->validation_error("Sandboxed code attempted to use global keyword!", Error::GLOBALS_ERROR, $node); - } - if(!$this->sandbox->check_keyword('global')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'global'); - } - foreach($node->vars as $var){ - /** - * @var \PHPParser_Node_Expr_Variable $var - */ - if($var instanceof \PHPParser_Node_Expr_Variable){ - if(!$this->sandbox->check_global($var->name)){ - $this->sandbox->validation_error("Global failed custom validation!", Error::VALID_GLOBAL_ERROR, $node, $var->name); - } - } else { - $this->sandbox->validation_error("Sandboxed code attempted to pass non-variable to global keyword!", Error::DEFINE_GLOBAL_ERROR, $node); - } - } - } else if($node instanceof \PHPParser_Node_Expr_Variable){ - if(!is_string($node->name)){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named variable call!", Error::DYNAMIC_VAR_ERROR, $node); - } - if($node->name == $this->sandbox->name){ - $this->sandbox->validation_error("Sandboxed code attempted to access the PHPSandbox instance!", Error::SANDBOX_ACCESS_ERROR, $node); - } - if(in_array($node->name, PHPSandbox::$superglobals)){ - if(!$this->sandbox->check_superglobal($node->name)){ - $this->sandbox->validation_error("Superglobal failed custom validation!", Error::VALID_SUPERGLOBAL_ERROR, $node, $node->name); - } - if($this->sandbox->overwrite_superglobals){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_get_superglobal', array(new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String($node->name))), $node->getAttributes()); - } - } else { - if(!$this->sandbox->check_var($node->name)){ - $this->sandbox->validation_error("Variable failed custom validation!", Error::VALID_VAR_ERROR, $node, $node->name); - } - } - } else if($node instanceof \PHPParser_Node_Stmt_StaticVar){ - if(!$this->sandbox->allow_static_variables){ - $this->sandbox->validation_error("Sandboxed code attempted to create static variable!", Error::STATIC_VAR_ERROR, $node); - } - if(!is_string($node->name)){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named static variable call!", Error::DYNAMIC_STATIC_VAR_ERROR, $node); - } - if(!$this->sandbox->check_var($node->name)){ - $this->sandbox->validation_error("Variable failed custom validation!", Error::VALID_VAR_ERROR, $node, $node->name); - } - if($node->default instanceof \PHPParser_Node_Expr_New){ - $node->default = $node->default->args[0]; - } - } else if($node instanceof \PHPParser_Node_Stmt_Const){ - $this->sandbox->validation_error("Sandboxed code cannot use const keyword in the global scope!", Error::GLOBAL_CONST_ERROR, $node); - } else if($node instanceof \PHPParser_Node_Expr_ConstFetch){ - if(!$node->name instanceof \PHPParser_Node_Name){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named constant call!", Error::DYNAMIC_CONST_ERROR, $node); - } - if(!$this->sandbox->check_const($node->name->toString())){ - $this->sandbox->validation_error("Constant failed custom validation!", Error::VALID_CONST_ERROR, $node, $node->name->toString()); - } - } else if($node instanceof \PHPParser_Node_Expr_ClassConstFetch || $node instanceof \PHPParser_Node_Expr_StaticCall || $node instanceof \PHPParser_Node_Expr_StaticPropertyFetch){ - $class = $node->class; - if(!$class instanceof \PHPParser_Node_Name){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named class call!", Error::DYNAMIC_CLASS_ERROR, $node); - } - if($this->sandbox->is_defined_class($class)){ - $node->class = new \PHPParser_Node_Name($this->sandbox->get_defined_class($class)); - } - /** - * @var \PHPParser_Node_Name $class - */ - if(!$this->sandbox->check_class($class->toString())){ - $this->sandbox->validation_error("Class constant failed custom validation!", Error::VALID_CLASS_ERROR, $node, $class->toString()); - } - return $node; - } else if($node instanceof \PHPParser_Node_Param && $node->type instanceof \PHPParser_Node_Name){ - $class = $node->type->toString(); - if($this->sandbox->is_defined_class($class)){ - $node->type = new \PHPParser_Node_Name($this->sandbox->get_defined_class($class)); - } - return $node; - } else if($node instanceof \PHPParser_Node_Expr_New){ - if(!$this->sandbox->allow_objects){ - $this->sandbox->validation_error("Sandboxed code attempted to create object!", Error::CREATE_OBJECT_ERROR, $node); - } - if(!$this->sandbox->check_keyword('new')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'new'); - } - if(!$node->class instanceof \PHPParser_Node_Name){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named class call!", Error::DYNAMIC_CLASS_ERROR, $node); - } - $class = $node->class->toString(); - if($this->sandbox->is_defined_class($class)){ - $node->class = new \PHPParser_Node_Name($this->sandbox->get_defined_class($class)); - } - $this->sandbox->check_type($class); - return $node; - } else if($node instanceof \PHPParser_Node_Expr_ErrorSuppress){ - if(!$this->sandbox->allow_error_suppressing){ - $this->sandbox->validation_error("Sandboxed code attempted to suppress error!", Error::ERROR_SUPPRESS_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Expr_AssignRef){ - if(!$this->sandbox->allow_references){ - $this->sandbox->validation_error("Sandboxed code attempted to assign by reference!", Error::BYREF_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Stmt_HaltCompiler){ - if(!$this->sandbox->allow_halting){ - $this->sandbox->validation_error("Sandboxed code attempted to halt compiler!", Error::HALT_ERROR, $node); - } - if(!$this->sandbox->check_keyword('halt')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'halt'); - } - } else if($node instanceof \PHPParser_Node_Stmt_Namespace){ - if(!$this->sandbox->allow_namespaces){ - $this->sandbox->validation_error("Sandboxed code attempted to define namespace!", Error::DEFINE_NAMESPACE_ERROR, $node); - } - if(!$this->sandbox->check_keyword('namespace')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'namespace'); - } - if($node->name instanceof \PHPParser_Node_Name){ - $namespace = $node->name->toString(); - $this->sandbox->check_namespace($namespace); - if(!$this->sandbox->is_defined_namespace($namespace)){ - $this->sandbox->define_namespace($namespace); - } - } else { - $this->sandbox->validation_error("Sandboxed code attempted use invalid namespace!", Error::DEFINE_NAMESPACE_ERROR, $node); - } - return $node->stmts; - } else if($node instanceof \PHPParser_Node_Stmt_Use){ - if(!$this->sandbox->allow_aliases){ - $this->sandbox->validation_error("Sandboxed code attempted to use namespace and/or alias!", Error::DEFINE_ALIAS_ERROR, $node); - } - if(!$this->sandbox->check_keyword('use')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'use'); - } - foreach($node->uses as $use){ - /** - * @var \PHPParser_Node_Stmt_UseUse $use - */ - if($use instanceof \PHPParser_Node_Stmt_UseUse && $use->name instanceof \PHPParser_Node_Name && (is_string($use->alias) || is_null($use->alias))){ - $this->sandbox->check_alias($use->name->toString()); - if($use->alias){ - if(!$this->sandbox->check_keyword('as')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'as'); - } - } - $this->sandbox->define_alias($use->name->toString(), $use->alias); - } else { - $this->sandbox->validation_error("Sandboxed code attempted use invalid namespace or alias!", Error::DEFINE_ALIAS_ERROR, $node); - } - } - return false; - } else if($node instanceof \PHPParser_Node_Expr_ShellExec){ - if($this->sandbox->is_defined_func('shell_exec')){ - $args = array( - new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String('shell_exec')), - new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String(implode('', $node->parts))) - ); - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), 'call_func', $args, $node->getAttributes()); - } - if($this->sandbox->has_whitelist_funcs()){ - if(!$this->sandbox->is_whitelisted_func('shell_exec')){ - $this->sandbox->validation_error("Sandboxed code attempted to use shell execution backticks when the shell_exec function is not whitelisted!", Error::BACKTICKS_ERROR, $node); - } - } else if($this->sandbox->has_blacklist_funcs() && $this->sandbox->is_blacklisted_func('shell_exec')){ - $this->sandbox->validation_error("Sandboxed code attempted to use shell execution backticks when the shell_exec function is blacklisted!", Error::BACKTICKS_ERROR, $node); - } - if(!$this->sandbox->allow_backticks){ - $this->sandbox->validation_error("Sandboxed code attempted to use shell execution backticks!", Error::BACKTICKS_ERROR, $node); - } - } else if($name = $this->is_magic_const($node)){ - if(!$this->sandbox->check_magic_const($name)){ - $this->sandbox->validation_error("Magic constant failed custom validation!", Error::VALID_MAGIC_CONST_ERROR, $node, $name); - } - if($this->sandbox->is_defined_magic_const($name)){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_get_magic_const', array(new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String($name))), $node->getAttributes()); - } - } else if($name = $this->is_keyword($node)){ - if(!$this->sandbox->check_keyword($name)){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, $name); - } - } else if($name = $this->is_operator($node)){ - if(!$this->sandbox->check_operator($name)){ - $this->sandbox->validation_error("Operator failed custom validation!", Error::VALID_OPERATOR_ERROR, $node, $name); - } - } else if($name = $this->is_primitive($node)){ - if(!$this->sandbox->check_primitive($name)){ - $this->sandbox->validation_error("Primitive failed custom validation!", Error::VALID_PRIMITIVE_ERROR, $node, $name); - } - } - return null; - } - /** Test the current PHPParser_Node node to see if it is a magic constant, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not a magic constant - */ - protected function is_magic_const(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Scalar_ClassConst': - return '__CLASS__'; - case 'Scalar_DirConst': - return '__DIR__'; - case 'Scalar_FileConst': - return '__FILE__'; - case 'Scalar_FuncConst': - return '__FUNCTION__'; - case 'Scalar_LineConst': - return '__LINE__'; - case 'Scalar_MethodConst': - return '__METHOD__'; - case 'Scalar_NSConst': - return '__NAMESPACE__'; - case 'Scalar_TraitConst': - return '__TRAIT__'; - } - return null; - } - /** Test the current PHPParser_Node node to see if it is a keyword, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not a keyword - */ - protected function is_keyword(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Expr_Eval': - return 'eval'; - case 'Expr_Exit': - return 'exit'; - case 'Expr_Include': - return 'include'; - case 'Stmt_Echo': - case 'Expr_Print': //for our purposes print is treated as functionally equivalent to echo - return 'echo'; - case 'Expr_Clone': - return 'clone'; - case 'Expr_Empty': - return 'empty'; - case 'Expr_Yield': - return 'yield'; - case 'Stmt_Goto': - case 'Stmt_Label': //no point in using labels without goto - return 'goto'; - case 'Stmt_If': - case 'Stmt_Else': //no point in using ifs without else - case 'Stmt_ElseIf': //no point in using ifs without elseif - return 'if'; - case 'Stmt_Break': - return 'break'; - case 'Stmt_Switch': - case 'Stmt_Case': //no point in using cases without switch - return 'switch'; - case 'Stmt_Try': - case 'Stmt_Catch': //no point in using catch without try - case 'Stmt_TryCatch': //no point in using try, catch or finally without try - return 'try'; - case 'Stmt_Throw': - return 'throw'; - case 'Stmt_Unset': - return 'unset'; - case 'Stmt_Return': - return 'return'; - case 'Stmt_Static': - return 'static'; - case 'Stmt_While': - case 'Stmt_Do': //no point in using do without while - return 'while'; - case 'Stmt_Declare': - case 'Stmt_DeclareDeclare': //no point in using declare key=>value without declare - return 'declare'; - case 'Stmt_For': - case 'Stmt_Foreach': //no point in using foreach without for - return 'for'; - case 'Expr_Instanceof': - return 'instanceof'; - case 'Expr_Isset': - return 'isset'; - case 'Expr_List': - return 'list'; - } - return null; - } - /** Test the current PHPParser_Node node to see if it is an operator, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not an operator - */ - protected function is_operator(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Expr_Assign': - return '='; - case 'Expr_AssignBitwiseAnd': - return '&='; - case 'Expr_AssignBitwiseOr': - return '|='; - case 'Expr_AssignBitwiseXor': - return '^='; - case 'Expr_AssignConcat': - return '.='; - case 'Expr_AssignDiv': - return '/='; - case 'Expr_AssignMinus': - return '-='; - case 'Expr_AssignMod': - return '%='; - case 'Expr_AssignMul': - return '*='; - case 'Expr_AssignPlus': - return '+='; - case 'Expr_AssignRef': - return '=&'; - case 'Expr_AssignShiftLeft': - return '<<='; - case 'Expr_AssignShiftRight': - return '>>='; - case 'Expr_BitwiseAnd': - return '&'; - case 'Expr_BitwiseNot': - return '~'; - case 'Expr_BitwiseOr': - return '|'; - case 'Expr_BitwiseXor': - return '^'; - case 'Expr_BooleanAnd': - return '&&'; - case 'Expr_BooleanNot': - return '!'; - case 'Expr_BooleanOr': - return '||'; - case 'Expr_Concat': - return '.'; - case 'Expr_Div': - return '/'; - case 'Expr_Equal': - return '=='; - case 'Expr_Greater': - return '>'; - case 'Expr_GreaterOrEqual': - return '>='; - case 'Expr_Identical': - return '==='; - case 'Expr_LogicalAnd': - return 'and'; - case 'Expr_LogicalOr': - return 'or'; - case 'Expr_LogicalXor': - return 'xor'; - case 'Expr_Minus': - return '-'; - case 'Expr_Mod': - return '%'; - case 'Expr_Mul': - return '*'; - case 'Expr_NotEqual': - return '!='; - case 'Expr_NotIdentical': - return '!=='; - case 'Expr_Plus': - return '+'; - case 'Expr_PostDec': - return 'n--'; - case 'Expr_PostInc': - return 'n++'; - case 'Expr_PreDec': - return '--n'; - case 'Expr_PreInc': - return '++n'; - case 'Expr_ShiftLeft': - return '<<'; - case 'Expr_ShiftRight': - return '>>'; - case 'Expr_Smaller': - return '<'; - case 'Expr_SmallerOrEqual': - return '<='; - case 'Expr_Ternary': - return '?'; - case 'Expr_UnaryMinus': - return '-n'; - case 'Expr_UnaryPlus': - return '+n'; - } - return null; - } - /** Test the current PHPParser_Node node to see if it is a primitive, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not a primitive - */ - protected function is_primitive(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Expr_Cast_Array': - case 'Expr_Array': - return 'array'; - case 'Expr_Cast_Bool': //booleans are treated as constants otherwise. . . - return 'bool'; - case 'Expr_Cast_String': - case 'Scalar_String': - case 'Scalar_Encapsed': - return 'string'; - case 'Expr_Cast_Double': - case 'Scalar_DNumber': - return 'float'; - case 'Expr_Cast_Int': - case 'Scalar_LNumber': - return 'int'; - case 'Expr_Cast_Object': - return 'object'; - } - return null; - } - } diff --git a/vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.html b/vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.html deleted file mode 100644 index 3cc1135..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- - - -

WhitelistVisitor.php

-

WhitelistVisitor class declaration

- - - - - -

Classes

- - - - - -
WhitelistVisitorWhitelister class for PHP Sandboxes.
-
- - -
- - - -
-
- - - - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.txt b/vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.txt deleted file mode 100644 index dadc1ae..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/files/WhitelistVisitor.php.txt +++ /dev/null @@ -1,95 +0,0 @@ - - * @version 1.3.6 - */ - class WhitelistVisitor extends \PHPParser_NodeVisitorAbstract { - /** The PHPSandbox instance to check against - * @var PHPSandbox - */ - protected $sandbox; - /** WhitelistVisitor class constructor - * - * This constructor takes a passed PHPSandbox instance to check against for whitelisting trusted code. - * - * @param PHPSandbox $sandbox The PHPSandbox instance to check against - */ - public function __construct(PHPSandbox $sandbox){ - $this->sandbox = $sandbox; - } - /** Examine the current PHPParser_Node node against the PHPSandbox configuration for whitelisting trusted code - * - * @param \PHPParser_Node $node The trusted $node to examine - * - * @return null|bool Return false if node must be removed, or null if no changes to the node are made - */ - public function leaveNode(\PHPParser_Node $node){ - if($node instanceof \PHPParser_Node_Expr_FuncCall && $node->name instanceof \PHPParser_Node_Name && !$this->sandbox->has_blacklist_funcs()){ - $this->sandbox->whitelist_func($node->name->toString()); - } else if($node instanceof \PHPParser_Node_Stmt_Function && is_string($node->name) && $node->name && !$this->sandbox->has_blacklist_funcs()){ - $this->sandbox->whitelist_func($node->name); - } else if(($node instanceof \PHPParser_Node_Expr_Variable || $node instanceof \PHPParser_Node_Stmt_StaticVar) && is_string($node->name) && $this->sandbox->has_whitelist_vars() && !$this->sandbox->allow_variables){ - $this->sandbox->whitelist_var($node->name); - } else if($node instanceof \PHPParser_Node_Expr_FuncCall && $node->name instanceof \PHPParser_Node_Name && $node->name->toString() == 'define' && !$this->sandbox->is_defined_func('define') && !$this->sandbox->has_blacklist_consts()){ - $name = isset($node->args[0]) ? $node->args[0] : null; - if($name && $name instanceof \PHPParser_Node_Arg && $name->value instanceof \PHPParser_Node_Scalar_String && is_string($name->value->value) && $name->value->value){ - $this->sandbox->whitelist_const($name->value->value); - } - } else if($node instanceof \PHPParser_Node_Expr_ConstFetch && $node->name instanceof \PHPParser_Node_Name && !$this->sandbox->has_blacklist_consts()){ - $this->sandbox->whitelist_const($node->name->toString()); - } else if($node instanceof \PHPParser_Node_Stmt_Class && is_string($node->name) && !$this->sandbox->has_blacklist_classes()){ - $this->sandbox->whitelist_class($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Interface && is_string($node->name) && !$this->sandbox->has_blacklist_interfaces()){ - $this->sandbox->whitelist_interface($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Trait && is_string($node->name) && !$this->sandbox->has_blacklist_traits()){ - $this->sandbox->whitelist_trait($node->name); - } else if($node instanceof \PHPParser_Node_Expr_New && $node->class instanceof \PHPParser_Node_Name && !$this->sandbox->has_blacklist_types()){ - $this->sandbox->whitelist_type($node->class->toString()); - } else if($node instanceof \PHPParser_Node_Stmt_Global && $this->sandbox->has_whitelist_vars()){ - foreach($node->vars as $var){ - /** - * @var \PHPParser_Node_Expr_Variable $var - */ - if($var instanceof \PHPParser_Node_Expr_Variable){ - $this->sandbox->whitelist_var($var->name); - } - } - } else if($node instanceof \PHPParser_Node_Stmt_Namespace){ - if($node->name instanceof \PHPParser_Node_Name){ - $name = $node->name->toString(); - $this->sandbox->check_namespace($name); - if(!$this->sandbox->is_defined_namespace($name)){ - $this->sandbox->define_namespace($name); - } - } - return false; - } else if($node instanceof \PHPParser_Node_Stmt_Use){ - foreach($node->uses as $use){ - /** - * @var \PHPParser_Node_Stmt_UseUse $use - */ - if($use instanceof \PHPParser_Node_Stmt_UseUse && $use->name instanceof \PHPParser_Node_Name && (is_string($use->alias) || is_null($use->alias))){ - $name = $use->name->toString(); - $this->sandbox->check_alias($name); - if(!$this->sandbox->is_defined_alias($name)){ - $this->sandbox->define_alias($name, $use->alias); - } - } - } - return false; - } - return null; - } - } diff --git a/vendor/fieryprophet/php-sandbox/docs/graphs/class.html b/vendor/fieryprophet/php-sandbox/docs/graphs/class.html deleted file mode 100644 index 8e0af68..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/graphs/class.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/images/custom-icons.svg b/vendor/fieryprophet/php-sandbox/docs/images/custom-icons.svg deleted file mode 100644 index c6b8037..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/images/custom-icons.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/vendor/fieryprophet/php-sandbox/docs/images/hierarchy-item.png b/vendor/fieryprophet/php-sandbox/docs/images/hierarchy-item.png deleted file mode 100644 index c7756e75ac9fc933cbd3b26d0f2817d33857d15b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+o!2~3GGZMc6Ddu7)&kzm{j@u9Y9{{-mC9V-A z!TD(=<%vb948a+tB_*jv$xRnHfpQ(5E{-7@=aWs$%+eI33=AhQX#}3tTDL~=wC|Fv zu%{hu$0B^+IX=i!aWC8~w073*RaN&Uv6)APHLbdN<3>b%>>TUAi;C*}O=q!*m27po z*1LM!!3v?DGncuq?yGJ6C|P)9&kpBM|CRr~zT5MTS-)Pmq&#hz+O8m*w9T6~{rmTK i_6>m}i>4eazx`$b{PnHj4|Gm%darcLQk;o* zf#$tx=CVf?b@LflRVgT`A4r>)ny*wOfBfV0Re8*{>=Tw{&Jvb7&^=Rj=FL?dSI+o+ zj+wDu!1bbDfvS@D-MsHb)4DtUth5UMD^ajC=%tzbteK)-Y1>$NqSuB6eNo_^)WOrR zY1Opp)8-WOJ21tpe#PamG$?X)*y`7bP0l+XkK@Tjds diff --git a/vendor/fieryprophet/php-sandbox/docs/images/icon-class.svg b/vendor/fieryprophet/php-sandbox/docs/images/icon-class.svg deleted file mode 100644 index 7dacd0c..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/images/icon-class.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/vendor/fieryprophet/php-sandbox/docs/images/icon-interface-13x13.png b/vendor/fieryprophet/php-sandbox/docs/images/icon-interface-13x13.png deleted file mode 100644 index aa24fa96a487f029b3d4ce8c94d363450d4d17f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?f#ZI0f96(URkK{-HEu#$20vdnjmCqCCqTlR9{ z``_NTxAhrHntD@-v|F+sFBiRXjpPCa_N - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/vendor/fieryprophet/php-sandbox/docs/images/icon-trait-13x13.png b/vendor/fieryprophet/php-sandbox/docs/images/icon-trait-13x13.png deleted file mode 100644 index 3c2792b1b1bd6b2ffed9fa34e05db2b7405c1503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?f#ZI0f96(URkpP3?N+}ye3 zderN?20Z@Of&3c#Z@=H~WO&R%^mySNk6l@_p4G1U|05->KS%sy!2_jpLKim9y=2w0 eH#6MfJFD7!kJZ`Qj1oZ4F?hQAxvX - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/vendor/fieryprophet/php-sandbox/docs/images/iviewer/grab.cur b/vendor/fieryprophet/php-sandbox/docs/images/iviewer/grab.cur deleted file mode 100644 index ef540be09383a215ba21287683ae956b74a6dbbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmeHEF%H8Z3_L;+LM2k9N*yv~>~H#wK9i4B>Jy?)*;1Rr5Mf~HSVzWizBA$iDEg)e zv@Up@fGdC-B|(IIaVjw`XMnR4do4(}ceLED$#?I4PhZt?V;F{(zNyX4aU6>oTI<~I zR%1+|Z@pO>D9unx@mz^sV2R6KAHrH&a3w(Uah_+1dcf$ic$W0J$AsEGc`x}F-{G8# oT0W#ZA~$;zN&n?%4r~@-v(K$0B;Q#;t diff --git a/vendor/fieryprophet/php-sandbox/docs/images/iviewer/hand.cur b/vendor/fieryprophet/php-sandbox/docs/images/iviewer/hand.cur deleted file mode 100644 index 1a5bafb5263fd4937dda4098b04aa5c70e2de924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcma)3OKyWe4E694LIn}22q6~8?0U4`qB$BzVUYuLnN^5A#g-vqrbZ8co}UNC0FIu^ z1?Y|NodI+J@I{~!RsQPaynTKEFe0{|*)R-iM9cJuPktQ*F&}vmxJX7;nU}sFz|xzG*A)o1}vy~Np8!oh{{D) z3FWrSE(G-lOIo^%@l%Jh z7d(bKZD(=f(+rDu3Ibk!p~fAzvAEw(G5oFaf>VGX;I$X`=G^#MhKzfwaaX++^R_aG z{23g@-KfbsV!rlS8y~jNpC$Q98001E5Sq?VpxukSs-?)+t$^aeGL+RsprA4wk<#_> z_+u(WTiH*vZ^%;_bKH_BUEq}jd#?-l#9J=q_v{?VaI4}Q9JQ|FoaxO4M#r~&(9l-@ga5_qddH0^Pp)3D%%13U()$KPZ9mfuKHeN zh|FV%AcKd9$Xte~JpHr7ISdEsS=dbylRpV}b%EG*(H$Zm7BrYE89CoGzCv2mgg*7U?}T-eQj1 z{ctQepE}YD%L6}S{pbtWcxoXGX*qRvIs~7NleuJ1rI2sTU9}wgEO}#naM{Mwl$wh8u zCnBy@;!tLlFk2ANZy*yRh*u1IjEu7sgd^u~j?-pP>cuPS5S69F5h60HO2`84nde#W zyHhV;*NN!tY8*EZeXCkX$LB3TNWEh+HIj>(aWc0CrwBgBQY@5_fO(q}ggUVHfHYwh z33cBmty=DP=A9=gECUXndMm_NP*e}Z-LCDyS)!}~n7b*S3$R(WUj{y!TOYyebROJ- zFF$p&>5+Q7DfKeS+K_mst_KprM8H(Hy%~al3{|Z#A5JZTYe-7!V4F>!)KgSFrn=vN z3kCIkDE(K!G*^RwzlwE`Dy#7rUC1u2#kz=0tng2mHP|cZPQ4qN4qPSy<|wW2D5KC{MlR z;>)=A5V)!Cz;#udS#FfKqnHHD=_R1Ptpjzf{nOgnDXf!ZtKqUo3Ky}YM}T&xUI8_p z+{#DD)pj7q40-gM-UA6eVt~J6Ck37*j6+@9f{jOSVfEgWC}V(*7I~i&Dx8uU4S&P_ z;3=qW>uyHVjD_fF#+pz$KVvi(@T$|6gmQ;1NkX6Jb)Y}^@BGWy!Sjrgf9<#ho=bDz zCj-9w{fH|?2J}+O500000NkvXXu0mjf*RRDb diff --git a/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.rotate_right.png b/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.rotate_right.png deleted file mode 100644 index 7a6c829871d058af5a5ca0ac67256c259f84c5ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1482 zcmV;*1vUDKP)W@q8L24va@vW@P7*!=(&yIADtgIo?`IW@@z#oP%kAO5~e4>aSvdau$keO zelrxe7h>a?XEPGL-8ZvUK7S5JxO_SC%cam%h9U3nOynA8Bd1~p@(p_slER=;FN42~ zVT$Cx%L&IBfqkNPU0Q$wV<=M8^Ktsd`-seX8%Hx4(Mza9RSeQph6Cvg*A2_?bs*!Z zJm9Mh7vz)H#bKgf96Z*=%6lrx!F>}8+<9p(ZW^~EGIuaSuQBYWfCsY}!gCl75#iYs zn4X1YwmkE{L{qbYU7_|vC;44Kc>_>d53G;Ofy>H6K72&Q1n)K0hYkOJ{}5yueQ_kO zAEZ3kO@`uTdQ^;QD4P$Xc-46$f7y>g|g44T+ z#BgE=@!>Z#-vKoL6Wa&pE*R*#HWno`0s)tGNL1G$LZyexFDGPt0qahH^Hl0tOywX% zlsY1!jA8k4hEa>zCTrlAtqC<~Car`X>shKzaMo5pP+|!}lx4#8x7#jb=yVHAyecTTC4J8t z#9H#H1x)ab5$qRn{T_~Gwh%$&8k>4#Nl^>etY1&RH*c@JV*VdWES08K(6hJ3ua1F+ z1Vqx@pUkersqB_Ip|BQ5mEtYg?Pld26u-(ZDhIXZN8p8vpywZqUmXq21K`XJ6VBRD zSPjgUh_hsuo0Zq@#H52sg=lQDK%p}U0=)MqxPXrz3y|HcLaYr6jTyT{TGH;2&kl$g zvn(tPnZ+iUo13A~-oxKTMnQmAi+~YaKrsopkYC+_iv!`6FZ*8at59p?CSTLD^ce@1hVDp0-#Q zq7i&EGSIAWEAo-(3@vR~e8qHMf3DS%&Pzg-H4FABh2HRK5QhTu_A0SBL~)<~@sXQv zl!l*(`MH4my)*cGH#$9gu8S$5cCU4I9uNy}^C|I;^|0b5vYngtVB^%;d7vlsx1OAw ktS2S0?VM~5JkO{63m1~IVD>3BuK)l507*qoM6N<$f)6RO6951J diff --git a/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_fit.png b/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_fit.png deleted file mode 100644 index 364e01d90eae19584713851314629f2468198e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmbVMZD`zN9M7nO!F>6)Qu>rmKTa$KDx31r-tX6e<%`(6Krd_QfiW`8t`1_@uq7ekl83AbH+? zzu*7$$#_?1`>KY!8VG_|C2bSZcx-mx`sMihAai~i59?7fi@MD`D#97s?^ptvbD@%0UaWlEb9Y?!POak>Kac>j_lvC`$F%JGkXW>_ZEGx zJom!Kv#(7V2O9tK-kSZb!BUHpo@HF_;W5I?7`%^kn|fV6LyKC%38?;(5V z!PU9ZKS#&d``e%Ktf-E%=q0M&EZqyy}ir$_H&JcW2fJ{{PgiX z8-IUUIXQgrq&9v}_F_|k9sDEvsw97zUz^v|wk^6~k{(E}g+-F{ISKr))j<47BXr41~e0blAr&bSs z|IrSo^7@evzS-=(@x`Huqc2r99GkQ^PabxeDqKE2-7pQ1>fi>@%sWi*eedZ1Y?O%#JYqAlBWQjldYscGecHU zg%s&*JUU5b0YHS4wwDMcmP5FMWn^R!Bl9wx$OeF{94|*YYA6A$q^fAQR`OuPF9B(% zR#J>vU<+rUs_EP&o+@f8usfP+92%!2CmYQ2;-UaU2_)!cYTX{(tCg(l;^I8G4N1Ut zh)|=IY&cb7v4IAbr$9^wOC7Kh29<~mkt? zy6{56v}sFRX(iQyz~K<#uSL*ic3n>tk$HCK_ zK(lTzs7O|_b%ItRdb$w;!&xj_!fwxIqQsOzUXp_l84NK@Fs^m9M<}HJbz@t!$KJ?M zP$A`E>v)G)57)jBS6;_)Fv2Ks*P|kY8`^A2u!ZfsWAnHVJ68Y*ZF@k28qrD)nZSf_1^Pw#| z@pZkmCA&G}0&7bcjq%x*?aRCV3irha4o~M_DArx{=C$ijm7gxpJfn{2L~$I+EADGSEAJts^bthXdZ0!+7(pGrKca+s`)MokNH6@80m`S3a@u zY1ygFvFkgB8j(NleZ>ubn=|IJ|7-yHzY}KZV-M0lk+#l6X1~TQy|p*uWp8(@{ii>t zUM%g1pU@A_-dyI62l_3g1J;f*Z-2$!(N|(ifOlu2-fw+1YIXRfE0Nik_Z$MUT=6@` he~f-qo>Y;tmQ(?tGoVp(DLyXve>58lh(UdY?;kaa{Rsd7 diff --git a/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_out.png b/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_out.png deleted file mode 100644 index 893f3502baaab667354fe8b560c1712b72630836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1416 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsddyBS)T zxj4DGI+;7U8WbpSnwXlJx+y{RrjQe2`as9%gOUbPQh^Bp(;tWlPxwF%JnN+90rN`{ zFk|eTuyZ2=1LH1F7srr_TYIJ*^g8Sy&?e2@*d%abWdMgri<5t&U4#0<`~ZPHTulKV zL_SFVVrt@l5PQLUVYuUp3a@^r?zky&+EXok@RH&z@w!8r$f$z%0{cUx;M)M%(BO@dlSAr|x|-`3zUuyW0)IVtW>|s>WVT?mGEc zSkr=`cGH2CXUi731dH|WWa9iWg>~1jL@c(3*I%OB-d`n9ld0_~{X@e~VM+?bvqa&xDF~4=3Dc{-t;PQB<+c zv78v6y_Q$sW5p8UNtB8n}}+(%+^^VTDLxDs_M@V zktZgdHP!#l9(Qv}igT01!>vuNAL^777;7#{%n;%?`4GGKfzXddg$9fTvuy=L>XpA# emo~({32$Iz;FK4L4Ckl>myMpTelF{r5}E)fw)-Uj diff --git a/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_zero.png b/vendor/fieryprophet/php-sandbox/docs/images/iviewer/iviewer.zoom_zero.png deleted file mode 100644 index c981db6d690774d0c2e67e21c9081d5c89b5fd2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmbVL&ui0A9M4pSOy+USDH`Jt54L&lWo?(ZTAQSq1v^VuUA;)t~d_LcwSBo>#!$V_3 z9LEjkPwFMM?vLJ`gY0_@JiN=6Jv3LLv!qU2W`Mb@O=_6WyXHJDVbfl^_!>`f+;-b3 zS7@bhO0kF=HzS*P+w~cm6!@+QT}TTXPE`s;ULyhK6LAo; zKoamt7>CkCDwR6QBLIO2kO)x>rW6S&0Pwv>U}}L~S4z6k(_*Kz(4f>;M6uOs#amLG z1oI-4WjW$ND8?*e;gUzqcFYS8^%-;=T7lzJhj@I%Xx2!RrUmBdMhLE7C~OjYVJ}fE zWn$a(MHmO7>qc>PtwUPEf85y8IxH{wSS;a?Gy{v(qkgClX1V*fP-MuwQBDUAD~h?O z6RYWBkLLBX!2ZN-$5tc*P9}BL$f+qc2OyjTdQR0O9U94`B&o2^u@x4nAeBw1(2x=n z5avKO31v+Nl7u7!=(60$=Dm=bo`w6m4%6*n!9THz7GRT-piIbOzXOU5LP^*lKCjIt z_&LY3Nh^$svk|L~1LqR9jexj(H@k|ng?bW90+iEJ2GWfvYE_c6auz`iY1tG)S)qru z|0iQ2b4H9>hb!)51ol8qidf>uee2NcllE7&Y7PpcX!=7_qbu-x&Nqo^YXsS zx4psB1L(rH2OVv_Ry|wWf8@aTYwPTIZ{+>+x4F)XFBxU;`RVIF##f(pxPd|L)0^?x S8}D{hqp{BCX7q<@b>%mi3|d_P diff --git a/vendor/fieryprophet/php-sandbox/docs/index.html b/vendor/fieryprophet/php-sandbox/docs/index.html deleted file mode 100644 index 60fec89..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/index.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- -

\

- -

Namespaces

- - - - -
PHPSandbox
- - - -
- - -
- - - -
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.js b/vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.js deleted file mode 100644 index 7220bdb..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.js +++ /dev/null @@ -1,602 +0,0 @@ -/* - * jQuery dotdotdot 1.5.9 - * - * Copyright (c) 2013 Fred Heusschen - * www.frebsite.nl - * - * Plugin website: - * dotdotdot.frebsite.nl - * - * Dual licensed under the MIT and GPL licenses. - * http://en.wikipedia.org/wiki/MIT_License - * http://en.wikipedia.org/wiki/GNU_General_Public_License - */ - -(function( $ ) -{ - if ( $.fn.dotdotdot ) - { - return; - } - - $.fn.dotdotdot = function( o ) - { - if ( this.length == 0 ) - { - if ( !o || o.debug !== false ) - { - debug( true, 'No element found for "' + this.selector + '".' ); - } - return this; - } - if ( this.length > 1 ) - { - return this.each( - function() - { - $(this).dotdotdot( o ); - } - ); - } - - - var $dot = this; - - if ( $dot.data( 'dotdotdot' ) ) - { - $dot.trigger( 'destroy.dot' ); - } - - $dot.data( 'dotdotdot-style', $dot.attr( 'style' ) ); - $dot.css( 'word-wrap', 'break-word' ); - - $dot.bind_events = function() - { - $dot.bind( - 'update.dot', - function( e, c ) - { - e.preventDefault(); - e.stopPropagation(); - - opts.maxHeight = ( typeof opts.height == 'number' ) - ? opts.height - : getTrueInnerHeight( $dot ); - - opts.maxHeight += opts.tolerance; - - if ( typeof c != 'undefined' ) - { - if ( typeof c == 'string' || c instanceof HTMLElement ) - { - c = $('
').append( c ).contents(); - } - if ( c instanceof $ ) - { - orgContent = c; - } - } - - $inr = $dot.wrapInner( '
' ).children(); - $inr.empty() - .append( orgContent.clone( true ) ) - .css({ - 'height' : 'auto', - 'width' : 'auto', - 'border' : 'none', - 'padding' : 0, - 'margin' : 0 - }); - - var after = false, - trunc = false; - - if ( conf.afterElement ) - { - after = conf.afterElement.clone( true ); - conf.afterElement.remove(); - } - if ( test( $inr, opts ) ) - { - if ( opts.wrap == 'children' ) - { - trunc = children( $inr, opts, after ); - } - else - { - trunc = ellipsis( $inr, $dot, $inr, opts, after ); - } - } - $inr.replaceWith( $inr.contents() ); - $inr = null; - - if ( $.isFunction( opts.callback ) ) - { - opts.callback.call( $dot[ 0 ], trunc, orgContent ); - } - - conf.isTruncated = trunc; - return trunc; - } - - ).bind( - 'isTruncated.dot', - function( e, fn ) - { - e.preventDefault(); - e.stopPropagation(); - - if ( typeof fn == 'function' ) - { - fn.call( $dot[ 0 ], conf.isTruncated ); - } - return conf.isTruncated; - } - - ).bind( - 'originalContent.dot', - function( e, fn ) - { - e.preventDefault(); - e.stopPropagation(); - - if ( typeof fn == 'function' ) - { - fn.call( $dot[ 0 ], orgContent ); - } - return orgContent; - } - - ).bind( - 'destroy.dot', - function( e ) - { - e.preventDefault(); - e.stopPropagation(); - - $dot.unwatch() - .unbind_events() - .empty() - .append( orgContent ) - .attr( 'style', $dot.data( 'dotdotdot-style' ) ) - .data( 'dotdotdot', false ); - } - ); - return $dot; - }; // /bind_events - - $dot.unbind_events = function() - { - $dot.unbind('.dot'); - return $dot; - }; // /unbind_events - - $dot.watch = function() - { - $dot.unwatch(); - if ( opts.watch == 'window' ) - { - var $window = $(window), - _wWidth = $window.width(), - _wHeight = $window.height(); - - $window.bind( - 'resize.dot' + conf.dotId, - function() - { - if ( _wWidth != $window.width() || _wHeight != $window.height() || !opts.windowResizeFix ) - { - _wWidth = $window.width(); - _wHeight = $window.height(); - - if ( watchInt ) - { - clearInterval( watchInt ); - } - watchInt = setTimeout( - function() - { - $dot.trigger( 'update.dot' ); - }, 10 - ); - } - } - ); - } - else - { - watchOrg = getSizes( $dot ); - watchInt = setInterval( - function() - { - var watchNew = getSizes( $dot ); - if ( watchOrg.width != watchNew.width || - watchOrg.height != watchNew.height ) - { - $dot.trigger( 'update.dot' ); - watchOrg = getSizes( $dot ); - } - }, 100 - ); - } - return $dot; - }; - $dot.unwatch = function() - { - $(window).unbind( 'resize.dot' + conf.dotId ); - if ( watchInt ) - { - clearInterval( watchInt ); - } - return $dot; - }; - - var orgContent = $dot.contents(), - opts = $.extend( true, {}, $.fn.dotdotdot.defaults, o ), - conf = {}, - watchOrg = {}, - watchInt = null, - $inr = null; - - conf.afterElement = getElement( opts.after, $dot ); - conf.isTruncated = false; - conf.dotId = dotId++; - - - $dot.data( 'dotdotdot', true ) - .bind_events() - .trigger( 'update.dot' ); - - if ( opts.watch ) - { - $dot.watch(); - } - - return $dot; - }; - - - // public - $.fn.dotdotdot.defaults = { - 'ellipsis' : '... ', - 'wrap' : 'word', - 'lastCharacter': { - 'remove' : [ ' ', ',', ';', '.', '!', '?' ], - 'noEllipsis' : [] - }, - 'tolerance' : 0, - 'callback' : null, - 'after' : null, - 'height' : null, - 'watch' : false, - 'windowResizeFix': true, - 'debug' : false - }; - - - // private - var dotId = 1; - - function children( $elem, o, after ) - { - var $elements = $elem.children(), - isTruncated = false; - - $elem.empty(); - - for ( var a = 0, l = $elements.length; a < l; a++ ) - { - var $e = $elements.eq( a ); - $elem.append( $e ); - if ( after ) - { - $elem.append( after ); - } - if ( test( $elem, o ) ) - { - $e.remove(); - isTruncated = true; - break; - } - else - { - if ( after ) - { - after.remove(); - } - } - } - return isTruncated; - } - function ellipsis( $elem, $d, $i, o, after ) - { - var $elements = $elem.contents(), - isTruncated = false; - - $elem.empty(); - - var notx = 'table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, select, optgroup, option, textarea, script, style'; - for ( var a = 0, l = $elements.length; a < l; a++ ) - { - - if ( isTruncated ) - { - break; - } - - var e = $elements[ a ], - $e = $(e); - - if ( typeof e == 'undefined' ) - { - continue; - } - - $elem.append( $e ); - if ( after ) - { - $elem[ ( $elem.is( notx ) ) ? 'after' : 'append' ]( after ); - } - if ( e.nodeType == 3 ) - { - if ( test( $i, o ) ) - { - isTruncated = ellipsisElement( $e, $d, $i, o, after ); - } - } - else - { - isTruncated = ellipsis( $e, $d, $i, o, after ); - } - - if ( !isTruncated ) - { - if ( after ) - { - after.remove(); - } - } - } - return isTruncated; - } - function ellipsisElement( $e, $d, $i, o, after ) - { - var isTruncated = false, - e = $e[ 0 ]; - - if ( typeof e == 'undefined' ) - { - return false; - } - - var seporator = ( o.wrap == 'letter' ) ? '' : ' ', - textArr = getTextContent( e ).split( seporator ), - position = -1, - midPos = -1, - startPos = 0, - endPos = textArr.length - 1; - - while ( startPos <= endPos ) - { - var m = Math.floor( ( startPos + endPos ) / 2 ); - if ( m == midPos ) - { - break; - } - midPos = m; - - setTextContent( e, textArr.slice( 0, midPos + 1 ).join( seporator ) + o.ellipsis ); - - if ( !test( $i, o ) ) - { - position = midPos; - startPos = midPos; - } - else - { - endPos = midPos; - } - } - - if ( position != -1 && !( textArr.length == 1 && textArr[ 0 ].length == 0 ) ) - { - var txt = addEllipsis( textArr.slice( 0, position + 1 ).join( seporator ), o ); - isTruncated = true; - setTextContent( e, txt ); - } - else - { - var $w = $e.parent(); - $e.remove(); - - var afterLength = ( after ) ? after.length : 0 ; - - if ( $w.contents().size() > afterLength ) - { - var $n = $w.contents().eq( -1 - afterLength ); - isTruncated = ellipsisElement( $n, $d, $i, o, after ); - } - else - { - var $p = $w.prev() - var e = $p.contents().eq( -1 )[ 0 ]; - - if ( typeof e != 'undefined' ) - { - var txt = addEllipsis( getTextContent( e ), o ); - setTextContent( e, txt ); - if ( after ) - { - $p.append( after ); - } - $w.remove(); - isTruncated = true; - } - - } - } - - return isTruncated; - } - function test( $i, o ) - { - return $i.innerHeight() > o.maxHeight; - } - function addEllipsis( txt, o ) - { - while( $.inArray( txt.slice( -1 ), o.lastCharacter.remove ) > -1 ) - { - txt = txt.slice( 0, -1 ); - } - if ( $.inArray( txt.slice( -1 ), o.lastCharacter.noEllipsis ) < 0 ) - { - txt += o.ellipsis; - } - return txt; - } - function getSizes( $d ) - { - return { - 'width' : $d.innerWidth(), - 'height': $d.innerHeight() - }; - } - function setTextContent( e, content ) - { - if ( e.innerText ) - { - e.innerText = content; - } - else if ( e.nodeValue ) - { - e.nodeValue = content; - } - else if (e.textContent) - { - e.textContent = content; - } - - } - function getTextContent( e ) - { - if ( e.innerText ) - { - return e.innerText; - } - else if ( e.nodeValue ) - { - return e.nodeValue; - } - else if ( e.textContent ) - { - return e.textContent; - } - else - { - return ""; - } - } - function getElement( e, $i ) - { - if ( typeof e == 'undefined' ) - { - return false; - } - if ( !e ) - { - return false; - } - if ( typeof e == 'string' ) - { - e = $(e, $i); - return ( e.length ) - ? e - : false; - } - if ( typeof e == 'object' ) - { - return ( typeof e.jquery == 'undefined' ) - ? false - : e; - } - return false; - } - function getTrueInnerHeight( $el ) - { - var h = $el.innerHeight(), - a = [ 'paddingTop', 'paddingBottom' ]; - - for ( var z = 0, l = a.length; z < l; z++ ) { - var m = parseInt( $el.css( a[ z ] ), 10 ); - if ( isNaN( m ) ) - { - m = 0; - } - h -= m; - } - return h; - } - function debug( d, m ) - { - if ( !d ) - { - return false; - } - if ( typeof m == 'string' ) - { - m = 'dotdotdot: ' + m; - } - else - { - m = [ 'dotdotdot:', m ]; - } - - if ( typeof window.console != 'undefined' ) - { - if ( typeof window.console.log != 'undefined' ) - { - window.console.log( m ); - } - } - return false; - } - - - // override jQuery.html - var _orgHtml = $.fn.html; - $.fn.html = function( str ) { - if ( typeof str != 'undefined' ) - { - if ( this.data( 'dotdotdot' ) ) - { - if ( typeof str != 'function' ) - { - return this.trigger( 'update', [ str ] ); - } - } - return _orgHtml.call( this, str ); - } - return _orgHtml.call( this ); - }; - - - // override jQuery.text - var _orgText = $.fn.text; - $.fn.text = function( str ) { - if ( typeof str != 'undefined' ) - { - if ( this.data( 'dotdotdot' ) ) - { - var temp = $( '
' ); - temp.text( str ); - str = temp.html(); - temp.remove(); - return this.trigger( 'update', [ str ] ); - } - return _orgText.call( this, str ); - } - return _orgText.call( this ); - }; - - -})( jQuery ); diff --git a/vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.min.js b/vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.min.js deleted file mode 100644 index 8147b06..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/js/jquery.dotdotdot-1.5.9.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * jQuery dotdotdot 1.5.9 - * - * Copyright (c) 2013 Fred Heusschen - * www.frebsite.nl - * - * Plugin website: - * dotdotdot.frebsite.nl - * - * Dual licensed under the MIT and GPL licenses. - * http://en.wikipedia.org/wiki/MIT_License - * http://en.wikipedia.org/wiki/GNU_General_Public_License - */ - -(function(a){function c(a,b,c){var d=a.children(),e=!1;a.empty();for(var g=0,h=d.length;h>g;g++){var i=d.eq(g);if(a.append(i),c&&a.append(c),f(a,b)){i.remove(),e=!0;break}c&&c.remove()}return e}function d(b,c,g,h,i){var j=b.contents(),k=!1;b.empty();for(var l="table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, select, optgroup, option, textarea, script, style",m=0,n=j.length;n>m&&!k;m++){var o=j[m],p=a(o);void 0!==o&&(b.append(p),i&&b[b.is(l)?"after":"append"](i),3==o.nodeType?f(g,h)&&(k=e(p,c,g,h,i)):k=d(p,c,g,h,i),k||i&&i.remove())}return k}function e(a,b,c,d,h){var k=!1,l=a[0];if(l===void 0)return!1;for(var m="letter"==d.wrap?"":" ",n=j(l).split(m),o=-1,p=-1,q=0,r=n.length-1;r>=q;){var s=Math.floor((q+r)/2);if(s==p)break;p=s,i(l,n.slice(0,p+1).join(m)+d.ellipsis),f(c,d)?r=p:(o=p,q=p)}if(-1==o||1==n.length&&0==n[0].length){var u=a.parent();a.remove();var v=h?h.length:0;if(u.contents().size()>v){var w=u.contents().eq(-1-v);k=e(w,b,c,d,h)}else{var x=u.prev(),l=x.contents().eq(-1)[0];if(l!==void 0){var t=g(j(l),d);i(l,t),h&&x.append(h),u.remove(),k=!0}}}else{var t=g(n.slice(0,o+1).join(m),d);k=!0,i(l,t)}return k}function f(a,b){return a.innerHeight()>b.maxHeight}function g(b,c){for(;a.inArray(b.slice(-1),c.lastCharacter.remove)>-1;)b=b.slice(0,-1);return 0>a.inArray(b.slice(-1),c.lastCharacter.noEllipsis)&&(b+=c.ellipsis),b}function h(a){return{width:a.innerWidth(),height:a.innerHeight()}}function i(a,b){a.innerText?a.innerText=b:a.nodeValue?a.nodeValue=b:a.textContent&&(a.textContent=b)}function j(a){return a.innerText?a.innerText:a.nodeValue?a.nodeValue:a.textContent?a.textContent:""}function k(b,c){return b===void 0?!1:b?"string"==typeof b?(b=a(b,c),b.length?b:!1):"object"==typeof b?b.jquery===void 0?!1:b:!1:!1}function l(a){for(var b=a.innerHeight(),c=["paddingTop","paddingBottom"],d=0,e=c.length;e>d;d++){var f=parseInt(a.css(c[d]),10);isNaN(f)&&(f=0),b-=f}return b}function m(a,b){return a?(b="string"==typeof b?"dotdotdot: "+b:["dotdotdot:",b],window.console!==void 0&&window.console.log!==void 0&&window.console.log(b),!1):!1}if(!a.fn.dotdotdot){a.fn.dotdotdot=function(e){if(0==this.length)return e&&e.debug===!1||m(!0,'No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){a(this).dotdotdot(e)});var g=this;g.data("dotdotdot")&&g.trigger("destroy.dot"),g.data("dotdotdot-style",g.attr("style")),g.css("word-wrap","break-word"),g.bind_events=function(){return g.bind("update.dot",function(b,e){b.preventDefault(),b.stopPropagation(),j.maxHeight="number"==typeof j.height?j.height:l(g),j.maxHeight+=j.tolerance,e!==void 0&&(("string"==typeof e||e instanceof HTMLElement)&&(e=a("
").append(e).contents()),e instanceof a&&(i=e)),q=g.wrapInner('
').children(),q.empty().append(i.clone(!0)).css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var h=!1,k=!1;return n.afterElement&&(h=n.afterElement.clone(!0),n.afterElement.remove()),f(q,j)&&(k="children"==j.wrap?c(q,j,h):d(q,g,q,j,h)),q.replaceWith(q.contents()),q=null,a.isFunction(j.callback)&&j.callback.call(g[0],k,i),n.isTruncated=k,k}).bind("isTruncated.dot",function(a,b){return a.preventDefault(),a.stopPropagation(),"function"==typeof b&&b.call(g[0],n.isTruncated),n.isTruncated}).bind("originalContent.dot",function(a,b){return a.preventDefault(),a.stopPropagation(),"function"==typeof b&&b.call(g[0],i),i}).bind("destroy.dot",function(a){a.preventDefault(),a.stopPropagation(),g.unwatch().unbind_events().empty().append(i).attr("style",g.data("dotdotdot-style")).data("dotdotdot",!1)}),g},g.unbind_events=function(){return g.unbind(".dot"),g},g.watch=function(){if(g.unwatch(),"window"==j.watch){var b=a(window),c=b.width(),d=b.height();b.bind("resize.dot"+n.dotId,function(){c==b.width()&&d==b.height()&&j.windowResizeFix||(c=b.width(),d=b.height(),p&&clearInterval(p),p=setTimeout(function(){g.trigger("update.dot")},10))})}else o=h(g),p=setInterval(function(){var a=h(g);(o.width!=a.width||o.height!=a.height)&&(g.trigger("update.dot"),o=h(g))},100);return g},g.unwatch=function(){return a(window).unbind("resize.dot"+n.dotId),p&&clearInterval(p),g};var i=g.contents(),j=a.extend(!0,{},a.fn.dotdotdot.defaults,e),n={},o={},p=null,q=null;return n.afterElement=k(j.after,g),n.isTruncated=!1,n.dotId=b++,g.data("dotdotdot",!0).bind_events().trigger("update.dot"),j.watch&&g.watch(),g},a.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",lastCharacter:{remove:[" ",",",";",".","!","?"],noEllipsis:[]},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0,debug:!1};var b=1,n=a.fn.html;a.fn.html=function(a){return a!==void 0?this.data("dotdotdot")&&"function"!=typeof a?this.trigger("update",[a]):n.call(this,a):n.call(this)};var o=a.fn.text;a.fn.text=function(b){if(b!==void 0){if(this.data("dotdotdot")){var c=a("
");return c.text(b),b=c.html(),c.remove(),this.trigger("update",[b])}return o.call(this,b)}return o.call(this)}}})(jQuery); \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.js b/vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.js deleted file mode 100644 index ae08665..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.js +++ /dev/null @@ -1,1169 +0,0 @@ -/* - * iviewer Widget for jQuery UI - * https://github.com/can3p/iviewer - * - * Copyright (c) 2009 - 2012 Dmitry Petrov - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Dmitry Petrov - * Version: 0.7.7 - */ - -( function( $, undefined ) { - -//this code was taken from the https://github.com/furf/jquery-ui-touch-punch -var mouseEvents = { - touchstart: 'mousedown', - touchmove: 'mousemove', - touchend: 'mouseup' - }, - gesturesSupport = 'ongesturestart' in document.createElement('div'); - - -/** - * Convert a touch event to a mouse-like - */ -function makeMouseEvent (event) { - var touch = event.originalEvent.changedTouches[0]; - - return $.extend(event, { - type: mouseEvents[event.type], - which: 1, - pageX: touch.pageX, - pageY: touch.pageY, - screenX: touch.screenX, - screenY: touch.screenY, - clientX: touch.clientX, - clientY: touch.clientY, - isTouchEvent: true - }); -} - -var mouseProto = $.ui.mouse.prototype, - _mouseInit = $.ui.mouse.prototype._mouseInit; - -mouseProto._mouseInit = function() { - var self = this; - self._touchActive = false; - - this.element.bind( 'touchstart.' + this.widgetName, function(event) { - if (gesturesSupport && event.originalEvent.touches.length > 1) { return; } - self._touchActive = true; - return self._mouseDown(makeMouseEvent(event)); - }) - - var self = this; - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - if (gesturesSupport && event.originalEvent.touches && event.originalEvent.touches.length > 1) { return; } - if (self._touchActive) { - return self._mouseMove(makeMouseEvent(event)); - } - }; - this._mouseUpDelegate = function(event) { - if (self._touchActive) { - self._touchActive = false; - return self._mouseUp(makeMouseEvent(event)); - } - }; - - $(document) - .bind('touchmove.'+ this.widgetName, this._mouseMoveDelegate) - .bind('touchend.' + this.widgetName, this._mouseUpDelegate); - - _mouseInit.apply(this); -} - -/** - * Simple implementation of jQuery like getters/setters - * var val = something(); - * something(val); - */ -var setter = function(setter, getter) { - return function(val) { - if (arguments.length === 0) { - return getter.apply(this); - } else { - setter.apply(this, arguments); - } - } -}; - -/** - * Internet explorer rotates image relative left top corner, so we should - * shift image when it's rotated. - */ -var ieTransforms = { - '0': { - marginLeft: 0, - marginTop: 0, - filter: 'progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, SizingMethod="auto expand")' - }, - - '90': { - marginLeft: -1, - marginTop: 1, - filter: 'progid:DXImageTransform.Microsoft.Matrix(M11=0, M12=-1, M21=1, M22=0, SizingMethod="auto expand")' - }, - - '180': { - marginLeft: 0, - marginTop: 0, - filter: 'progid:DXImageTransform.Microsoft.Matrix(M11=-1, M12=0, M21=0, M22=-1, SizingMethod="auto expand")' - }, - - '270': { - marginLeft: -1, - marginTop: 1, - filter: 'progid:DXImageTransform.Microsoft.Matrix(M11=0, M12=1, M21=-1, M22=0, SizingMethod="auto expand")' - } - }, - // this test is the inversion of the css filters test from the modernizr project - useIeTransforms = function() { - var modElem = document.createElement('modernizr'), - mStyle = modElem.style, - omPrefixes = 'Webkit Moz O ms', - domPrefixes = omPrefixes.toLowerCase().split(' '), - props = ("transform" + ' ' + domPrefixes.join("Transform ") + "Transform").split(' '); - for ( var i in props ) { - var prop = props[i]; - if ( !$.contains(prop, "-") && mStyle[prop] !== undefined ) { - return false; - } - } - return true; - }(); - -$.widget( "ui.iviewer", $.ui.mouse, { - widgetEventPrefix: "iviewer", - options : { - /** - * start zoom value for image, not used now - * may be equal to "fit" to fit image into container or scale in % - **/ - zoom: "fit", - /** - * base value to scale image - **/ - zoom_base: 100, - /** - * maximum zoom - **/ - zoom_max: 800, - /** - * minimum zoom - **/ - zoom_min: 25, - /** - * base of rate multiplier. - * zoom is calculated by formula: zoom_base * zoom_delta^rate - **/ - zoom_delta: 1.4, - /** - * whether the zoom should be animated. - */ - zoom_animation: true, - /** - * if true plugin doesn't add its own controls - **/ - ui_disabled: false, - /** - * If false mousewheel will be disabled - */ - mousewheel: true, - /** - * if false, plugin doesn't bind resize event on window and this must - * be handled manually - **/ - update_on_resize: true, - /** - * event is triggered when zoom value is changed - * @param int new zoom value - * @return boolean if false zoom action is aborted - **/ - onZoom: jQuery.noop, - /** - * event is triggered when zoom value is changed after image is set to the new dimensions - * @param int new zoom value - * @return boolean if false zoom action is aborted - **/ - onAfterZoom: jQuery.noop, - /** - * event is fired on drag begin - * @param object coords mouse coordinates on the image - * @return boolean if false is returned, drag action is aborted - **/ - onStartDrag: jQuery.noop, - /** - * event is fired on drag action - * @param object coords mouse coordinates on the image - **/ - onDrag: jQuery.noop, - /** - * event is fired on drag stop - * @param object coords mouse coordinates on the image - **/ - onStopDrag: jQuery.noop, - /** - * event is fired when mouse moves over image - * @param object coords mouse coordinates on the image - **/ - onMouseMove: jQuery.noop, - /** - * mouse click event - * @param object coords mouse coordinates on the image - **/ - onClick: jQuery.noop, - /** - * event is fired when image starts to load - */ - onStartLoad: null, - /** - * event is fired, when image is loaded and initially positioned - */ - onFinishLoad: null, - /** - * event is fired when image load error occurs - */ - onErrorLoad: null - }, - - _create: function() { - var me = this; - - //drag variables - this.dx = 0; - this.dy = 0; - - /* object containing actual information about image - * @img_object.object - jquery img object - * @img_object.orig_{width|height} - original dimensions - * @img_object.display_{width|height} - actual dimensions - */ - this.img_object = {}; - - this.zoom_object = {}; //object to show zoom status - - this._angle = 0; - - this.current_zoom = this.options.zoom; - - if(this.options.src === null){ - return; - } - - this.container = this.element; - - this._updateContainerInfo(); - - //init container - this.container.css("overflow","hidden"); - - if (this.options.update_on_resize == true) { - $(window).resize(function() { - me.update(); - }); - } - - this.img_object = new $.ui.iviewer.ImageObject(this.options.zoom_animation); - - if (this.options.mousewheel) { - this.container.bind('mousewheel.iviewer', function(ev, delta) - { - //this event is there instead of containing div, because - //at opera it triggers many times on div - var zoom = (delta > 0)?1:-1, - container_offset = me.container.offset(), - mouse_pos = { - //jquery.mousewheel 3.1.0 uses strange MozMousePixelScroll event - //which is not being fixed by jQuery.Event - x: (ev.pageX || ev.originalEvent.pageX) - container_offset.left, - y: (ev.pageY || ev.originalEvent.pageX) - container_offset.top - }; - - me.zoom_by(zoom, mouse_pos); - return false; - }); - - if (gesturesSupport) { - var gestureThrottle = +new Date(); - var originalScale, originalCenter; - this.img_object.object() - // .bind('gesturestart', function(ev) { - .bind('touchstart', function(ev) { - originalScale = me.current_zoom; - var touches = ev.originalEvent.touches, - container_offset; - if (touches.length == 2) { - container_offset = me.container.offset(); - originalCenter = { - x: (touches[0].pageX + touches[1].pageX) / 2 - container_offset.left, - y: (touches[0].pageY + touches[1].pageY) / 2 - container_offset.top - }; - } else { - originalCenter = null; - } - }).bind('gesturechange', function(ev) { - //do not want to import throttle function from underscore - var d = +new Date(); - if ((d - gestureThrottle) < 50) { return; } - gestureThrottle = d; - var zoom = originalScale * ev.originalEvent.scale; - me.set_zoom(zoom, originalCenter); - ev.preventDefault(); - }).bind('gestureend', function(ev) { - originalCenter = null; - }); - } - } - - //init object - this.img_object.object() - //bind mouse events - .click(function(e){return me._click(e)}) - .prependTo(this.container); - - this.container.bind('mousemove', function(ev) { me._handleMouseMove(ev); }); - - this.loadImage(this.options.src); - - if(!this.options.ui_disabled) - { - this.createui(); - } - - this._mouseInit(); - }, - - destroy: function() { - $.Widget.prototype.destroy.call( this ); - this._mouseDestroy(); - this.img_object.object().remove(); - this.container.off('.iviewer'); - this.container.css('overflow', ''); //cleanup styles on destroy - }, - - _updateContainerInfo: function() - { - this.options.height = this.container.height(); - this.options.width = this.container.width(); - }, - - update: function() - { - this._updateContainerInfo() - this.setCoords(this.img_object.x(), this.img_object.y()); - }, - - loadImage: function( src ) - { - this.current_zoom = this.options.zoom; - var me = this; - - this._trigger('onStartLoad', 0, src); - - this.container.addClass("iviewer_loading"); - this.img_object.load(src, function() { - me._imageLoaded(src); - }, function() { - me._trigger("onErrorLoad", 0, src); - }); - }, - - _imageLoaded: function(src) { - this.container.removeClass("iviewer_loading"); - this.container.addClass("iviewer_cursor"); - - if(this.options.zoom == "fit"){ - this.fit(true); - } - else { - this.set_zoom(this.options.zoom, true); - } - - this._trigger('onFinishLoad', 0, src); - }, - - /** - * fits image in the container - * - * @param {boolean} skip_animation - **/ - fit: function(skip_animation) - { - var aspect_ratio = this.img_object.orig_width() / this.img_object.orig_height(); - var window_ratio = this.options.width / this.options.height; - var choose_left = (aspect_ratio > window_ratio); - var new_zoom = 0; - - if(choose_left){ - new_zoom = this.options.width / this.img_object.orig_width() * 100; - } - else { - new_zoom = this.options.height / this.img_object.orig_height() * 100; - } - - this.set_zoom(new_zoom, skip_animation); - }, - - /** - * center image in container - **/ - center: function() - { - this.setCoords(-Math.round((this.img_object.display_width() - this.options.width)/2), - -Math.round((this.img_object.display_height() - this.options.height)/2)); - }, - - /** - * move a point in container to the center of display area - * @param x a point in container - * @param y a point in container - **/ - moveTo: function(x, y) - { - var dx = x-Math.round(this.options.width/2); - var dy = y-Math.round(this.options.height/2); - - var new_x = this.img_object.x() - dx; - var new_y = this.img_object.y() - dy; - - this.setCoords(new_x, new_y); - }, - - /** - * Get container offset object. - */ - getContainerOffset: function() { - return jQuery.extend({}, this.container.offset()); - }, - - /** - * set coordinates of upper left corner of image object - **/ - setCoords: function(x,y) - { - //do nothing while image is being loaded - if(!this.img_object.loaded()) { return; } - - var coords = this._correctCoords(x,y); - this.img_object.x(coords.x); - this.img_object.y(coords.y); - }, - - _correctCoords: function( x, y ) - { - x = parseInt(x, 10); - y = parseInt(y, 10); - - //check new coordinates to be correct (to be in rect) - if(y > 0){ - y = 0; - } - if(x > 0){ - x = 0; - } - if(y + this.img_object.display_height() < this.options.height){ - y = this.options.height - this.img_object.display_height(); - } - if(x + this.img_object.display_width() < this.options.width){ - x = this.options.width - this.img_object.display_width(); - } - if(this.img_object.display_width() <= this.options.width){ - x = -(this.img_object.display_width() - this.options.width)/2; - } - if(this.img_object.display_height() <= this.options.height){ - y = -(this.img_object.display_height() - this.options.height)/2; - } - - return { x: x, y:y }; - }, - - - /** - * convert coordinates on the container to the coordinates on the image (in original size) - * - * @return object with fields x,y according to coordinates or false - * if initial coords are not inside image - **/ - containerToImage : function (x,y) - { - var coords = { x : x - this.img_object.x(), - y : y - this.img_object.y() - }; - - coords = this.img_object.toOriginalCoords(coords); - - return { x : util.descaleValue(coords.x, this.current_zoom), - y : util.descaleValue(coords.y, this.current_zoom) - }; - }, - - /** - * convert coordinates on the image (in original size, and zero angle) to the coordinates on the container - * - * @return object with fields x,y according to coordinates - **/ - imageToContainer : function (x,y) - { - var coords = { - x : util.scaleValue(x, this.current_zoom), - y : util.scaleValue(y, this.current_zoom) - }; - - return this.img_object.toRealCoords(coords); - }, - - /** - * get mouse coordinates on the image - * @param e - object containing pageX and pageY fields, e.g. mouse event object - * - * @return object with fields x,y according to coordinates or false - * if initial coords are not inside image - **/ - _getMouseCoords : function(e) - { - var containerOffset = this.container.offset(); - coords = this.containerToImage(e.pageX - containerOffset.left, e.pageY - containerOffset.top); - - return coords; - }, - - /** - * set image scale to the new_zoom - * - * @param {number} new_zoom image scale in % - * @param {boolean} skip_animation - * @param {x: number, y: number} Coordinates of point the should not be moved on zoom. The default is the center of image. - **/ - set_zoom: function(new_zoom, skip_animation, zoom_center) - { - if (this._trigger('onZoom', 0, new_zoom) == false) { - return; - } - - //do nothing while image is being loaded - if(!this.img_object.loaded()) { return; } - - zoom_center = zoom_center || { - x: Math.round(this.options.width/2), - y: Math.round(this.options.height/2) - } - - if(new_zoom < this.options.zoom_min) - { - new_zoom = this.options.zoom_min; - } - else if(new_zoom > this.options.zoom_max) - { - new_zoom = this.options.zoom_max; - } - - /* we fake these values to make fit zoom properly work */ - if(this.current_zoom == "fit") - { - var old_x = zoom_center.x + Math.round(this.img_object.orig_width()/2); - var old_y = zoom_center.y + Math.round(this.img_object.orig_height()/2); - this.current_zoom = 100; - } - else { - var old_x = -this.img_object.x() + zoom_center.x; - var old_y = -this.img_object.y() + zoom_center.y - } - - var new_width = util.scaleValue(this.img_object.orig_width(), new_zoom); - var new_height = util.scaleValue(this.img_object.orig_height(), new_zoom); - var new_x = util.scaleValue( util.descaleValue(old_x, this.current_zoom), new_zoom); - var new_y = util.scaleValue( util.descaleValue(old_y, this.current_zoom), new_zoom); - - new_x = zoom_center.x - new_x; - new_y = zoom_center.y - new_y; - - new_width = Math.floor(new_width); - new_height = Math.floor(new_height); - new_x = Math.floor(new_x); - new_y = Math.floor(new_y); - - this.img_object.display_width(new_width); - this.img_object.display_height(new_height); - - var coords = this._correctCoords( new_x, new_y ), - self = this; - - this.img_object.setImageProps(new_width, new_height, coords.x, coords.y, - skip_animation, function() { - self._trigger('onAfterZoom', 0, new_zoom ); - }); - this.current_zoom = new_zoom; - - this.update_status(); - }, - - /** - * changes zoom scale by delta - * zoom is calculated by formula: zoom_base * zoom_delta^rate - * @param Integer delta number to add to the current multiplier rate number - * @param {x: number, y: number=} Coordinates of point the should not be moved on zoom. - **/ - zoom_by: function(delta, zoom_center) - { - var closest_rate = this.find_closest_zoom_rate(this.current_zoom); - - var next_rate = closest_rate + delta; - var next_zoom = this.options.zoom_base * Math.pow(this.options.zoom_delta, next_rate) - if(delta > 0 && next_zoom < this.current_zoom) - { - next_zoom *= this.options.zoom_delta; - } - - if(delta < 0 && next_zoom > this.current_zoom) - { - next_zoom /= this.options.zoom_delta; - } - - this.set_zoom(next_zoom, undefined, zoom_center); - }, - - /** - * Rotate image - * @param {num} deg Degrees amount to rotate. Positive values rotate image clockwise. - * Currently 0, 90, 180, 270 and -90, -180, -270 values are supported - * - * @param {boolean} abs If the flag is true if, the deg parameter will be considered as - * a absolute value and relative otherwise. - * @return {num|null} Method will return current image angle if called without any arguments. - **/ - angle: function(deg, abs) { - if (arguments.length === 0) { return this.img_object.angle(); } - - if (deg < -270 || deg > 270 || deg % 90 !== 0) { return; } - if (!abs) { deg += this.img_object.angle(); } - if (deg < 0) { deg += 360; } - if (deg >= 360) { deg -= 360; } - - if (deg === this.img_object.angle()) { return; } - - this.img_object.angle(deg); - //the rotate behavior is different in all editors. For now we just center the - //image. However, it will be better to try to keep the position. - this.center(); - this._trigger('angle', 0, { angle: this.img_object.angle() }); - }, - - /** - * finds closest multiplier rate for value - * basing on zoom_base and zoom_delta values from settings - * @param Number value zoom value to examine - **/ - find_closest_zoom_rate: function(value) - { - if(value == this.options.zoom_base) - { - return 0; - } - - function div(val1,val2) { return val1 / val2 }; - function mul(val1,val2) { return val1 * val2 }; - - var func = (value > this.options.zoom_base)?mul:div; - var sgn = (value > this.options.zoom_base)?1:-1; - - var mltplr = this.options.zoom_delta; - var rate = 1; - - while(Math.abs(func(this.options.zoom_base, Math.pow(mltplr,rate)) - value) > - Math.abs(func(this.options.zoom_base, Math.pow(mltplr,rate+1)) - value)) - { - rate++; - } - - return sgn * rate; - }, - - /* update scale info in the container */ - update_status: function() - { - if(!this.options.ui_disabled) - { - var percent = Math.round(100*this.img_object.display_height()/this.img_object.orig_height()); - if(percent) - { - this.zoom_object.html(percent + "%"); - } - } - }, - - /** - * Get some information about the image. - * Currently orig_(width|height), display_(width|height), angle, zoom and src params are supported. - * - * @param {string} parameter to check - * @param {boolean} withoutRotation if param is orig_width or orig_height and this flag is set to true, - * method will return original image width without considering rotation. - * - */ - info: function(param, withoutRotation) { - if (!param) { return; } - - switch (param) { - case 'orig_width': - case 'orig_height': - if (withoutRotation) { - return (this.img_object.angle() % 180 === 0 ? this.img_object[param]() : - param === 'orig_width' ? this.img_object.orig_height() : - this.img_object.orig_width()); - } else { - return this.img_object[param](); - } - case 'display_width': - case 'display_height': - case 'angle': - return this.img_object[param](); - case 'zoom': - return this.current_zoom; - case 'src': - return this.img_object.object().attr('src'); - case 'coords': - return { - x: this.img_object.x(), - y: this.img_object.y() - }; - } - }, - - /** - * callback for handling mousdown event to start dragging image - **/ - _mouseStart: function( e ) - { - $.ui.mouse.prototype._mouseStart.call(this, e); - if (this._trigger('onStartDrag', 0, this._getMouseCoords(e)) === false) { - return false; - } - - /* start drag event*/ - this.container.addClass("iviewer_drag_cursor"); - - //#10: fix movement quirks for ipad - this._dragInitialized = !(e.originalEvent.changedTouches && e.originalEvent.changedTouches.length==1); - - this.dx = e.pageX - this.img_object.x(); - this.dy = e.pageY - this.img_object.y(); - return true; - }, - - _mouseCapture: function( e ) { - return true; - }, - - /** - * Handle mouse move if needed. User can avoid using this callback, because - * he can get the same information through public methods. - * @param {jQuery.Event} e - */ - _handleMouseMove: function(e) { - this._trigger('onMouseMove', e, this._getMouseCoords(e)); - }, - - /** - * callback for handling mousemove event to drag image - **/ - _mouseDrag: function(e) - { - $.ui.mouse.prototype._mouseDrag.call(this, e); - - //#10: imitate mouseStart, because we can get here without it on iPad for some reason - if (!this._dragInitialized) { - this.dx = e.pageX - this.img_object.x(); - this.dy = e.pageY - this.img_object.y(); - this._dragInitialized = true; - } - - var ltop = e.pageY - this.dy; - var lleft = e.pageX - this.dx; - - this.setCoords(lleft, ltop); - this._trigger('onDrag', e, this._getMouseCoords(e)); - return false; - }, - - /** - * callback for handling stop drag - **/ - _mouseStop: function(e) - { - $.ui.mouse.prototype._mouseStop.call(this, e); - this.container.removeClass("iviewer_drag_cursor"); - this._trigger('onStopDrag', 0, this._getMouseCoords(e)); - }, - - _click: function(e) - { - this._trigger('onClick', 0, this._getMouseCoords(e)); - }, - - /** - * create zoom buttons info box - **/ - createui: function() - { - var me=this; - - $("
", { 'class': "iviewer_zoom_in iviewer_common iviewer_button"}) - .bind('mousedown touchstart',function(){me.zoom_by(1); return false;}) - .appendTo(this.container); - - $("
", { 'class': "iviewer_zoom_out iviewer_common iviewer_button"}) - .bind('mousedown touchstart',function(){me.zoom_by(- 1); return false;}) - .appendTo(this.container); - - $("
", { 'class': "iviewer_zoom_zero iviewer_common iviewer_button"}) - .bind('mousedown touchstart',function(){me.set_zoom(100); return false;}) - .appendTo(this.container); - - $("
", { 'class': "iviewer_zoom_fit iviewer_common iviewer_button"}) - .bind('mousedown touchstart',function(){me.fit(this); return false;}) - .appendTo(this.container); - - this.zoom_object = $("
").addClass("iviewer_zoom_status iviewer_common") - .appendTo(this.container); - - $("
", { 'class': "iviewer_rotate_left iviewer_common iviewer_button"}) - .bind('mousedown touchstart',function(){me.angle(-90); return false;}) - .appendTo(this.container); - - $("
", { 'class': "iviewer_rotate_right iviewer_common iviewer_button" }) - .bind('mousedown touchstart',function(){me.angle(90); return false;}) - .appendTo(this.container); - - this.update_status(); //initial status update - } - -} ); - -/** - * @class $.ui.iviewer.ImageObject Class represents image and provides public api without - * extending image prototype. - * @constructor - * @param {boolean} do_anim Do we want to animate image on dimension changes? - */ -$.ui.iviewer.ImageObject = function(do_anim) { - this._img = $("") - //this is needed, because chromium sets them auto otherwise - .css({ position: "absolute", top :"0px", left: "0px"}); - - this._loaded = false; - this._swapDimensions = false; - this._do_anim = do_anim || false; - this.x(0, true); - this.y(0, true); - this.angle(0); -}; - - -/** @lends $.ui.iviewer.ImageObject.prototype */ -(function() { - /** - * Restore initial object state. - * - * @param {number} w Image width. - * @param {number} h Image height. - */ - this._reset = function(w, h) { - this._angle = 0; - this._swapDimensions = false; - this.x(0); - this.y(0); - - this.orig_width(w); - this.orig_height(h); - this.display_width(w); - this.display_height(h); - }; - - /** - * Check if image is loaded. - * - * @return {boolean} - */ - this.loaded = function() { return this._loaded; }; - - /** - * Load image. - * - * @param {string} src Image url. - * @param {Function=} loaded Function will be called on image load. - */ - this.load = function(src, loaded, error) { - var self = this; - - loaded = loaded || jQuery.noop; - this._loaded = false; - - //If we assign new image url to the this._img IE9 fires onload event and image width and - //height are set to zero. So, we create another image object and load image through it. - var img = new Image(); - img.onload = function() { - self._loaded = true; - self._reset(this.width, this.height); - - self._img - .removeAttr("width") - .removeAttr("height") - .removeAttr("style") - //max-width is reset, because plugin breaks in the twitter bootstrap otherwise - .css({ position: "absolute", top :"0px", left: "0px", maxWidth: "none"}) - - self._img[0].src = src; - loaded(); - }; - - img.onerror = error; - - //we need this because sometimes internet explorer 8 fires onload event - //right after assignment (synchronously) - setTimeout(function() { - img.src = src; - }, 0); - - this.angle(0); - }; - - this._dimension = function(prefix, name) { - var horiz = '_' + prefix + '_' + name, - vert = '_' + prefix + '_' + (name === 'height' ? 'width' : 'height'); - return setter(function(val) { - this[this._swapDimensions ? horiz: vert] = val; - }, - function() { - return this[this._swapDimensions ? horiz: vert]; - }); - }; - - /** - * Getters and setter for common image dimensions. - * display_ means real image tag dimensions - * orig_ means physical image dimensions. - * Note, that dimensions are swapped if image is rotated. It necessary, - * because as little as possible code should know about rotation. - */ - this.display_width = this._dimension('display', 'width'), - this.display_height = this._dimension('display', 'height'), - this.display_diff = function() { return Math.floor( this.display_width() - this.display_height() ) }; - this.orig_width = this._dimension('orig', 'width'), - this.orig_height = this._dimension('orig', 'height'), - - /** - * Setter for X coordinate. If image is rotated we need to additionaly shift an - * image to map image coordinate to the visual position. - * - * @param {number} val Coordinate value. - * @param {boolean} skipCss If true, we only set the value and do not touch the dom. - */ - this.x = setter(function(val, skipCss) { - this._x = val; - if (!skipCss) { - this._finishAnimation(); - this._img.css("left",this._x + (this._swapDimensions ? this.display_diff() / 2 : 0) + "px"); - } - }, - function() { - return this._x; - }); - - /** - * Setter for Y coordinate. If image is rotated we need to additionaly shift an - * image to map image coordinate to the visual position. - * - * @param {number} val Coordinate value. - * @param {boolean} skipCss If true, we only set the value and do not touch the dom. - */ - this.y = setter(function(val, skipCss) { - this._y = val; - if (!skipCss) { - this._finishAnimation(); - this._img.css("top",this._y - (this._swapDimensions ? this.display_diff() / 2 : 0) + "px"); - } - }, - function() { - return this._y; - }); - - /** - * Perform image rotation. - * - * @param {number} deg Absolute image angle. The method will work with values 0, 90, 180, 270 degrees. - */ - this.angle = setter(function(deg) { - var prevSwap = this._swapDimensions; - - this._angle = deg; - this._swapDimensions = deg % 180 !== 0; - - if (prevSwap !== this._swapDimensions) { - var verticalMod = this._swapDimensions ? -1 : 1; - this.x(this.x() - verticalMod * this.display_diff() / 2, true); - this.y(this.y() + verticalMod * this.display_diff() / 2, true); - }; - - var cssVal = 'rotate(' + deg + 'deg)', - img = this._img; - - jQuery.each(['', '-webkit-', '-moz-', '-o-', '-ms-'], function(i, prefix) { - img.css(prefix + 'transform', cssVal); - }); - - if (useIeTransforms) { - jQuery.each(['-ms-', ''], function(i, prefix) { - img.css(prefix + 'filter', ieTransforms[deg].filter); - }); - - img.css({ - marginLeft: ieTransforms[deg].marginLeft * this.display_diff() / 2, - marginTop: ieTransforms[deg].marginTop * this.display_diff() / 2 - }); - } - }, - function() { return this._angle; }); - - /** - * Map point in the container coordinates to the point in image coordinates. - * You will get coordinates of point on image with respect to rotation, - * but will be set as if image was not rotated. - * So, if image was rotated 90 degrees, it's (0,0) point will be on the - * top right corner. - * - * @param {{x: number, y: number}} point Point in container coordinates. - * @return {{x: number, y: number}} - */ - this.toOriginalCoords = function(point) { - switch (this.angle()) { - case 0: return { x: point.x, y: point.y } - case 90: return { x: point.y, y: this.display_width() - point.x } - case 180: return { x: this.display_width() - point.x, y: this.display_height() - point.y } - case 270: return { x: this.display_height() - point.y, y: point.x } - } - }; - - /** - * Map point in the image coordinates to the point in container coordinates. - * You will get coordinates of point on container with respect to rotation. - * Note, if image was rotated 90 degrees, it's (0,0) point will be on the - * top right corner. - * - * @param {{x: number, y: number}} point Point in container coordinates. - * @return {{x: number, y: number}} - */ - this.toRealCoords = function(point) { - switch (this.angle()) { - case 0: return { x: this.x() + point.x, y: this.y() + point.y } - case 90: return { x: this.x() + this.display_width() - point.y, y: this.y() + point.x} - case 180: return { x: this.x() + this.display_width() - point.x, y: this.y() + this.display_height() - point.y} - case 270: return { x: this.x() + point.y, y: this.y() + this.display_height() - point.x} - } - }; - - /** - * @return {jQuery} Return image node. this is needed to add event handlers. - */ - this.object = setter(jQuery.noop, - function() { return this._img; }); - - /** - * Change image properties. - * - * @param {number} disp_w Display width; - * @param {number} disp_h Display height; - * @param {number} x - * @param {number} y - * @param {boolean} skip_animation If true, the animation will be skiped despite the - * value set in constructor. - * @param {Function=} complete Call back will be fired when zoom will be complete. - */ - this.setImageProps = function(disp_w, disp_h, x, y, skip_animation, complete) { - complete = complete || jQuery.noop; - - this.display_width(disp_w); - this.display_height(disp_h); - this.x(x, true); - this.y(y, true); - - var w = this._swapDimensions ? disp_h : disp_w; - var h = this._swapDimensions ? disp_w : disp_h; - - var params = { - width: w, - height: h, - top: y - (this._swapDimensions ? this.display_diff() / 2 : 0) + "px", - left: x + (this._swapDimensions ? this.display_diff() / 2 : 0) + "px" - }; - - if (useIeTransforms) { - jQuery.extend(params, { - marginLeft: ieTransforms[this.angle()].marginLeft * this.display_diff() / 2, - marginTop: ieTransforms[this.angle()].marginTop * this.display_diff() / 2 - }); - } - - var swapDims = this._swapDimensions, - img = this._img; - - //here we come: another IE oddness. If image is rotated 90 degrees with a filter, than - //width and height getters return real width and height of rotated image. The bad news - //is that to set height you need to set a width and vice versa. Fuck IE. - //So, in this case we have to animate width and height manually. - if(useIeTransforms && swapDims) { - var ieh = this._img.width(), - iew = this._img.height(), - iedh = params.height - ieh; - iedw = params.width - iew; - - delete params.width; - delete params.height; - } - - if (this._do_anim && !skip_animation) { - this._img.stop(true) - .animate(params, { - duration: 200, - complete: complete, - step: function(now, fx) { - if(useIeTransforms && swapDims && (fx.prop === 'top')) { - var percent = (now - fx.start) / (fx.end - fx.start); - - img.height(ieh + iedh * percent); - img.width(iew + iedw * percent); - img.css('top', now); - } - } - }); - } else { - this._img.css(params); - setTimeout(complete, 0); //both if branches should behave equally. - } - }; - - //if we set image coordinates we need to be sure that no animation is active atm - this._finishAnimation = function() { - this._img.stop(true, true); - } - -}).apply($.ui.iviewer.ImageObject.prototype); - - - -var util = { - scaleValue: function(value, toZoom) - { - return value * toZoom / 100; - }, - - descaleValue: function(value, fromZoom) - { - return value * 100 / fromZoom; - } -}; - - } )( jQuery, undefined ); diff --git a/vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.min.js b/vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.min.js deleted file mode 100644 index e118e3c..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/js/jquery.iviewer.min.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * iviewer Widget for jQuery UI - * https://github.com/can3p/iviewer - * - * Copyright (c) 2009 - 2012 Dmitry Petrov - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Dmitry Petrov - * Version: 0.7.7 - */ -(function($,undefined){var mouseEvents={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},gesturesSupport="ongesturestart"in document.createElement("div");function makeMouseEvent(event){var touch=event.originalEvent.changedTouches[0];return $.extend(event,{type:mouseEvents[event.type],which:1,pageX:touch.pageX,pageY:touch.pageY,screenX:touch.screenX,screenY:touch.screenY,clientX:touch.clientX,clientY:touch.clientY,isTouchEvent:true})}var mouseProto=$.ui.mouse.prototype,_mouseInit=$.ui.mouse.prototype._mouseInit; -mouseProto._mouseInit=function(){var self=this;self._touchActive=false;this.element.bind("touchstart."+this.widgetName,function(event){if(gesturesSupport&&event.originalEvent.touches.length>1)return;self._touchActive=true;return self._mouseDown(makeMouseEvent(event))});var self=this;this._mouseMoveDelegate=function(event){if(gesturesSupport&&event.originalEvent.touches&&event.originalEvent.touches.length>1)return;if(self._touchActive)return self._mouseMove(makeMouseEvent(event))};this._mouseUpDelegate= -function(event){if(self._touchActive){self._touchActive=false;return self._mouseUp(makeMouseEvent(event))}};$(document).bind("touchmove."+this.widgetName,this._mouseMoveDelegate).bind("touchend."+this.widgetName,this._mouseUpDelegate);_mouseInit.apply(this)};var setter=function(setter,getter){return function(val){if(arguments.length===0)return getter.apply(this);else setter.apply(this,arguments)}};var ieTransforms={"0":{marginLeft:0,marginTop:0,filter:'progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, SizingMethod="auto expand")'}, -90:{marginLeft:-1,marginTop:1,filter:'progid:DXImageTransform.Microsoft.Matrix(M11=0, M12=-1, M21=1, M22=0, SizingMethod="auto expand")'},180:{marginLeft:0,marginTop:0,filter:'progid:DXImageTransform.Microsoft.Matrix(M11=-1, M12=0, M21=0, M22=-1, SizingMethod="auto expand")'},270:{marginLeft:-1,marginTop:1,filter:'progid:DXImageTransform.Microsoft.Matrix(M11=0, M12=1, M21=-1, M22=0, SizingMethod="auto expand")'}},useIeTransforms=function(){var el=document.createElement("div");el.style.cssText=["-ms-", -"",""].join("filter:blur(2px); ");return!!el.style.cssText&&document.documentMode<9}();$.widget("ui.iviewer",$.ui.mouse,{widgetEventPrefix:"iviewer",options:{zoom:"fit",zoom_base:100,zoom_max:800,zoom_min:25,zoom_delta:1.4,zoom_animation:true,ui_disabled:false,mousewheel:true,update_on_resize:true,onZoom:jQuery.noop,onAfterZoom:jQuery.noop,onStartDrag:jQuery.noop,onDrag:jQuery.noop,onStopDrag:jQuery.noop,onMouseMove:jQuery.noop,onClick:jQuery.noop,onStartLoad:null,onFinishLoad:null,onErrorLoad:null}, -_create:function(){var me=this;this.dx=0;this.dy=0;this.img_object={};this.zoom_object={};this._angle=0;this.current_zoom=this.options.zoom;if(this.options.src===null)return;this.container=this.element;this._updateContainerInfo();this.container.css("overflow","hidden");if(this.options.update_on_resize==true)$(window).resize(function(){me.update()});this.img_object=new $.ui.iviewer.ImageObject(this.options.zoom_animation);if(this.options.mousewheel){this.container.bind("mousewheel.iviewer",function(ev, -delta){var zoom=delta>0?1:-1,container_offset=me.container.offset(),mouse_pos={x:ev.pageX-container_offset.left,y:ev.pageY-container_offset.top};me.zoom_by(zoom,mouse_pos);return false});if(gesturesSupport){var gestureThrottle=+new Date;var originalScale,originalCenter;this.img_object.object().bind("touchstart",function(ev){originalScale=me.current_zoom;var touches=ev.originalEvent.touches,container_offset;if(touches.length==2){container_offset=me.container.offset();originalCenter={x:(touches[0].pageX+ -touches[1].pageX)/2-container_offset.left,y:(touches[0].pageY+touches[1].pageY)/2-container_offset.top}}else originalCenter=null}).bind("gesturechange",function(ev){var d=+new Date;if(d-gestureThrottle<50)return;gestureThrottle=d;var zoom=originalScale*ev.originalEvent.scale;me.set_zoom(zoom,originalCenter);ev.preventDefault()}).bind("gestureend",function(ev){originalCenter=null})}}this.img_object.object().click(function(e){return me._click(e)}).prependTo(this.container);this.container.bind("mousemove", -function(ev){me._handleMouseMove(ev)});this.loadImage(this.options.src);if(!this.options.ui_disabled)this.createui();this._mouseInit()},destroy:function(){$.Widget.prototype.destroy.call(this);this._mouseDestroy();this.img_object.object().remove();this.container.off(".iviewer");this.container.css("overflow","")},_updateContainerInfo:function(){this.options.height=this.container.height();this.options.width=this.container.width()},update:function(){this._updateContainerInfo();this.setCoords(this.img_object.x(), -this.img_object.y())},loadImage:function(src){this.current_zoom=this.options.zoom;var me=this;this._trigger("onStartLoad",0,src);this.container.addClass("iviewer_loading");this.img_object.load(src,function(){me._imageLoaded(src)},function(){me._trigger("onErrorLoad",0,src)})},_imageLoaded:function(src){this.container.removeClass("iviewer_loading");this.container.addClass("iviewer_cursor");if(this.options.zoom=="fit")this.fit(true);else this.set_zoom(this.options.zoom,true);this._trigger("onFinishLoad", -0,src)},fit:function(skip_animation){var aspect_ratio=this.img_object.orig_width()/this.img_object.orig_height();var window_ratio=this.options.width/this.options.height;var choose_left=aspect_ratio>window_ratio;var new_zoom=0;if(choose_left)new_zoom=this.options.width/this.img_object.orig_width()*100;else new_zoom=this.options.height/this.img_object.orig_height()*100;this.set_zoom(new_zoom,skip_animation)},center:function(){this.setCoords(-Math.round((this.img_object.display_width()-this.options.width)/ -2),-Math.round((this.img_object.display_height()-this.options.height)/2))},moveTo:function(x,y){var dx=x-Math.round(this.options.width/2);var dy=y-Math.round(this.options.height/2);var new_x=this.img_object.x()-dx;var new_y=this.img_object.y()-dy;this.setCoords(new_x,new_y)},getContainerOffset:function(){return jQuery.extend({},this.container.offset())},setCoords:function(x,y){if(!this.img_object.loaded())return;var coords=this._correctCoords(x,y);this.img_object.x(coords.x);this.img_object.y(coords.y)}, -_correctCoords:function(x,y){x=parseInt(x,10);y=parseInt(y,10);if(y>0)y=0;if(x>0)x=0;if(y+this.img_object.display_height()this.options.zoom_max)new_zoom=this.options.zoom_max;if(this.current_zoom=="fit"){var old_x= -zoom_center.x+Math.round(this.img_object.orig_width()/2);var old_y=zoom_center.y+Math.round(this.img_object.orig_height()/2);this.current_zoom=100}else{var old_x=-this.img_object.x()+zoom_center.x;var old_y=-this.img_object.y()+zoom_center.y}var new_width=util.scaleValue(this.img_object.orig_width(),new_zoom);var new_height=util.scaleValue(this.img_object.orig_height(),new_zoom);var new_x=util.scaleValue(util.descaleValue(old_x,this.current_zoom),new_zoom);var new_y=util.scaleValue(util.descaleValue(old_y, -this.current_zoom),new_zoom);new_x=zoom_center.x-new_x;new_y=zoom_center.y-new_y;new_width=Math.floor(new_width);new_height=Math.floor(new_height);new_x=Math.floor(new_x);new_y=Math.floor(new_y);this.img_object.display_width(new_width);this.img_object.display_height(new_height);var coords=this._correctCoords(new_x,new_y),self=this;this.img_object.setImageProps(new_width,new_height,coords.x,coords.y,skip_animation,function(){self._trigger("onAfterZoom",0,new_zoom)});this.current_zoom=new_zoom;this.update_status()}, -zoom_by:function(delta,zoom_center){var closest_rate=this.find_closest_zoom_rate(this.current_zoom);var next_rate=closest_rate+delta;var next_zoom=this.options.zoom_base*Math.pow(this.options.zoom_delta,next_rate);if(delta>0&&next_zoomthis.current_zoom)next_zoom/=this.options.zoom_delta;this.set_zoom(next_zoom,undefined,zoom_center)},angle:function(deg,abs){if(arguments.length===0)return this.img_object.angle();if(deg<-270|| -deg>270||deg%90!==0)return;if(!abs)deg+=this.img_object.angle();if(deg<0)deg+=360;if(deg>=360)deg-=360;if(deg===this.img_object.angle())return;this.img_object.angle(deg);this.center();this._trigger("angle",0,{angle:this.img_object.angle()})},find_closest_zoom_rate:function(value){if(value==this.options.zoom_base)return 0;function div(val1,val2){return val1/val2}function mul(val1,val2){return val1*val2}var func=value>this.options.zoom_base?mul:div;var sgn=value>this.options.zoom_base?1:-1;var mltplr= -this.options.zoom_delta;var rate=1;while(Math.abs(func(this.options.zoom_base,Math.pow(mltplr,rate))-value)>Math.abs(func(this.options.zoom_base,Math.pow(mltplr,rate+1))-value))rate++;return sgn*rate},update_status:function(){if(!this.options.ui_disabled){var percent=Math.round(100*this.img_object.display_height()/this.img_object.orig_height());if(percent)this.zoom_object.html(percent+"%")}},info:function(param,withoutRotation){if(!param)return;switch(param){case "orig_width":case "orig_height":if(withoutRotation)return this.img_object.angle()% -180===0?this.img_object[param]():param==="orig_width"?this.img_object.orig_height():this.img_object.orig_width();else return this.img_object[param]();case "display_width":case "display_height":case "angle":return this.img_object[param]();case "zoom":return this.current_zoom;case "src":return this.img_object.object().attr("src");case "coords":return{x:this.img_object.x(),y:this.img_object.y()}}},_mouseStart:function(e){$.ui.mouse.prototype._mouseStart.call(this,e);if(this._trigger("onStartDrag",0, -this._getMouseCoords(e))===false)return false;this.container.addClass("iviewer_drag_cursor");this._dragInitialized=!(e.originalEvent.changedTouches&&e.originalEvent.changedTouches.length==1);this.dx=e.pageX-this.img_object.x();this.dy=e.pageY-this.img_object.y();return true},_mouseCapture:function(e){return true},_handleMouseMove:function(e){this._trigger("onMouseMove",e,this._getMouseCoords(e))},_mouseDrag:function(e){$.ui.mouse.prototype._mouseDrag.call(this,e);if(!this._dragInitialized){this.dx= -e.pageX-this.img_object.x();this.dy=e.pageY-this.img_object.y();this._dragInitialized=true}var ltop=e.pageY-this.dy;var lleft=e.pageX-this.dx;this.setCoords(lleft,ltop);this._trigger("onDrag",e,this._getMouseCoords(e));return false},_mouseStop:function(e){$.ui.mouse.prototype._mouseStop.call(this,e);this.container.removeClass("iviewer_drag_cursor");this._trigger("onStopDrag",0,this._getMouseCoords(e))},_click:function(e){this._trigger("onClick",0,this._getMouseCoords(e))},createui:function(){var me= -this;$("
",{"class":"iviewer_zoom_in iviewer_common iviewer_button"}).bind("mousedown touchstart",function(){me.zoom_by(1);return false}).appendTo(this.container);$("
",{"class":"iviewer_zoom_out iviewer_common iviewer_button"}).bind("mousedown touchstart",function(){me.zoom_by(-1);return false}).appendTo(this.container);$("
",{"class":"iviewer_zoom_zero iviewer_common iviewer_button"}).bind("mousedown touchstart",function(){me.set_zoom(100);return false}).appendTo(this.container);$("
", -{"class":"iviewer_zoom_fit iviewer_common iviewer_button"}).bind("mousedown touchstart",function(){me.fit(this);return false}).appendTo(this.container);this.zoom_object=$("
").addClass("iviewer_zoom_status iviewer_common").appendTo(this.container);$("
",{"class":"iviewer_rotate_left iviewer_common iviewer_button"}).bind("mousedown touchstart",function(){me.angle(-90);return false}).appendTo(this.container);$("
",{"class":"iviewer_rotate_right iviewer_common iviewer_button"}).bind("mousedown touchstart", -function(){me.angle(90);return false}).appendTo(this.container);this.update_status()}});$.ui.iviewer.ImageObject=function(do_anim){this._img=$("").css({position:"absolute",top:"0px",left:"0px"});this._loaded=false;this._swapDimensions=false;this._do_anim=do_anim||false;this.x(0,true);this.y(0,true);this.angle(0)};(function(){this._reset=function(w,h){this._angle=0;this._swapDimensions=false;this.x(0);this.y(0);this.orig_width(w);this.orig_height(h);this.display_width(w);this.display_height(h)}; -this.loaded=function(){return this._loaded};this.load=function(src,loaded,error){var self=this;loaded=loaded||jQuery.noop;this._loaded=false;var img=new Image;img.onload=function(){self._loaded=true;self._reset(this.width,this.height);self._img.removeAttr("width").removeAttr("height").removeAttr("style").css({position:"absolute",top:"0px",left:"0px",maxWidth:"none"});self._img[0].src=src;loaded()};img.onerror=error;setTimeout(function(){img.src=src},0);this.angle(0)};this._dimension=function(prefix, -name){var horiz="_"+prefix+"_"+name,vert="_"+prefix+"_"+(name==="height"?"width":"height");return setter(function(val){this[this._swapDimensions?horiz:vert]=val},function(){return this[this._swapDimensions?horiz:vert]})};this.display_width=this._dimension("display","width"),this.display_height=this._dimension("display","height"),this.display_diff=function(){return Math.floor(this.display_width()-this.display_height())};this.orig_width=this._dimension("orig","width"),this.orig_height=this._dimension("orig", -"height"),this.x=setter(function(val,skipCss){this._x=val;if(!skipCss){this._finishAnimation();this._img.css("left",this._x+(this._swapDimensions?this.display_diff()/2:0)+"px")}},function(){return this._x});this.y=setter(function(val,skipCss){this._y=val;if(!skipCss){this._finishAnimation();this._img.css("top",this._y-(this._swapDimensions?this.display_diff()/2:0)+"px")}},function(){return this._y});this.angle=setter(function(deg){var prevSwap=this._swapDimensions;this._angle=deg;this._swapDimensions= -deg%180!==0;if(prevSwap!==this._swapDimensions){var verticalMod=this._swapDimensions?-1:1;this.x(this.x()-verticalMod*this.display_diff()/2,true);this.y(this.y()+verticalMod*this.display_diff()/2,true)}var cssVal="rotate("+deg+"deg)",img=this._img;jQuery.each(["","-webkit-","-moz-","-o-","-ms-"],function(i,prefix){img.css(prefix+"transform",cssVal)});if(useIeTransforms){jQuery.each(["-ms-",""],function(i,prefix){img.css(prefix+"filter",ieTransforms[deg].filter)});img.css({marginLeft:ieTransforms[deg].marginLeft* -this.display_diff()/2,marginTop:ieTransforms[deg].marginTop*this.display_diff()/2})}},function(){return this._angle});this.toOriginalCoords=function(point){switch(this.angle()){case 0:return{x:point.x,y:point.y};case 90:return{x:point.y,y:this.display_width()-point.x};case 180:return{x:this.display_width()-point.x,y:this.display_height()-point.y};case 270:return{x:this.display_height()-point.y,y:point.x}}};this.toRealCoords=function(point){switch(this.angle()){case 0:return{x:this.x()+point.x,y:this.y()+ -point.y};case 90:return{x:this.x()+this.display_width()-point.y,y:this.y()+point.x};case 180:return{x:this.x()+this.display_width()-point.x,y:this.y()+this.display_height()-point.y};case 270:return{x:this.x()+point.y,y:this.y()+this.display_height()-point.x}}};this.object=setter(jQuery.noop,function(){return this._img});this.setImageProps=function(disp_w,disp_h,x,y,skip_animation,complete){complete=complete||jQuery.noop;this.display_width(disp_w);this.display_height(disp_h);this.x(x,true);this.y(y, -true);var w=this._swapDimensions?disp_h:disp_w;var h=this._swapDimensions?disp_w:disp_h;var params={width:w,height:h,top:y-(this._swapDimensions?this.display_diff()/2:0)+"px",left:x+(this._swapDimensions?this.display_diff()/2:0)+"px"};if(useIeTransforms)jQuery.extend(params,{marginLeft:ieTransforms[this.angle()].marginLeft*this.display_diff()/2,marginTop:ieTransforms[this.angle()].marginTop*this.display_diff()/2});var swapDims=this._swapDimensions,img=this._img;if(useIeTransforms&&swapDims){var ieh= -this._img.width(),iew=this._img.height(),iedh=params.height-ieh;iedw=params.width-iew;delete params.width;delete params.height}if(this._do_anim&&!skip_animation)this._img.stop(true).animate(params,{duration:200,complete:complete,step:function(now,fx){if(useIeTransforms&&swapDims&&fx.prop==="top"){var percent=(now-fx.start)/(fx.end-fx.start);img.height(ieh+iedh*percent);img.width(iew+iedw*percent);img.css("top",now)}}});else{this._img.css(params);setTimeout(complete,0)}};this._finishAnimation=function(){this._img.stop(true, -true)}}).apply($.ui.iviewer.ImageObject.prototype);var util={scaleValue:function(value,toZoom){return value*toZoom/100},descaleValue:function(value,fromZoom){return value*100/fromZoom}}})(jQuery,undefined); diff --git a/vendor/fieryprophet/php-sandbox/docs/js/jquery.smooth-scroll.js b/vendor/fieryprophet/php-sandbox/docs/js/jquery.smooth-scroll.js deleted file mode 100644 index ce1e19b..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/js/jquery.smooth-scroll.js +++ /dev/null @@ -1,32 +0,0 @@ -$(document).ready(function() { - function filterPath(string) { - return string - .replace(/^\//,'') - .replace(/(index|default).[a-zA-Z]{3,4}$/,'') - .replace(/\/$/,''); - } - var locationPath = filterPath(location.pathname); - - $('a[href*=#]').each(function() { - var thisPath = filterPath(this.pathname) || locationPath; - if ( locationPath == thisPath - && (location.hostname == this.hostname || !this.hostname) - && this.hash.replace(/#/,'') ) { - var $target = $(this.hash), target = this.hash; - if (target) { - $(this).click(function(event) { - if (!$(this.hash).offset()) { - return; - } - - event.preventDefault(); - position = $(this.hash).offset().top; - - $('html,body').animate({scrollTop: position}, 400, function() { - location.hash = target; - }); - }); - } - } - }); -}); diff --git a/vendor/fieryprophet/php-sandbox/docs/js/prism.min.js b/vendor/fieryprophet/php-sandbox/docs/js/prism.min.js deleted file mode 100644 index c69705d..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/js/prism.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * MIT license http://www.opensource.org/licenses/mit-license.php/ - * @author Lea Verou http://lea.verou.me - */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; -Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; -Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; -Prism.languages.css.selector={pattern:/[^\{\}\s][^\{\}]*(?=\s*\{)/g,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/g,"pseudo-class":/:[-\w]+(?:\(.*\))?/g,"class":/\.[-:\.\w]+/g,id:/#[-:\.\w]+/g}};Prism.languages.insertBefore("css","ignore",{hexcode:/#[\da-f]{3,6}/gi,entity:/\\[\da-f]{1,8}/gi,number:/[\d%\.]+/g,"function":/(attr|calc|cross-fade|cycle|element|hsla?|image|lang|linear-gradient|matrix3d|matrix|perspective|radial-gradient|repeating-linear-gradient|repeating-radial-gradient|rgba?|rotatex|rotatey|rotatez|rotate3d|rotate|scalex|scaley|scalez|scale3d|scale|skewx|skewy|skew|steps|translatex|translatey|translatez|translate3d|translate|url|var)/ig});; -Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; -Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; -Prism.languages.php=Prism.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|extends|private|protected|parent|static|throw|null|echo|print|trait|namespace|use|final|yield|goto|instanceof|finally|try|catch)\b/ig, constant:/\b[A-Z0-9_]{2,}\b/g});Prism.languages.insertBefore("php","keyword",{delimiter:/(\?>|<\?php|<\?)/ig,variable:/(\$\w+)\b/ig,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/g,lookbehind:!0,inside:{punctuation:/\\/}}});Prism.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/g,lookbehind:!0}}); Prism.languages.markup&&(Prism.hooks.add("before-highlight",function(a){"php"===a.language&&(a.tokenStack=[],a.code=a.code.replace(/(?:<\?php|<\?|<\?php|<\?)[\w\W]*?(?:\?>|\?>)/ig,function(b){a.tokenStack.push(b);return"{{{PHP"+a.tokenStack.length+"}}}"}))}),Prism.hooks.add("after-highlight",function(a){if("php"===a.language){for(var b=0,c;c=a.tokenStack[b];b++)a.highlightedCode=a.highlightedCode.replace("{{{PHP"+(b+1)+"}}}",Prism.highlight(c,a.grammar,"php"));a.element.innerHTML=a.highlightedCode}}), Prism.hooks.add("wrap",function(a){"php"===a.language&&"markup"===a.type&&(a.content=a.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'$1'))}),Prism.languages.insertBefore("php","comment",{markup:{pattern:/(<|<)[^?]\/?(.*?)(>|>)/g,inside:Prism.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/g}));; -Prism.languages.insertBefore("php","variable",{"this":/\$this/g,global:/\$_?(GLOBALS|SERVER|GET|POST|FILES|REQUEST|SESSION|ENV|COOKIE|HTTP_RAW_POST_DATA|argc|argv|php_errormsg|http_response_header)/g,scope:{pattern:/\b[\w\\]+::/g,inside:{keyword:/(static|self|parent)/,punctuation:/(::|\\)/}}});; -(function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function n(e,t,n){var r=t.replace(/\s+/g,"").split(","),i=+e.getAttribute("data-line-offset")||0,s=parseFloat(getComputedStyle(e).lineHeight);for(var o=0,u;u=r[o++];){u=u.split("-");var a=+u[0],f=+u[1]||a,l=document.createElement("div");l.textContent=Array(f-a+2).join(" \r\n");l.className=(n||"")+" line-highlight";l.setAttribute("data-start",a);f>a&&l.setAttribute("data-end",f);l.style.top=(a-i-1)*s+"px";(e.querySelector("code")||e).appendChild(l)}}function r(){var t=location.hash.slice(1);e(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var r=(t.match(/\.([\d,-]+)$/)||[,""])[1];if(!r||document.getElementById(t))return;var i=t.slice(0,t.lastIndexOf(".")),s=document.getElementById(i);if(!s)return;s.hasAttribute("data-line")||s.setAttribute("data-line","");n(s,r,"temporary ");document.querySelector(".temporary.line-highlight").scrollIntoView()}if(!window.Prism)return;var t=crlf=/\r?\n|\r/g,i=0;Prism.hooks.add("after-highlight",function(t){var s=t.element.parentNode,o=s&&s.getAttribute("data-line");if(!s||!o||!/pre/i.test(s.nodeName))return;clearTimeout(i);e(".line-highlight",s).forEach(function(e){e.parentNode.removeChild(e)});n(s,o);i=setTimeout(r,1)});addEventListener("hashchange",r)})();; -Prism.hooks.add("after-highlight",function(e){var t=e.element.parentNode;if(!t||!/pre/i.test(t.nodeName)||t.className.indexOf("line-numbers")===-1){return}var n=1+e.code.split("\n").length;var r;lines=new Array(n);lines=lines.join("");r=document.createElement("span");r.className="line-numbers-rows";r.innerHTML=lines;if(t.hasAttribute("data-start")){t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)}e.element.appendChild(r)}) -; -(function(){if(!self.Prism||!self.document||!document.querySelector)return;var e={js:"javascript",html:"markup",svg:"markup"};Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(t){var n=t.getAttribute("data-src"),r=(n.match(/\.(\w+)$/)||[,""])[1],i=e[r]||r,s=document.createElement("code");s.className="language-"+i;t.textContent="";s.textContent="Loading…";t.appendChild(s);var o=new XMLHttpRequest;o.open("GET",n,!0);o.onreadystatechange=function(){if(o.readyState==4)if(o.status<400&&o.responseText){s.textContent=o.responseText;Prism.highlightElement(s)}else o.status>=400?s.textContent="✖ Error "+o.status+" while fetching file: "+o.statusText:s.textContent="✖ Error: File does not exist or is empty"};o.send(null)})})();; diff --git a/vendor/fieryprophet/php-sandbox/docs/namespaces/PHPSandbox.html b/vendor/fieryprophet/php-sandbox/docs/namespaces/PHPSandbox.html deleted file mode 100644 index 2eac0dd..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/namespaces/PHPSandbox.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- -

\PHPSandbox

- - - - -

Classes

- - - - - - - - - - - - - - - - - - - - - - - - - -
ErrorError class for PHP Sandboxes.
PHPSandboxPHPSandbox class for PHP Sandboxes.
SandboxedStringSandboxed string class for PHP Sandboxes.
SandboxWhitelistVisitorSandboxWhitelister class for PHP Sandboxes.
ValidatorVisitorValidator class for PHP Sandboxes.
WhitelistVisitorWhitelister class for PHP Sandboxes.
-
- - -
- - - -
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/namespaces/default.html b/vendor/fieryprophet/php-sandbox/docs/namespaces/default.html deleted file mode 100644 index 4b2a5a2..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/namespaces/default.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
- -

\

- -

Namespaces

- - - - -
PHPSandbox
- - - -
- - -
- - - -
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-2b/phpdoc-cache-file_9ea3fb738d2b3bb3e76d9fcf099a195a.dat b/vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-2b/phpdoc-cache-file_9ea3fb738d2b3bb3e76d9fcf099a195a.dat deleted file mode 100644 index 296140d7a1094725d8b78fcfd0805ef7e5314bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57312 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 diff --git a/vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-70/phpdoc-cache-file_e9d34eadaeaefe21f3f7d9637905ed7e.dat b/vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-70/phpdoc-cache-file_e9d34eadaeaefe21f3f7d9637905ed7e.dat deleted file mode 100644 index 3d8e59db82b0a5ee05b96d2bd679cbd34d50652b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70567 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 Z8@g16=Nkq*o1`k7SyoR=kaLFs;{WbRM%4fS diff --git a/vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-e8/phpdoc-cache-file_28dd4a0d5fd4671edbec88b87b53efe2.dat b/vendor/fieryprophet/php-sandbox/docs/phpdoc-cache-e8/phpdoc-cache-file_28dd4a0d5fd4671edbec88b87b53efe2.dat deleted file mode 100644 index 96fe6816c9515a76ca430a8dda97538c460114b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384258 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�& 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 diff --git a/vendor/fieryprophet/php-sandbox/docs/reports/deprecated.html b/vendor/fieryprophet/php-sandbox/docs/reports/deprecated.html deleted file mode 100644 index 646850a..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/reports/deprecated.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - -

- -
-
- - - -
- - -
-
No deprecated elements have been found in this project.
-
-
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/reports/errors.html b/vendor/fieryprophet/php-sandbox/docs/reports/errors.html deleted file mode 100644 index 7ec0d43..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/reports/errors.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - -
-
-
- -

- - PHPSandbox.php - 2 -

-
- - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
error6976Argument $code is missing from the Docblock of validate()
error7314No summary for method getIterator()
-
-
-
- -

- - SandboxedString.php - 2 -

-
- - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
error20No summary for property $value
error24No summary for property $sandbox
-
-
-
-
-
-
-
-
-
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/docs/reports/markers.html b/vendor/fieryprophet/php-sandbox/docs/reports/markers.html deleted file mode 100644 index ad69ed6..0000000 --- a/vendor/fieryprophet/php-sandbox/docs/reports/markers.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - API Documentation - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - -
No markers have been found in this project.
- -
-
-
-
- - -
- - - diff --git a/vendor/fieryprophet/php-sandbox/phpunit.xml.dist b/vendor/fieryprophet/php-sandbox/phpunit.xml.dist deleted file mode 100644 index 591c75f..0000000 --- a/vendor/fieryprophet/php-sandbox/phpunit.xml.dist +++ /dev/null @@ -1,15 +0,0 @@ - - - - tests - - - \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/Error.php b/vendor/fieryprophet/php-sandbox/src/Error.php deleted file mode 100644 index 2a03561..0000000 --- a/vendor/fieryprophet/php-sandbox/src/Error.php +++ /dev/null @@ -1,160 +0,0 @@ - - * @version 1.3.10 - */ - class Error extends \Exception { - /* START ERROR CODES */ - /* MISC ERRORS (1-99) */ - const PARSER_ERROR = 1; - const ESCAPE_ERROR = 2; - const HALT_ERROR = 3; - const CAST_ERROR = 4; - const CLOSURE_ERROR = 5; - const BYREF_ERROR = 6; - const GENERATOR_ERROR = 7; - const GLOBALS_ERROR = 8; - const DYNAMIC_VAR_ERROR = 9; - const STATIC_VAR_ERROR = 10; - const ERROR_SUPPRESS_ERROR = 11; - const BACKTICKS_ERROR = 12; - const IMPORT_ERROR = 13; - - const DYNAMIC_STATIC_VAR_ERROR = 20; - const DYNAMIC_CONST_ERROR = 21; - const DYNAMIC_CLASS_ERROR = 22; - const SANDBOX_ACCESS_ERROR = 30; - const GLOBAL_CONST_ERROR = 31; - const CREATE_OBJECT_ERROR = 32; - /* VALIDATION ERRORS (100-199) */ - const VALID_FUNC_ERROR = 100; - const VALID_KEYWORD_ERROR = 101; - const VALID_CONST_ERROR = 102; - const VALID_VAR_ERROR = 103; - const VALID_GLOBAL_ERROR = 104; - const VALID_SUPERGLOBAL_ERROR = 105; - const VALID_MAGIC_CONST_ERROR = 106; - const VALID_CLASS_ERROR = 107; - const VALID_TYPE_ERROR = 108; - const VALID_INTERFACE_ERROR = 109; - const VALID_TRAIT_ERROR = 110; - const VALID_NAMESPACE_ERROR = 111; - const VALID_ALIAS_ERROR = 112; - const VALID_OPERATOR_ERROR = 113; - const VALID_PRIMITIVE_ERROR = 114; - /* DEFINITION ERRORS (200-299) */ - const DEFINE_FUNC_ERROR = 200; - const DEFINE_KEYWORD_ERROR = 201; - const DEFINE_CONST_ERROR = 202; - const DEFINE_VAR_ERROR = 203; - const DEFINE_GLOBAL_ERROR = 204; - const DEFINE_SUPERGLOBAL_ERROR = 205; - const DEFINE_MAGIC_CONST_ERROR = 206; - const DEFINE_CLASS_ERROR = 207; - const DEFINE_TYPE_ERROR = 208; - const DEFINE_INTERFACE_ERROR = 209; - const DEFINE_TRAIT_ERROR = 210; - const DEFINE_NAMESPACE_ERROR = 211; - const DEFINE_ALIAS_ERROR = 212; - const DEFINE_OPERATOR_ERROR = 213; - const DEFINE_PRIMITIVE_ERROR = 214; - /* WHITELIST ERRORS (300-399) */ - const WHITELIST_FUNC_ERROR = 300; - const WHITELIST_KEYWORD_ERROR = 301; - const WHITELIST_CONST_ERROR = 302; - const WHITELIST_VAR_ERROR = 303; - const WHITELIST_GLOBAL_ERROR = 304; - const WHITELIST_SUPERGLOBAL_ERROR = 305; - const WHITELIST_MAGIC_CONST_ERROR = 306; - const WHITELIST_CLASS_ERROR = 307; - const WHITELIST_TYPE_ERROR = 308; - const WHITELIST_INTERFACE_ERROR = 309; - const WHITELIST_TRAIT_ERROR = 310; - const WHITELIST_NAMESPACE_ERROR = 311; - const WHITELIST_ALIAS_ERROR = 312; - const WHITELIST_OPERATOR_ERROR = 313; - const WHITELIST_PRIMITIVE_ERROR = 314; - /* BLACKLIST ERRORS (400-499) */ - const BLACKLIST_FUNC_ERROR = 400; - const BLACKLIST_KEYWORD_ERROR = 401; - const BLACKLIST_CONST_ERROR = 402; - const BLACKLIST_VAR_ERROR = 403; - const BLACKLIST_GLOBAL_ERROR = 404; - const BLACKLIST_SUPERGLOBAL_ERROR = 405; - const BLACKLIST_MAGIC_CONST_ERROR = 406; - const BLACKLIST_CLASS_ERROR = 407; - const BLACKLIST_TYPE_ERROR = 408; - const BLACKLIST_INTERFACE_ERROR = 409; - const BLACKLIST_TRAIT_ERROR = 410; - const BLACKLIST_NAMESPACE_ERROR = 411; - const BLACKLIST_ALIAS_ERROR = 412; - const BLACKLIST_OPERATOR_ERROR = 413; - const BLACKLIST_PRIMITIVE_ERROR = 414; - /* END ERROR CODES */ - /** - * @var \PHPParser_Node|null The node of the Error - */ - protected $node; - /** - * @var mixed The data of the Error - */ - protected $data; - /** Constructs the Error - * @param string $message The message to pass to the Error - * @param int $code The error code to pass to the Error - * @param \PHPParser_node $node The parser node to pass to the Error - * @param mixed $data The error data to pass to the Error - * @param \Exception $previous The previous exception to pass to the Error - */ - public function __construct($message = '', $code = 0, \PHPParser_Node $node = null, $data = null, \Exception $previous = null){ - $this->node = $node; - $this->data = $data; - parent::__construct($message, $code, $previous); - } - /** Returns data of the Error - * - * @alias getData(); - * - * @return mixed The data of the error to return - */ - public function get_data(){ - return $this->data; - } - /** Returns data of the Error - * - * @alias get_data(); - * - * @return mixed The data of the error to return - */ - public function getData(){ - return $this->data; - } - /** Returns parser node of the Error - * - * @alias getNode(); - * - * @return \PHPParser_Node|null The parser node of the error to return - */ - public function get_node(){ - return $this->node; - } - /** Returns parser node of the Error - * - * @alias get_node(); - * - * @return \PHPParser_Node|null The parser node of the error to return - */ - public function getNode(){ - return $this->node; - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/PHPSandbox.php b/vendor/fieryprophet/php-sandbox/src/PHPSandbox.php deleted file mode 100644 index 74e1751..0000000 --- a/vendor/fieryprophet/php-sandbox/src/PHPSandbox.php +++ /dev/null @@ -1,7151 +0,0 @@ - - * @version 1.3.10 - */ - class PHPSandbox implements \IteratorAggregate { - /** - * @const string The prefix given to the obfuscated sandbox key passed to the generated code - */ - const SANDBOX_PREFIX = '__PHPSandbox_'; - /** - * @const int A bit flag for the import() method, signifies to import all data from a template - */ - const IMPORT_ALL = 0; - /** - * @const int A bit flag for the import() method, signifies to import only options from a template - */ - const IMPORT_OPTIONS = 1; - /** - * @const int A bit flag for the import() method, signifies to import only definitions from a template - */ - const IMPORT_DEFINITIONS = 2; - /** - * @const int A bit flag for the import() method, signifies to import only whitelists from a template - */ - const IMPORT_WHITELIST = 4; - /** - * @const int A bit flag for the import() method, signifies to import only blacklists from a template - */ - const IMPORT_BLACKLIST = 8; - /** - * @const int A bit flag for the import() method, signifies to import only trusted code from a template - */ - const IMPORT_TRUSTED_CODE = 16; - /** - * @const int A bit flag for the import() method, signifies to import only sandboxed code from a template - */ - const IMPORT_CODE = 32; - /** - * @static - * @var array A static array of superglobal names used for redefining superglobal values - */ - public static $superglobals = array( - '_GET', - '_POST', - '_COOKIE', - '_FILES', - '_ENV', - '_REQUEST', - '_SERVER', - '_SESSION', - 'GLOBALS' - ); - /** - * @static - * @var array A static array of magic constant names used for redefining magic constant values - */ - public static $magic_constants = array( - '__LINE__', - '__FILE__', - '__DIR__', - '__FUNCTION__', - '__CLASS__', - '__TRAIT__', - '__METHOD__', - '__NAMESPACE__' - ); - /** - * @static - * @var array A static array of defined_* and declared_* functions names used for redefining defined_* and declared_* values - */ - public static $defined_funcs = array( - 'get_defined_functions', - 'get_defined_vars', - 'get_defined_constants', - 'get_declared_classes', - 'get_declared_interfaces', - 'get_declared_traits' - ); - /** - * @static - * @var array A static array of func_get_args, func_get_arg, and func_num_args used for redefining those functions - */ - public static $arg_funcs = array( - 'func_get_args', - 'func_get_arg', - 'func_num_args' - ); - /** - * @static - * @var array A static array of var_dump, print_r and var_export, intval, floatval, is_string, is_object, - * is_scalar and is_callable for redefining those functions - */ - public static $sandboxed_string_funcs = array( - 'var_dump', - 'print_r', - 'var_export', - 'intval', - 'floatval', - 'boolval', - 'is_string', - 'is_object', - 'is_scalar', - 'is_callable' - ); - /** - * @var string The randomly generated name of the PHPSandbox variable passed to the generated closure - */ - public $name = ''; - /** - * @var array Array of defined functions, superglobals, etc. If an array type contains elements, then it overwrites its external counterpart - */ - protected $definitions = array( - 'functions' => array(), - 'variables' => array(), - 'superglobals' => array(), - 'constants' => array(), - 'magic_constants' => array(), - 'namespaces' => array(), - 'aliases' => array(), - 'classes' => array(), - 'interfaces' => array(), - 'traits' => array() - ); - /** - * @var array Array of whitelisted functions, classes, etc. If an array type contains elements, then it overrides its blacklist counterpart - */ - protected $whitelist = array( - 'functions' => array(), - 'variables' => array(), - 'globals' => array(), - 'superglobals' => array(), - 'constants' => array(), - 'magic_constants' => array(), - 'namespaces' => array(), - 'aliases' => array(), - 'classes' => array(), - 'interfaces' => array(), - 'traits' => array(), - 'keywords' => array(), - 'operators' => array(), - 'primitives' => array(), - 'types' => array() - ); - /** - * @var array Array of blacklisted functions, classes, etc. Any whitelisted array types override their counterpart in this array - */ - protected $blacklist = array( - 'functions' => array(), - 'variables' => array(), - 'globals' => array(), - 'superglobals' => array(), - 'constants' => array(), - 'magic_constants' => array(), - 'namespaces' => array(), - 'aliases' => array(), - 'classes' => array(), - 'interfaces' => array(), - 'traits' => array(), - 'keywords' => array( - 'declare' => true, - 'include' => true, - 'eval' => true, - 'exit' => true, - 'halt' => true - ), - 'operators' => array(), - 'primitives' => array(), - 'types' => array() - ); - /** - * @var array Array of custom validation functions - */ - protected $validation = array( - 'function' => null, - 'variable' => null, - 'global' => null, - 'superglobal' => null, - 'constant' => null, - 'magic_constant' => null, - 'namespace' => null, - 'alias' => null, - 'class' => null, - 'interface' => null, - 'trait' => null, - 'keyword' => null, - 'operator' => null, - 'primitive' => null, - 'type' => null - ); - /** - * @var PHPSandbox[] Array of PHPSandboxes - */ - protected static $sandboxes = array(); - /* CONFIGURATION OPTION FLAGS */ - /** - * @var bool Flag to indicate whether the sandbox should validate functions - * @default true - */ - public $validate_functions = true; - /** - * @var bool Flag to indicate whether the sandbox should validate variables - * @default true - */ - public $validate_variables = true; - /** - * @var bool Flag to indicate whether the sandbox should validate globals - * @default true - */ - public $validate_globals = true; - /** - * @var bool Flag to indicate whether the sandbox should validate superglobals - * @default true - */ - public $validate_superglobals = true; - /** - * @var bool Flag to indicate whether the sandbox should validate constants - * @default true - */ - public $validate_constants = true; - /** - * @var bool Flag to indicate whether the sandbox should validate magic constants - * @default true - */ - public $validate_magic_constants = true; - /** - * @var bool Flag to indicate whether the sandbox should validate namespaces - * @default true - */ - public $validate_namespaces = true; - /** - * @var bool Flag to indicate whether the sandbox should validate aliases (aka use) - * @default true - */ - public $validate_aliases = true; - /** - * @var bool Flag to indicate whether the sandbox should validate classes - * @default true - */ - public $validate_classes = true; - /** - * @var bool Flag to indicate whether the sandbox should validate interfaces - * @default true - */ - public $validate_interfaces = true; - /** - * @var bool Flag to indicate whether the sandbox should validate traits - * @default true - */ - public $validate_traits = true; - /** - * @var bool Flag to indicate whether the sandbox should validate keywords - * @default true - */ - public $validate_keywords = true; - /** - * @var bool Flag to indicate whether the sandbox should validate operators - * @default true - */ - public $validate_operators = true; - /** - * @var bool Flag to indicate whether the sandbox should validate primitives - * @default true - */ - public $validate_primitives = true; - /** - * @var bool Flag to indicate whether the sandbox should validate types - * @default true - */ - public $validate_types = true; - /** - * @var int The error_reporting level to set the PHPSandbox scope to when executing the generated closure, if set to null it will use parent scope error level. - * @default true - */ - public $error_level = null; - /** - * @var bool Flag to indicate whether the sandbox should return error_reporting to its previous level after execution - * @default true - */ - public $restore_error_level = true; - /** - * @var bool Flag to indicate whether the sandbox should convert errors to exceptions - * @default false - */ - public $convert_errors = false; - /** - * @var bool Flag whether to return output via an output buffer - * @default false - */ - public $capture_output = false; - /** - * @var bool Should PHPSandbox automagically whitelist prepended and appended code? - * @default true - */ - public $auto_whitelist_trusted_code = true; - /** - * @var bool Should PHPSandbox automagically whitelist functions created in sandboxed code if $allow_functions is true? - * @default true - */ - public $auto_whitelist_functions = true; - /** - * @var bool Should PHPSandbox automagically whitelist constants created in sandboxed code if $allow_constants is true? - * @default true - */ - public $auto_whitelist_constants = true; - /** - * @var bool Should PHPSandbox automagically whitelist global variables created in sandboxed code if $allow_globals is true? (Used to whitelist them in the variables list) - * @default true - */ - public $auto_whitelist_globals = true; - /** - * @var bool Should PHPSandbox automagically whitelist classes created in sandboxed code if $allow_classes is true? - * @default true - */ - public $auto_whitelist_classes = true; - /** - * @var bool Should PHPSandbox automagically whitelist interfaces created in sandboxed code if $allow_interfaces is true? - * @default true - */ - public $auto_whitelist_interfaces = true; - /** - * @var bool Should PHPSandbox automagically whitelist traits created in sandboxed code if $allow_traits is true? - * @default true - */ - public $auto_whitelist_traits = true; - /** - * @var bool Should PHPSandbox automagically define variables passed to prepended, appended and prepared code closures? - * @default true - */ - public $auto_define_vars = true; - /** - * @var bool Should PHPSandbox overwrite get_defined_functions, get_defined_vars, get_defined_constants, get_declared_classes, get_declared_interfaces and get_declared_traits? - * @default true - */ - public $overwrite_defined_funcs = true; - /** - * @var bool Should PHPSandbox overwrite func_get_args, func_get_arg and func_num_args? - * @default true - */ - public $overwrite_func_get_args = true; - /** - * @var bool Should PHPSandbox overwrite functions to help hide SandboxedStrings? - * @default true - */ - public $overwrite_sandboxed_string_funcs = true; - /** - * @var bool Should PHPSandbox overwrite $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST, $_SERVER, $_SESSION and $GLOBALS superglobals? If so, unless alternate superglobal values have been defined they will return as empty arrays. - * @default true - */ - public $overwrite_superglobals = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare functions? - * @default false - */ - public $allow_functions = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare closures? - * @default false - */ - public $allow_closures = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to create variables? - * @default true - */ - public $allow_variables = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to create static variables? - * @default true - */ - public $allow_static_variables = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to create objects of allow classes (e.g. new keyword)? - * @default true - */ - public $allow_objects = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to define constants? - * @default false - */ - public $allow_constants = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to use global keyword to access variables in the global scope? - * @default false - */ - public $allow_globals = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare namespaces (utilizing the define_namespace function?) - * @default false - */ - public $allow_namespaces = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to use namespaces and declare namespace aliases (utilizing the define_alias function?) - * @default false - */ - public $allow_aliases = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare classes? - * @default false - */ - public $allow_classes = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare interfaces? - * @default false - */ - public $allow_interfaces = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to declare traits? - * @default false - */ - public $allow_traits = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to create generators? - * @default true - */ - public $allow_generators = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to escape to HTML? - * @default false - */ - public $allow_escaping = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to cast types? (This will still be subject to allowed classes) - * @default false - */ - public $allow_casting = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to suppress errors (e.g. the @ operator?) - * @default false - */ - public $allow_error_suppressing = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to assign references? - * @default true - */ - public $allow_references = true; - /** - * @var bool Should PHPSandbox allow sandboxed code to use backtick execution? (e.g. $var = \`ping google.com\`; This will also be disabled if shell_exec is not whitelisted or if it is blacklisted, and will be converted to a defined shell_exec function call if one is defined) - * @default false - */ - public $allow_backticks = false; - /** - * @var bool Should PHPSandbox allow sandboxed code to halt the PHP compiler? - * @default false - */ - public $allow_halting = false; - /* TRUSTED CODE STRINGS */ - /** - * @var string String of prepended code, will be automagically whitelisted for functions, variables, globals, constants, classes, interfaces and traits if $auto_whitelist_trusted_code is true - */ - public $prepended_code = ''; - /** - * @var string String of appended code, will be automagically whitelisted for functions, variables, globals, constants, classes, interfaces and traits if $auto_whitelist_trusted_code is true - */ - public $appended_code = ''; - /* OUTPUT */ - /** - * @var float|null Float of the number of microseconds it took to prepare the sandbox - */ - public $prepare_time = null; - /** - * @var float|null Float of the number of microseconds it took to execute the sandbox - */ - public $execution_time = null; - /** - * @var string String of preparsed code, for debugging and serialization purposes - */ - public $preparsed_code = ''; - /** - * @var array Array of parsed code broken down into AST tokens, for debugging and serialization purposes - */ - public $parsed_ast = array(); - /** - * @var string String of prepared code, for debugging and serialization purposes - */ - public $prepared_code = ''; - /** - * @var array Array of prepared code broken down into AST tokens, for debugging and serialization purposes - */ - public $prepared_ast = array(); - /** - * @var string String of generated code, for debugging and serialization purposes - */ - public $generated_code = ''; - /** - * @var null|callable Callable that handles any errors when set - */ - protected $error_handler; - /** - * @var int Integer value of the error types to handle (default is E_ALL) - */ - protected $error_handler_types = E_ALL; - /** - * @var array The last error thrown by the sandbox - */ - protected $last_error; - /** - * @var null|callable Callable that handles any thrown exceptions when set - */ - protected $exception_handler; - /** - * @var \Exception The last exception thrown by the sandbox - */ - protected $last_exception; - /** - * @var null|callable Callable that handles any thrown validation errors when set - */ - protected $validation_error_handler; - /** - * @var \Exception|Error The last validation error thrown by the sandbox - */ - protected $last_validation_error; - /** PHPSandbox class constructor - * - * @example $sandbox = new PHPSandbox\PHPSandbox; - * - * You can pass optional arrays of predefined functions, variables, etc. to the sandbox through the constructor - * - * @param array $options Optional array of options to set for the sandbox - * @param array $functions Optional array of functions to define for the sandbox - * @param array $variables Optional array of variables to define for the sandbox - * @param array $constants Optional array of constants to define for the sandbox - * @param array $namespaces Optional array of namespaces to define for the sandbox - * @param array $aliases Optional array of aliases to define for the sandbox - * @param array $superglobals Optional array of superglobals to define for the sandbox - * @param array $magic_constants Optional array of magic constants to define for the sandbox - * @param array $classes Optional array of classes to define for the sandbox - * @param array $interfaces Optional array of interfaces to define for the sandbox - * @param array $traits Optional array of traits to define for the sandbox - * @return PHPSandbox The returned PHPSandbox variable - */ - public function __construct(array $options = array(), - array $functions = array(), - array $variables = array(), - array $constants = array(), - array $namespaces = array(), - array $aliases = array(), - array $superglobals = array(), - array $magic_constants = array(), - array $classes = array(), - array $interfaces = array(), - array $traits = array()){ - $this->name = static::SANDBOX_PREFIX . md5(uniqid()); - $this->set_options($options) - ->define_funcs($functions) - ->define_vars($variables) - ->define_consts($constants) - ->define_namespaces($namespaces) - ->define_aliases($aliases) - ->define_superglobals($superglobals) - ->define_magic_consts($magic_constants) - ->define_classes($classes) - ->define_interfaces($interfaces) - ->define_traits($traits); - return $this; - } - /** PHPSandbox static factory method - * - * You can pass optional arrays of predefined functions, variables, etc. to the sandbox through the constructor - * - * @example $sandbox = PHPSandbox\PHPSandbox::create(); - * - * @param array $options Optional array of options to set for the sandbox - * @param array $functions Optional array of functions to define for the sandbox - * @param array $variables Optional array of variables to define for the sandbox - * @param array $constants Optional array of constants to define for the sandbox - * @param array $namespaces Optional array of namespaces to define for the sandbox - * @param array $aliases Optional array of aliases to define for the sandbox - * @param array $superglobals Optional array of superglobals to define for the sandbox - * @param array $magic_constants Optional array of magic constants to define for the sandbox - * @param array $classes Optional array of classes to define for the sandbox - * @param array $interfaces Optional array of interfaces to define for the sandbox - * @param array $traits Optional array of traits to define for the sandbox - * - * @return PHPSandbox The returned PHPSandbox variable - */ - public static function create(array $options = array(), - array $functions = array(), - array $variables = array(), - array $constants = array(), - array $namespaces = array(), - array $aliases = array(), - array $superglobals = array(), - array $magic_constants = array(), - array $classes = array(), - array $interfaces = array(), - array $traits = array()){ - return new static($options, $functions, $variables, $constants, $namespaces, $aliases, $superglobals, $magic_constants, $classes, $interfaces, $traits); - } - /** PHPSandbox __invoke magic method - * - * Besides the code or closure to be executed, you can also pass additional arguments that will overwrite the default values of their respective arguments defined in the code - * - * @example $sandbox = new PHPSandbox\PHPSandbox; $sandbox(function(){ echo 'Hello world!'; }); - * - * @param \Closure|callable|string $code The closure, callable or string of code to execute - * - * @return mixed The output of the executed sandboxed code - */ - public function __invoke($code){ - return call_user_func(array($this, 'execute'), $code); - } - /** PHPSandbox __sleep magic method - * - * @example $sandbox = new PHPSandbox\PHPSandbox; serialize($sandbox); - * - * @return array An array of property keys to be serialized - */ - public function __sleep(){ - return array_keys(get_object_vars($this)); - } - /** PHPSandbox __wakeup magic method - * - * @example $sandbox = unserialize($sandbox_string); - */ - public function __wakeup(){} - /** Import JSON template into sandbox - * - * @example $sandbox->import(array('code' => 'echo "Hello World!";')); - * @example $sandbox->import(file_get_contents("template.json")); - * - * @param array|string $template The JSON array or string template to import - * @param int $import_flag Binary flags signifying which parts of the JSON template to import - * - * @throws Error Throws exception if JSON template could not be imported - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function import($template, $import_flag = 0){ - if(is_string($template)){ - $template = json_decode($template); - } - if(!is_array($template)){ - $this->validation_error("Sandbox could not import malformed JSON template!", Error::IMPORT_ERROR, null, $template); - } - if(isset($template['options']) && is_array($template['options']) && (!$import_flag || ($import_flag & static::IMPORT_OPTIONS))){ - $this->set_options($template['options']); - } - if(isset($template['definitions']) && is_array($template['definitions']) && (!$import_flag || ($import_flag & static::IMPORT_DEFINITIONS))){ - foreach($template['definitions'] as $type => $data){ - if(method_exists($this, 'define_' . $type)){ - switch($type){ - case 'func': - foreach($data as $key => $value){ - $function = function(){}; - @eval('$function = ' . $value["fullcode"] .';'); - if(!is_callable($function)){ - $this->validation_error("Could not import function $key! Please check your code for errors!", Error::IMPORT_ERROR, null, $function); - } - $this->define_func($key, $function, $value["pass"]); - } - break; - case 'superglobal': - foreach($data as $key => $value){ - $this->define_superglobal($key, $value["key"], $value["value"]); - } - break; - case 'namespace': - foreach($data as $key => $value){ - $this->define_namespace($key); - } - break; - case 'alias': - foreach($data as $key => $value){ - $this->define_alias($key, $value ? $value : null); - } - break; - case 'class': - foreach($data as $key => $value){ - $this->define_class($key, $value); - } - break; - case 'interface': - foreach($data as $key => $value){ - $this->define_interface($key, $value); - } - break; - case 'trait': - foreach($data as $key => $value){ - $this->define_trait($key, $value); - } - break; - - default: - foreach($data as $key => $value){ - call_user_func_array(array($this, 'define_' . $type), array($key, $value["value"])); - } - break; - } - } - } - } - if(isset($template['whitelist']) && is_array($template['whitelist']) && (!$import_flag || ($import_flag & static::IMPORT_WHITELIST))){ - foreach($template['whitelist'] as $type => $data){ - if(method_exists($this, 'whitelist_' . $type)){ - call_user_func_array(array($this, 'whitelist_' . $type), array($data)); - } - } - } - if(isset($template['blacklist']) && is_array($template['blacklist']) && (!$import_flag || ($import_flag & static::IMPORT_BLACKLIST))){ - foreach($template['blacklist'] as $type => $data){ - if(method_exists($this, 'blacklist_' . $type)){ - call_user_func_array(array($this, 'blacklist_' . $type), array($data)); - } - } - } - if(!$import_flag || ($import_flag & static::IMPORT_TRUSTED_CODE)){ - $this->clear_trusted_code(); - if(isset($template['prepend_code']) && $template['prepend_code']){ - $this->prepend($template['prepend_code']); - } - if(isset($template['append_code']) && $template['append_code']){ - $this->append($template['append_code']); - } - } - if(!$import_flag || ($import_flag & static::IMPORT_CODE)){ - $this->clear_code(); - if(isset($template['code']) && $template['code']){ - $this->prepare($template['code']); - } - } - return $this; - } - /** Import JSON template into sandbox - * - * @alias import(); - * - * @example $sandbox->importJSON(array('code' => 'echo "Hello World!";')); - * @example $sandbox->importJSON(file_get_contents("template.json")); - * - * @param array|string $template The JSON array or string template to import - * @param int $import_flag Binary flags signifying which parts of the JSON template to import - * - * @throws Error Throws exception if JSON template could not be imported - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function importJSON($template, $import_flag = 0){ - return $this->import($template, $import_flag); - } - /** Get name of PHPSandbox variable - * @return string The name of the PHPSandbox variable - */ - public function get_name(){ - return $this->name; - } - /** Set PHPSandbox option - * - * You can pass an $option name to set to $value, an array of $option names to set to $value, or an associative array of $option names and their values to set. - * - * @example $sandbox->set_option(array('allow_functions' => true)); - * - * @example $sandbox->set_option(array('allow_functions', 'allow_classes'), true); - * - * @example $sandbox->set_option('allow_functions', true); - * - * @param string|array $option String or array of strings or associative array of keys of option names to set $value to - * @param bool|int|null $value Boolean, integer or null $value to set $option to (optional) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_option($option, $value = null){ - if(is_array($option)){ - return $this->set_options($option, $value); - } - $option = strtolower($option); //normalize option names - switch($option){ - case 'error_level': - $this->error_level = is_numeric($value) ? intval($value) : null; - break; - case 'validate_functions': - case 'validate_variables': - case 'validate_globals': - case 'validate_superglobals': - case 'validate_constants': - case 'validate_magic_constants': - case 'validate_namespaces': - case 'validate_aliases': - case 'validate_classes': - case 'validate_interfaces': - case 'validate_traits': - case 'validate_keywords': - case 'validate_operators': - case 'validate_primitives': - case 'validate_types': - case 'restore_error_level': - case 'convert_errors': - case 'capture_output': - case 'auto_whitelist_trusted_code': - case 'auto_whitelist_functions': - case 'auto_whitelist_constants': - case 'auto_whitelist_globals': - case 'auto_whitelist_classes': - case 'auto_whitelist_interfaces': - case 'auto_whitelist_traits': - case 'auto_define_vars': - case 'overwrite_defined_funcs': - case 'overwrite_sandboxed_string_funcs': - case 'overwrite_func_get_args': - case 'overwrite_superglobals': - case 'allow_functions': - case 'allow_closures': - case 'allow_variables': - case 'allow_static_variables': - case 'allow_objects': - case 'allow_constants': - case 'allow_globals': - case 'allow_namespaces': - case 'allow_aliases': - case 'allow_classes': - case 'allow_interfaces': - case 'allow_traits': - case 'allow_generators': - case 'allow_escaping': - case 'allow_casting': - case 'allow_error_suppressing': - case 'allow_references': - case 'allow_backticks': - case 'allow_halting': - $this->{$option} = !!$value; - break; - } - return $this; - } - /** Set PHPSandbox options by array - * - * You can pass an array of option names to set to $value, or an associative array of option names and their values to set. - * - * @example $sandbox->set_option(array('allow_functions' => true)); - * - * @example $sandbox->set_option(array('allow_functions', 'allow_classes'), true); - * - * @param array|string $options Array of strings or associative array of keys of option names to set $value to, or JSON array or string template to import - * @param bool|int|null $value Boolean, integer or null $value to set $option to (optional) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_options($options, $value = null){ - if(is_string($options) || (is_array($options) && isset($options["options"]))){ - return $this->import($options); - } - foreach($options as $name => $_value){ - $this->set_option(is_int($name) ? $_value : $name, is_int($name) ? $value : $_value); - } - return $this; - } - /** Reset PHPSandbox options to their default values - * - * @example $sandbox->reset_options(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function reset_options(){ - foreach(get_class_vars(__CLASS__) as $option => $value){ - if($option == 'error_level' || is_bool($value)){ - $this->set_option($option, $value); - } - } - return $this; - } - /** Get PHPSandbox option - * - * You pass a string $option name to get its associated value - * - * @example $sandbox->get_option('allow_functions'); - * - * @param string $option String of $option name to get - * - * @return boolean|int|null Returns the value of the requested option - */ - public function get_option($option){ - $option = strtolower($option); //normalize option names - switch($option){ - case 'validate_functions': - case 'validate_variables': - case 'validate_globals': - case 'validate_superglobals': - case 'validate_constants': - case 'validate_magic_constants': - case 'validate_namespaces': - case 'validate_aliases': - case 'validate_classes': - case 'validate_interfaces': - case 'validate_traits': - case 'validate_keywords': - case 'validate_operators': - case 'validate_primitives': - case 'validate_types': - case 'error_level': - case 'restore_error_level': - case 'convert_errors': - case 'capture_output': - case 'auto_whitelist_trusted_code': - case 'auto_whitelist_functions': - case 'auto_whitelist_constants': - case 'auto_whitelist_globals': - case 'auto_whitelist_classes': - case 'auto_whitelist_interfaces': - case 'auto_whitelist_traits': - case 'auto_define_vars': - case 'overwrite_defined_funcs': - case 'overwrite_sandboxed_string_funcs': - case 'overwrite_func_get_args': - case 'overwrite_superglobals': - case 'allow_functions': - case 'allow_closures': - case 'allow_variables': - case 'allow_static_variables': - case 'allow_objects': - case 'allow_constants': - case 'allow_globals': - case 'allow_namespaces': - case 'allow_aliases': - case 'allow_classes': - case 'allow_interfaces': - case 'allow_traits': - case 'allow_generators': - case 'allow_escaping': - case 'allow_casting': - case 'allow_error_suppressing': - case 'allow_references': - case 'allow_backticks': - case 'allow_halting': - return $this->{$option}; - } - return null; - } - /** Set validation callable for specified $type - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_validator('function', function($function, PHPSandbox $sandbox){ return true; }); - * - * @param string $type String of $type name to set validator for - * @param callable $callable Callable that validates the passed element - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_validator($type, $callable){ - $type = strtolower($type); //normalize type - if(array_key_exists($type, $this->validation)){ - $this->validation[$type] = $callable; - } - return $this; - } - /** Get validation callable for specified $type - * - * @example $sandbox->get_validator('function'); //return callable - * - * @param string $type String of $type to return - * - * @return callable|null - */ - public function get_validator($type){ - $type = strtolower($type); //normalize type - return isset($this->validation[$type]) ? $this->validation[$type] : null; - } - /** Unset validation callable for specified $type - * - * @example $sandbox->unset_validator('function'); //clear custom validation - * - * @param string $type String of $type to unset - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_validator($type){ - $type = strtolower($type); //normalize type - if(isset($this->validation[$type])){ - $this->validation[$type] = null; - } - return $this; - } - /** Set validation callable for functions - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized function names include the namespace and are lowercase! - * - * @example $sandbox->set_func_validator(function($function, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the normalized passed function name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_func_validator($callable){ - $this->validation['function'] = $callable; - return $this; - } - /** Get validation for functions - * - * @example $sandbox->get_func_validator(); //return callable - * - * @return callable|null - */ - public function get_func_validator(){ - return isset($this->validation['function']) ? $this->validation['function'] : null; - } - /** Unset validation callable for functions - * - * @example $sandbox->unset_func_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_func_validator(){ - $this->validation['function'] = null; - return $this; - } - /** Set validation callable for variables - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_var_validator(function($variable, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed variable name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_var_validator($callable){ - $this->validation['variable'] = $callable; - return $this; - } - /** Get validation callable for variables - * - * @example $sandbox->get_var_validator(); //return callable - * - * @return callable|null - */ - public function get_var_validator(){ - return isset($this->validation['variable']) ? $this->validation['variable'] : null; - } - /** Unset validation callable for variables - * - * @example $sandbox->unset_var_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_var_validator(){ - $this->validation['variable'] = null; - return $this; - } - /** Set validation callable for globals - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_global_validator(function($global, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed global name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_global_validator($callable){ - $this->validation['global'] = $callable; - return $this; - } - /** Get validation callable for globals - * - * @example $sandbox->get_global_validator(); //return callable - * - * @return callable|null - */ - public function get_global_validator(){ - return isset($this->validation['global']) ? $this->validation['global'] : null; - } - /** Unset validation callable for globals - * - * @example $sandbox->unset_global_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_global_validator(){ - $this->validation['global'] = null; - return $this; - } - /** Set validation callable for superglobals - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized superglobal names are uppercase and without a leading _ - * - * @example $sandbox->set_superglobal_validator(function($superglobal, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed superglobal name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_superglobal_validator($callable){ - $this->validation['superglobal'] = $callable; - return $this; - } - /** Get validation callable for superglobals - * - * @example $sandbox->get_superglobal_validator(); //return callable - * - * @return callable|null - */ - public function get_superglobal_validator(){ - return isset($this->validation['superglobal']) ? $this->validation['superglobal'] : null; - } - /** Unset validation callable for superglobals - * - * @example $sandbox->unset_superglobal_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_superglobal_validator(){ - $this->validation['superglobal'] = null; - return $this; - } - /** Set validation callable for constants - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_const_validator(function($constant, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed constant name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_const_validator($callable){ - $this->validation['constant'] = $callable; - return $this; - } - /** Get validation callable for constants - * - * @example $sandbox->get_const_validator(); //return callable - * - * @return callable|null - */ - public function get_const_validator(){ - return isset($this->validation['constant']) ? $this->validation['constant'] : null; - } - /** Unset validation callable for constants - * - * @example $sandbox->unset_const_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_const_validator(){ - $this->validation['constant'] = null; - return $this; - } - /** Set validation callable for magic constants - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized magic constant names are upper case and trimmed of __ - * - * @example $sandbox->set_magic_const_validator(function($magic_constant, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed magic constant name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_magic_const_validator($callable){ - $this->validation['magic_constant'] = $callable; - return $this; - } - /** Get validation callable for magic constants - * - * @example $sandbox->get_magic_const_validator(); //return callable - * - * @return callable|null - */ - public function get_magic_const_validator(){ - return isset($this->validation['magic_constant']) ? $this->validation['magic_constant'] : null; - } - /** Unset validation callable for magic constants - * - * @example $sandbox->unset_magic_const_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_magic_const_validator(){ - $this->validation['magic_constant'] = null; - return $this; - } - /** Set validation callable for namespaces - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_namespace_validator(function($namespace, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed namespace name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_namespace_validator($callable){ - $this->validation['namespace'] = $callable; - return $this; - } - /** Get validation callable for namespaces - * - * @example $sandbox->get_namespace_validator(); //return callable - * - * @return callable|null - */ - public function get_namespace_validator(){ - return isset($this->validation['namespace']) ? $this->validation['namespace'] : null; - } - /** Unset validation callable for namespaces - * - * @example $sandbox->unset_namespace_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_namespace_validator(){ - $this->validation['namespace'] = null; - return $this; - } - /** Set validation callable for aliases - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_alias_validator(function($alias, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed alias name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_alias_validator($callable){ - $this->validation['alias'] = $callable; - return $this; - } - /** Get validation callable for aliases - * - * @example $sandbox->get_alias_validator(); //return callable - * - * @return callable|null - */ - public function get_alias_validator(){ - return isset($this->validation['alias']) ? $this->validation['alias'] : null; - } - /** Unset validation callable for aliases - * - * @example $sandbox->unset_alias_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_alias_validator(){ - $this->validation['alias'] = null; - return $this; - } - /** Set validation callable for uses (aka aliases) - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @alias set_alias_validator(); - * - * @example $sandbox->set_use_validator(function($use, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed use (aka alias) name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_use_validator($callable){ - return $this->set_alias_validator($callable); - } - /** Get validation callable for uses (aka aliases) - * - * @alias get_alias_validator(); - * - * @example $sandbox->get_use_validator(); //return callable - * - * @return callable|null - */ - public function get_use_validator(){ - return $this->get_alias_validator(); - } - /** Unset validation callable for uses (aka aliases) - * - * @alias unset_alias_validator(); - * - * @example $sandbox->unset_use_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_use_validator(){ - return $this->unset_alias_validator(); - } - /** Set validation callable for classes - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized class names are lowercase - * - * @example $sandbox->set_class_validator(function($class, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed class name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_class_validator($callable){ - $this->validation['class'] = $callable; - return $this; - } - /** Get validation callable for classes - * - * @example $sandbox->get_class_validator(); //return callable - * - * @return callable|null - */ - public function get_class_validator(){ - return isset($this->validation['class']) ? $this->validation['class'] : null; - } - /** Unset validation callable for classes - * - * @example $sandbox->unset_class_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_class_validator(){ - $this->validation['class'] = null; - return $this; - } - /** Set validation callable for interfaces - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized interface names are lowercase - * - * @example $sandbox->set_interface_validator(function($interface, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed interface name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_interface_validator($callable){ - $this->validation['interface'] = $callable; - return $this; - } - /** Get validation callable for interfaces - * - * @example $sandbox->get_interface_validator(); //return callable - * - * @return callable|null - */ - public function get_interface_validator(){ - return isset($this->validation['interface']) ? $this->validation['interface'] : null; - } - /** Unset validation callable for interfaces - * - * @example $sandbox->unset_interface_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_interface_validator(){ - $this->validation['interface'] = null; - return $this; - } - /** Set validation callable for traits - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance. NOTE: Normalized trait names are lowercase - * - * @example $sandbox->set_trait_validator(function($trait, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed trait name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_trait_validator($callable){ - $this->validation['trait'] = $callable; - return $this; - } - /** Get validation callable for traits - * - * @example $sandbox->get_trait_validator(); //return callable - * - * @return callable|null - */ - public function get_trait_validator(){ - return isset($this->validation['trait']) ? $this->validation['trait'] : null; - } - /** Unset validation callable for traits - * - * @example $sandbox->unset_trait_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_trait_validator(){ - $this->validation['trait'] = null; - return $this; - } - /** Set validation callable for keywords - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_keyword_validator(function($keyword, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed keyword name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_keyword_validator($callable){ - $this->validation['keyword'] = $callable; - return $this; - } - /** Get validation callable for keywords - * - * @example $sandbox->get_keyword_validator(); //return callable - * - * @return callable|null - */ - public function get_keyword_validator(){ - return isset($this->validation['keyword']) ? $this->validation['keyword'] : null; - } - /** Unset validation callable for keywords - * - * @example $sandbox->unset_keyword_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_keyword_validator(){ - $this->validation['keyword'] = null; - return $this; - } - /** Set validation callable for operators - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_operator_validator(function($operator, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed operator name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_operator_validator($callable){ - $this->validation['operator'] = $callable; - return $this; - } - /** Get validation callable for operators - * - * @example $sandbox->get_operator_validator(); //return callable - * - * @return callable|null - */ - public function get_operator_validator(){ - return isset($this->validation['operator']) ? $this->validation['operator'] : null; - } - /** Unset validation callable for operators - * - * @example $sandbox->unset_operator_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_operator_validator(){ - $this->validation['operator'] = null; - return $this; - } - /** Set validation callable for primitives - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_primitive_validator(function($primitive, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed primitive name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_primitive_validator($callable){ - $this->validation['primitive'] = $callable; - return $this; - } - /** Get validation callable for primitives - * - * @example $sandbox->get_primitive_validator(); //return callable - * - * @return callable|null - */ - public function get_primitive_validator(){ - return isset($this->validation['primitive']) ? $this->validation['primitive'] : null; - } - /** Unset validation callable for primitives - * - * @example $sandbox->unset_primitive_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_primitive_validator(){ - $this->validation['primitive'] = null; - return $this; - } - /** Set validation callable for types - * - * Validator callable must accept two parameters: a string of the normalized name of the checked element, - * and the PHPSandbox instance - * - * @example $sandbox->set_type_validator(function($type, PHPSandbox $sandbox){ return true; }); - * - * @param callable $callable Callable that validates the passed type name - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_type_validator($callable){ - $this->validation['type'] = $callable; - return $this; - } - /** Get validation callable for types - * - * @example $sandbox->get_type_validator(); //return callable - * - * @return callable|null - */ - public function get_type_validator(){ - return isset($this->validation['type']) ? $this->validation['type'] : null; - } - /** Unset validation callable for types - * - * @example $sandbox->unset_type_validator(); //clear custom validation - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_type_validator(){ - $this->validation['type'] = null; - return $this; - } - /** Set PHPSandbox prepended code - * - * @param string $prepended_code Sets a string of the prepended code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_prepended_code($prepended_code = ''){ - $this->prepended_code = $prepended_code; - return $this; - } - /** Set PHPSandbox appended code - * - * @param string $appended_code Sets a string of the appended code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_appended_code($appended_code = ''){ - $this->appended_code = $appended_code; - return $this; - } - /** Set PHPSandbox preparsed code - * - * @param string $preparsed_code Sets a string of the preparsed code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_preparsed_code($preparsed_code = ''){ - $this->preparsed_code = $preparsed_code; - return $this; - } - /** Set PHPSandbox parsed AST array - * - * @param array $parsed_ast Sets an array of the parsed AST code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_parsed_ast(array $parsed_ast = array()){ - $this->parsed_ast = $parsed_ast; - return $this; - } - /** Set PHPSandbox prepared code - * - * @param string $prepared_code Sets a string of the prepared code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_prepared_code($prepared_code = ''){ - $this->prepared_code = $prepared_code; - return $this; - } - /** Set PHPSandbox prepared AST array - * - * @param array $prepared_ast Sets an array of the prepared AST code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_prepared_ast(array $prepared_ast = array()){ - $this->prepared_ast = $prepared_ast; - return $this; - } - /** Set PHPSandbox generated code - * - * @param string $generated_code Sets a string of the generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_generated_code($generated_code = ''){ - $this->generated_code = $generated_code; - return $this; - } - /** Set PHPSandbox generated code - * - * @alias set_generated_code(); - * - * @param string $generated_code Sets a string of the generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_code($generated_code = ''){ - $this->generated_code = $generated_code; - return $this; - } - /** Get PHPSandbox prepended code - * @return string Returns a string of the prepended code - */ - public function get_prepended_code(){ - return $this->prepended_code; - } - /** Get PHPSandbox appended code - * @return string Returns a string of the appended code - */ - public function get_appended_code(){ - return $this->appended_code; - } - /** Get PHPSandbox preparsed code - * @return string Returns a string of the preparsed code - */ - public function get_preparsed_code(){ - return $this->preparsed_code; - } - /** Get PHPSandbox parsed AST array - * @return array Returns an array of the parsed AST code - */ - public function get_parsed_ast(){ - return $this->parsed_ast; - } - /** Get PHPSandbox prepared code - * @return string Returns a string of the prepared code - */ - public function get_prepared_code(){ - return $this->prepared_code; - } - /** Get PHPSandbox prepared AST array - * @return array Returns an array of the prepared AST code - */ - public function get_prepared_ast(){ - return $this->prepared_ast; - } - /** Get PHPSandbox generated code - * @return string Returns a string of the generated code - */ - public function get_generated_code(){ - return $this->generated_code; - } - /** Get PHPSandbox generated code - * @alias get_generated_code(); - * @return string Returns a string of the generated code - */ - public function get_code(){ - return $this->generated_code; - } - /** Get PHPSandbox redefined functions in place of get_defined_functions(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $functions Array result from get_defined_functions() is passed here - * - * @return array Returns the redefined functions array - */ - public function _get_defined_functions(array $functions = array()){ - if(count($this->whitelist['functions'])){ - $functions = array(); - foreach($this->whitelist['functions'] as $name => $value){ - if(isset($this->definitions['functions'][$name]) && is_callable($this->definitions['functions'][$name])){ - $functions[$name] = $name; - } else if(is_callable($name) && is_string($name)){ - $functions[$name] = $name; - } - } - foreach($this->definitions['functions'] as $name => $function){ - if(is_callable($function)){ - $functions[$name] = $name; - } - } - return array_values($functions); - } else if(count($this->blacklist['functions'])){ - foreach($functions as $index => $name){ - if(isset($this->blacklist['functions'][$name])){ - unset($functions[$index]); - } - } - reset($functions); - return $functions; - } - return array(); - } - /** Get PHPSandbox redefined variables in place of get_defined_vars(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $variables Array result from get_defined_vars() is passed here - * - * @return array Returns the redefined variables array - */ - public function _get_defined_vars(array $variables = array()){ - if(isset($variables[$this->name])){ - unset($variables[$this->name]); //hide PHPSandbox variable - } - return $variables; - } - /** Get PHPSandbox redefined superglobal. This is an internal PHPSandbox function but requires public access to work. - * - * @param string $name Requested superglobal name (e.g. _GET, _POST, etc.) - * - * @return array Returns the redefined superglobal - */ - public function _get_superglobal($name){ - $original_name = strtoupper($name); - $name = $this->normalize_superglobal($name); - if(isset($this->definitions['superglobals'][$name])){ - $superglobal = $this->definitions['superglobals'][$name]; - if(is_callable($superglobal)){ - return call_user_func_array($superglobal, array($this)); - } - return $superglobal; - } else if(isset($this->whitelist['superglobals'][$name])){ - if(count($this->whitelist['superglobals'][$name])){ - if(isset($GLOBALS[$original_name])){ - $whitelisted_superglobal = array(); - foreach($this->whitelist['superglobals'][$name] as $key => $value){ - if(isset($GLOBALS[$original_name][$key])){ - $whitelisted_superglobal[$key] = $GLOBALS[$original_name][$key]; - } - } - return $whitelisted_superglobal; - } - } else if(isset($GLOBALS[$original_name])) { - return $GLOBALS[$original_name]; - } - } else if(isset($this->blacklist['superglobals'][$name])){ - if(count($this->blacklist['superglobals'][$name])){ - if(isset($GLOBALS[$original_name])){ - $blacklisted_superglobal = $GLOBALS[$original_name]; - foreach($this->blacklist['superglobals'][$name] as $key => $value){ - if(isset($blacklisted_superglobal[$key])){ - unset($blacklisted_superglobal[$key]); - } - } - return $blacklisted_superglobal; - } - } - } - return array(); - } - /** Get PHPSandbox redefined magic constant. This is an internal PHPSandbox function but requires public access to work. - * - * @param string $name Requested magic constant name (e.g. __FILE__, __LINE__, etc.) - * - * @return array Returns the redefined magic constant - */ - public function _get_magic_const($name){ - $name = $this->normalize_magic_const($name); - if(isset($this->definitions['magic_constants'][$name])){ - $magic_constant = $this->definitions['magic_constants'][$name]; - if(is_callable($magic_constant)){ - return call_user_func_array($magic_constant, array($this)); - } - return $magic_constant; - } - return null; - } - /** Get PHPSandbox redefined constants in place of get_defined_constants(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $constants Array result from get_defined_constants() is passed here - * - * @return array Returns the redefined constants - */ - public function _get_defined_constants(array $constants = array()){ - if(count($this->whitelist['constants'])){ - $constants = array(); - foreach($this->whitelist['constants'] as $name => $value){ - if(defined($name)){ - $constants[$name] = $name; - } - } - foreach($this->definitions['constants'] as $name => $value){ - if(defined($name)){ //these shouldn't be undefined, but just in case they are we don't want to report inaccurate information - $constants[$name] = $name; - } - } - return array_values($constants); - } else if(count($this->blacklist['constants'])){ - foreach($constants as $index => $name){ - if(isset($this->blacklist['constants'][$name])){ - unset($constants[$index]); - } - } - reset($constants); - return $constants; - } - return array(); - } - /** Get PHPSandbox redefined classes in place of get_declared_classes(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $classes Array result from get_declared_classes() is passed here - * - * @return array Returns the redefined classes - */ - public function _get_declared_classes(array $classes = array()){ - if(count($this->whitelist['classes'])){ - $classes = array(); - foreach($this->whitelist['classes'] as $name => $value){ - if(class_exists($name)){ - $classes[strtolower($name)] = $name; - } - } - foreach($this->definitions['classes'] as $name => $value){ - if(class_exists($value)){ - $classes[strtolower($name)] = $value; - } - } - return array_values($classes); - } else if(count($this->blacklist['classes'])){ - $valid_classes = array(); - foreach($classes as $class){ - $valid_classes[$this->normalize_class($class)] = $class; - } - foreach($this->definitions['classes'] as $name => $value){ - if(class_exists($value)){ - $valid_classes[$this->normalize_class($name)] = $value; - } - } - foreach($valid_classes as $index => $name){ - if(isset($this->blacklist['classes'][$this->normalize_class($name)])){ - unset($valid_classes[$index]); - } - } - return array_values($classes); - } - $classes = array(); - foreach($this->definitions['classes'] as $value){ - if(class_exists($value)){ - $classes[strtolower($value)] = $value; - } - } - return array_values($classes); - } - /** Get PHPSandbox redefined interfaces in place of get_declared_interfaces(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $interfaces Array result from get_declared_interfaces() is passed here - * - * @return array Returns the redefined interfaces - */ - public function _get_declared_interfaces(array $interfaces = array()){ - if(count($this->whitelist['interfaces'])){ - $interfaces = array(); - foreach($this->whitelist['interfaces'] as $name => $value){ - if(interface_exists($name)){ - $interfaces[strtolower($name)] = $name; - } - } - foreach($this->definitions['interfaces'] as $name => $value){ - if(interface_exists($value)){ - $interfaces[strtolower($name)] = $value; - } - } - return array_values($interfaces); - } else if(count($this->blacklist['interfaces'])){ - $valid_interfaces = array(); - foreach($interfaces as $interface){ - $valid_interfaces[$this->normalize_interface($interface)] = $interface; - } - foreach($this->definitions['interfaces'] as $name => $value){ - if(interface_exists($value)){ - $valid_interfaces[$this->normalize_interface($name)] = $value; - } - } - foreach($valid_interfaces as $index => $name){ - if(isset($this->blacklist['interfaces'][$this->normalize_interface($name)])){ - unset($valid_interfaces[$index]); - } - } - return array_values($interfaces); - } - $interfaces = array(); - foreach($this->definitions['interfaces'] as $value){ - if(interface_exists($value)){ - $interfaces[strtolower($value)] = $value; - } - } - return array_values($interfaces); - } - /** Get PHPSandbox redefined traits in place of get_declared_traits(). This is an internal PHPSandbox function but requires public access to work. - * - * @param array $traits Array result from get_declared_traits() is passed here - * - * @return array Returns the redefined traits - */ - public function _get_declared_traits(array $traits = array()){ - if(count($this->whitelist['traits'])){ - $traits = array(); - foreach($this->whitelist['traits'] as $name => $value){ - if(trait_exists($name)){ - $traits[strtolower($name)] = $name; - } - } - foreach($this->definitions['traits'] as $name => $value){ - if(trait_exists($value)){ - $traits[strtolower($name)] = $value; - } - } - return array_values($traits); - } else if(count($this->blacklist['traits'])){ - $valid_traits = array(); - foreach($traits as $trait){ - $valid_traits[$this->normalize_trait($trait)] = $trait; - } - foreach($this->definitions['traits'] as $name => $value){ - if(trait_exists($value)){ - $valid_traits[$this->normalize_trait($name)] = $value; - } - } - foreach($valid_traits as $index => $name){ - if(isset($this->blacklist['traits'][$this->normalize_trait($name)])){ - unset($valid_traits[$index]); - } - } - return array_values($traits); - } - $traits = array(); - foreach($this->definitions['traits'] as $value){ - if(trait_exists($value)){ - $traits[strtolower($value)] = $value; - } - } - return array_values($traits); - } - /** Get PHPSandbox redefined function arguments array - * - * @param array $arguments Array result from func_get_args() is passed here - * - * @return array Returns the redefined arguments array - */ - public function _func_get_args(array $arguments = array()){ - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } - } - return $arguments; - } - /** Get PHPSandbox redefined function argument - * - * @param array $arguments Array result from func_get_args() is passed here - * - * @param int $index Requested func_get_arg index is passed here - * - * @return array Returns the redefined argument - */ - public function _func_get_arg(array $arguments = array(), $index = 0){ - if($arguments[$index] instanceof self){ - $index++; //get next argument instead - } - return isset($arguments[$index]) && !($arguments[$index] instanceof self) ? $arguments[$index] : null; - } - /** Get PHPSandbox redefined number of function arguments - * - * @param array $arguments Array result from func_get_args() is passed here - * - * @return int Returns the redefined number of function arguments - */ - public function _func_num_args(array $arguments = array()){ - $count = count($arguments); - foreach($arguments as $argument){ - if($argument instanceof self){ - $count--; - } - } - return $count > 0 ? $count : 0; - } - /** Get PHPSandbox redefined var_dump - * - * @return array Returns the redefined var_dump - */ - public function _var_dump(){ - $arguments = func_get_args(); - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } else if($value instanceof SandboxedString){ - $arguments[$index] = strval($value); - } - } - return call_user_func_array('var_dump', $arguments); - } - /** Get PHPSandbox redefined print_r - * - * @return array Returns the redefined print_r - */ - public function _print_r(){ - $arguments = func_get_args(); - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } else if($value instanceof SandboxedString){ - $arguments[$index] = strval($value); - } - } - return call_user_func_array('print_r', $arguments); - } - /** Get PHPSandbox redefined var_export - * - * @return array Returns the redefined var_export - */ - public function _var_export(){ - $arguments = func_get_args(); - foreach($arguments as $index => $value){ - if($value instanceof self){ - unset($arguments[$index]); //hide PHPSandbox variable - } else if($value instanceof SandboxedString){ - $arguments[$index] = strval($value); - } - } - return call_user_func_array('var_export', $arguments); - } - /** Return integer value of SandboxedString or mixed value - * - * @param mixed $value Value to return as integer - * - * @return int Returns the integer value - */ - public function _intval($value){ - return intval($value instanceof SandboxedString ? strval($value) : $value); - } - /** Return float value of SandboxedString or mixed value - * - * @param mixed $value Value to return as float - * - * @return float Returns the float value - */ - public function _floatval($value){ - return floatval($value instanceof SandboxedString ? strval($value) : $value); - } - /** Return boolean value of SandboxedString or mixed value - * - * @param mixed $value Value to return as boolean - * - * @return boolean Returns the boolean value - */ - public function _boolval($value){ - if($value instanceof SandboxedString){ - return (bool)strval($value); - } - return is_bool($value) ? $value : (bool)$value; - } - /** Return array value of SandboxedString or mixed value - * - * @param mixed $value Value to return as array - * - * @return array Returns the array value - */ - public function _arrayval($value){ - if($value instanceof SandboxedString){ - return (array)strval($value); - } - return is_array($value) ? $value : (array)$value; - } - /** Return object value of SandboxedString or mixed value - * - * @param mixed $value Value to return as object - * - * @return object Returns the object value - */ - public function _objectval($value){ - if($value instanceof SandboxedString){ - return (object)strval($value); - } - return is_object($value) ? $value : (object)$value; - } - /** Return is_string value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_string - * - * @return bool Returns the is_string value - */ - public function _is_string($value){ - return ($value instanceof SandboxedString) ? true : is_string($value); - } - /** Return is_object value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_object - * - * @return bool Returns the is_object value - */ - public function _is_object($value){ - return ($value instanceof SandboxedString) ? false : is_object($value); - } - /** Return is_scalar value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_scalar - * - * @return bool Returns the is_scalar value - */ - public function _is_scalar($value){ - return ($value instanceof SandboxedString) ? true : is_scalar($value); - } - /** Return is_callable value of SandboxedString or mixed value - * - * @param mixed $value Value to check if is_callable - * - * @return bool Returns the is_callable value - */ - public function _is_callable($value){ - if($value instanceof SandboxedString){ - $value = strval($value); - } - return is_callable($value); - } - /** Get PHPSandbox redefined function. This is an internal PHPSandbox function but requires public access to work. - * - * @throws Error Will throw exception if invalid function requested - * - * @return mixed Returns the redefined function result - */ - public function call_func(){ - $arguments = func_get_args(); - $name = array_shift($arguments); - $original_name = $name; - $name = $this->normalize_func($name); - if(isset($this->definitions['functions'][$name]) && is_callable($this->definitions['functions'][$name]['function'])){ - $function = $this->definitions['functions'][$name]['function']; - if($this->definitions['functions'][$name]['pass_sandbox']){ //pass the PHPSandbox instance to the defined function? - array_unshift($arguments, $this); //push PHPSandbox instance into first argument so user can test against it - } - return call_user_func_array($function, $arguments); - } - if(is_callable($name)){ - return call_user_func_array($name, $arguments); - } - return $this->validation_error("Sandboxed code attempted to call invalid function: $original_name", Error::VALID_FUNC_ERROR, null, $original_name); - } - /** Define PHPSandbox definitions, such as functions, constants, namespaces, etc. - * - * You can pass a string of the $type, $name and $value, or pass an associative array of definitions types and - * an associative array of their corresponding values - * - * @example $sandbox->define('functions', 'test', function(){ echo 'test'; }); - * - * @example $sandbox->define(array('functions' => array('test' => function(){ echo 'test'; })); - * - * @param string|array $type Associative array or string of definition type to define - * @param string|array|null $name Associative array or string of definition name to define - * @param mixed|null $value Value of definition to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define($type, $name = null, $value = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($_type) && $_type && is_array($name)){ - foreach($name as $_name => $_value){ - $this->define($_type, (is_int($_name) ? $_value : $_name), (is_int($_name) ? $value : $_value)); - } - } - } - } else if($type && is_array($name)){ - foreach($name as $_name => $_value){ - $this->define($type, (is_int($_name) ? $_value : $_name), (is_int($_name) ? $value : $_value)); - } - } else if($type && $name){ - switch($type){ - case 'functions': - return $this->define_func($name, $value); - case 'variables': - return $this->define_var($name, $value); - case 'superglobals': - return $this->define_superglobal($name, $value); - case 'constants': - return $this->define_const($name, $value); - case 'magic_constants': - return $this->define_magic_const($name, $value); - case 'namespaces': - return $this->define_namespace($name); - case 'aliases': - return $this->define_alias($name, $value); - case 'classes': - return $this->define_class($name, $value); - case 'interfaces': - return $this->define_interface($name, $value); - case 'traits': - return $this->define_trait($name, $value); - } - } - return $this; - } - /** Undefine PHPSandbox definitions, such as functions, constants, namespaces, etc. - * - * You can pass a string of the $type and $name to undefine, or pass an associative array of definitions types - * and an array of key names to undefine - * - * @example $sandbox->undefine('functions', 'test'); - * - * @example $sandbox->undefine(array('functions' => array('test')); - * - * @param string|array $type Associative array or string of definition type to undefine - * @param string|array $name Associative array or string of definition name to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine($type, $name = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($_type) && $_type && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->undefine($type, $name); - } - } - } - } - } else if(is_string($type) && $type && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->undefine($type, $name); - } - } - } else if($type && $name){ - switch($type){ - case 'functions': - return $this->undefine_func($name); - case 'variables': - return $this->undefine_var($name); - case 'superglobals': - return $this->undefine_superglobal($name); - case 'constants': - return $this->undefine_const($name); - case 'magic_constants': - return $this->undefine_magic_const($name); - case 'namespaces': - return $this->undefine_namespace($name); - case 'aliases': - return $this->undefine_alias($name); - case 'classes': - return $this->undefine_class($name); - case 'interfaces': - return $this->undefine_interface($name); - case 'traits': - return $this->undefine_trait($name); - } - } - return $this; - } - /** Define PHPSandbox function - * - * You can pass the function $name and $function closure or callable to define, or an associative array of - * functions to define, which can have callable values or arrays of the function callable and $pass_sandbox flag - * - * @example $sandbox->define_func('test', function(){ echo 'test'; }); - * - * @example $sandbox->define_func(array('test' => function(){ echo 'test'; })); - * - * @example $sandbox->define_func(array('test' => array(function(){ echo 'test'; }, true))); - * - * @param string|array $name Associative array or string of function $name to define - * @param callable $function Callable to define $function to - * @param bool $pass_sandbox Pass PHPSandbox instance to defined function when called? Default is false - * - * @throws Error Throws exception if unnamed or uncallable $function is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_func($name, $function, $pass_sandbox = false){ - if(is_array($name)){ - return $this->define_funcs($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed function!", Error::DEFINE_FUNC_ERROR, null, ''); - } - if(is_array($function) && count($function)){ //so you can pass array of function names and array of function and pass_sandbox flag - $pass_sandbox = isset($function[1]) ? $function[1] : false; - $function = $function[0]; - } - $original_name = $name; - $name = $this->normalize_func($name); - if(!is_callable($function)){ - $this->validation_error("Cannot define uncallable function : $original_name", Error::DEFINE_FUNC_ERROR, null, $original_name); - } - $this->definitions['functions'][$name] = array( - 'function' => $function, - 'pass_sandbox' => $pass_sandbox - ); - return $this; - } - /** Define PHPSandbox functions by array - * - * You can pass an associative array of functions to define - * - * @example $sandbox->define_funcs(array('test' => function(){ echo 'test'; })); - * - * @param array $functions Associative array of $functions to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_funcs(array $functions = array()){ - foreach($functions as $name => $function){ - $this->define_func($name, $function); - } - return $this; - } - /** Query whether PHPSandbox instance has defined functions - * - * @example $sandbox->has_defined_funcs(); //returns number of defined functions, or zero if none defined - * - * @return int Returns the number of functions this instance has defined - */ - public function has_defined_funcs(){ - return count($this->definitions['functions']); - } - /** Check if PHPSandbox instance has $name function defined - * - * @example $sandbox->is_defined_func('test'); - * - * @param string $name String of function $name to query - * - * @return bool Returns true if PHPSandbox instance has defined function, false otherwise - */ - public function is_defined_func($name){ - $name = $this->normalize_func($name); - return isset($this->definitions['functions'][$name]); - } - /** Undefine PHPSandbox function - * - * You can pass a string of function $name to undefine, or pass an array of function names to undefine - * - * @example $sandbox->undefine_func('test'); - * - * @example $sandbox->undefine_func(array('test', 'test2')); - * - * @param string|array $name String of function name or array of function names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_func($name){ - if(is_array($name)){ - return $this->undefine_funcs($name); - } - $name = $this->normalize_func($name); - if(isset($this->definitions['functions'][$name])){ - unset($this->definitions['functions'][$name]); - } - return $this; - } - /** Undefine PHPSandbox functions by array - * - * You can pass an array of function names to undefine, or an empty array or null argument to undefine all functions - * - * @example $sandbox->undefine_funcs(array('test', 'test2')); - * - * @example $sandbox->undefine_funcs(); //WILL UNDEFINE ALL FUNCTIONS! - * - * @param array $functions Array of function names to undefine. Passing an empty array or no argument will result in undefining all functions - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_funcs($functions = array()){ - if(count($functions)){ - foreach($functions as $function){ - $this->undefine_func($function); - } - } else { - $this->definitions['functions'] = array(); - } - return $this; - } - /** Define PHPSandbox variable - * - * You can pass the variable $name and $value to define, or an associative array of variables to define - * - * @example $sandbox->define_var('test', 1); - * - * @example $sandbox->define_var(array('test' => 1)); - * - * @param string|array $name String of variable $name or associative array to define - * @param mixed $value Value to define variable to - * - * @throws Error Throws exception if unnamed variable is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_var($name, $value){ - if(is_array($name)){ - return $this->define_vars($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed variable!", Error::DEFINE_VAR_ERROR, null, ''); - } - $this->definitions['variables'][$name] = $value; - return $this; - } - /** Define PHPSandbox variables by array - * - * You can pass an associative array of variables to define - * - * @example $sandbox->define_vars(array('test' => 1)); - * - * @param array $variables Associative array of $variables to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_vars(array $variables = array()){ - foreach($variables as $name => $value){ - $this->define_var($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined variables - * - * @example $sandbox->has_defined_vars(); //returns number of defined variables, or zero if none defined - * - * @return int Returns the number of variables this instance has defined - */ - public function has_defined_vars(){ - return count($this->definitions['variables']); - } - /** Check if PHPSandbox instance has $name variable defined - * - * @example $sandbox->is_defined_var('test'); - * - * @param string $name String of variable $name to query - * - * @return bool Returns true if PHPSandbox instance has defined variable, false otherwise - */ - public function is_defined_var($name){ - return isset($this->definitions['variables'][$name]); - } - /** Undefine PHPSandbox variable - * - * You can pass a string of variable $name to undefine, or an array of variable names to undefine - * - * @example $sandbox->undefine_var('test'); - * - * @example $sandbox->undefine_var(array('test', 'test2')); - * - * @param string|array $name String of variable name or an array of variable names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_var($name){ - if(is_array($name)){ - return $this->undefine_vars($name); - } - if(isset($this->definitions['variables'][$name])){ - unset($this->definitions['variables'][$name]); - } - return $this; - } - /** Undefine PHPSandbox variables by array - * - * You can pass an array of variable names to undefine, or an empty array or null argument to undefine all variables - * - * @example $sandbox->undefine_vars(array('test', 'test2')); - * - * @example $sandbox->undefine_vars(); //WILL UNDEFINE ALL VARIABLES! - * - * @param array $variables Array of variable names to undefine. Passing an empty array or no argument will result in undefining all variables - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_vars(array $variables = array()){ - if(count($variables)){ - foreach($variables as $variable){ - $this->undefine_var($variable); - } - } else { - $this->definitions['variables'] = array(); - } - return $this; - } - /** Define PHPSandbox superglobal - * - * You can pass the superglobal $name and $value to define, or an associative array of superglobals to define, or a third variable to define the $key - * - * @example $sandbox->define_superglobal('_GET', array('page' => 1)); - * - * @example $sandbox->define_superglobal(array('_GET' => array('page' => 1))); - * - * @example $sandbox->define_superglobal('_GET', 'page', 1); - * - * @param string|array $name String of superglobal $name or associative array of superglobal names to define - * @param mixed $value Value to define superglobal to, can be callable - * - * @throws Error Throws exception if unnamed superglobal is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_superglobal($name, $value){ - if(is_array($name)){ - return $this->define_superglobals($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed superglobal!", Error::DEFINE_SUPERGLOBAL_ERROR, null, ''); - } - $name = $this->normalize_superglobal($name); - if(func_num_args() > 2){ - $key = $value; - $value = func_get_arg(2); - $this->definitions['superglobals'][$name][$key] = $value; - } else { - $this->definitions['superglobals'][$name] = $value; - } - return $this; - } - /** Define PHPSandbox superglobals by array - * - * You can pass an associative array of superglobals to define - * - * @example $sandbox->define_superglobals(array('_GET' => array('page' => 1))); - * - * @param array $superglobals Associative array of $superglobals to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_superglobals(array $superglobals = array()){ - foreach($superglobals as $name => $value){ - $this->define_superglobal($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined superglobals, or if superglobal $name has defined keys - * - * @example $sandbox->has_defined_superglobals(); //returns number of defined superglobals, or zero if none defined - * - * @example $sandbox->has_defined_superglobals('_GET'); //returns number of defined superglobal _GET keys, or zero if none defined - * - * @param string|null $name String of superglobal $name to check for keys - * - * @return int|bool Returns the number of superglobals or superglobal keys this instance has defined, or false if invalid superglobal name specified - */ - public function has_defined_superglobals($name = null){ - $name = $name ? $this->normalize_superglobal($name) : null; - return $name ? (isset($this->definitions['superglobals'][$name]) ? count($this->definitions['superglobals'][$name]) : false) : count($this->definitions['superglobals']); - } - /** Check if PHPSandbox instance has $name superglobal defined, or if superglobal $name key is defined - * - * @example $sandbox->is_defined_superglobal('_GET'); - * - * @example $sandbox->is_defined_superglobal('_GET', 'page'); - * - * @param string $name String of superglobal $name to query - * @param string|null $key String of key to to query in superglobal - * - * @return bool Returns true if PHPSandbox instance has defined superglobal, false otherwise - */ - public function is_defined_superglobal($name, $key = null){ - $name = $this->normalize_superglobal($name); - return $key !== null ? isset($this->definitions['superglobals'][$name][$key]) : isset($this->definitions['superglobals'][$name]); - } - /** Undefine PHPSandbox superglobal or superglobal key - * - * You can pass a string of superglobal $name to undefine, or a superglobal $key to undefine, or an array of - * superglobal names to undefine, or an an associative array of superglobal names and keys to undefine - * - * @example $sandbox->undefine_superglobal('_GET'); - * - * @example $sandbox->undefine_superglobal('_GET', 'page'); - * - * @example $sandbox->undefine_superglobal(array('_GET', '_POST')); - * - * @param string|array $name String of superglobal $name, or array of superglobal names, or associative array of superglobal names and keys to undefine - * @param string|null $key String of superglobal $key to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_superglobal($name, $key = null){ - if(is_array($name)){ - return $this->undefine_superglobals($name); - } - $name = $this->normalize_superglobal($name); - if($key !== null && is_array($this->definitions['superglobals'][$name])){ - if(isset($this->definitions['superglobals'][$name][$key])){ - unset($this->definitions['superglobals'][$name][$key]); - } - } else if(isset($this->definitions['superglobals'][$name])){ - $this->definitions['superglobals'][$name] = array(); - } - return $this; - } - /** Undefine PHPSandbox superglobals by array - * - * You can pass an array of superglobal names to undefine, or an associative array of superglobals names and key - * to undefine, or an empty array or null to undefine all superglobals - * - * @example $sandbox->undefine_superglobals(array('_GET', '_POST')); - * - * @example $sandbox->undefine_superglobals(array('_GET' => 'page', '_POST' => 'page')); - * - * @example $sandbox->undefine_superglobals(); //WILL UNDEFINE ALL SUPERGLOBALS! - * - * @param array $superglobals Associative array of superglobal names and keys or array of superglobal names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_superglobals(array $superglobals = array()){ - if(count($superglobals)){ - foreach($superglobals as $superglobal => $name){ - $name = $this->normalize_superglobal($name); - $this->undefine_superglobal(is_int($superglobal) ? $name : $superglobal, is_int($superglobal) || !is_string($name) ? null : $name); - } - } else { - $this->definitions['superglobals'] = array(); - } - return $this; - } - /** Define PHPSandbox constant - * - * You can pass the constant $name and $value to define, or an associative array of constants to define - * - * @example $sandbox->define_const('TEST', 1); - * - * @example $sandbox->define_const(array('TEST' => 1)); - * - * @param string|array $name String of constant $name or associative array to define - * @param mixed $value Value to define constant to - * - * @throws Error Throws exception if unnamed constant is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_const($name, $value){ - if(is_array($name)){ - return $this->define_consts($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed constant!", Error::DEFINE_CONST_ERROR, null, ''); - } - $this->definitions['constants'][$name] = $value; - return $this; - } - /** Define PHPSandbox constants by array - * - * You can pass an associative array of constants to define - * - * @example $sandbox->define_consts(array('test' => 1)); - * - * @param array $constants Associative array of $constants to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_consts(array $constants = array()){ - foreach($constants as $name => $value){ - $this->define_const($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined constants - * - * @example $sandbox->has_defined_consts(); //returns number of defined constants, or zero if none defined - * - * @return int Returns the number of constants this instance has defined - */ - public function has_defined_consts(){ - return count($this->definitions['constants']); - } - /** Check if PHPSandbox instance has $name constant defined - * - * @example $sandbox->is_defined_const('test'); - * - * @param string $name String of constant $name to query - * - * @return bool Returns true if PHPSandbox instance has defined constant, false otherwise - */ - public function is_defined_const($name){ - return isset($this->definitions['constants'][$name]); - } - /** Undefine PHPSandbox constant - * - * You can pass a string of constant $name to undefine, or an array of constant names to undefine - * - * @example $sandbox->undefine_const('test'); - * - * @example $sandbox->undefine_const(array('test', 'test2')); - * - * @param string|array $name String of constant name or array of constant names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_const($name){ - if(is_array($name)){ - return $this->undefine_consts($name); - } - if(isset($this->definitions['constants'][$name])){ - unset($this->definitions['constants'][$name]); - } - return $this; - } - /** Undefine PHPSandbox constants by array - * - * You can pass an array of constant names to undefine, or an empty array or null argument to undefine all constants - * - * @example $sandbox->undefine_consts(array('test', 'test2')); - * - * @example $sandbox->undefine_consts(); //WILL UNDEFINE ALL CONSTANTS! - * - * @param array $constants Array of constant names to undefine. Passing an empty array or no argument will result in undefining all constants - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_consts(array $constants = array()){ - if(count($constants)){ - foreach($constants as $constant){ - $this->undefine_const($constant); - } - } else { - $this->definitions['constants'] = array(); - } - return $this; - } - /** Define PHPSandbox magic constant - * - * You can pass the magic constant $name and $value to define, or an associative array of magic constants to define - * - * @example $sandbox->define_magic_const('__LINE__', 1); - * - * @example $sandbox->define_magic_const(array('__LINE__' => 1)); - * - * @param string|array $name String of magic constant $name or associative array to define - * @param mixed $value Value to define magic constant to, can be callable - * - * @throws Error Throws exception if unnamed magic constant is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_magic_const($name, $value){ - if(is_array($name)){ - return $this->define_magic_consts($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed magic constant!", Error::DEFINE_MAGIC_CONST_ERROR, null, ''); - } - $name = $this->normalize_magic_const($name); - $this->definitions['magic_constants'][$name] = $value; - return $this; - } - /** Define PHPSandbox magic constants by array - * - * You can pass an associative array of magic constants to define - * - * @example $sandbox->define_magic_consts(array('__LINE__' => 1)); - * - * @param array $magic_constants Associative array of $magic_constants to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_magic_consts(array $magic_constants = array()){ - foreach($magic_constants as $name => $value){ - $this->define_magic_const($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined magic constants - * - * @example $sandbox->has_defined_magic_consts(); //returns number of defined magic constants, or zero if none defined - * - * @return int Returns the number of magic constants this instance has defined - */ - public function has_defined_magic_consts(){ - return count($this->definitions['magic_constants']); - } - /** Check if PHPSandbox instance has $name magic constant defined - * - * @example $sandbox->is_defined_magic_const('__LINE__'); - * - * @param string $name String of magic constant $name to query - * - * @return bool Returns true if PHPSandbox instance has defined magic constant, false otherwise - */ - public function is_defined_magic_const($name){ - $name = $this->normalize_magic_const($name); - return isset($this->definitions['magic_constants'][$name]); - } - /** Undefine PHPSandbox magic constant - * - * You can pass an a string of magic constant $name to undefine, or array of magic constant names to undefine - * - * @example $sandbox->undefine_magic_const('__LINE__'); - * - * @example $sandbox->undefine_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name, or array of magic constant names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_magic_const($name){ - if(is_array($name)){ - return $this->undefine_magic_consts($name); - } - $name = $this->normalize_magic_const($name); - if(isset($this->definitions['magic_constants'][$name])){ - unset($this->definitions['magic_constants'][$name]); - } - return $this; - } - /** Undefine PHPSandbox magic constants by array - * - * You can pass an array of magic constant names to undefine, or an empty array or null argument to undefine all magic constants - * - * @example $sandbox->undefine_magic_consts(array('__LINE__', '__FILE__')); - * - * @example $sandbox->undefine_magic_consts(); //WILL UNDEFINE ALL MAGIC CONSTANTS! - * - * @param array $magic_constants Array of magic constant names to undefine. Passing an empty array or no argument will result in undefining all magic constants - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_magic_consts(array $magic_constants = array()){ - if(count($magic_constants)){ - foreach($magic_constants as $magic_constant){ - $this->undefine_magic_const($magic_constant); - } - } else { - $this->definitions['magic_constants'] = array(); - } - return $this; - } - /** Define PHPSandbox namespace - * - * You can pass the namespace $name and $value to define, or an array of namespaces to define - * - * @example $sandbox->define_namespace('Foo'); - * - * @example $sandbox->define_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace $name, or an array of namespace names to define - * - * @throws Error Throws exception if unnamed namespace is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_namespace($name){ - if(is_array($name)){ - return $this->define_namespaces($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed namespace!", Error::DEFINE_NAMESPACE_ERROR, null, ''); - } - $normalized_name = $this->normalize_namespace($name); - $this->definitions['namespaces'][$normalized_name] = $name; - return $this; - } - /** Define PHPSandbox namespaces by array - * - * You can pass an array of namespaces to define - * - * @example $sandbox->define_namespaces(array('Foo', 'Bar')); - * - * @param array $namespaces Array of $namespaces to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_namespaces(array $namespaces = array()){ - foreach($namespaces as $name){ - $this->define_namespace($name); - } - return $this; - } - /** Query whether PHPSandbox instance has defined namespaces - * - * @example $sandbox->has_defined_namespaces(); //returns number of defined namespaces, or zero if none defined - * - * @return int Returns the number of namespaces this instance has defined - */ - public function has_defined_namespaces(){ - return count($this->definitions['namespaces']); - } - /** Check if PHPSandbox instance has $name namespace defined - * - * @example $sandbox->is_defined_namespace('Foo'); - * - * @param string $name String of namespace $name to query - * - * @return bool Returns true if PHPSandbox instance has defined namespace, false otherwise - */ - public function is_defined_namespace($name){ - $name = $this->normalize_namespace($name); - return isset($this->definitions['namespaces'][$name]); - } - /** Get defined namespace of $name - * - * @example $sandbox->get_defined_namespace('Test'); - * - * @param string $name String of namespace $name to get - * - * @throws Error Throws an exception if an invalid namespace name is requested - * - * @return string Returns string of defined namespace value - */ - public function get_defined_namespace($name){ - $name = $this->normalize_namespace($name); - if(!isset($this->definitions['namespaces'][$name])){ - $this->validation_error("Could not get undefined namespace: $name", Error::VALID_NAMESPACE_ERROR, null, $name); - } - return $this->definitions['namespaces'][$name]; - } - /** Undefine PHPSandbox namespace - * - * You can pass a string of namespace $name to undefine, or an array of namespace names to undefine - * - * @example $sandbox->undefine_namespace('Foo'); - * - * @example $sandbox->undefine_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace $name, or an array of namespace names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_namespace($name){ - if(is_array($name)){ - return $this->undefine_namespaces($name); - } - $name = $this->normalize_namespace($name); - if(isset($this->definitions['namespaces'][$name])){ - unset($this->definitions['namespaces'][$name]); - } - return $this; - } - /** Undefine PHPSandbox namespaces by array - * - * You can pass an array of namespace names to undefine, or an empty array or null argument to undefine all namespaces - * - * @example $sandbox->undefine_namespaces(array('Foo', 'Bar')); - * - * @example $sandbox->undefine_namespaces(); //WILL UNDEFINE ALL NAMESPACES! - * - * @param array $namespaces Array of namespace names to undefine. Passing an empty array or no argument will result in undefining all namespaces - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_namespaces(array $namespaces = array()){ - if(count($namespaces)){ - foreach($namespaces as $namespace){ - $this->undefine_namespace($namespace); - } - } else { - $this->definitions['namespaces'] = array(); - } - return $this; - } - /** Define PHPSandbox alias - * - * You can pass the namespace $name and $alias to use, an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_alias('Foo'); //use Foo; - * - * @example $sandbox->define_alias('Foo', 'Bar'); //use Foo as Bar; - * - * @example $sandbox->define_alias(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_alias(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param string|array $name String of namespace $name to use, or or an array of namespaces to use, or an associative array of namespaces and their aliases to use - * @param string|null $alias String of $alias to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_alias($name, $alias = null){ - if(is_array($name)){ - return $this->define_aliases($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed namespace alias!", Error::DEFINE_ALIAS_ERROR, null, ''); - } - $original_name = $name; - $name = $this->normalize_alias($name); - $this->definitions['aliases'][$name] = array('original' => $original_name, 'alias' => $alias); - return $this; - } - /** Define PHPSandbox aliases by array - * - * You can pass an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_aliases(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_aliases(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param array $aliases Array of namespaces to use, or an associative array of namespaces and their aliases to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_aliases(array $aliases = array()){ - foreach($aliases as $name => $alias){ - $this->define_alias($name, $alias); - } - return $this; - } - /** Query whether PHPSandbox instance has defined aliases - * - * @example $sandbox->has_defined_aliases(); //returns number of defined aliases, or zero if none defined - * - * @return int Returns the number of aliases this instance has defined - */ - public function has_defined_aliases(){ - return count($this->definitions['aliases']); - } - /** Check if PHPSandbox instance has $name alias defined - * - * @example $sandbox->is_defined_alias('Foo'); - * - * @param string $name String of alias $name to query - * - * @return bool Returns true if PHPSandbox instance has defined aliases, false otherwise - */ - public function is_defined_alias($name){ - $name = $this->normalize_alias($name); - return isset($this->definitions['aliases'][$name]); - } - /** Undefine PHPSandbox alias - * - * You can pass a string of alias $name to undefine, or an array of alias names to undefine - * - * @example $sandbox->undefine_alias('Foo'); - * - * @example $sandbox->undefine_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name, or array of alias names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_alias($name){ - if(is_array($name)){ - return $this->undefine_aliases($name); - } - $name = $this->normalize_alias($name); - if(isset($this->definitions['aliases'][$name])){ - unset($this->definitions['aliases'][$name]); - } - return $this; - } - /** Undefine PHPSandbox aliases by array - * - * You can pass an array of alias names to undefine, or an empty array or null argument to undefine all aliases - * - * @example $sandbox->undefine_aliases(array('Foo', 'Bar')); - * - * @example $sandbox->undefine_aliases(); //WILL UNDEFINE ALL ALIASES! - * - * @param array $aliases Array of alias names to undefine. Passing an empty array or no argument will result in undefining all aliases - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_aliases(array $aliases = array()){ - if(count($aliases)){ - foreach($aliases as $alias){ - $this->undefine_alias($alias); - } - } else { - $this->definitions['aliases'] = array(); - } - return $this; - } - /** Define PHPSandbox use (or alias) - * - * @alias define_alias(); - * - * You can pass the namespace $name and $alias to use, an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_use('Foo'); //use Foo; - * - * @example $sandbox->define_use('Foo', 'Bar'); //use Foo as Bar; - * - * @example $sandbox->define_use(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_use(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param string|array $name String of namespace $name to use, or or an array of namespaces to use, or an associative array of namespaces and their aliases to use - * @param string|null $alias String of $alias to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_use($name, $alias = null){ - return $this->define_alias($name, $alias); - } - /** Define PHPSandbox uses (or aliases) by array - * - * @alias define_aliases(); - * - * You can pass an array of namespaces to use, or an associative array of namespaces to use and their aliases - * - * @example $sandbox->define_uses(array('Foo', 'Bar')); //use Foo; use Bar; - * - * @example $sandbox->define_uses(array('Foo' => 'Bar')); //use Foo as Bar; - * - * @param array $uses Array of namespaces to use, or an associative array of namespaces and their aliases to use - * - * @throws Error Throws exception if unnamed namespace is used - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_uses(array $uses = array()){ - return $this->define_aliases($uses); - } - /** Query whether PHPSandbox instance has defined uses (or aliases) - * - * @alias has_defined_aliases(); - * - * @example $sandbox->has_defined_uses(); //returns number of defined uses (or aliases) or zero if none defined - * - * @return int Returns the number of uses (or aliases) this instance has defined - */ - public function has_defined_uses(){ - return $this->has_defined_aliases(); - } - /** Check if PHPSandbox instance has $name uses (or alias) defined - * - * @alias is_defined_alias(); - * - * @example $sandbox->is_defined_use('Foo'); - * - * @param string $name String of use (or alias) $name to query - * - * @return bool Returns true if PHPSandbox instance has defined uses (or aliases) and false otherwise - */ - public function is_defined_use($name){ - return $this->is_defined_alias($name); - } - /** Undefine PHPSandbox use (or alias) - * - * You can pass a string of use (or alias) $name to undefine, or an array of use (or alias) names to undefine - * - * @example $sandbox->undefine_use('Foo'); - * - * @example $sandbox->undefine_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name, or array of use (or alias) names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_use($name){ - return $this->undefine_alias($name); - } - /** Undefine PHPSandbox uses (or aliases) by array - * - * @alias undefine_aliases(); - * - * You can pass an array of use (or alias) names to undefine, or an empty array or null argument to undefine all uses (or aliases) - * - * @example $sandbox->undefine_uses(array('Foo', 'Bar')); - * - * @example $sandbox->undefine_uses(); //WILL UNDEFINE ALL USES (OR ALIASES!) - * - * @param array $uses Array of use (or alias) names to undefine. Passing an empty array or no argument will result in undefining all uses (or aliases) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_uses(array $uses = array()){ - return $this->undefine_aliases($uses); - } - /** Define PHPSandbox class - * - * You can pass the class $name and $value to define, or an associative array of classes to define - * - * @example $sandbox->define_class('Test', 'Test2'); - * - * @example $sandbox->define_class(array('Test' => 'Test2')); - * - * @param string|array $name String of class $name or associative array to define - * @param mixed $value Value to define class to - * - * @throws Error Throws exception if unnamed class is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_class($name, $value){ - if(is_array($name)){ - return $this->define_classes($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed class!", Error::DEFINE_CLASS_ERROR, null, ''); - } - $name = $this->normalize_class($name); - $this->definitions['classes'][$name] = $value; - return $this; - } - /** Define PHPSandbox classes by array - * - * You can pass an associative array of classes to define - * - * @example $sandbox->define_classes(array('Test' => 'Test2')); - * - * @param array $classes Associative array of $classes to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_classes(array $classes = array()){ - foreach($classes as $name => $value){ - $this->define_class($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined classes - * - * @example $sandbox->has_defined_classes(); //returns number of defined classes, or zero if none defined - * - * @return int Returns the number of classes this instance has defined - */ - public function has_defined_classes(){ - return count($this->definitions['classes']); - } - /** Check if PHPSandbox instance has $name class defined - * - * @example $sandbox->is_defined_class('Test'); - * - * @param string $name String of class $name to query - * - * @return bool Returns true if PHPSandbox instance has defined class, false otherwise - */ - public function is_defined_class($name){ - $name = $this->normalize_class($name); - return isset($this->definitions['classes'][$name]); - } - /** Get defined class of $name - * - * @example $sandbox->get_defined_class('Test'); - * - * @param string $name String of class $name to get - * - * @throws Error Throws an exception if an invalid class name is requested - * - * @return string Returns string of defined class value - */ - public function get_defined_class($name){ - $name = $this->normalize_class($name); - if(!isset($this->definitions['classes'][$name])){ - $this->validation_error("Could not get undefined class: $name", Error::VALID_CLASS_ERROR, null, $name); - } - return $this->definitions['classes'][$name]; - } - /** Undefine PHPSandbox class - * - * You can pass a string of class $name to undefine, or an array of class names to undefine - * - * @example $sandbox->undefine_class('Test'); - * - * @example $sandbox->undefine_class(array('Test', 'Test2')); - * - * @param string|array $name String of class name or an array of class names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_class($name){ - if(is_array($name)){ - return $this->undefine_classes($name); - } - $name = $this->normalize_class($name); - if(isset($this->definitions['classes'][$name])){ - unset($this->definitions['classes'][$name]); - } - return $this; - } - /** Undefine PHPSandbox classes by array - * - * You can pass an array of class names to undefine, or an empty array or null argument to undefine all classes - * - * @example $sandbox->undefine_classes(array('Test', 'Test2')); - * - * @example $sandbox->undefine_classes(); //WILL UNDEFINE ALL CLASSES! - * - * @param array $classes Array of class names to undefine. Passing an empty array or no argument will result in undefining all classes - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_classes(array $classes = array()){ - if(count($classes)){ - foreach($classes as $class){ - $this->undefine_class($class); - } - } else { - $this->definitions['classes'] = array(); - } - return $this; - } - /** Define PHPSandbox interface - * - * You can pass the interface $name and $value to define, or an associative array of interfaces to define - * - * @example $sandbox->define_interface('Test', 'Test2'); - * - * @example $sandbox->define_interface(array('Test' => 'Test2')); - * - * @param string|array $name String of interface $name or associative array to define - * @param mixed $value Value to define interface to - * - * @throws Error Throws exception if unnamed interface is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_interface($name, $value){ - if(is_array($name)){ - return $this->define_interfaces($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed interface!", Error::DEFINE_INTERFACE_ERROR, null, ''); - } - $name = $this->normalize_interface($name); - $this->definitions['interfaces'][$name] = $value; - return $this; - } - /** Define PHPSandbox interfaces by array - * - * You can pass an associative array of interfaces to define - * - * @example $sandbox->define_interfaces(array('Test' => 'Test2')); - * - * @param array $interfaces Associative array of $interfaces to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_interfaces(array $interfaces = array()){ - foreach($interfaces as $name => $value){ - $this->define_interface($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined interfaces - * - * @example $sandbox->has_defined_interfaces(); //returns number of defined interfaces, or zero if none defined - * - * @return int Returns the number of interfaces this instance has defined - */ - public function has_defined_interfaces(){ - return count($this->definitions['interfaces']); - } - /** Check if PHPSandbox instance has $name interface defined - * - * @example $sandbox->is_defined_interface('Test'); - * - * @param string $name String of interface $name to query - * - * @return bool Returns true if PHPSandbox instance has defined interface, false otherwise - */ - public function is_defined_interface($name){ - $name = $this->normalize_interface($name); - return isset($this->definitions['interfaces'][$name]); - } - /** Get defined interface of $name - * - * @example $sandbox->get_defined_interface('Test'); - * - * @param string $name String of interface $name to get - * - * @throws Error Throws an exception if an invalid interface name is requested - * - * @return string Returns string of defined interface value - */ - public function get_defined_interface($name){ - $name = $this->normalize_interface($name); - if(!isset($this->definitions['interfaces'][$name])){ - $this->validation_error("Could not get undefined interface: $name", Error::VALID_INTERFACE_ERROR, null, $name); - } - return $this->definitions['interfaces'][$name]; - } - /** Undefine PHPSandbox interface - * - * You can pass a string of interface $name to undefine, or an array of interface names to undefine - * - * @example $sandbox->undefine_interface('Test'); - * - * @example $sandbox->undefine_interface(array('Test', 'Test2')); - * - * @param string|array $name String of interface name or an array of interface names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_interface($name){ - if(is_array($name)){ - return $this->undefine_interfaces($name); - } - $name = $this->normalize_interface($name); - if(isset($this->definitions['interfaces'][$name])){ - unset($this->definitions['interfaces'][$name]); - } - return $this; - } - /** Undefine PHPSandbox interfaces by array - * - * You can pass an array of interface names to undefine, or an empty array or null argument to undefine all interfaces - * - * @example $sandbox->undefine_interfaces(array('Test', 'Test2')); - * - * @example $sandbox->undefine_interfaces(); //WILL UNDEFINE ALL INTERFACES! - * - * @param array $interfaces Array of interface names to undefine. Passing an empty array or no argument will result in undefining all interfaces - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_interfaces(array $interfaces = array()){ - if(count($interfaces)){ - foreach($interfaces as $interface){ - $this->undefine_interface($interface); - } - } else { - $this->definitions['interfaces'] = array(); - } - return $this; - } - /** Define PHPSandbox trait - * - * You can pass the trait $name and $value to define, or an associative array of traits to define - * - * @example $sandbox->define_trait('Test', 'Test2'); - * - * @example $sandbox->define_trait(array('Test' => 'Test2')); - * - * @param string|array $name String of trait $name or associative array to define - * @param mixed $value Value to define trait to - * - * @throws Error Throws exception if unnamed trait is defined - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_trait($name, $value){ - if(is_array($name)){ - return $this->define_traits($name); - } - if(!$name){ - $this->validation_error("Cannot define unnamed trait!", Error::DEFINE_TRAIT_ERROR, null, ''); - } - $name = $this->normalize_trait($name); - $this->definitions['traits'][$name] = $value; - return $this; - } - /** Define PHPSandbox traits by array - * - * You can pass an associative array of traits to define - * - * @example $sandbox->define_traits(array('Test' => 'Test2')); - * - * @param array $traits Associative array of $traits to define - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function define_traits(array $traits = array()){ - foreach($traits as $name => $value){ - $this->define_trait($name, $value); - } - return $this; - } - /** Query whether PHPSandbox instance has defined traits - * - * @example $sandbox->has_defined_traits(); //returns number of defined traits, or zero if none defined - * - * @return int Returns the number of traits this instance has defined - */ - public function has_defined_traits(){ - return count($this->definitions['traits']); - } - /** Check if PHPSandbox instance has $name trait defined - * - * @example $sandbox->is_defined_trait('Test'); - * - * @param string $name String of trait $name to query - * - * @return bool Returns true if PHPSandbox instance has defined trait, false otherwise - */ - public function is_defined_trait($name){ - $name = $this->normalize_trait($name); - return isset($this->definitions['traits'][$name]); - } - /** Get defined trait of $name - * - * @example $sandbox->get_defined_trait('Test'); - * - * @param string $name String of trait $name to get - * - * @throws Error Throws an exception if an invalid trait name is requested - * - * @return string Returns string of defined trait value - */ - public function get_defined_trait($name){ - $name = $this->normalize_trait($name); - if(!isset($this->definitions['traits'][$name])){ - $this->validation_error("Could not get undefined trait: $name", Error::VALID_TRAIT_ERROR, null, $name); - } - return $this->definitions['traits'][$name]; - } - /** Undefine PHPSandbox trait - * - * You can pass a string of trait $name to undefine, or an array of trait names to undefine - * - * @example $sandbox->undefine_trait('Test'); - * - * @example $sandbox->undefine_trait(array('Test', 'Test2')); - * - * @param string|array $name String of trait name or an array of trait names to undefine - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_trait($name){ - if(is_array($name)){ - return $this->undefine_traits($name); - } - $name = $this->normalize_trait($name); - if(isset($this->definitions['traits'][$name])){ - unset($this->definitions['traits'][$name]); - } - return $this; - } - /** Undefine PHPSandbox traits by array - * - * You can pass an array of trait names to undefine, or an empty array or null argument to undefine all traits - * - * @example $sandbox->undefine_traits(array('Test', 'Test2')); - * - * @example $sandbox->undefine_traits(); //WILL UNDEFINE ALL TRAITS! - * - * @param array $traits Array of trait names to undefine. Passing an empty array or no argument will result in undefining all traits - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function undefine_traits(array $traits = array()){ - if(count($traits)){ - foreach($traits as $trait){ - $this->undefine_trait($trait); - } - } else { - $this->definitions['traits'] = array(); - } - return $this; - } - /** Normalize function name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the function $name, or array of strings to normalize - * - * @return string|array Returns the normalized function string or an array of normalized strings - */ - protected function normalize_func($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_func($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize superglobal name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the superglobal $name, or array of strings to normalize - * - * @return string|array Returns the normalized superglobal string or an array of normalized strings - */ - protected function normalize_superglobal($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_superglobal($value); - } - return $name; - } - return strtoupper(ltrim($name, '_')); - } - /** Normalize magic constant name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the magic constant $name, or array of strings to normalize - * - * @return string|array Returns the normalized magic constant string or an array of normalized strings - */ - protected function normalize_magic_const($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_magic_const($value); - } - return $name; - } - return strtoupper(trim($name, '_')); - } - /** Normalize namespace name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the namespace $name, or array of strings to normalize - * - * @return string|array Returns the normalized namespace string or an array of normalized strings - */ - protected function normalize_namespace($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_namespace($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize alias name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the alias $name, or array of strings to normalize - * - * @return string|array Returns the normalized alias string or an array of normalized strings - */ - protected function normalize_alias($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_alias($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize use (or alias) name. This is an internal PHPSandbox function. - * - * @alias normalize_alias(); - * - * @param string|array $name String of the use (or alias) $name, or array of strings to normalize - * - * @return string|array Returns the normalized use (or alias) string or an array of normalized strings - */ - protected function normalize_use($name){ - return $this->normalize_alias($name); - } - /** Normalize class name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the class $name to normalize - * - * @return string|array Returns the normalized class string or an array of normalized strings - */ - protected function normalize_class($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_class($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize interface name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the interface $name, or array of strings to normalize - * - * @return string|array Returns the normalized interface string or an array of normalized strings - */ - protected function normalize_interface($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_interface($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize trait name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the trait $name, or array of strings to normalize - * - * @return string|array Returns the normalized trait string or an array of normalized strings - */ - protected function normalize_trait($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_trait($value); - } - return $name; - } - return strtolower($name); - } - /** Normalize keyword name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the keyword $name, or array of strings to normalize - * - * @return string|array Returns the normalized keyword string or an array of normalized strings - */ - protected function normalize_keyword($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_keyword($value); - } - return $name; - } - $name = strtolower($name); - switch($name){ - case 'die': - return 'exit'; - case 'include_once': - case 'require': - case 'require_once': - return 'include'; - case 'label': //not a real keyword, only for defining purposes, can't use labels without goto - return 'goto'; - case 'print': //for our purposes print is treated as functionally equivalent to echo - return 'echo'; - case 'else': //no point in using ifs without else - case 'elseif': //no point in using ifs without elseif - return 'if'; - case 'case': - return 'switch'; - case 'catch': //no point in using catch without try - case 'finally': //no point in using try, catch or finally without try - return 'try'; - case 'do': //no point in using do without while - return 'while'; - case 'foreach': //no point in using foreach without for - return 'for'; - case '__halt_compiler': - return 'halt'; - case 'alias': //for consistency with alias and use descriptions - return 'use'; - } - return $name; - } - /** Normalize operator name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the operator $name, or array of strings to normalize - * - * @return string|array Returns the normalized operator string or an array of normalized strings - */ - protected function normalize_operator($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_operator($value); - } - return $name; - } - $name = strtolower($name); - if(strpos($name, '++') !== false){ - $name = (strpos($name, '++') === 0) ? '++n' : 'n++'; - } else if(strpos($name, '--') !== false){ - $name = (strpos($name, '--') === 0) ? '--n' : 'n--'; - } else if(strpos($name, '+') !== false && strlen($name) > 1){ - $name = '+n'; - } else if(strpos($name, '-') !== false && strlen($name) > 1){ - $name = '-n'; - } - return $name; - } - /** Normalize primitive name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the primitive $name, or array of strings to normalize - * - * @return string|array Returns the normalized primitive string or an array of normalized strings - */ - protected function normalize_primitive($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_primitive($value); - } - return $name; - } - $name = strtolower($name); - if($name == 'double'){ - $name = 'float'; - } else if($name == 'integer'){ - $name = 'int'; - } - return $name; - } - /** Normalize type name. This is an internal PHPSandbox function. - * - * @param string|array $name String of the type $name, or array of strings to normalize - * - * @return string|array Returns the normalized type string or an array of normalized strings - */ - protected function normalize_type($name){ - if(is_array($name)){ - foreach($name as &$value){ - $value = $this->normalize_type($value); - } - return $name; - } - return strtolower($name); - } - /** Whitelist PHPSandbox definitions, such as functions, constants, classes, etc. to set - * - * You can pass an associative array of whitelist types and their names, or a string $type and array of $names, or pass a string of the $type and $name - * - * @example $sandbox->whitelist(array('functions' => array('test'))); - * - * @example $sandbox->whitelist('functions', array('test')); - * - * @example $sandbox->whitelist('functions', 'test'); - * - * @param string|array $type Associative array or string of whitelist type to set - * @param string|array|null $name Array or string of whitelist name to set - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist($type, $name = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($name) && $name && isset($this->whitelist[$_type])){ - $this->whitelist[$_type][$name] = true; - } else if(isset($this->whitelist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->whitelist[$_type][$_name] = true; - } - } - } - } - } else if(isset($this->whitelist[$type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->whitelist[$type][$_name] = true; - } - } - } else if(is_string($name) && $name && isset($this->whitelist[$type])){ - $this->whitelist[$type][$name] = true; - } - return $this; - } - /** Blacklist PHPSandbox definitions, such as functions, constants, classes, etc. to set - * - * You can pass an associative array of blacklist types and their names, or a string $type and array of $names, or pass a string of the $type and $name - * - * @example $sandbox->blacklist(array('functions' => array('test'))); - * - * @example $sandbox->blacklist('functions', array('test')); - * - * @example $sandbox->blacklist('functions', 'test'); - * - * @param string|array $type Associative array or string of blacklist type to set - * @param string|array|null $name Array or string of blacklist name to set - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist($type, $name = null){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(is_string($name) && $name && isset($this->blacklist[$_type])){ - $this->blacklist[$_type][$name] = true; - } else if(isset($this->blacklist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->blacklist[$_type][$_name] = true; - } - } - } - } - } else if(isset($this->blacklist[$type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name){ - $this->blacklist[$type][$_name] = true; - } - } - } else if(is_string($name) && $name && isset($this->blacklist[$type])){ - $this->blacklist[$type][$name] = true; - } - return $this; - } - /** Remove PHPSandbox definitions, such as functions, constants, classes, etc. from whitelist - * - * You can pass an associative array of whitelist types and their names, or a string $type and array of $names, or pass a string of the $type and $name to unset - * - * @example $sandbox->dewhitelist(array('functions' => array('test'))); - * - * @example $sandbox->dewhitelist('functions', array('test')); - * - * @example $sandbox->dewhitelist('functions', 'test'); - * - * @param string|array $type Associative array or string of whitelist type to unset - * @param string|array|null $name Array or string of whitelist name to unset - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist($type, $name){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(isset($this->whitelist[$_type]) && is_string($name) && $name && isset($this->whitelist[$_type][$name])){ - unset($this->whitelist[$_type][$name]); - } else if(isset($this->whitelist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name && isset($this->whitelist[$_type][$_name])){ - unset($this->whitelist[$_type][$_name]); - } - } - } - } - } else if(isset($this->whitelist[$type]) && is_string($name) && $name && isset($this->whitelist[$type][$name])){ - unset($this->whitelist[$type][$name]); - } - return $this; - } - /** Remove PHPSandbox definitions, such as functions, constants, classes, etc. from blacklist - * - * You can pass an associative array of blacklist types and their names, or a string $type and array of $names, or pass a string of the $type and $name to unset - * - * @example $sandbox->deblacklist(array('functions' => array('test'))); - * - * @example $sandbox->deblacklist('functions', array('test')); - * - * @example $sandbox->deblacklist('functions', 'test'); - * - * @param string|array $type Associative array or string of blacklist type to unset - * @param string|array|null $name Array or string of blacklist name to unset - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist($type, $name){ - if(is_array($type)){ - foreach($type as $_type => $name){ - if(isset($this->blacklist[$_type]) && is_string($name) && $name && isset($this->blacklist[$_type][$name])){ - unset($this->blacklist[$_type][$name]); - } else if(isset($this->blacklist[$_type]) && is_array($name)){ - foreach($name as $_name){ - if(is_string($_name) && $_name && isset($this->blacklist[$_type][$_name])){ - unset($this->blacklist[$_type][$_name]); - } - } - } - } - } else if(isset($this->blacklist[$type]) && is_string($name) && $name && isset($this->blacklist[$type][$name])){ - unset($this->blacklist[$type][$name]); - } - return $this; - } - /** Query whether PHPSandbox instance has whitelist type - * - * @example $sandbox->has_whitelist('functions'); //returns number of whitelisted functions, or zero if none whitelisted - * - * @param string $type The whitelist type to query - * - * @return int Returns the number of whitelists this instance has defined - */ - public function has_whitelist($type){ - return count($this->whitelist[$type]); - } - /** Query whether PHPSandbox instance has blacklist type. - * - * @example $sandbox->has_blacklist('functions'); //returns number of blacklisted functions, or zero if none blacklisted - * - * @param string $type The blacklist type to query - * - * @return int Returns the number of blacklists this instance has defined - */ - public function has_blacklist($type){ - return count($this->blacklist[$type]); - } - /** Check if PHPSandbox instance has whitelist type and name set - * - * @example $sandbox->is_whitelisted('functions', 'test'); - * - * @param string $type String of whitelist $type to query - * @param string $name String of whitelist $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted $type and $name, false otherwise - */ - public function is_whitelisted($type, $name){ - return isset($this->whitelist[$type][$name]); - } - /** Check if PHPSandbox instance has blacklist type and name set - * - * @example $sandbox->is_blacklisted('functions', 'test'); - * - * @param string $type String of blacklist $type to query - * @param string $name String of blacklist $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted $type and $name, false otherwise - */ - public function is_blacklisted($type, $name){ - return isset($this->blacklist[$type][$name]); - } - /** Query whether PHPSandbox instance has whitelisted functions. - * - * @example $sandbox->has_whitelist_funcs(); //returns number of whitelisted functions, or zero if none whitelisted - * - * @return int Returns the number of whitelisted functions this instance has defined - */ - public function has_whitelist_funcs(){ - return count($this->whitelist['functions']); - } - /** Query whether PHPSandbox instance has blacklisted functions. - * - * @example $sandbox->has_blacklist_funcs(); //returns number of blacklisted functions, or zero if none blacklisted - * - * @return int Returns the number of blacklisted functions this instance has defined - */ - public function has_blacklist_funcs(){ - return count($this->blacklist['functions']); - } - /** Check if PHPSandbox instance has whitelisted function name set - * - * @example $sandbox->is_whitelisted_func('test'); - * - * @param string $name String of function $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted function $name, false otherwise - */ - public function is_whitelisted_func($name){ - $name = $this->normalize_func($name); - return isset($this->whitelist['functions'][$name]); - } - /** Check if PHPSandbox instance has blacklisted function name set - * - * @example $sandbox->is_blacklisted_func('test'); - * - * @param string $name String of function $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted function $name, false otherwise - */ - public function is_blacklisted_func($name){ - $name = $this->normalize_func($name); - return isset($this->blacklist['functions'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted variables. - * - * @example $sandbox->has_whitelist_vars(); //returns number of whitelisted variables, or zero if none whitelisted - * - * @return int Returns the number of whitelisted variables this instance has defined - */ - public function has_whitelist_vars(){ - return count($this->whitelist['variables']); - } - /** Query whether PHPSandbox instance has blacklisted variables. - * - * @example $sandbox->has_blacklist_vars(); //returns number of blacklisted variables, or zero if none blacklisted - * - * @return int Returns the number of blacklisted variables this instance has defined - */ - public function has_blacklist_vars(){ - return count($this->blacklist['variables']); - } - /** Check if PHPSandbox instance has whitelisted variable name set - * - * @example $sandbox->is_whitelisted_var('test'); - * - * @param string $name String of variable $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted variable $name, false otherwise - */ - public function is_whitelisted_var($name){ - return isset($this->whitelist['variables'][$name]); - } - /** Check if PHPSandbox instance has blacklisted variable name set - * - * @example $sandbox->is_blacklisted_var('test'); - * - * @param string $name String of variable $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted variable $name, false otherwise - */ - public function is_blacklisted_var($name){ - return isset($this->blacklist['variables'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted globals. - * - * @example $sandbox->has_whitelist_globals(); //returns number of whitelisted globals, or zero if none whitelisted - * - * @return int Returns the number of whitelisted globals this instance has defined - */ - public function has_whitelist_globals(){ - return count($this->whitelist['globals']); - } - /** Query whether PHPSandbox instance has blacklisted globals. - * - * @example $sandbox->has_blacklist_globals(); //returns number of blacklisted globals, or zero if none blacklisted - * - * @return int Returns the number of blacklisted globals this instance has defined - */ - public function has_blacklist_globals(){ - return count($this->blacklist['globals']); - } - /** Check if PHPSandbox instance has whitelisted global name set - * - * @example $sandbox->is_whitelisted_global('test'); - * - * @param string $name String of global $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted global $name, false otherwise - */ - public function is_whitelisted_global($name){ - return isset($this->whitelist['globals'][$name]); - } - /** Check if PHPSandbox instance has blacklisted global name set - * - * @example $sandbox->is_blacklisted_global('test'); - * - * @param string $name String of global $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted global $name, false otherwise - */ - public function is_blacklisted_global($name){ - return isset($this->blacklist['globals'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted superglobals, or superglobal keys - * - * @example $sandbox->has_whitelist_superglobals(); //returns number of whitelisted superglobals, or zero if none whitelisted - * - * @example $sandbox->has_whitelist_superglobals('_GET'); //returns number of whitelisted superglobal keys, or zero if none whitelisted - * - * @param string $name The whitelist superglobal key to query - * - * @return int Returns the number of whitelisted superglobals or superglobal keys this instance has defined - */ - public function has_whitelist_superglobals($name = null){ - $name = $this->normalize_superglobal($name); - return $name !== null ? (isset($this->whitelist['superglobals'][$name]) ? count($this->whitelist['superglobals'][$name]) : 0) : count($this->whitelist['superglobals']); - } - /** Query whether PHPSandbox instance has blacklisted superglobals, or superglobal keys - * - * @example $sandbox->has_blacklist_superglobals(); //returns number of blacklisted superglobals, or zero if none blacklisted - * - * @example $sandbox->has_blacklist_superglobals('_GET'); //returns number of blacklisted superglobal keys, or zero if none blacklisted - * - * @param string $name The blacklist superglobal key to query - * - * @return int Returns the number of blacklisted superglobals or superglobal keys this instance has defined - */ - public function has_blacklist_superglobals($name = null){ - $name = $this->normalize_superglobal($name); - return $name !== null ? (isset($this->blacklist['superglobals'][$name]) ? count($this->blacklist['superglobals'][$name]) : 0) : count($this->blacklist['superglobals']); - } - /** Check if PHPSandbox instance has whitelisted superglobal or superglobal key set - * - * @example $sandbox->is_whitelisted_superglobal('_GET'); - * - * @example $sandbox->is_whitelisted_superglobal('_GET', 'page'); - * - * @param string $name String of whitelisted superglobal $name to query - * @param string $key String of whitelisted superglobal $key to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted superglobal key or superglobal, false otherwise - */ - public function is_whitelisted_superglobal($name, $key = null){ - $name = $this->normalize_superglobal($name); - return $key !== null ? isset($this->whitelist['superglobals'][$name][$key]) : isset($this->whitelist['superglobals'][$name]); - } - /** Check if PHPSandbox instance has blacklisted superglobal or superglobal key set - * - * @example $sandbox->is_blacklisted_superglobal('_GET'); - * - * @example $sandbox->is_blacklisted_superglobal('_GET', 'page'); - * - * @param string $name String of blacklisted superglobal $name to query - * @param string $key String of blacklisted superglobal $key to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted superglobal key or superglobal, false otherwise - */ - public function is_blacklisted_superglobal($name, $key = null){ - $name = $this->normalize_superglobal($name); - return $key !== null ? isset($this->blacklist['superglobals'][$name][$key]) : isset($this->blacklist['superglobals'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted constants. - * - * @example $sandbox->has_whitelist_consts(); //returns number of whitelisted constants, or zero if none whitelisted - * - * @return int Returns the number of whitelisted constants this instance has defined - */ - public function has_whitelist_consts(){ - return count($this->whitelist['constants']); - } - /** Query whether PHPSandbox instance has blacklisted constants. - * - * @example $sandbox->has_blacklist_consts(); //returns number of blacklisted constants, or zero if none blacklisted - * - * @return int Returns the number of blacklisted constants this instance has defined - */ - public function has_blacklist_consts(){ - return count($this->blacklist['constants']); - } - /** Check if PHPSandbox instance has whitelisted constant name set - * - * @example $sandbox->is_whitelisted_const('TEST'); - * - * @param string $name String of constant $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted constant $name, false otherwise - */ - public function is_whitelisted_const($name){ - return isset($this->whitelist['constants'][$name]); - } - /** Check if PHPSandbox instance has blacklisted constant name set - * - * @example $sandbox->is_blacklisted_const('TEST'); - * - * @param string $name String of constant $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted constant $name, false otherwise - */ - public function is_blacklisted_const($name){ - return isset($this->blacklist['constants'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted magic constants. - * - * @example $sandbox->has_whitelist_magic_consts(); //returns number of whitelisted magic constants, or zero if none whitelisted - * - * @return int Returns the number of whitelisted magic constants this instance has defined - */ - public function has_whitelist_magic_consts(){ - return count($this->whitelist['magic_constants']); - } - /** Query whether PHPSandbox instance has blacklisted magic constants. - * - * @example $sandbox->has_blacklist_magic_consts(); //returns number of blacklisted magic constants, or zero if none blacklisted - * - * @return int Returns the number of blacklisted magic constants this instance has defined - */ - public function has_blacklist_magic_consts(){ - return count($this->blacklist['magic_constants']); - } - /** Check if PHPSandbox instance has whitelisted magic constant name set - * - * @example $sandbox->is_whitelisted_magic_const('__LINE__'); - * - * @param string $name String of magic constant $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted magic constant $name, false otherwise - */ - public function is_whitelisted_magic_const($name){ - $name = $this->normalize_magic_const($name); - return isset($this->whitelist['magic_constants'][$name]); - } - /** Check if PHPSandbox instance has blacklisted magic constant name set - * - * @example $sandbox->is_blacklisted_magic_const('__LINE__'); - * - * @param string $name String of magic constant $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted magic constant $name, false otherwise - */ - public function is_blacklisted_magic_const($name){ - $name = $this->normalize_magic_const($name); - return isset($this->blacklist['magic_constants'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted namespaces. - * - * @example $sandbox->has_whitelist_namespaces(); //returns number of whitelisted namespaces, or zero if none whitelisted - * - * @return int Returns the number of whitelisted namespaces this instance has defined - */ - public function has_whitelist_namespaces(){ - return count($this->whitelist['namespaces']); - } - /** Query whether PHPSandbox instance has blacklisted namespaces. - * - * @example $sandbox->has_blacklist_namespaces(); //returns number of blacklisted namespaces, or zero if none blacklisted - * - * @return int Returns the number of blacklisted namespaces this instance has defined - */ - public function has_blacklist_namespaces(){ - return count($this->blacklist['namespaces']); - } - /** Check if PHPSandbox instance has whitelisted namespace name set - * - * @example $sandbox->is_whitelisted_namespace('Test'); - * - * @param string $name String of namespace $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted namespace $name, false otherwise - */ - public function is_whitelisted_namespace($name){ - $name = $this->normalize_namespace($name); - return isset($this->whitelist['namespaces'][$name]); - } - /** Check if PHPSandbox instance has blacklisted namespace name set - * - * @example $sandbox->is_blacklisted_namespace('Test'); - * - * @param string $name String of namespace $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted namespace $name, false otherwise - */ - public function is_blacklisted_namespace($name){ - $name = $this->normalize_namespace($name); - return isset($this->blacklist['namespaces'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted aliases. - * - * @example $sandbox->has_whitelist_aliases(); //returns number of whitelisted aliases, or zero if none whitelisted - * - * @return int Returns the number of whitelisted aliases this instance has defined - */ - public function has_whitelist_aliases(){ - return count($this->whitelist['aliases']); - } - /** Query whether PHPSandbox instance has blacklisted aliases. - * - * @example $sandbox->has_blacklist_aliases(); //returns number of blacklisted aliases, or zero if none blacklisted - * - * @return int Returns the number of blacklisted aliases this instance has defined - */ - public function has_blacklist_aliases(){ - return count($this->blacklist['aliases']); - } - /** Check if PHPSandbox instance has whitelisted alias name set - * - * @example $sandbox->is_whitelisted_alias('Test'); - * - * @param string $name String of alias $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted alias $name, false otherwise - */ - public function is_whitelisted_alias($name){ - $name = $this->normalize_alias($name); - return isset($this->whitelist['aliases'][$name]); - } - /** Check if PHPSandbox instance has blacklisted alias name set - * - * @example $sandbox->is_blacklisted_alias('Test'); - * - * @param string $name String of alias $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted alias $name, false otherwise - */ - public function is_blacklisted_alias($name){ - $name = $this->normalize_alias($name); - return isset($this->blacklist['aliases'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted uses (or aliases.) - * - * @alias has_whitelist_aliases(); - * - * @example $sandbox->has_whitelist_uses(); //returns number of whitelisted uses (or aliases) or zero if none whitelisted - * - * @return int Returns the number of whitelisted uses (or aliases) this instance has defined - */ - public function has_whitelist_uses(){ - return $this->has_whitelist_aliases(); - } - /** Query whether PHPSandbox instance has blacklisted uses (or aliases.) - * - * @alias has_blacklist_aliases(); - * - * @example $sandbox->has_blacklist_uses(); //returns number of blacklisted uses (or aliases) or zero if none blacklisted - * - * @return int Returns the number of blacklisted uses (or aliases) this instance has defined - */ - public function has_blacklist_uses(){ - return $this->has_blacklist_aliases(); - } - /** Check if PHPSandbox instance has whitelisted use (or alias) name set - * - * @alias is_whitelisted_alias(); - * - * @example $sandbox->is_whitelisted_use('Test'); - * - * @param string $name String of use (or alias) $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted use (or alias) $name, false otherwise - */ - public function is_whitelisted_use($name){ - return $this->is_whitelisted_alias($name); - } - /** Check if PHPSandbox instance has blacklisted use (or alias) name set - * - * @alias is_blacklisted_alias(); - * - * @example $sandbox->is_blacklisted_use('Test'); - * - * @param string $name String of use (or alias) $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted use (or alias) $name, false otherwise - */ - public function is_blacklisted_use($name){ - return $this->is_blacklisted_alias($name); - } - /** Query whether PHPSandbox instance has whitelisted classes. - * - * @example $sandbox->has_whitelist_classes(); //returns number of whitelisted classes, or zero if none whitelisted - * - * @return int Returns the number of whitelisted classes this instance has defined - */ - public function has_whitelist_classes(){ - return count($this->whitelist['classes']); - } - /** Query whether PHPSandbox instance has blacklisted classes. - * - * @example $sandbox->has_blacklist_classes(); //returns number of blacklisted classes, or zero if none blacklisted - * - * @return int Returns the number of blacklisted classes this instance has defined - */ - public function has_blacklist_classes(){ - return count($this->blacklist['classes']); - } - /** Check if PHPSandbox instance has whitelisted class name set - * - * @example $sandbox->is_whitelisted_class('Test'); - * - * @param string $name String of class $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted class $name, false otherwise - */ - public function is_whitelisted_class($name){ - $name = $this->normalize_class($name); - return isset($this->whitelist['classes'][$name]); - } - /** Check if PHPSandbox instance has blacklisted class name set - * - * @example $sandbox->is_blacklisted_class('Test'); - * - * @param string $name String of class $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted class $name, false otherwise - */ - public function is_blacklisted_class($name){ - $name = $this->normalize_class($name); - return isset($this->blacklist['classes'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted interfaces. - * - * @example $sandbox->has_whitelist_interfaces(); //returns number of whitelisted interfaces, or zero if none whitelisted - * - * @return int Returns the number of whitelisted interfaces this instance has defined - */ - public function has_whitelist_interfaces(){ - return count($this->whitelist['interfaces']); - } - /** Query whether PHPSandbox instance has blacklisted interfaces. - * - * @example $sandbox->has_blacklist_interfaces(); //returns number of blacklisted interfaces, or zero if none blacklisted - * - * @return int Returns the number of blacklisted interfaces this instance has defined - */ - public function has_blacklist_interfaces(){ - return count($this->blacklist['interfaces']); - } - /** Check if PHPSandbox instance has whitelisted interface name set - * - * @example $sandbox->is_whitelisted_interface('Test'); - * - * @param string $name String of interface $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted interface $name, false otherwise - */ - public function is_whitelisted_interface($name){ - $name = $this->normalize_interface($name); - return isset($this->whitelist['interfaces'][$name]); - } - /** Check if PHPSandbox instance has blacklisted interface name set - * - * @example $sandbox->is_blacklisted_interface('Test'); - * - * @param string $name String of interface $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted interface $name, false otherwise - */ - public function is_blacklisted_interface($name){ - $name = $this->normalize_interface($name); - return isset($this->blacklist['interfaces'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted traits. - * - * @example $sandbox->has_whitelist_traits(); //returns number of whitelisted traits, or zero if none whitelisted - * - * @return int Returns the number of whitelisted traits this instance has defined - */ - public function has_whitelist_traits(){ - return count($this->whitelist['traits']); - } - /** Query whether PHPSandbox instance has blacklisted traits. - * - * @example $sandbox->has_blacklist_traits(); //returns number of blacklisted traits, or zero if none blacklisted - * - * @return int Returns the number of blacklisted traits this instance has defined - */ - public function has_blacklist_traits(){ - return count($this->blacklist['traits']); - } - /** Check if PHPSandbox instance has whitelisted trait name set - * - * @example $sandbox->is_whitelisted_trait('Test'); - * - * @param string $name String of trait $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted trait $name, false otherwise - */ - public function is_whitelisted_trait($name){ - $name = $this->normalize_trait($name); - return isset($this->whitelist['traits'][$name]); - } - /** Check if PHPSandbox instance has blacklisted trait name set - * - * @example $sandbox->is_blacklisted_trait('Test'); - * - * @param string $name String of trait $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted trait $name, false otherwise - */ - public function is_blacklisted_trait($name){ - $name = $this->normalize_trait($name); - return isset($this->blacklist['traits'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted keywords. - * - * @example $sandbox->has_whitelist_keywords(); //returns number of whitelisted keywords, or zero if none whitelisted - * - * @return int Returns the number of whitelisted keywords this instance has defined - */ - public function has_whitelist_keywords(){ - return count($this->whitelist['keywords']); - } - /** Query whether PHPSandbox instance has blacklisted keywords. - * - * @example $sandbox->has_blacklist_keywords(); //returns number of blacklisted keywords, or zero if none blacklisted - * - * @return int Returns the number of blacklisted keywords this instance has defined - */ - public function has_blacklist_keywords(){ - return count($this->blacklist['keywords']); - } - /** Check if PHPSandbox instance has whitelisted keyword name set - * - * @example $sandbox->is_whitelisted_keyword('echo'); - * - * @param string $name String of keyword $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted keyword $name, false otherwise - */ - public function is_whitelisted_keyword($name){ - $name = $this->normalize_keyword($name); - return isset($this->whitelist['keywords'][$name]); - } - /** Check if PHPSandbox instance has blacklisted keyword name set - * - * @example $sandbox->is_blacklisted_keyword('echo'); - * - * @param string $name String of keyword $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted keyword $name, false otherwise - */ - public function is_blacklisted_keyword($name){ - $name = $this->normalize_keyword($name); - return isset($this->blacklist['keywords'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted operators. - * - * @example $sandbox->has_whitelist_operators(); //returns number of whitelisted operators, or zero if none whitelisted - * - * @return int Returns the number of whitelisted operators this instance has defined - */ - public function has_whitelist_operators(){ - return count($this->whitelist['operators']); - } - /** Query whether PHPSandbox instance has blacklisted operators. - * - * @example $sandbox->has_blacklist_operators(); //returns number of blacklisted operators, or zero if none blacklisted - * - * @return int Returns the number of blacklisted operators this instance has defined - */ - public function has_blacklist_operators(){ - return count($this->blacklist['operators']); - } - /** Check if PHPSandbox instance has whitelisted operator name set - * - * @example $sandbox->is_whitelisted_operator('+'); - * - * @param string $name String of operator $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted operator $name, false otherwise - */ - public function is_whitelisted_operator($name){ - $name = $this->normalize_operator($name); - return isset($this->whitelist['operators'][$name]); - } - /** Check if PHPSandbox instance has blacklisted operator name set - * - * @example $sandbox->is_blacklisted_operator('+'); - * - * @param string $name String of operator $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted operator $name, false otherwise - */ - public function is_blacklisted_operator($name){ - $name = $this->normalize_operator($name); - return isset($this->blacklist['operators'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted primitives. - * - * @example $sandbox->has_whitelist_primitives(); //returns number of whitelisted primitives, or zero if none whitelisted - * - * @return int Returns the number of whitelisted primitives this instance has defined - */ - public function has_whitelist_primitives(){ - return count($this->whitelist['primitives']); - } - /** Query whether PHPSandbox instance has blacklisted primitives. - * - * @example $sandbox->has_blacklist_primitives(); //returns number of blacklisted primitives, or zero if none blacklisted - * - * @return int Returns the number of blacklisted primitives this instance has defined - */ - public function has_blacklist_primitives(){ - return count($this->blacklist['primitives']); - } - /** Check if PHPSandbox instance has whitelisted primitive name set - * - * @example $sandbox->is_whitelisted_primitive('array'); - * - * @param string $name String of primitive $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted primitive $name, false otherwise - */ - public function is_whitelisted_primitive($name){ - $name = $this->normalize_primitive($name); - return isset($this->whitelist['primitives'][$name]); - } - /** Check if PHPSandbox instance has blacklisted primitive name set - * - * @example $sandbox->is_blacklisted_primitive('array'); - * - * @param string $name String of primitive $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted primitive $name, false otherwise - */ - public function is_blacklisted_primitive($name){ - $name = $this->normalize_primitive($name); - return isset($this->blacklist['primitives'][$name]); - } - /** Query whether PHPSandbox instance has whitelisted types. - * - * @example $sandbox->has_whitelist_types(); //returns number of whitelisted types, or zero if none whitelisted - * - * @return int Returns the number of whitelisted types this instance has defined - */ - public function has_whitelist_types(){ - return count($this->whitelist['types']); - } - /** Query whether PHPSandbox instance has blacklisted types. - * - * @example $sandbox->has_blacklist_types(); //returns number of blacklisted types, or zero if none blacklisted - * - * @return int Returns the number of blacklisted types this instance has defined - */ - public function has_blacklist_types(){ - return count($this->blacklist['types']); - } - /** Check if PHPSandbox instance has whitelisted type name set - * - * @example $sandbox->is_whitelisted_type('array'); - * - * @param string $name String of type $name to query - * - * @return bool Returns true if PHPSandbox instance has whitelisted type $name, false otherwise - */ - public function is_whitelisted_type($name){ - $name = $this->normalize_type($name); - return isset($this->whitelist['types'][$name]); - } - /** Check if PHPSandbox instance has blacklisted type name set - * - * @example $sandbox->is_blacklisted_type('array'); - * - * @param string $name String of type $name to query - * - * @return bool Returns true if PHPSandbox instance has blacklisted type $name, false otherwise - */ - public function is_blacklisted_type($name){ - $name = $this->normalize_type($name); - return isset($this->blacklist['types'][$name]); - } - /** Whitelist function - * - * You can pass a string of the function name, or pass an array of function names to whitelist - * - * @example $sandbox->whitelist_func('var_dump'); - * - * @example $sandbox->whitelist_func('var_dump', 'print_r'); - * - * @example $sandbox->whitelist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name, or array of function names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_func($name){ - if(func_num_args() > 1){ - return $this->whitelist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->whitelist('functions', $name); - } - /** Blacklist function - * - * You can pass a string of the function name, or pass an array of function names to blacklist - * - * @example $sandbox->blacklist_func('var_dump'); - * - * @example $sandbox->blacklist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name, or array of function names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_func($name){ - if(func_num_args() > 1){ - return $this->blacklist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->blacklist('functions', $name); - } - /** Remove function from whitelist - * - * You can pass a string of the function name, or pass an array of function names to remove from whitelist - * - * @example $sandbox->dewhitelist_func('var_dump'); - * - * @example $sandbox->dewhitelist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name or array of function names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_func($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->dewhitelist('functions', $name); - } - /** Remove function from blacklist - * - * You can pass a string of the function name, or pass an array of function names to remove from blacklist - * - * @example $sandbox->deblacklist_func('var_dump'); - * - * @example $sandbox->deblacklist_func(array('var_dump', 'print_r')); - * - * @param string|array $name String of function name or array of function names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_func($name){ - if(func_num_args() > 1){ - return $this->deblacklist_func(func_get_args()); - } - $name = $this->normalize_func($name); - return $this->deblacklist('functions', $name); - } - /** Whitelist variable - * - * You can pass a string of variable name, or pass an array of the variable names to whitelist - * - * @example $sandbox->whitelist_var('a'); - * - * @example $sandbox->whitelist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_var($name){ - if(func_num_args() > 1){ - return $this->whitelist_var(func_get_args()); - } - return $this->whitelist('variables', $name); - } - /** Blacklist variable - * - * You can pass a string of variable name, or pass an array of the variable names to blacklist - * - * @example $sandbox->blacklist_var('a'); - * - * @example $sandbox->blacklist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_var($name){ - if(func_num_args() > 1){ - return $this->blacklist_var(func_get_args()); - } - return $this->blacklist('variables', $name); - } - /** Remove variable from whitelist - * - * You can pass a string of variable name, or pass an array of the variable names to remove from whitelist - * - * @example $sandbox->dewhitelist_var('a'); - * - * @example $sandbox->dewhitelist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_var($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_var(func_get_args()); - } - return $this->dewhitelist('variables', $name); - } - /** Remove function from blacklist - * - * You can pass a string of variable name, or pass an array of the variable names to remove from blacklist - * - * @example $sandbox->deblacklist_var('a'); - * - * @example $sandbox->deblacklist_var(array('a', 'b')); - * - * @param string|array $name String of variable name or array of variable names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_var($name){ - if(func_num_args() > 1){ - return $this->deblacklist_var(func_get_args()); - } - return $this->deblacklist('variables', $name); - } - /** Whitelist global - * - * You can pass a string of global name, or pass an array of the global names to whitelist - * - * @example $sandbox->whitelist_global('a'); - * - * @example $sandbox->whitelist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_global($name){ - if(func_num_args() > 1){ - return $this->whitelist_global(func_get_args()); - } - return $this->whitelist('globals', $name); - } - /** Blacklist global - * - * You can pass a string of global name, or pass an array of the global names to blacklist - * - * @example $sandbox->blacklist_global('a'); - * - * @example $sandbox->blacklist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_global($name){ - if(func_num_args() > 1){ - return $this->blacklist_global(func_get_args()); - } - return $this->blacklist('globals', $name); - } - /** Remove global from whitelist - * - * You can pass a string of global name, or pass an array of the global names to remove from whitelist - * - * @example $sandbox->dewhitelist_global('a'); - * - * @example $sandbox->dewhitelist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_global($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_global(func_get_args()); - } - return $this->dewhitelist('globals', $name); - } - /** Remove global from blacklist - * - * You can pass a string of global name, or pass an array of the global names to remove from blacklist - * - * @example $sandbox->deblacklist_global('a'); - * - * @example $sandbox->deblacklist_global(array('a', 'b')); - * - * @param string|array $name String of global name or array of global names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_global($name){ - if(func_num_args() > 1){ - return $this->deblacklist_global(func_get_args()); - } - return $this->deblacklist('globals', $name); - } - /** Whitelist superglobal or superglobal key - * - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to whitelist - * - * @example $sandbox->whitelist_superglobal('_GET'); - * - * @example $sandbox->whitelist_superglobal('_GET', 'page'); - * - * @example $sandbox->whitelist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->whitelist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to whitelist - * @param string $key String of superglobal key to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_string($name) && $name && !isset($this->whitelist['superglobals'][$name])){ - $this->whitelist['superglobals'][$name] = array(); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(is_string($key) && $key){ - $this->whitelist['superglobals'][$key] = array(); - } - } else { - $_name = $this->normalize_superglobal($_name); - if(is_string($_name) && $_name && !isset($this->whitelist['superglobals'][$_name])){ - $this->whitelist['superglobals'][$_name] = array(); - } - if(is_string($key) && $key && isset($this->whitelist['superglobals'][$_name])){ - $this->whitelist['superglobals'][$_name][$key] = true; - } else if(isset($this->whitelist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->whitelist['superglobals'][$_name][$_name] = true; - } - } - } - } - } - } else if(isset($this->whitelist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->whitelist['superglobals'][$name][$_key] = true; - } - } - } else if(is_string($key) && $key && isset($this->whitelist['superglobals'][$name])){ - $this->whitelist['superglobals'][$name][$key] = true; - } - return $this; - } - /** Blacklist superglobal or superglobal key - ** - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to blacklist - * - * @example $sandbox->blacklist_superglobal('_GET'); - * - * @example $sandbox->blacklist_superglobal('_GET', 'page'); - * - * @example $sandbox->blacklist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->blacklist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to blacklist - * @param string $key String of superglobal key to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_string($name) && $name && !isset($this->blacklist['superglobals'][$name])){ - $this->blacklist['superglobals'][$name] = array(); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(is_string($key) && $key){ - $this->blacklist['superglobals'][$key] = array(); - } - } else { - $_name = $this->normalize_superglobal($_name); - if(is_string($_name) && $_name && !isset($this->blacklist['superglobals'][$_name])){ - $this->blacklist['superglobals'][$_name] = array(); - } - if(is_string($key) && $key && isset($this->blacklist['superglobals'][$_name])){ - $this->blacklist['superglobals'][$_name][$key] = true; - } else if(isset($this->blacklist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->blacklist['superglobals'][$_name][$_name] = true; - } - } - } - } - } - } else if(isset($this->blacklist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key){ - $this->blacklist['superglobals'][$name][$_key] = true; - } - } - } else if(is_string($key) && $key && isset($this->blacklist['superglobals'][$name])){ - $this->blacklist['superglobals'][$name][$key] = true; - } - return $this; - } - /** Remove superglobal or superglobal key from whitelist - ** - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to remove from whitelist - * - * @example $sandbox->dewhitelist_superglobal('_GET'); - * - * @example $sandbox->dewhitelist_superglobal('_GET', 'page'); - * - * @example $sandbox->dewhitelist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->dewhitelist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to remove from whitelist - * @param string $key String of superglobal key to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(isset($this->whitelist['superglobals'][$key])){ - $this->whitelist['superglobals'][$key] = array(); - } - } else if(isset($this->whitelist['superglobals'][$_name]) && is_string($key) && $key && isset($this->whitelist['superglobals'][$_name][$key])){ - unset($this->whitelist['superglobals'][$_name][$key]); - } else if(isset($this->whitelist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->whitelist['superglobals'][$_name][$_key])){ - unset($this->whitelist['superglobals'][$_name][$_key]); - } - } - } - } - } else if(isset($this->whitelist['superglobals'][$name]) && is_string($key) && $key && isset($this->whitelist['superglobals'][$name][$key])){ - unset($this->whitelist['superglobals'][$name][$key]); - } else if(isset($this->whitelist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->whitelist['superglobals'][$name][$_key])){ - unset($this->whitelist['superglobals'][$name][$_key]); - } - } - } else if(isset($this->whitelist['superglobals'][$name])){ - unset($this->whitelist['superglobals'][$name]); - } - return $this; - } - /** Remove superglobal or superglobal key from blacklist - ** - * You can pass a string of the superglobal name, or a string of the superglobal name and a string of the key, - * or pass an array of superglobal names, or an associative array of superglobal names and their keys to remove from blacklist - * - * @example $sandbox->deblacklist_superglobal('_GET'); - * - * @example $sandbox->deblacklist_superglobal('_GET', 'page'); - * - * @example $sandbox->deblacklist_superglobal(array('_GET', '_POST')); - * - * @example $sandbox->deblacklist_superglobal(array('_GET' => 'page')); - * - * @param string|array $name String of superglobal name, or an array of superglobal names, or an associative array of superglobal names and their keys to remove from blacklist - * @param string $key String of superglobal key to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_superglobal($name, $key = null){ - if(is_string($name)){ - $name = $this->normalize_superglobal($name); - } - if(is_array($name)){ - foreach($name as $_name => $key){ - if(is_int($_name)){ - if(isset($this->blacklist['superglobals'][$key])){ - $this->blacklist['superglobals'][$key] = array(); - } - } else if(isset($this->blacklist['superglobals'][$_name]) && is_string($key) && $key && isset($this->blacklist['superglobals'][$_name][$key])){ - unset($this->blacklist['superglobals'][$_name][$key]); - } else if(isset($this->blacklist['superglobals'][$_name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->blacklist['superglobals'][$_name][$_key])){ - unset($this->blacklist['superglobals'][$_name][$_key]); - } - } - } - } - } else if(isset($this->blacklist['superglobals'][$name]) && is_string($key) && $key && isset($this->blacklist['superglobals'][$name][$key])){ - unset($this->blacklist['superglobals'][$name][$key]); - } else if(isset($this->blacklist['superglobals'][$name]) && is_array($key)){ - foreach($key as $_key){ - if(is_string($_key) && $_key && isset($this->blacklist['superglobals'][$name][$_key])){ - unset($this->blacklist['superglobals'][$name][$_key]); - } - } - } else if(isset($this->blacklist['superglobals'][$name])){ - unset($this->blacklist['superglobals'][$name]); - } - return $this; - } - /** Whitelist constant - * - * You can pass a string of constant name, or pass an array of the constant names to whitelist - * - * @example $sandbox->whitelist_const('FOO'); - * - * @example $sandbox->whitelist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_const($name){ - if(func_num_args() > 1){ - return $this->whitelist_const(func_get_args()); - } - return $this->whitelist('constants', $name); - } - /** Blacklist constant - * - * You can pass a string of constant name, or pass an array of the constant names to blacklist - * - * @example $sandbox->blacklist_const('FOO'); - * - * @example $sandbox->blacklist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_const($name){ - if(func_num_args() > 1){ - return $this->blacklist_const(func_get_args()); - } - return $this->blacklist('constants', $name); - } - /** Remove constant from whitelist - * - * You can pass a string of constant name, or pass an array of the constant names to remove from whitelist - * - * @example $sandbox->dewhitelist_const('FOO'); - * - * @example $sandbox->dewhitelist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_const($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_const(func_get_args()); - } - return $this->dewhitelist('constants', $name); - } - /** Remove constant from blacklist - * - * You can pass a string of constant name, or pass an array of the constant names to remove from blacklist - * - * @example $sandbox->deblacklist_const('FOO'); - * - * @example $sandbox->deblacklist_const(array('FOO', 'BAR')); - * - * @param string|array $name String of constant name or array of constant names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_const($name){ - if(func_num_args() > 1){ - return $this->deblacklist_const(func_get_args()); - } - return $this->deblacklist('constants', $name); - } - /** Whitelist magic constant - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to whitelist - * - * @example $sandbox->whitelist_magic_const('__LINE__'); - * - * @example $sandbox->whitelist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_magic_const($name){ - if(func_num_args() > 1){ - return $this->whitelist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->whitelist('magic_constants', $name); - } - /** Blacklist magic constant - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to blacklist - * - * @example $sandbox->blacklist_magic_const('__LINE__'); - * - * @example $sandbox->blacklist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_magic_const($name){ - if(func_num_args() > 1){ - return $this->blacklist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->blacklist('magic_constants', $name); - } - /** Remove magic constant from whitelist - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to remove from whitelist - * - * @example $sandbox->dewhitelist_magic_const('__LINE__'); - * - * @example $sandbox->dewhitelist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_magic_const($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->dewhitelist('magic_constants', $name); - } - /** Remove magic constant from blacklist - * - * You can pass a string of magic constant name, or pass an array of the magic constant names to remove from blacklist - * - * @example $sandbox->deblacklist_magic_const('__LINE__'); - * - * @example $sandbox->deblacklist_magic_const(array('__LINE__', '__FILE__')); - * - * @param string|array $name String of magic constant name or array of magic constant names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_magic_const($name){ - if(func_num_args() > 1){ - return $this->deblacklist_magic_const(func_get_args()); - } - $name = $this->normalize_magic_const($name); - return $this->deblacklist('magic_constants', $name); - } - /** Whitelist namespace - * - * You can pass a string of namespace name, or pass an array of the namespace names to whitelist - * - * @example $sandbox->whitelist_namespace('Foo'); - * - * @example $sandbox->whitelist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_namespace($name){ - if(func_num_args() > 1){ - return $this->whitelist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->whitelist('namespaces', $name); - } - /** Blacklist namespace - * - * You can pass a string of namespace name, or pass an array of the namespace names to blacklist - * - * @example $sandbox->blacklist_namespace('Foo'); - * - * @example $sandbox->blacklist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_namespace($name){ - if(func_num_args() > 1){ - return $this->blacklist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->blacklist('namespaces', $name); - } - /** Remove namespace from whitelist - * - * You can pass a string of namespace name, or pass an array of the namespace names to remove from whitelist - * - * @example $sandbox->dewhitelist_namespace('Foo'); - * - * @example $sandbox->dewhitelist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_namespace($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->dewhitelist('namespaces', $name); - } - /** Remove namespace from blacklist - * - * You can pass a string of namespace name, or pass an array of the namespace names to remove from blacklist - * - * @example $sandbox->deblacklist_namespace('Foo'); - * - * @example $sandbox->deblacklist_namespace(array('Foo', 'Bar')); - * - * @param string|array $name String of namespace name or array of namespace names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_namespace($name){ - if(func_num_args() > 1){ - return $this->deblacklist_namespace(func_get_args()); - } - $name = $this->normalize_namespace($name); - return $this->deblacklist('namespaces', $name); - } - /** Whitelist alias - * - * You can pass a string of alias name, or pass an array of the alias names to whitelist - * - * @example $sandbox->whitelist_alias('Foo'); - * - * @example $sandbox->whitelist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias names or array of alias names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_alias($name){ - if(func_num_args() > 1){ - return $this->whitelist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->whitelist('aliases', $name); - } - /** Blacklist alias - * - * You can pass a string of alias name, or pass an array of the alias names to blacklist - * - * @example $sandbox->blacklist_alias('Foo'); - * - * @example $sandbox->blacklist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name or array of alias names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_alias($name){ - if(func_num_args() > 1){ - return $this->blacklist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->blacklist('aliases', $name); - } - /** Remove alias from whitelist - * - * You can pass a string of alias name, or pass an array of the alias names to remove from whitelist - * - * @example $sandbox->dewhitelist_alias('Foo'); - * - * @example $sandbox->dewhitelist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name or array of alias names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_alias($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->dewhitelist('aliases', $name); - } - /** Remove alias from blacklist - * - * You can pass a string of alias name, or pass an array of the alias names to remove from blacklist - * - * @example $sandbox->deblacklist_alias('Foo'); - * - * @example $sandbox->deblacklist_alias(array('Foo', 'Bar')); - * - * @param string|array $name String of alias name or array of alias names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_alias($name){ - if(func_num_args() > 1){ - return $this->deblacklist_alias(func_get_args()); - } - $name = $this->normalize_alias($name); - return $this->deblacklist('aliases', $name); - } - /** Whitelist use (or alias) - * - * You can pass a string of use (or alias) name, or pass an array of the use (or alias) names to whitelist - * - * @alias whitelist_alias(); - * - * @example $sandbox->whitelist_use('Foo'); - * - * @example $sandbox->whitelist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_use($name){ - if(func_num_args() > 1){ - return $this->whitelist_alias(func_get_args()); - } - return $this->whitelist_alias($name); - } - /** Blacklist use (or alias) - * - * You can pass a string of use (or alias) name, or pass an array of the use (or alias) names to blacklist - * - * @alias blacklist_alias(); - * - * @example $sandbox->blacklist_use('Foo'); - * - * @example $sandbox->blacklist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_use($name){ - if(func_num_args() > 1){ - return $this->blacklist_alias(func_get_args()); - } - return $this->blacklist_alias($name); - } - /** Remove use (or alias) from whitelist - * - * You can pass a string of use (or alias name, or pass an array of the use (or alias) names to remove from whitelist - * - * @alias dewhitelist_alias(); - * - * @example $sandbox->dewhitelist_use('Foo'); - * - * @example $sandbox->dewhitelist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_use($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_alias(func_get_args()); - } - return $this->dewhitelist_alias($name); - } - /** Remove use (or alias) from blacklist - * - * You can pass a string of use (or alias name, or pass an array of the use (or alias) names to remove from blacklist - * - * @alias deblacklist_alias(); - * - * @example $sandbox->deblacklist_use('Foo'); - * - * @example $sandbox->deblacklist_use(array('Foo', 'Bar')); - * - * @param string|array $name String of use (or alias) name or array of use (or alias) names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_use($name){ - if(func_num_args() > 1){ - return $this->deblacklist_alias(func_get_args()); - } - return $this->deblacklist_alias($name); - } - /** Whitelist class - * - * You can pass a string of class name, or pass an array of the class names to whitelist - * - * @example $sandbox->whitelist_class('Foo'); - * - * @example $sandbox->whitelist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_class($name){ - if(func_num_args() > 1){ - return $this->whitelist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->whitelist('classes', $name); - } - /** Blacklist class - * - * You can pass a string of class name, or pass an array of the class names to blacklist - * - * @example $sandbox->blacklist_class('Foo'); - * - * @example $sandbox->blacklist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_class($name){ - if(func_num_args() > 1){ - return $this->blacklist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->blacklist('classes', $name); - } - /** Remove class from whitelist - * - * You can pass a string of class name, or pass an array of the class names to remove from whitelist - * - * @example $sandbox->dewhitelist_class('Foo'); - * - * @example $sandbox->dewhitelist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_class($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->dewhitelist('classes', $name); - } - /** Remove class from blacklist - * - * You can pass a string of class name, or pass an array of the class names to remove from blacklist - * - * @example $sandbox->deblacklist_class('Foo'); - * - * @example $sandbox->deblacklist_class(array('Foo', 'Bar')); - * - * @param string|array $name String of class name or array of class names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_class($name){ - if(func_num_args() > 1){ - return $this->deblacklist_class(func_get_args()); - } - $name = $this->normalize_class($name); - return $this->deblacklist('classes', $name); - } - /** Whitelist interface - * - * You can pass a string of interface name, or pass an array of the interface names to whitelist - * - * @example $sandbox->whitelist_interface('Foo'); - * - * @example $sandbox->whitelist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_interface($name){ - if(func_num_args() > 1){ - return $this->whitelist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->whitelist('interfaces', $name); - } - /** Blacklist interface - * - * You can pass a string of interface name, or pass an array of the interface names to blacklist - * - * @example $sandbox->blacklist_interface('Foo'); - * - * @example $sandbox->blacklist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_interface($name){ - if(func_num_args() > 1){ - return $this->blacklist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->blacklist('interfaces', $name); - } - /** Remove interface from whitelist - * - * You can pass a string of interface name, or pass an array of the interface names to remove from whitelist - * - * @example $sandbox->dewhitelist_interface('Foo'); - * - * @example $sandbox->dewhitelist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_interface($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->dewhitelist('interfaces', $name); - } - /** Remove interface from blacklist - * - * You can pass a string of interface name, or pass an array of the interface names to remove from blacklist - * - * @example $sandbox->deblacklist_interface('Foo'); - * - * @example $sandbox->deblacklist_interface(array('Foo', 'Bar')); - * - * @param string|array $name String of interface name or array of interface names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_interface($name){ - if(func_num_args() > 1){ - return $this->deblacklist_interface(func_get_args()); - } - $name = $this->normalize_interface($name); - return $this->deblacklist('interfaces', $name); - } - /** Whitelist trait - * - * You can pass a string of trait name, or pass an array of the trait names to whitelist - * - * @example $sandbox->whitelist_trait('Foo'); - * - * @example $sandbox->whitelist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_trait($name){ - if(func_num_args() > 1){ - return $this->whitelist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->whitelist('traits', $name); - } - /** Blacklist trait - * - * You can pass a string of trait name, or pass an array of the trait names to blacklist - * - * @example $sandbox->blacklist_trait('Foo'); - * - * @example $sandbox->blacklist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_trait($name){ - if(func_num_args() > 1){ - return $this->blacklist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->blacklist('traits', $name); - } - /** Remove trait from whitelist - * - * You can pass a string of trait name, or pass an array of the trait names to remove from whitelist - * - * @example $sandbox->dewhitelist_trait('Foo'); - * - * @example $sandbox->dewhitelist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_trait($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->dewhitelist('traits', $name); - } - /** Remove trait from blacklist - * - * You can pass a string of trait name, or pass an array of the trait names to remove from blacklist - * - * @example $sandbox->deblacklist_trait('Foo'); - * - * @example $sandbox->deblacklist_trait(array('Foo', 'Bar')); - * - * @param string|array $name String of trait name or array of trait names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_trait($name){ - if(func_num_args() > 1){ - return $this->deblacklist_trait(func_get_args()); - } - $name = $this->normalize_trait($name); - return $this->deblacklist('traits', $name); - } - /** Whitelist keyword - * - * You can pass a string of keyword name, or pass an array of the keyword names to whitelist - * - * @example $sandbox->whitelist_keyword('echo'); - * - * @example $sandbox->whitelist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_keyword($name){ - if(func_num_args() > 1){ - return $this->whitelist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->whitelist('keywords', $name); - } - /** Blacklist keyword - * - * You can pass a string of keyword name, or pass an array of the keyword names to blacklist - * - * @example $sandbox->blacklist_keyword('echo'); - * - * @example $sandbox->blacklist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_keyword($name){ - if(func_num_args() > 1){ - return $this->blacklist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->blacklist('keywords', $name); - } - /** Remove keyword from whitelist - * - * You can pass a string of keyword name, or pass an array of the keyword names to remove from whitelist - * - * @example $sandbox->dewhitelist_keyword('echo'); - * - * @example $sandbox->dewhitelist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_keyword($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->dewhitelist('keywords', $name); - } - /** Remove keyword from blacklist - * - * You can pass a string of keyword name, or pass an array of the keyword names to remove from blacklist - * - * @example $sandbox->deblacklist_keyword('echo'); - * - * @example $sandbox->deblacklist_keyword(array('echo', 'eval')); - * - * @param string|array $name String of keyword name or array of keyword names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_keyword($name){ - if(func_num_args() > 1){ - return $this->deblacklist_keyword(func_get_args()); - } - $name = $this->normalize_keyword($name); - return $this->deblacklist('keywords', $name); - } - /** Whitelist operator - * - * You can pass a string of operator name, or pass an array of the operator names to whitelist - * - * @example $sandbox->whitelist_operator('+'); - * - * @example $sandbox->whitelist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_operator($name){ - if(func_num_args() > 1){ - return $this->whitelist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->whitelist('operators', $name); - } - /** Blacklist operator - * - * You can pass a string of operator name, or pass an array of the operator names to blacklist - * - * @example $sandbox->blacklist_operator('+'); - * - * @example $sandbox->blacklist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_operator($name){ - if(func_num_args() > 1){ - return $this->blacklist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->blacklist('operators', $name); - } - /** Remove operator from whitelist - * - * You can pass a string of operator name, or pass an array of the operator names to remove from whitelist - * - * @example $sandbox->dewhitelist_operator('+'); - * - * @example $sandbox->dewhitelist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_operator($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->dewhitelist('operators', $name); - } - /** Remove operator from blacklist - * - * You can pass a string of operator name, or pass an array of the operator names to remove from blacklist - * - * @example $sandbox->deblacklist_operator('+'); - * - * @example $sandbox->deblacklist_operator(array('+', '-')); - * - * @param string|array $name String of operator name or array of operator names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_operator($name){ - if(func_num_args() > 1){ - return $this->deblacklist_operator(func_get_args()); - } - $name = $this->normalize_operator($name); - return $this->deblacklist('operators', $name); - } - /** Whitelist primitive - * - * You can pass a string of primitive name, or pass an array of the primitive names to whitelist - * - * @example $sandbox->whitelist_primitive('int'); - * - * @example $sandbox->whitelist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_primitive($name){ - if(func_num_args() > 1){ - return $this->whitelist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->whitelist('primitives', $name); - } - /** Blacklist primitive - * - * You can pass a string of primitive name, or pass an array of the primitive names to blacklist - * - * @example $sandbox->blacklist_primitive('int'); - * - * @example $sandbox->blacklist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_primitive($name){ - if(func_num_args() > 1){ - return $this->blacklist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->blacklist('primitives', $name); - } - /** Remove primitive from whitelist - * - * You can pass a string of primitive name, or pass an array of the primitive names to remove from whitelist - * - * @example $sandbox->dewhitelist_primitive('int'); - * - * @example $sandbox->dewhitelist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_primitive($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->dewhitelist('primitives', $name); - } - /** Remove primitive from blacklist - * - * You can pass a string of primitive name, or pass an array of the primitive names to remove from blacklist - * - * @example $sandbox->deblacklist_primitive('int'); - * - * @example $sandbox->deblacklist_primitive(array('int', 'float')); - * - * @param string|array $name String of primitive name or array of primitive names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_primitive($name){ - if(func_num_args() > 1){ - return $this->deblacklist_primitive(func_get_args()); - } - $name = $this->normalize_primitive($name); - return $this->deblacklist('primitives', $name); - } - /** Whitelist type - * - * You can pass a string of type name, or pass an array of the type names to whitelist - * - * @example $sandbox->whitelist_type('PHPSandbox'); - * - * @example $sandbox->whitelist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function whitelist_type($name){ - if(func_num_args() > 1){ - return $this->whitelist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->whitelist('types', $name); - } - /** Blacklist type - * - * You can pass a string of type name, or pass an array of the type names to blacklist - * - * @example $sandbox->blacklist_type('PHPSandbox'); - * - * @example $sandbox->blacklist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function blacklist_type($name){ - if(func_num_args() > 1){ - return $this->blacklist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->blacklist('types', $name); - } - /** Remove type from whitelist - * - * You can pass a string of type name, or pass an array of the type names to remove from whitelist - * - * @example $sandbox->dewhitelist_type('PHPSandbox'); - * - * @example $sandbox->dewhitelist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to remove from whitelist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function dewhitelist_type($name){ - if(func_num_args() > 1){ - return $this->dewhitelist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->dewhitelist('types', $name); - } - /** Remove type from blacklist - * - * You can pass a string of type name, or pass an array of the type names to remove from blacklist - * - * @example $sandbox->deblacklist_type('PHPSandbox'); - * - * @example $sandbox->deblacklist_type(array('PHPSandbox', 'PHPParser')); - * - * @param string|array $name String of type name or array of type names to remove from blacklist - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function deblacklist_type($name){ - if(func_num_args() > 1){ - return $this->deblacklist_type(func_get_args()); - } - $name = $this->normalize_type($name); - return $this->deblacklist('types', $name); - } - /** Check function name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the function name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if function is valid, this is also used for testing closures - */ - public function check_func($name){ - if(!$this->validate_functions){ - return true; - } - $original_name = $name; - if($name instanceof \Closure){ - if(!$this->allow_closures){ - $this->validation_error("Sandboxed code attempted to call closure!", Error::CLOSURE_ERROR); - } - return true; - } else if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name || !is_string($name)){ - $this->validation_error("Sandboxed code attempted to call unnamed function!", Error::VALID_FUNC_ERROR, null, ''); - } - $name = $this->normalize_func($name); - if(is_callable($this->validation['function'])){ - return call_user_func_array($this->validation['function'], array($name, $this)); - } - if(!isset($this->definitions['functions'][$name]) || !is_callable($this->definitions['functions'][$name]['function'])){ - if(count($this->whitelist['functions'])){ - if(!isset($this->whitelist['functions'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted function: $original_name", Error::WHITELIST_FUNC_ERROR, null, $original_name); - } - } else if(count($this->blacklist['functions'])){ - if(isset($this->blacklist['functions'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted function: $original_name", Error::BLACKLIST_FUNC_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid function: $original_name", Error::VALID_FUNC_ERROR, null, $original_name); - } - } - return true; - } - /** Check variable name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the variable name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if variable is valid - */ - public function check_var($name){ - if(!$this->validate_variables){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed variable!", Error::VALID_VAR_ERROR, null, ''); - } - if(is_callable($this->validation['variable'])){ - return call_user_func_array($this->validation['variable'], array($name, $this)); - } - if(!isset($this->definitions['variables'][$name])){ - if(count($this->whitelist['variables'])){ - if(!isset($this->whitelist['variables'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted variable: $original_name", Error::WHITELIST_VAR_ERROR, null, $original_name); - } - } else if(count($this->blacklist['variables'])){ - if(isset($this->blacklist['variables'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted variable: $original_name", Error::BLACKLIST_VAR_ERROR, null, $original_name); - } - } else if(!$this->allow_variables){ - $this->validation_error("Sandboxed code attempted to call invalid variable: $original_name", Error::VALID_VAR_ERROR, null, $original_name); - } - } - return true; - } - /** Check global name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the global name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if global is valid - */ - public function check_global($name){ - if(!$this->validate_globals){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed global!", Error::VALID_GLOBAL_ERROR, null, ''); - } - if(is_callable($this->validation['global'])){ - return call_user_func_array($this->validation['global'], array($name, $this)); - } - if(count($this->whitelist['globals'])){ - if(!isset($this->whitelist['globals'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted global: $original_name", Error::WHITELIST_GLOBAL_ERROR, null, $original_name); - } - } else if(count($this->blacklist['globals'])){ - if(isset($this->blacklist['globals'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted global: $original_name", Error::BLACKLIST_GLOBAL_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid global: $original_name", Error::VALID_GLOBAL_ERROR, null, $original_name); - } - return true; - } - /** Check superglobal name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the superglobal name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if superglobal is valid - */ - public function check_superglobal($name){ - if(!$this->validate_superglobals){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed superglobal!", Error::VALID_SUPERGLOBAL_ERROR, null, ''); - } - $name = $this->normalize_superglobal($name); - if(is_callable($this->validation['superglobal'])){ - return call_user_func_array($this->validation['superglobal'], array($name, $this)); - } - if(!isset($this->definitions['superglobals'][$name])){ - if(count($this->whitelist['superglobals'])){ - if(!isset($this->whitelist['superglobals'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted superglobal: $original_name", Error::WHITELIST_SUPERGLOBAL_ERROR, null, $original_name); - } - } else if(count($this->blacklist['superglobals'])){ - if(isset($this->blacklist['superglobals'][$name]) && !count($this->blacklist['superglobals'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted superglobal: $original_name", Error::BLACKLIST_SUPERGLOBAL_ERROR, null, $original_name); - } - } else if(!$this->overwrite_superglobals){ - $this->validation_error("Sandboxed code attempted to call invalid superglobal: $original_name", Error::VALID_SUPERGLOBAL_ERROR, null, $original_name); - } - } - return true; - } - /** Check constant name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the constant name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if constant is valid - */ - public function check_const($name){ - if(!$this->validate_constants){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed constant!", Error::VALID_CONST_ERROR, null, ''); - } - if(strtolower($name) == 'true' || strtolower($name) == 'false'){ - return $this->check_primitive('bool'); - } - if(strtolower($name) == 'null'){ - return $this->check_primitive('null'); - } - if(is_callable($this->validation['constant'])){ - return call_user_func_array($this->validation['constant'], array($name, $this)); - } - if(!isset($this->definitions['constants'][$name])){ - if(count($this->whitelist['constants'])){ - if(!isset($this->whitelist['constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted constant: $original_name", Error::WHITELIST_CONST_ERROR, null, $original_name); - } - } else if(count($this->blacklist['constants'])){ - if(isset($this->blacklist['constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted constant: $original_name", Error::BLACKLIST_CONST_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid constant: $original_name", Error::VALID_CONST_ERROR, null, $original_name); - } - } - return true; - } - /** Check magic constant name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the magic constant name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if magic constant is valid - */ - public function check_magic_const($name){ - if(!$this->validate_magic_constants){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed magic constant!", Error::VALID_MAGIC_CONST_ERROR, null, ''); - } - $name = $this->normalize_magic_const($name); - if(is_callable($this->validation['magic_constant'])){ - return call_user_func_array($this->validation['magic_constant'], array($name, $this)); - } - if(!isset($this->definitions['magic_constants'][$name])){ - if(count($this->whitelist['magic_constants'])){ - if(!isset($this->whitelist['magic_constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted magic constant: $original_name", Error::WHITELIST_MAGIC_CONST_ERROR, null, $original_name); - } - } else if(count($this->blacklist['magic_constants'])){ - if(isset($this->blacklist['magic_constants'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted magic constant: $original_name", Error::BLACKLIST_MAGIC_CONST_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid magic constant: $original_name", Error::VALID_MAGIC_CONST_ERROR, null, $original_name); - } - } - return true; - } - /** Check namespace name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the namespace name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if namespace is valid - */ - public function check_namespace($name){ - if(!$this->validate_namespaces){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed namespace!", Error::VALID_NAMESPACE_ERROR, null, ''); - } - $name = $this->normalize_namespace($name); - if(is_callable($this->validation['namespace'])){ - return call_user_func_array($this->validation['namespace'], array($name, $this)); - } - if(!isset($this->definitions['namespaces'][$name])){ - if(count($this->whitelist['namespaces'])){ - if(!isset($this->whitelist['namespaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted namespace: $original_name", Error::WHITELIST_NAMESPACE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['namespaces'])){ - if(isset($this->blacklist['namespaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted namespace: $original_name", Error::BLACKLIST_NAMESPACE_ERROR, null, $original_name); - } - } else if(!$this->allow_namespaces){ - $this->validation_error("Sandboxed code attempted to call invalid namespace: $original_name", Error::VALID_NAMESPACE_ERROR, null, $original_name); - } - } - return true; - } - /** Check alias name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the alias name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if alias is valid - */ - public function check_alias($name){ - if(!$this->validate_aliases){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed alias!", Error::VALID_ALIAS_ERROR, null, ''); - } - $name = $this->normalize_alias($name); - if(is_callable($this->validation['alias'])){ - return call_user_func_array($this->validation['alias'], array($name, $this)); - } - if(count($this->whitelist['aliases'])){ - if(!isset($this->whitelist['aliases'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted alias: $original_name", Error::WHITELIST_ALIAS_ERROR, null, $original_name); - } - } else if(count($this->blacklist['aliases'])){ - if(isset($this->blacklist['aliases'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted alias: $original_name", Error::BLACKLIST_ALIAS_ERROR, null, $original_name); - } - } else if(!$this->allow_aliases){ - $this->validation_error("Sandboxed code attempted to call invalid alias: $original_name", Error::VALID_ALIAS_ERROR, null, $original_name); - } - return true; - } - /** Check use (or alias) name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * - * @alias check_alias(); - * - * @param string $name String of the use (or alias) name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if use (or alias) is valid - */ - public function check_use($name){ - return $this->check_alias($name); - } - /** Check class name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the class name to check - * @param bool $extends Flag whether this is an extended class - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if class is valid - */ - public function check_class($name, $extends = false){ - if(!$this->validate_classes){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - $action = $extends ? 'extend' : 'call'; - if(!$name){ - $this->validation_error("Sandboxed code attempted to $action unnamed class!", Error::VALID_CLASS_ERROR, null, ''); - } - $name = $this->normalize_class($name); - if($name == 'self' || $name == 'static' || $name == 'parent'){ - return true; - } - if(is_callable($this->validation['class'])){ - return call_user_func_array($this->validation['class'], array($name, $this)); - } - if(!isset($this->definitions['classes'][$name])){ - if(count($this->whitelist['classes'])){ - if(!isset($this->whitelist['classes'][$name])){ - $this->validation_error("Sandboxed code attempted to $action non-whitelisted class: $original_name", Error::WHITELIST_CLASS_ERROR, null, $original_name); - } - } else if(count($this->blacklist['classes'])){ - if(isset($this->blacklist['classes'][$name])){ - $this->validation_error("Sandboxed code attempted to $action blacklisted class: $original_name", Error::BLACKLIST_CLASS_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to $action invalid class: $original_name", Error::VALID_CLASS_ERROR, null, $original_name); - } - } - return true; - } - /** Check interface name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the interface name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if interface is valid - */ - public function check_interface($name){ - if(!$this->validate_interfaces){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed interface!", Error::VALID_INTERFACE_ERROR, null, ''); - } - $name = $this->normalize_interface($name); - if(is_callable($this->validation['interface'])){ - return call_user_func_array($this->validation['interface'], array($name, $this)); - } - if(!isset($this->definitions['interfaces'][$name])){ - if(count($this->whitelist['interfaces'])){ - if(!isset($this->whitelist['interfaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted interface: $original_name", Error::WHITELIST_INTERFACE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['interfaces'])){ - if(isset($this->blacklist['interfaces'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted interface: $original_name", Error::BLACKLIST_INTERFACE_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalidnterface: $original_name", Error::VALID_INTERFACE_ERROR, null, $original_name); - } - } - return true; - } - /** Check trait name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the trait name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if trait is valid - */ - public function check_trait($name){ - if(!$this->validate_traits){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed trait!", Error::VALID_TRAIT_ERROR, null, ''); - } - $name = $this->normalize_trait($name); - if(is_callable($this->validation['trait'])){ - return call_user_func_array($this->validation['trait'], array($name, $this)); - } - if(!isset($this->definitions['traits'][$name])){ - if(count($this->whitelist['traits'])){ - if(!isset($this->whitelist['traits'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted trait: $original_name", Error::WHITELIST_TRAIT_ERROR, null, $original_name); - } - } else if(count($this->blacklist['traits'])){ - if(isset($this->blacklist['traits'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted trait: $original_name", Error::BLACKLIST_TRAIT_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid trait: $original_name", Error::VALID_TRAIT_ERROR, null, $original_name); - } - } - return true; - } - /** Check keyword name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the keyword name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if keyword is valid - */ - public function check_keyword($name){ - if(!$this->validate_keywords){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed keyword!", Error::VALID_KEYWORD_ERROR, null, ''); - } - $name = $this->normalize_keyword($name); - if(is_callable($this->validation['keyword'])){ - return call_user_func_array($this->validation['keyword'], array($name, $this)); - } - if(count($this->whitelist['keywords'])){ - if(!isset($this->whitelist['keywords'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted keyword: $original_name", Error::WHITELIST_KEYWORD_ERROR, null, $original_name); - } - } else if(count($this->blacklist['keywords'])){ - if(isset($this->blacklist['keywords'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted keyword: $original_name", Error::BLACKLIST_KEYWORD_ERROR, null, $original_name); - } - } - return true; - } - /** Check operator name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the type operator to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if operator is valid - */ - public function check_operator($name){ - if(!$this->validate_operators){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed operator!", Error::VALID_OPERATOR_ERROR, null, ''); - } - $name = $this->normalize_operator($name); - if(is_callable($this->validation['operator'])){ - return call_user_func_array($this->validation['operator'], array($name, $this)); - } - if(count($this->whitelist['operators'])){ - if(!isset($this->whitelist['operators'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted operator: $original_name", Error::WHITELIST_OPERATOR_ERROR, null, $original_name); - } - } else if(count($this->blacklist['operators'])){ - if(isset($this->blacklist['operators'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted operator: $original_name", Error::BLACKLIST_OPERATOR_ERROR, null, $original_name); - } - } - return true; - } - /** Check primitive name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the primitive name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if primitive is valid - */ - public function check_primitive($name){ - if(!$this->validate_primitives){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed primitive!", Error::VALID_PRIMITIVE_ERROR, null, ''); - } - $name = $this->normalize_primitive($name); - if(is_callable($this->validation['primitive'])){ - return call_user_func_array($this->validation['primitive'], array($name, $this)); - } - if(count($this->whitelist['primitives'])){ - if(!isset($this->whitelist['primitives'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted primitive: $original_name", Error::WHITELIST_PRIMITIVE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['primitives'])){ - if(isset($this->blacklist['primitives'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted primitive: $original_name", Error::BLACKLIST_PRIMITIVE_ERROR, null, $original_name); - } - } - return true; - } - /** Check type name against PHPSandbox validation rules. This is an internal PHPSandbox function but requires public access to work. - * @param string $name String of the type name to check - * @throws Error Throws exception if validation error occurs - * - * @return bool Returns true if type is valid - */ - public function check_type($name){ - if(!$this->validate_types){ - return true; - } - $original_name = $name; - if($name instanceof SandboxedString){ - $name = strval($name); - } - if(!$name){ - $this->validation_error("Sandboxed code attempted to call unnamed type!", Error::VALID_TYPE_ERROR, null, ''); - } - $name = $this->normalize_type($name); - if(is_callable($this->validation['type'])){ - return call_user_func_array($this->validation['type'], array($name, $this)); - } - if(!isset($this->definitions['classes'][$name])){ - if(count($this->whitelist['types'])){ - if(!isset($this->whitelist['types'][$name])){ - $this->validation_error("Sandboxed code attempted to call non-whitelisted type: $original_name", Error::WHITELIST_TYPE_ERROR, null, $original_name); - } - } else if(count($this->blacklist['types'])){ - if(isset($this->blacklist['types'][$name])){ - $this->validation_error("Sandboxed code attempted to call blacklisted type: $original_name", Error::BLACKLIST_TYPE_ERROR, null, $original_name); - } - } else { - $this->validation_error("Sandboxed code attempted to call invalid type: $original_name", Error::VALID_TYPE_ERROR, null, $original_name); - } - } - return true; - } - /** Prepare defined variables for execution - * - * @throws Error Throws exception if variable preparation error occurs - * @return string Prepared string of variable output - */ - protected function prepare_vars(){ - $output = array(); - foreach($this->definitions['variables'] as $name => $value){ - if(is_int($name)){ //can't define numeric variable names - $this->validation_error("Cannot define variable name that begins with an integer!", Error::DEFINE_VAR_ERROR, null, $name); - } - if(is_scalar($value) || is_null($value)){ - if(is_bool($value)){ - $output[] = '$' . $name . ' = ' . ($value ? 'true' : 'false'); - } else if(is_int($value)){ - $output[] = '$' . $name . ' = ' . ($value ? $value : '0'); - } else if(is_float($value)){ - $output[] = '$' . $name . ' = ' . ($value ? $value : '0.0'); - } else if(is_string($value)){ - $output[] = '$' . $name . " = '" . addcslashes($value, "'") . "'"; - } else { - $output[] = '$' . $name . " = null"; - } - } else { - $output[] = '$' . $name . " = unserialize('" . addcslashes(serialize($value), "'\\") . "')"; - } - } - return count($output) ? "\r\n" . implode(";\r\n", $output) . ";\r\n" : ''; - } - /** Prepare defined constants for execution - */ - protected function prepare_consts(){ - $output = array(); - foreach($this->definitions['constants'] as $name => $value){ - if(is_scalar($value) || is_null($value)){ - if(is_bool($value)){ - $output[] = '\define(' . "'" . $name . "', " . ($value ? 'true' : 'false') . ');'; - } else if(is_int($value)){ - $output[] = '\define(' . "'" . $name . "', " . ($value ? $value : '0') . ');'; - } else if(is_float($value)){ - $output[] = '\define(' . "'" . $name . "', " . ($value ? $value : '0.0') . ');'; - } else if(is_string($value)){ - $output[] = '\define(' . "'" . $name . "', '" . addcslashes($value, "'") . "');"; - } else { - $output[] = '\define(' . "'" . $name . "', null);"; - } - } else { - $this->validation_error("Sandboxed code attempted to define non-scalar constant value: $name", Error::DEFINE_CONST_ERROR, null, $name); - } - } - return count($output) ? implode("\r\n", $output) ."\r\n" : ''; - } - /** Prepare defined namespaces for execution - */ - protected function prepare_namespaces(){ - $output = array(); - foreach($this->definitions['namespaces'] as $name){ - if(is_string($name) && $name){ - $output[] = 'namespace ' . $name . ';'; - } else { - $this->validation_error("Sandboxed code attempted to create invalid namespace: $name", Error::DEFINE_NAMESPACE_ERROR, null, $name); - } - } - return count($output) ? implode("\r\n", $output) ."\r\n" : ''; - } - /** Prepare defined aliases for execution - */ - protected function prepare_aliases(){ - $output = array(); - foreach($this->definitions['aliases'] as $alias){ - if(is_array($alias) && isset($alias['original']) && is_string($alias['original']) && $alias['original']){ - $output[] = 'use ' . $alias['original'] . ((isset($alias['alias']) && is_string($alias['alias']) && $alias['alias']) ? ' as ' . $alias['alias'] : '') . ';'; - } else { - $this->validation_error("Sandboxed code attempted to use invalid namespace alias: " . $alias['original'], Error::DEFINE_ALIAS_ERROR, null, $alias['original']); - } - } - return count($output) ? implode("\r\n", $output) ."\r\n" : ''; - } - /** Prepare defined uses (or aliases) for execution - * @alias prepare_aliases(); - */ - protected function prepare_uses(){ - return $this->prepare_aliases(); - } - /** Disassemble callable to string - * - * @param callable $closure The callable to disassemble - * - * @throws Error Throw exception if callable is passed and FunctionParser library is missing - * - * @return string Return the disassembled code string - */ - protected function disassemble($closure){ - if(is_string($closure) && !is_callable($closure)){ - return substr($closure, 0, 2) == 'auto_define_vars){ - $this->auto_define($disassembled_closure); - } - return 'getBody(); - } - /** Automatically whitelisted trusted code - * - * @param string $code String of trusted $code to automatically whitelist - * @param bool $appended Flag if this code ir prended or appended (true = appended) - * - * @return mixed Return result of error handler if $code could not be parsed - * - * @throws Error Throw exception if code cannot be parsed for whitelisting - */ - protected function auto_whitelist($code, $appended = false){ - $parser = new \PHPParser_Parser(new \PHPParser_Lexer); - try { - $statements = $parser->parse($code); - } catch (\PHPParser_Error $error) { - return $this->validation_error('Error parsing ' . ($appended ? 'appended' : 'prepended') . ' sandboxed code for auto-whitelisting!', Error::PARSER_ERROR, null, $code, $error); - } - $traverser = new \PHPParser_NodeTraverser; - $whitelister = new WhitelistVisitor($this); - $traverser->addVisitor($whitelister); - $traverser->traverse($statements); - return true; - } - /** Automatically define variables passed to disassembled closure - * @param FunctionParser $disassembled_closure - */ - protected function auto_define(FunctionParser $disassembled_closure){ - $parameters = $disassembled_closure->getReflection()->getParameters(); - foreach($parameters as $param){ - /** - * @var \ReflectionParameter $param - */ - $this->define_var($param->getName(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null); - } - } - /** Prepend trusted code - * @param string|callable $code String or callable of trusted $code to prepend to generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function prepend($code){ - if(!$code){ - return $this; - } - $code = $this->disassemble($code); - if($this->auto_whitelist_trusted_code){ - $this->auto_whitelist($code); - } - $this->prepended_code .= substr($code, 6) . "\r\n"; //remove opening php tag - return $this; - } - /** Append trusted code - * @param string|callable $code String or callable of trusted $code to append to generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function append($code){ - if(!$code){ - return $this; - } - $code = $this->disassemble($code); - if($this->auto_whitelist_trusted_code){ - $this->auto_whitelist($code, true); - } - $this->appended_code .= "\r\n" . substr($code, 6) . "\r\n"; //remove opening php tag - return $this; - } - /** Clear all trusted and sandboxed code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear(){ - $this->prepended_code = ''; - $this->generated_code = null; - $this->appended_code = ''; - return $this; - } - /** Clear all trusted code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_trusted_code(){ - $this->prepended_code = ''; - $this->appended_code = ''; - return $this; - } - /** Clear all prepended trusted code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_prepend(){ - $this->prepended_code = ''; - return $this; - } - /** Clear all appended trusted code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_append(){ - $this->appended_code = ''; - return $this; - } - /** Clear generated code - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function clear_code(){ - $this->generated_code = null; - return $this; - } - /** Return the amount of time the sandbox spent preparing the sandboxed code - * - * You can pass the number of digits you wish to round the return value - * - * @example $sandbox->get_prepared_time(); - * - * @example $sandbox->get_prepared_time(3); - * - * @param int|null $round The number of digits to round the return value - * - * @return float The amount of time in microseconds it took to prepare the sandboxed code - */ - public function get_prepared_time($round = null){ - return $round ? round($this->prepare_time, $round) : $this->prepare_time; - } - /** Return the amount of time the sandbox spent executing the sandboxed code - * - * You can pass the number of digits you wish to round the return value - * - * @example $sandbox->get_execution_time(); - * - * @example $sandbox->get_execution_time(3); - * - * @param int|null $round The number of digits to round the return value - * - * @return float The amount of time in microseconds it took to execute the sandboxed code - */ - public function get_execution_time($round = null){ - return $round ? round($this->execution_time, $round) : $this->execution_time; - } - /** Return the amount of time the sandbox spent preparing and executing the sandboxed code - * - * You can pass the number of digits you wish to round the return value - * - * @example $sandbox->get_time(); - * - * @example $sandbox->get_time(3); - * - * @param int|null $round The number of digits to round the return value - * - * @return float The amount of time in microseconds it took to prepare and execute the sandboxed code - */ - public function get_time($round = null){ - return $round ? round($this->prepare_time + $this->execution_time, $round) : ($this->prepare_time + $this->execution_time); - } - /** - * Validates passed callable for execution - */ - public function validate($code){ - $this->preparsed_code = $this->disassemble($code); - $parser = new \PHPParser_Parser(new \PHPParser_Lexer_Emulative); - - try { - $this->parsed_ast = $parser->parse($this->preparsed_code); - } catch (\PHPParser_Error $error) { - $this->validation_error("Could not parse sandboxed code!", Error::PARSER_ERROR, null, $this->preparsed_code, $error); - } - - $prettyPrinter = new \PHPParser_PrettyPrinter_Default; - - if(($this->allow_functions && $this->auto_whitelist_functions) || - ($this->allow_constants && $this->auto_whitelist_constants) || - ($this->allow_classes && $this->auto_whitelist_classes) || - ($this->allow_interfaces && $this->auto_whitelist_interfaces) || - ($this->allow_traits && $this->auto_whitelist_traits) || - ($this->allow_globals && $this->auto_whitelist_globals)){ - - $traverser = new \PHPParser_NodeTraverser; - $whitelister = new SandboxWhitelistVisitor($this); - $traverser->addVisitor($whitelister); - $traverser->traverse($this->parsed_ast); - } - - $traverser = new \PHPParser_NodeTraverser; - - $validator = new ValidatorVisitor($this); - - $traverser->addVisitor($validator); - - $this->prepared_ast = $traverser->traverse($this->parsed_ast); - - $this->prepared_code = $prettyPrinter->prettyPrint($this->prepared_ast); - } - /** Prepare passed callable for execution - * - * This function validates your code and automatically whitelists it according to your specified configuration - * - * @example $sandbox->prepare(function(){ var_dump('Hello world!'); }); - * - * @param callable $code The callable to prepare for execution - * @param boolean $skip_validation Boolean flag to indicate whether the sandbox should skip validation. Default is false. - * - * @throws Error Throws exception if error occurs in parsing, validation or whitelisting - * - * @return string The generated code (this can also be accessed via $sandbox->generated_code) - */ - public function prepare($code, $skip_validation = false){ - $this->prepare_time = microtime(true); - - if($this->allow_constants && !$this->is_defined_func('define') && ($this->has_whitelist_funcs() || !$this->has_blacklist_funcs())){ - $this->whitelist_func('define'); //makes no sense to allow constants if you can't define them! - } - - if(!$skip_validation){ - $this->validate($code); - } - - static::$sandboxes[$this->name] = $this; - - $this->generated_code = $this->prepare_namespaces() . - $this->prepare_aliases() . - $this->prepare_consts() . - "\r\n" . '$closure = function(){' . "\r\n" . - $this->prepare_vars() . - $this->prepended_code . - ($skip_validation ? $code : $this->prepared_code) . - $this->appended_code . - "\r\n" . '};' . - "\r\n" . 'if(method_exists($closure, "bindTo")){ $closure = $closure->bindTo(null); }' . - "\r\n" . 'return $closure();'; - - usleep(1); //guarantee at least some time passes - $this->prepare_time = (microtime(true) - $this->prepare_time); - return $this->generated_code; - } - /** Prepare and execute callable and return output - * - * This function validates your code and automatically whitelists it according to your specified configuration, then executes it. - * - * @example $sandbox->execute(function(){ var_dump('Hello world!'); }); - * - * @param callable|string $callable Callable or string of PHP code to prepare and execute within the sandbox - * @param boolean $skip_validation Boolean flag to indicate whether the sandbox should skip validation of the pass callable. Default is false. - * - * @throws Error Throws exception if error occurs in parsing, validation or whitelisting or if generated closure is invalid - * - * @return mixed The output from the executed sandboxed code - */ - public function execute($callable = null, $skip_validation = false){ - if($callable !== null){ - $this->prepare($callable, $skip_validation); - } - $saved_error_level = null; - if($this->error_level !== null){ - $saved_error_level = error_reporting(); - error_reporting(intval($this->error_level)); - } - if(is_callable($this->error_handler) || $this->convert_errors){ - set_error_handler(array($this, 'error'), $this->error_handler_types); - } - $this->execution_time = microtime(true); - $exception = null; - $result = null; - try { - if($this->capture_output){ - ob_start(); - eval($this->generated_code); - $result = ob_get_clean(); - } else { - $result = eval($this->generated_code); - } - } catch(\Exception $exception){ - //swallow any exceptions - } - if(is_callable($this->error_handler) || $this->convert_errors){ - restore_error_handler(); - } - usleep(1); //guarantee at least some time passes - $this->execution_time = (microtime(true) - $this->execution_time); - if($this->error_level !== null && $this->restore_error_level){ - error_reporting($saved_error_level); - } - return $exception instanceof \Exception ? $this->exception($exception) : $result; - } - /** Set callable to handle errors - * - * This function sets the sandbox error handler and the handled error types. The handler accepts the error number, - * the error message, the error file, the error line, the error context and the sandbox instance as arguments. - * If the error handler does not handle errors correctly then the sandbox's security may become compromised! - * - * @example $sandbox->set_error_handler(function($errno, $errstr, $errfile, $errline, $errcontext, PHPSandbox $s){ - * return false; - * }, E_ALL); //ignore all errors, INSECURE - * - * @param callable $handler Callable to handle thrown Errors - * @param int $error_types Integer flag of the error types to handle (default is E_ALL) - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_error_handler($handler, $error_types = E_ALL){ - $this->error_handler = $handler; - $this->error_handler_types = $error_types; - return $this; - } - /** Get error handler - * - * This function returns the sandbox error handler. - * - * @example $sandbox->get_error_handler(); //callable - * - * @return null|callable - */ - public function get_error_handler(){ - return $this->error_handler; - } - /** Unset error handler - * - * This function unsets the sandbox error handler. - * - * @example $sandbox->unset_error_handler(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_error_handler(){ - $this->error_handler = null; - return $this; - } - /** Gets the last sandbox error - * @return array - */ - public function get_last_error(){ - return $this->last_error; - } - /** Invoke sandbox error handler - * - * @example $sandbox->error(0, "Unknown error"); - * - * @param int $errno Error number - * @param string $errstr Error message - * @param string $errfile Error file - * @param int $errline Error line number - * @param array $errcontext Error context array - * @return mixed - */ - public function error($errno, $errstr, $errfile, $errline, $errcontext){ - $this->last_error = error_get_last(); - if($this->convert_errors){ - return $this->exception(new \ErrorException($errstr, 0, $errno, $errfile, $errline)); - } - return is_callable($this->error_handler) ? call_user_func_array($this->error_handler, array($errno, $errstr, $errfile, $errline, $errcontext, $this)) : null; - } - /** Set callable to handle thrown exceptions - * - * This function sets the sandbox exception handler. The handler accepts the thrown exception and the sandbox instance - * as arguments. If the exception handler does not handle exceptions correctly then the sandbox's security may - * become compromised! - * - * @example $sandbox->set_exception_handler(function(Exception $e, PHPSandbox $s){}); //ignore all thrown exceptions, INSECURE - * - * @param callable $handler Callable to handle thrown exceptions - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_exception_handler($handler){ - $this->exception_handler = $handler; - return $this; - } - /** Get exception handler - * - * This function returns the sandbox exception handler. - * - * @example $sandbox->get_exception_handler(); //callable - * - * @return null|callable - */ - public function get_exception_handler(){ - return $this->exception_handler; - } - /** Unset exception handler - * - * This function unsets the sandbox exception handler. - * - * @example $sandbox->unset_exception_handler(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_exception_handler(){ - $this->exception_handler = null; - return $this; - } - /** Gets the last exception thrown by the sandbox - * @return \Exception|Error - */ - public function get_last_exception(){ - return $this->last_exception; - } - /** Invoke sandbox exception handler - * - * @example $sandbox->exception(new Exception("Unknown error!", 0)); - * - * @param \Exception $exception Error number - * @throws \Exception - * - * @return mixed - */ - public function exception(\Exception $exception){ - $this->last_exception = $exception; - if(is_callable($this->exception_handler)){ - return call_user_func_array($this->exception_handler, array($exception, $this)); - } - throw $exception; - } - /** Set callable to handle thrown validation Errors - * - * This function sets the sandbox validation Error handler. The handler accepts the thrown Error and the sandbox - * instance as arguments. If the error handler does not handle validation errors correctly then the sandbox's - * security may become compromised! - * - * @example $sandbox->set_validation_error_handler(function(Error $e, PHPSandbox $s){}); //ignore all thrown Errors, INSECURE - * - * @param callable $handler Callable to handle thrown validation Errors - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function set_validation_error_handler($handler){ - $this->validation_error_handler = $handler; - return $this; - } - /** Get validation error handler - * - * This function returns the sandbox validation error handler. - * - * @example $sandbox->get_validation_error_handler(); //callable - * - * @return null|callable - */ - public function get_validation_error_handler(){ - return $this->validation_error_handler; - } - /** Unset validation error handler - * - * This function unsets the sandbox validation error handler. - * - * @example $sandbox->unset_validation_error_handler(); - * - * @return PHPSandbox Returns the PHPSandbox instance for chainability - */ - public function unset_validation_error_handler(){ - $this->validation_error_handler = null; - return $this; - } - - /** Gets the last validation error thrown by the sandbox - * @return \Exception|Error - */ - public function get_last_validation_error(){ - return $this->last_validation_error; - } - /** Invoke sandbox error validation handler if it exists, throw Error otherwise - * - * @example $sandbox->validation_error("Error!", 10000); - * - * @param \Exception|Error|string $error Error to throw if Error is not handled, or error message string - * @param int $code The error code - * @param \PHPParser_Node|null $node The error parser node - * @param mixed $data The error data - * @param \Exception|Error|null $previous The previous Error thrown - * - * @throws \Exception|Error - * @return mixed - */ - public function validation_error($error, $code = 0, \PHPParser_Node $node = null, $data = null, \Exception $previous = null){ - $error = ($error instanceof \Exception) - ? (($error instanceof Error) - ? new Error($error->getMessage(), $error->getCode(), $error->getNode(), $error->getData(), $error->getPrevious() ?: $this->last_validation_error) - : new Error($error->getMessage(), $error->getCode(), null, null, $error->getPrevious() ?: $this->last_validation_error)) - : new Error($error, $code, $node, $data, $previous ?: $this->last_validation_error); - $this->last_validation_error = $error; - if($this->validation_error_handler && is_callable($this->validation_error_handler)){ - $result = call_user_func_array($this->validation_error_handler, array($error, $this)); - if($result instanceof \Exception){ - throw $result; - } - return $result; - } else { - throw $error; - } - } - /** Get a named PHPSandbox instance (used to retrieve the sandbox instance from within sandboxed code) - * @param $name - * @return null|PHPSandbox - */ - public static function getSandbox($name){ - return isset(static::$sandboxes[$name]) ? static::$sandboxes[$name] : null; - } - /** Get an iterator of all the public PHPSandbox properties - * @return array - */ - public function getIterator(){ - return new \ArrayIterator(get_object_vars($this)); - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/SandboxWhitelistVisitor.php b/vendor/fieryprophet/php-sandbox/src/SandboxWhitelistVisitor.php deleted file mode 100644 index cb952a1..0000000 --- a/vendor/fieryprophet/php-sandbox/src/SandboxWhitelistVisitor.php +++ /dev/null @@ -1,62 +0,0 @@ - - * @version 1.3.10 - */ - class SandboxWhitelistVisitor extends \PHPParser_NodeVisitorAbstract { - /** The PHPSandbox instance to check against - * @var PHPSandbox - */ - protected $sandbox; - /** SandboxWhitelistVisitor class constructor - * - * This constructor takes a passed PHPSandbox instance to check against for whitelisting sandboxed code. - * - * @param PHPSandbox $sandbox The PHPSandbox instance to check against - */ - public function __construct(PHPSandbox $sandbox){ - $this->sandbox = $sandbox; - } - /** Examine the current PHPParser_Node node against the PHPSandbox configuration for whitelisting sandboxed code - * - * @param \PHPParser_Node $node The sandboxed $node to examine - */ - public function leaveNode(\PHPParser_Node $node){ - if($node instanceof \PHPParser_Node_Stmt_Class && is_string($node->name) && $this->sandbox->allow_classes && $this->sandbox->auto_whitelist_classes && !$this->sandbox->has_blacklist_classes()){ - $this->sandbox->whitelist_class($node->name); - $this->sandbox->whitelist_type($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Interface && is_string($node->name) && $this->sandbox->allow_interfaces && $this->sandbox->auto_whitelist_interfaces && !$this->sandbox->has_blacklist_interfaces()){ - $this->sandbox->whitelist_interface($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Trait && is_string($node->name) && $this->sandbox->allow_traits && $this->sandbox->auto_whitelist_traits && !$this->sandbox->has_blacklist_traits()){ - $this->sandbox->whitelist_trait($node->name); - } else if($node instanceof \PHPParser_Node_Expr_FuncCall && $node->name instanceof \PHPParser_Node_Name && $node->name->toString() == 'define' && $this->sandbox->allow_constants && $this->sandbox->auto_whitelist_constants && !$this->sandbox->is_defined_func('define') && !$this->sandbox->has_blacklist_consts()){ - $name = isset($node->args[0]) ? $node->args[0] : null; - if($name && $name instanceof \PHPParser_Node_Arg && $name->value instanceof \PHPParser_Node_Scalar_String && is_string($name->value->value) && $name->value->value){ - $this->sandbox->whitelist_const($name->value->value); - } - } else if($node instanceof \PHPParser_Node_Stmt_Global && $this->sandbox->allow_globals && $this->sandbox->auto_whitelist_globals && $this->sandbox->has_whitelist_vars()){ - foreach($node->vars as $var){ - /** - * @var \PHPParser_Node_Expr_Variable $var - */ - if($var instanceof \PHPParser_Node_Expr_Variable){ - $this->sandbox->whitelist_var($var->name); - } - } - } else if($node instanceof \PHPParser_Node_Stmt_Function && is_string($node->name) && $node->name && $this->sandbox->allow_functions && $this->sandbox->auto_whitelist_functions && !$this->sandbox->has_blacklist_funcs()){ - $this->sandbox->whitelist_func($node->name); - } - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/SandboxedString.php b/vendor/fieryprophet/php-sandbox/src/SandboxedString.php deleted file mode 100644 index 56c80b1..0000000 --- a/vendor/fieryprophet/php-sandbox/src/SandboxedString.php +++ /dev/null @@ -1,93 +0,0 @@ - - * @version 1.3.10 - */ - class SandboxedString implements \ArrayAccess, \IteratorAggregate { - /** - * @var string - */ - private $value; - /** - * @var PHPSandbox - */ - private $sandbox; - /** Constructs the SandboxedString - * @param string $value Original string value - * @param PHPSandbox $sandbox The current sandbox instance to test against - */ - public function __construct($value, PHPSandbox $sandbox){ - $this->value = $value; - $this->sandbox = $sandbox; - } - /** Returns the original string value - * @return string - */ - public function __toString(){ - return strval($this->value); - } - /** Checks the string value against the sandbox function whitelists and blacklists for callback violations - * @return mixed|null - */ - public function __invoke(){ - if($this->sandbox->check_func($this->value)){ - $name = strtolower($this->value); - if((in_array($name, PHPSandbox::$defined_funcs) && $this->sandbox->overwrite_defined_funcs) - || (in_array($name, PHPSandbox::$sandboxed_string_funcs) && $this->sandbox->overwrite_sandboxed_string_funcs) - || (in_array($name, PHPSandbox::$arg_funcs) && $this->sandbox->overwrite_func_get_args)){ - return call_user_func_array(array($this->sandbox, '_' . $this->value), func_get_args()); - } - return call_user_func_array($name, func_get_args()); - } - return ''; - } - /** Set string value at specified offset - * @param mixed $offset Offset to set value - * @param mixed $value Value to set - */ - public function offsetSet($offset, $value){ - if($offset === null){ - $this->value .= $value; - } else { - $this->value[$offset] = $value; - } - } - /** Get string value at specified offset - * @param mixed $offset Offset to get value - * - * @return string Value to return - */ - public function offsetGet($offset){ - return $this->value[$offset]; - } - /** Check if specified offset exists in string value - * @param mixed $offset Offset to check - * - * @return bool Return true if offset exists, false otherwise - */ - public function offsetExists($offset){ - return isset($this->value[$offset]); - } - /** Unset string value at specified offset - * @param mixed $offset Offset to unset - */ - public function offsetUnset($offset){ - unset($this->value[$offset]); - } - /** Return iterator for string value - * @return \ArrayIterator Array iterator to return - */ - public function getIterator(){ - return new \ArrayIterator(str_split(strval($this->value))); - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/ValidatorVisitor.php b/vendor/fieryprophet/php-sandbox/src/ValidatorVisitor.php deleted file mode 100644 index 77dcdb8..0000000 --- a/vendor/fieryprophet/php-sandbox/src/ValidatorVisitor.php +++ /dev/null @@ -1,623 +0,0 @@ - - * @version 1.3.10 - */ - class ValidatorVisitor extends \PHPParser_NodeVisitorAbstract { - /** The PHPSandbox instance to check against - * @var PHPSandbox - */ - protected $sandbox; - /** ValidatorVisitor class constructor - * - * This constructor takes a passed PHPSandbox instance to check against for validating sandboxed code. - * - * @param PHPSandbox $sandbox The PHPSandbox instance to check against - */ - public function __construct(PHPSandbox $sandbox){ - $this->sandbox = $sandbox; - } - /** Examine the current PHPParser_Node node against the PHPSandbox configuration for validating sandboxed code - * - * @param \PHPParser_Node $node The sandboxed $node to validate - * - * @throws Error Throws an exception if validation fails - * - * @return \PHPParser_Node|bool|null Return rewritten node, false if node must be removed, or null if no changes to the node are made - */ - public function leaveNode(\PHPParser_Node $node){ - if($node instanceof \PHPParser_Node_Arg){ - return new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name_FullyQualified(($node->value instanceof \PHPParser_Node_Expr_Variable) ? 'PHPSandbox\\wrapByRef' : 'PHPSandbox\\wrap'), array($node, new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name)))), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Stmt_InlineHTML){ - if(!$this->sandbox->allow_escaping){ - $this->sandbox->validation_error("Sandboxed code attempted to escape to HTML!", Error::ESCAPE_ERROR, $node); - } - }else if($node instanceof \PHPParser_Node_Expr_Cast){ - if(!$this->sandbox->allow_casting){ - $this->sandbox->validation_error("Sandboxed code attempted to cast!", Error::CAST_ERROR, $node); - } - if($node instanceof \PHPParser_Node_Expr_Cast_Int){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_intval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Double){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_floatval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Bool){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_boolval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Array){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_arrayval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } else if($node instanceof \PHPParser_Node_Expr_Cast_Object){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_objectval', array(new \PHPParser_Node_Arg($node->expr)), $node->getAttributes()); - } - } else if($node instanceof \PHPParser_Node_Expr_FuncCall){ - if($node->name instanceof \PHPParser_Node_Name){ - $name = strtolower($node->name->toString()); - if(!$this->sandbox->check_func($name)){ - $this->sandbox->validation_error("Function failed custom validation!", Error::VALID_FUNC_ERROR, $node); - } - if($this->sandbox->is_defined_func($name)){ - $args = $node->args; - array_unshift($args, new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String($name))); - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), 'call_func', $args, $node->getAttributes()); - } - if($this->sandbox->overwrite_defined_funcs && in_array($name, PHPSandbox::$defined_funcs)){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, array(new \PHPParser_Node_Arg(new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name(array($name))))), $node->getAttributes()); - } - if($this->sandbox->overwrite_sandboxed_string_funcs && in_array($name, PHPSandbox::$sandboxed_string_funcs)){ - $args = $node->args; - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, $args, $node->getAttributes()); - } - if($this->sandbox->overwrite_func_get_args && in_array($name, PHPSandbox::$arg_funcs)){ - if($name == 'func_get_arg'){ - $index = new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_LNumber(0)); - if(isset($node->args[0]) && $node->args[0] instanceof \PHPParser_Node_Arg){ - $index = $node->args[0]; - } - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, array(new \PHPParser_Node_Arg(new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name(array('func_get_args')))), $index), $node->getAttributes()); - } - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_' . $name, array(new \PHPParser_Node_Arg(new \PHPParser_Node_Expr_FuncCall(new \PHPParser_Node_Name(array('func_get_args'))))), $node->getAttributes()); - } - } else { - return new \PHPParser_Node_Expr_Ternary( - new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), 'check_func', array(new \PHPParser_Node_Arg($node->name)), $node->getAttributes()), - $node, - new \PHPParser_Node_Expr_ConstFetch(new \PHPParser_Node_Name('null')) - ); - } - } else if($node instanceof \PHPParser_Node_Stmt_Function){ - if(!$this->sandbox->allow_functions){ - $this->sandbox->validation_error("Sandboxed code attempted to define function!", Error::DEFINE_FUNC_ERROR, $node); - } - if(!$this->sandbox->check_keyword('function')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'function'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed function!", Error::DEFINE_FUNC_ERROR, $node, ''); - } - if($this->sandbox->is_defined_func($node->name)){ - $this->sandbox->validation_error("Sandboxed code attempted to redefine function!", Error::DEFINE_FUNC_ERROR, $node, $node->name); - } - if($node->byRef && !$this->sandbox->allow_references){ - $this->sandbox->validation_error("Sandboxed code attempted to define function return by reference!", Error::BYREF_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Expr_Closure){ - if(!$this->sandbox->allow_closures){ - $this->sandbox->validation_error("Sandboxed code attempted to create a closure!", Error::CLOSURE_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Stmt_Class){ - if(!$this->sandbox->allow_classes){ - $this->sandbox->validation_error("Sandboxed code attempted to define class!", Error::DEFINE_CLASS_ERROR, $node); - } - if(!$this->sandbox->check_keyword('class')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'class'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed class!", Error::DEFINE_CLASS_ERROR, $node, ''); - } - if(!$this->sandbox->check_class($node->name)){ - $this->sandbox->validation_error("Class failed custom validation!", Error::VALID_CLASS_ERROR, $node, $node->name); - } - if($node->extends instanceof \PHPParser_Node_Name){ - if(!$this->sandbox->check_keyword('extends')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'extends'); - } - if(!$node->extends->toString()){ - $this->sandbox->validation_error("Sandboxed code attempted to extend unnamed class!", Error::DEFINE_CLASS_ERROR, $node, ''); - } - if(!$this->sandbox->check_class($node->extends->toString(), true)){ - $this->sandbox->validation_error("Class extension failed custom validation!", Error::VALID_CLASS_ERROR, $node, $node->extends->toString()); - } - } - if(is_array($node->implements)){ - if(!$this->sandbox->check_keyword('implements')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'implements'); - } - foreach($node->implements as $implement){ - /** - * @var \PHPParser_Node_Name $implement - */ - if(!$implement->toString()){ - $this->sandbox->validation_error("Sandboxed code attempted to implement unnamed interface!", Error::DEFINE_INTERFACE_ERROR, $node, ''); - } - if(!$this->sandbox->check_interface($implement->toString())){ - $this->sandbox->validation_error("Interface failed custom validation!", Error::VALID_INTERFACE_ERROR, $node, $implement->toString()); - } - } - } - } else if($node instanceof \PHPParser_Node_Stmt_Interface){ - if(!$this->sandbox->allow_interfaces){ - $this->sandbox->validation_error("Sandboxed code attempted to define interface!", Error::DEFINE_INTERFACE_ERROR, $node); - } - if(!$this->sandbox->check_keyword('interface')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'interface'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed interface!", Error::DEFINE_INTERFACE_ERROR, $node, ''); - } - if(!$this->sandbox->check_interface($node->name)){ - $this->sandbox->validation_error("Interface failed custom validation!", Error::VALID_INTERFACE_ERROR, $node, $node->name); - } - } else if($node instanceof \PHPParser_Node_Stmt_Trait){ - if(!$this->sandbox->allow_traits){ - $this->sandbox->validation_error("Sandboxed code attempted to define trait!", Error::DEFINE_TRAIT_ERROR, $node); - } - if(!$this->sandbox->check_keyword('trait')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'trait'); - } - if(!$node->name){ - $this->sandbox->validation_error("Sandboxed code attempted to define unnamed trait!", Error::DEFINE_TRAIT_ERROR, $node, ''); - } - if(!$this->sandbox->check_trait($node->name)){ - $this->sandbox->validation_error("Trait failed custom validation!", Error::VALID_TRAIT_ERROR, $node, $node->name); - } - } else if($node instanceof \PHPParser_Node_Stmt_TraitUse){ - if(!$this->sandbox->check_keyword('use')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'use'); - } - if(is_array($node->traits)){ - foreach($node->traits as $trait){ - /** - * @var \PHPParser_Node_Name $trait - */ - if(!$trait->toString()){ - $this->sandbox->validation_error("Sandboxed code attempted to use unnamed trait!", Error::DEFINE_TRAIT_ERROR, $node, ''); - } - if(!$this->sandbox->check_trait($trait->toString())){ - $this->sandbox->validation_error("Trait failed custom validation!", Error::VALID_TRAIT_ERROR, $node, $trait->toString()); - } - } - } - } else if($node instanceof \PHPParser_Node_Expr_Yield){ - if(!$this->sandbox->allow_generators){ - $this->sandbox->validation_error("Sandboxed code attempted to create a generator!", Error::GENERATOR_ERROR, $node); - } - if(!$this->sandbox->check_keyword('yield')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'yield'); - } - } else if($node instanceof \PHPParser_Node_Stmt_Global){ - if(!$this->sandbox->allow_globals){ - $this->sandbox->validation_error("Sandboxed code attempted to use global keyword!", Error::GLOBALS_ERROR, $node); - } - if(!$this->sandbox->check_keyword('global')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'global'); - } - foreach($node->vars as $var){ - /** - * @var \PHPParser_Node_Expr_Variable $var - */ - if($var instanceof \PHPParser_Node_Expr_Variable){ - if(!$this->sandbox->check_global($var->name)){ - $this->sandbox->validation_error("Global failed custom validation!", Error::VALID_GLOBAL_ERROR, $node, $var->name); - } - } else { - $this->sandbox->validation_error("Sandboxed code attempted to pass non-variable to global keyword!", Error::DEFINE_GLOBAL_ERROR, $node); - } - } - } else if($node instanceof \PHPParser_Node_Expr_Variable){ - if(!is_string($node->name)){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named variable call!", Error::DYNAMIC_VAR_ERROR, $node); - } - if($node->name == $this->sandbox->name){ - $this->sandbox->validation_error("Sandboxed code attempted to access the PHPSandbox instance!", Error::SANDBOX_ACCESS_ERROR, $node); - } - if(in_array($node->name, PHPSandbox::$superglobals)){ - if(!$this->sandbox->check_superglobal($node->name)){ - $this->sandbox->validation_error("Superglobal failed custom validation!", Error::VALID_SUPERGLOBAL_ERROR, $node, $node->name); - } - if($this->sandbox->overwrite_superglobals){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_get_superglobal', array(new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String($node->name))), $node->getAttributes()); - } - } else { - if(!$this->sandbox->check_var($node->name)){ - $this->sandbox->validation_error("Variable failed custom validation!", Error::VALID_VAR_ERROR, $node, $node->name); - } - } - } else if($node instanceof \PHPParser_Node_Stmt_StaticVar){ - if(!$this->sandbox->allow_static_variables){ - $this->sandbox->validation_error("Sandboxed code attempted to create static variable!", Error::STATIC_VAR_ERROR, $node); - } - if(!is_string($node->name)){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named static variable call!", Error::DYNAMIC_STATIC_VAR_ERROR, $node); - } - if(!$this->sandbox->check_var($node->name)){ - $this->sandbox->validation_error("Variable failed custom validation!", Error::VALID_VAR_ERROR, $node, $node->name); - } - if($node->default instanceof \PHPParser_Node_Expr_New){ - $node->default = $node->default->args[0]; - } - } else if($node instanceof \PHPParser_Node_Stmt_Const){ - $this->sandbox->validation_error("Sandboxed code cannot use const keyword in the global scope!", Error::GLOBAL_CONST_ERROR, $node); - } else if($node instanceof \PHPParser_Node_Expr_ConstFetch){ - if(!$node->name instanceof \PHPParser_Node_Name){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named constant call!", Error::DYNAMIC_CONST_ERROR, $node); - } - if(!$this->sandbox->check_const($node->name->toString())){ - $this->sandbox->validation_error("Constant failed custom validation!", Error::VALID_CONST_ERROR, $node, $node->name->toString()); - } - } else if($node instanceof \PHPParser_Node_Expr_ClassConstFetch || $node instanceof \PHPParser_Node_Expr_StaticCall || $node instanceof \PHPParser_Node_Expr_StaticPropertyFetch){ - $class = $node->class; - if(!$class instanceof \PHPParser_Node_Name){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named class call!", Error::DYNAMIC_CLASS_ERROR, $node); - } - if($this->sandbox->is_defined_class($class)){ - $node->class = new \PHPParser_Node_Name($this->sandbox->get_defined_class($class)); - } - /** - * @var \PHPParser_Node_Name $class - */ - if(!$this->sandbox->check_class($class->toString())){ - $this->sandbox->validation_error("Class constant failed custom validation!", Error::VALID_CLASS_ERROR, $node, $class->toString()); - } - return $node; - } else if($node instanceof \PHPParser_Node_Param && $node->type instanceof \PHPParser_Node_Name){ - $class = $node->type->toString(); - if($this->sandbox->is_defined_class($class)){ - $node->type = new \PHPParser_Node_Name($this->sandbox->get_defined_class($class)); - } - return $node; - } else if($node instanceof \PHPParser_Node_Expr_New){ - if(!$this->sandbox->allow_objects){ - $this->sandbox->validation_error("Sandboxed code attempted to create object!", Error::CREATE_OBJECT_ERROR, $node); - } - if(!$this->sandbox->check_keyword('new')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'new'); - } - if(!$node->class instanceof \PHPParser_Node_Name){ - $this->sandbox->validation_error("Sandboxed code attempted dynamically-named class call!", Error::DYNAMIC_CLASS_ERROR, $node); - } - $class = $node->class->toString(); - if($this->sandbox->is_defined_class($class)){ - $node->class = new \PHPParser_Node_Name($this->sandbox->get_defined_class($class)); - } - $this->sandbox->check_type($class); - return $node; - } else if($node instanceof \PHPParser_Node_Expr_ErrorSuppress){ - if(!$this->sandbox->allow_error_suppressing){ - $this->sandbox->validation_error("Sandboxed code attempted to suppress error!", Error::ERROR_SUPPRESS_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Expr_AssignRef){ - if(!$this->sandbox->allow_references){ - $this->sandbox->validation_error("Sandboxed code attempted to assign by reference!", Error::BYREF_ERROR, $node); - } - } else if($node instanceof \PHPParser_Node_Stmt_HaltCompiler){ - if(!$this->sandbox->allow_halting){ - $this->sandbox->validation_error("Sandboxed code attempted to halt compiler!", Error::HALT_ERROR, $node); - } - if(!$this->sandbox->check_keyword('halt')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'halt'); - } - } else if($node instanceof \PHPParser_Node_Stmt_Namespace){ - if(!$this->sandbox->allow_namespaces){ - $this->sandbox->validation_error("Sandboxed code attempted to define namespace!", Error::DEFINE_NAMESPACE_ERROR, $node); - } - if(!$this->sandbox->check_keyword('namespace')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'namespace'); - } - if($node->name instanceof \PHPParser_Node_Name){ - $namespace = $node->name->toString(); - $this->sandbox->check_namespace($namespace); - if(!$this->sandbox->is_defined_namespace($namespace)){ - $this->sandbox->define_namespace($namespace); - } - } else { - $this->sandbox->validation_error("Sandboxed code attempted use invalid namespace!", Error::DEFINE_NAMESPACE_ERROR, $node); - } - return $node->stmts; - } else if($node instanceof \PHPParser_Node_Stmt_Use){ - if(!$this->sandbox->allow_aliases){ - $this->sandbox->validation_error("Sandboxed code attempted to use namespace and/or alias!", Error::DEFINE_ALIAS_ERROR, $node); - } - if(!$this->sandbox->check_keyword('use')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'use'); - } - foreach($node->uses as $use){ - /** - * @var \PHPParser_Node_Stmt_UseUse $use - */ - if($use instanceof \PHPParser_Node_Stmt_UseUse && $use->name instanceof \PHPParser_Node_Name && (is_string($use->alias) || is_null($use->alias))){ - $this->sandbox->check_alias($use->name->toString()); - if($use->alias){ - if(!$this->sandbox->check_keyword('as')){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, 'as'); - } - } - $this->sandbox->define_alias($use->name->toString(), $use->alias); - } else { - $this->sandbox->validation_error("Sandboxed code attempted use invalid namespace or alias!", Error::DEFINE_ALIAS_ERROR, $node); - } - } - return false; - } else if($node instanceof \PHPParser_Node_Expr_ShellExec){ - if($this->sandbox->is_defined_func('shell_exec')){ - $args = array( - new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String('shell_exec')), - new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String(implode('', $node->parts))) - ); - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), 'call_func', $args, $node->getAttributes()); - } - if($this->sandbox->has_whitelist_funcs()){ - if(!$this->sandbox->is_whitelisted_func('shell_exec')){ - $this->sandbox->validation_error("Sandboxed code attempted to use shell execution backticks when the shell_exec function is not whitelisted!", Error::BACKTICKS_ERROR, $node); - } - } else if($this->sandbox->has_blacklist_funcs() && $this->sandbox->is_blacklisted_func('shell_exec')){ - $this->sandbox->validation_error("Sandboxed code attempted to use shell execution backticks when the shell_exec function is blacklisted!", Error::BACKTICKS_ERROR, $node); - } - if(!$this->sandbox->allow_backticks){ - $this->sandbox->validation_error("Sandboxed code attempted to use shell execution backticks!", Error::BACKTICKS_ERROR, $node); - } - } else if($name = $this->is_magic_const($node)){ - if(!$this->sandbox->check_magic_const($name)){ - $this->sandbox->validation_error("Magic constant failed custom validation!", Error::VALID_MAGIC_CONST_ERROR, $node, $name); - } - if($this->sandbox->is_defined_magic_const($name)){ - return new \PHPParser_Node_Expr_MethodCall(new \PHPParser_Node_Expr_StaticCall(new \PHPParser_Node_Name_FullyQualified("PHPSandbox\\PHPSandbox"), 'getSandbox', array(new \PHPParser_Node_Scalar_String($this->sandbox->name))), '_get_magic_const', array(new \PHPParser_Node_Arg(new \PHPParser_Node_Scalar_String($name))), $node->getAttributes()); - } - } else if($name = $this->is_keyword($node)){ - if(!$this->sandbox->check_keyword($name)){ - $this->sandbox->validation_error("Keyword failed custom validation!", Error::VALID_KEYWORD_ERROR, $node, $name); - } - } else if($name = $this->is_operator($node)){ - if(!$this->sandbox->check_operator($name)){ - $this->sandbox->validation_error("Operator failed custom validation!", Error::VALID_OPERATOR_ERROR, $node, $name); - } - } else if($name = $this->is_primitive($node)){ - if(!$this->sandbox->check_primitive($name)){ - $this->sandbox->validation_error("Primitive failed custom validation!", Error::VALID_PRIMITIVE_ERROR, $node, $name); - } - } - return null; - } - /** Test the current PHPParser_Node node to see if it is a magic constant, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not a magic constant - */ - protected function is_magic_const(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Scalar_ClassConst': - return '__CLASS__'; - case 'Scalar_DirConst': - return '__DIR__'; - case 'Scalar_FileConst': - return '__FILE__'; - case 'Scalar_FuncConst': - return '__FUNCTION__'; - case 'Scalar_LineConst': - return '__LINE__'; - case 'Scalar_MethodConst': - return '__METHOD__'; - case 'Scalar_NSConst': - return '__NAMESPACE__'; - case 'Scalar_TraitConst': - return '__TRAIT__'; - } - return null; - } - /** Test the current PHPParser_Node node to see if it is a keyword, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not a keyword - */ - protected function is_keyword(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Expr_Eval': - return 'eval'; - case 'Expr_Exit': - return 'exit'; - case 'Expr_Include': - return 'include'; - case 'Stmt_Echo': - case 'Expr_Print': //for our purposes print is treated as functionally equivalent to echo - return 'echo'; - case 'Expr_Clone': - return 'clone'; - case 'Expr_Empty': - return 'empty'; - case 'Expr_Yield': - return 'yield'; - case 'Stmt_Goto': - case 'Stmt_Label': //no point in using labels without goto - return 'goto'; - case 'Stmt_If': - case 'Stmt_Else': //no point in using ifs without else - case 'Stmt_ElseIf': //no point in using ifs without elseif - return 'if'; - case 'Stmt_Break': - return 'break'; - case 'Stmt_Switch': - case 'Stmt_Case': //no point in using cases without switch - return 'switch'; - case 'Stmt_Try': - case 'Stmt_Catch': //no point in using catch without try - case 'Stmt_TryCatch': //no point in using try, catch or finally without try - return 'try'; - case 'Stmt_Throw': - return 'throw'; - case 'Stmt_Unset': - return 'unset'; - case 'Stmt_Return': - return 'return'; - case 'Stmt_Static': - return 'static'; - case 'Stmt_While': - case 'Stmt_Do': //no point in using do without while - return 'while'; - case 'Stmt_Declare': - case 'Stmt_DeclareDeclare': //no point in using declare key=>value without declare - return 'declare'; - case 'Stmt_For': - case 'Stmt_Foreach': //no point in using foreach without for - return 'for'; - case 'Expr_Instanceof': - return 'instanceof'; - case 'Expr_Isset': - return 'isset'; - case 'Expr_List': - return 'list'; - } - return null; - } - /** Test the current PHPParser_Node node to see if it is an operator, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not an operator - */ - protected function is_operator(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Expr_Assign': - return '='; - case 'Expr_AssignBitwiseAnd': - return '&='; - case 'Expr_AssignBitwiseOr': - return '|='; - case 'Expr_AssignBitwiseXor': - return '^='; - case 'Expr_AssignConcat': - return '.='; - case 'Expr_AssignDiv': - return '/='; - case 'Expr_AssignMinus': - return '-='; - case 'Expr_AssignMod': - return '%='; - case 'Expr_AssignMul': - return '*='; - case 'Expr_AssignPlus': - return '+='; - case 'Expr_AssignRef': - return '=&'; - case 'Expr_AssignShiftLeft': - return '<<='; - case 'Expr_AssignShiftRight': - return '>>='; - case 'Expr_BitwiseAnd': - return '&'; - case 'Expr_BitwiseNot': - return '~'; - case 'Expr_BitwiseOr': - return '|'; - case 'Expr_BitwiseXor': - return '^'; - case 'Expr_BooleanAnd': - return '&&'; - case 'Expr_BooleanNot': - return '!'; - case 'Expr_BooleanOr': - return '||'; - case 'Expr_Concat': - return '.'; - case 'Expr_Div': - return '/'; - case 'Expr_Equal': - return '=='; - case 'Expr_Greater': - return '>'; - case 'Expr_GreaterOrEqual': - return '>='; - case 'Expr_Identical': - return '==='; - case 'Expr_LogicalAnd': - return 'and'; - case 'Expr_LogicalOr': - return 'or'; - case 'Expr_LogicalXor': - return 'xor'; - case 'Expr_Minus': - return '-'; - case 'Expr_Mod': - return '%'; - case 'Expr_Mul': - return '*'; - case 'Expr_NotEqual': - return '!='; - case 'Expr_NotIdentical': - return '!=='; - case 'Expr_Plus': - return '+'; - case 'Expr_PostDec': - return 'n--'; - case 'Expr_PostInc': - return 'n++'; - case 'Expr_PreDec': - return '--n'; - case 'Expr_PreInc': - return '++n'; - case 'Expr_ShiftLeft': - return '<<'; - case 'Expr_ShiftRight': - return '>>'; - case 'Expr_Smaller': - return '<'; - case 'Expr_SmallerOrEqual': - return '<='; - case 'Expr_Ternary': - return '?'; - case 'Expr_UnaryMinus': - return '-n'; - case 'Expr_UnaryPlus': - return '+n'; - } - return null; - } - /** Test the current PHPParser_Node node to see if it is a primitive, and return the name if it is and null if it is not - * - * @param \PHPParser_Node $node The sandboxed $node to test - * - * @return string|null Return string name of node, or null if it is not a primitive - */ - protected function is_primitive(\PHPParser_Node $node){ - switch($node->getType()){ - case 'Expr_Cast_Array': - case 'Expr_Array': - return 'array'; - case 'Expr_Cast_Bool': //booleans are treated as constants otherwise. . . - return 'bool'; - case 'Expr_Cast_String': - case 'Scalar_String': - case 'Scalar_Encapsed': - return 'string'; - case 'Expr_Cast_Double': - case 'Scalar_DNumber': - return 'float'; - case 'Expr_Cast_Int': - case 'Scalar_LNumber': - return 'int'; - case 'Expr_Cast_Object': - return 'object'; - } - return null; - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/WhitelistVisitor.php b/vendor/fieryprophet/php-sandbox/src/WhitelistVisitor.php deleted file mode 100644 index 80ea4b7..0000000 --- a/vendor/fieryprophet/php-sandbox/src/WhitelistVisitor.php +++ /dev/null @@ -1,95 +0,0 @@ - - * @version 1.3.10 - */ - class WhitelistVisitor extends \PHPParser_NodeVisitorAbstract { - /** The PHPSandbox instance to check against - * @var PHPSandbox - */ - protected $sandbox; - /** WhitelistVisitor class constructor - * - * This constructor takes a passed PHPSandbox instance to check against for whitelisting trusted code. - * - * @param PHPSandbox $sandbox The PHPSandbox instance to check against - */ - public function __construct(PHPSandbox $sandbox){ - $this->sandbox = $sandbox; - } - /** Examine the current PHPParser_Node node against the PHPSandbox configuration for whitelisting trusted code - * - * @param \PHPParser_Node $node The trusted $node to examine - * - * @return null|bool Return false if node must be removed, or null if no changes to the node are made - */ - public function leaveNode(\PHPParser_Node $node){ - if($node instanceof \PHPParser_Node_Expr_FuncCall && $node->name instanceof \PHPParser_Node_Name && !$this->sandbox->has_blacklist_funcs()){ - $this->sandbox->whitelist_func($node->name->toString()); - } else if($node instanceof \PHPParser_Node_Stmt_Function && is_string($node->name) && $node->name && !$this->sandbox->has_blacklist_funcs()){ - $this->sandbox->whitelist_func($node->name); - } else if(($node instanceof \PHPParser_Node_Expr_Variable || $node instanceof \PHPParser_Node_Stmt_StaticVar) && is_string($node->name) && $this->sandbox->has_whitelist_vars() && !$this->sandbox->allow_variables){ - $this->sandbox->whitelist_var($node->name); - } else if($node instanceof \PHPParser_Node_Expr_FuncCall && $node->name instanceof \PHPParser_Node_Name && $node->name->toString() == 'define' && !$this->sandbox->is_defined_func('define') && !$this->sandbox->has_blacklist_consts()){ - $name = isset($node->args[0]) ? $node->args[0] : null; - if($name && $name instanceof \PHPParser_Node_Arg && $name->value instanceof \PHPParser_Node_Scalar_String && is_string($name->value->value) && $name->value->value){ - $this->sandbox->whitelist_const($name->value->value); - } - } else if($node instanceof \PHPParser_Node_Expr_ConstFetch && $node->name instanceof \PHPParser_Node_Name && !$this->sandbox->has_blacklist_consts()){ - $this->sandbox->whitelist_const($node->name->toString()); - } else if($node instanceof \PHPParser_Node_Stmt_Class && is_string($node->name) && !$this->sandbox->has_blacklist_classes()){ - $this->sandbox->whitelist_class($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Interface && is_string($node->name) && !$this->sandbox->has_blacklist_interfaces()){ - $this->sandbox->whitelist_interface($node->name); - } else if($node instanceof \PHPParser_Node_Stmt_Trait && is_string($node->name) && !$this->sandbox->has_blacklist_traits()){ - $this->sandbox->whitelist_trait($node->name); - } else if($node instanceof \PHPParser_Node_Expr_New && $node->class instanceof \PHPParser_Node_Name && !$this->sandbox->has_blacklist_types()){ - $this->sandbox->whitelist_type($node->class->toString()); - } else if($node instanceof \PHPParser_Node_Stmt_Global && $this->sandbox->has_whitelist_vars()){ - foreach($node->vars as $var){ - /** - * @var \PHPParser_Node_Expr_Variable $var - */ - if($var instanceof \PHPParser_Node_Expr_Variable){ - $this->sandbox->whitelist_var($var->name); - } - } - } else if($node instanceof \PHPParser_Node_Stmt_Namespace){ - if($node->name instanceof \PHPParser_Node_Name){ - $name = $node->name->toString(); - $this->sandbox->check_namespace($name); - if(!$this->sandbox->is_defined_namespace($name)){ - $this->sandbox->define_namespace($name); - } - } - return false; - } else if($node instanceof \PHPParser_Node_Stmt_Use){ - foreach($node->uses as $use){ - /** - * @var \PHPParser_Node_Stmt_UseUse $use - */ - if($use instanceof \PHPParser_Node_Stmt_UseUse && $use->name instanceof \PHPParser_Node_Name && (is_string($use->alias) || is_null($use->alias))){ - $name = $use->name->toString(); - $this->sandbox->check_alias($name); - if(!$this->sandbox->is_defined_alias($name)){ - $this->sandbox->define_alias($name, $use->alias); - } - } - } - return false; - } - return null; - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/src/functions.php b/vendor/fieryprophet/php-sandbox/src/functions.php deleted file mode 100644 index 96b0fd6..0000000 --- a/vendor/fieryprophet/php-sandbox/src/functions.php +++ /dev/null @@ -1,62 +0,0 @@ -__toString(); - return is_callable($strval) ? new SandboxedString($strval, $sandbox) : $value; - } else if(is_array($value) && count($value)){ - //save current array pointer - $current_key = key($value); - foreach($value as $key => &$_value) { - $value[$key] = wrap($_value, $sandbox); - } - //rewind array pointer - reset($value); - //advance array to previous array key - while(key($value) !== $current_key){ - next($value); - } - return $value; - } else if(is_string($value) && is_callable($value)){ - return new SandboxedString($value, $sandbox); - } - return $value; - } - - /** Wrap output value in SandboxString by reference - * - * @param mixed $value Value to wrap - * @param PHPSandbox $sandbox Sandbox instance of calling code - * - * @return mixed|SandboxedString Returns the wrapped value - */ - function &wrapByRef(&$value, $sandbox){ - if(!($value instanceof SandboxedString) && is_object($value) && method_exists($value, '__toString')){ - $strval = $value->__toString(); - return is_callable($strval) ? new SandboxedString($strval, $sandbox) : $value; - } else if(is_array($value) && count($value)){ - //save current array pointer - $current_key = key($value); - foreach($value as $key => &$_value) { - $value[$key] = wrap($_value, $sandbox); - } - //rewind array pointer - reset($value); - //advance array to saved array pointer - while(key($value) !== $current_key){ - next($value); - } - return $value; - } else if(is_string($value) && is_callable($value)){ - return new SandboxedString($value, $sandbox); - } - return $value; - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/tests/PHPSandbox/Tests/Config/DefaultConfigTest.php b/vendor/fieryprophet/php-sandbox/tests/PHPSandbox/Tests/Config/DefaultConfigTest.php deleted file mode 100644 index ea3dc72..0000000 --- a/vendor/fieryprophet/php-sandbox/tests/PHPSandbox/Tests/Config/DefaultConfigTest.php +++ /dev/null @@ -1,405 +0,0 @@ -sandbox = new PHPSandbox; - } - - public function testSettingAndUnsettingOptions(){ - $this->sandbox->set_option('error_level', 1); - $this->assertEquals(1, $this->sandbox->get_option('error_level')); - $this->sandbox->set_option('error_level', null); - $this->assertEquals(null, $this->sandbox->get_option('error_level')); - } - - /** - * Test whether sandbox returns expected value - */ - public function testHelloWorldReturned(){ - $this->assertEquals('Hello World!', $this->sandbox->execute(function(){ return 'Hello World!'; })); - } - - /** - * Test whether sandbox echoes expected value - */ - public function testHelloWorldEchoed(){ - $this->expectOutputString('Hello World!'); - $this->sandbox->execute(function(){ echo 'Hello World!'; }); - } - - /** - * Test whether sandbox disallows eval keyword - */ - public function testDisallowsEval(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ eval("echo 'Hello World!';"); }); - } - - /** - * Test whether sandbox disallows exit keyword - */ - public function testDisallowsExit(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ exit('Hello World!'); }); - } - - /** - * Test whether sandbox disallows die keyword - */ - public function testDisallowsDie(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ die('Hello World!'); }); - } - - /** - * Test whether sandbox disallows include keyword - */ - public function testDisallowsInclude(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ include('test.php'); }); - } - - /** - * Test whether sandbox disallows require keyword - */ - public function testDisallowsRequire(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ require('test.php'); }); - } - - /** - * Test whether sandbox disallows include_once keyword - */ - public function testDisallowsIncludeOnce(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ include_once('test.php'); }); - } - - /** - * Test whether sandbox disallows require_once keyword - */ - public function testDisallowsRequireOnce(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ require_once('test.php'); }); - } - - /** - * Test whether sandbox disallows functions - */ - public function testDisallowsFunctions(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ function test(){ return 'Hello World!'; } return test(); }); - } - - /** - * Test whether sandbox autowhitelists trusted code - */ - public function testAutowhitelistTrustedCode(){ - $this->sandbox->prepend(function(){ - function test2(){ - return 'Hello World!'; - } - }); - $this->assertEquals('Hello World!', $this->sandbox->execute(function(){ return test2(); })); - $this->setUp(); //reset - } - - /** - * Test whether sandbox disallows closures - */ - public function testDisallowsClosures(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ $test = function(){ return 'Hello World!'; }; return $test(); }); - } - - /** - * Test whether sandbox allows variable creation - */ - public function testAllowsVariableCreation(){ - $this->assertEquals('Hello World!', $this->sandbox->execute(function(){ - $a = 'Hello World!'; - return $a; - })); - } - - /** - * Test whether sandbox allows static variable creation - */ - public function testAllowsStaticVariableCreation(){ - $this->assertEquals('Hello World!', $this->sandbox->execute(function(){ - static $a = 'Hello World!'; - return $a; - })); - } - - /** - * Test whether sandbox disallows globals - */ - public function testDisallowsGlobals(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ global $test; return $test; }); - } - - /** - * Test whether sandbox disallows classes - */ - public function testDisallowsConstants(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ define('TEST', 'Hello World!'); return TEST; }); - } - - /** - * Test whether sandbox disallows namespaces - */ - public function testDisallowsNamespaces(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('namespace Foo;'); - } - - /** - * Test whether sandbox disallows aliases (aka uses) - */ - public function testDisallowsAliases(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('use Foo as Bar;'); - } - - /** - * Test whether sandbox disallows classes - */ - public function testDisallowsClasses(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('class Foo {}'); - } - - /** - * Test whether sandbox disallows interfaces - */ - public function testDisallowsInterfaces(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('interface Foo {}'); - } - - /** - * Test whether sandbox disallows traits - */ - public function testDisallowsTraits(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('trait Foo {}'); - } - - /** - * Test whether sandbox disallows escaping to HTML - */ - public function testDisallowsEscaping(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ ?>Hello World!setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ return (bool)'1'; }); - } - - /** - * Test whether sandbox disallows error suppressing - */ - public function testDisallowsErrorSuppressing(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('$value = @$cache[$key];'); - } - - /** - * Test whether sandbox allows references - */ - public function testAllowsReferences(){ - $this->assertEquals('Hello World!', $this->sandbox->execute(function(){ - $a = 'Hello World!'; - $b =& $a; - return $b; - })); - } - - /** - * Test whether sandbox disallows backtick execution - */ - public function testDisallowsBackticks(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ return `ping google.com`; }); - } - - /** - * Test whether sandbox disallows halting - */ - public function testDisallowsHalting(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute('__halt_compiler();'); - } - - /** - * Test whether sandbox disallows non-whitelisted functions - */ - public function testDisallowsNonwhitelistedFunction(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ return mt_rand(); }); - } - - /** - * Test whether sandbox disallows non-whitelisted class - */ - public function testDisallowsNonwhitelistedClass(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ return \DateTime::createFromFormat('y', 'now'); }); - } - - /** - * Test whether sandbox disallows non-whitelisted class type - */ - public function testDisallowsNonwhitelistedType(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ return new \stdClass; }); - } - - /** - * Test whether sandbox custom function validation succeeds - */ - public function testCustomFunctionValidationSuccess(){ - $this->expectOutputString('success'); - $this->sandbox->set_func_validator(function($name){ - return $name == 'phpsandbox\tests\config\test'; - }); - function test(){ - echo 'success'; - } - $this->sandbox->execute(function(){ \PHPSandbox\Tests\Config\test(); }); - } - - /** - * Test whether sandbox custom function validation succeeds - */ - public function testCustomFunctionValidationFailure(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->set_func_validator(function($name){ - return $name == 'test'; - }); - $this->sandbox->execute(function(){ test2(); }); - } - - /** - * Test whether sandbox custom error handler intercepts errors - */ - public function testCustomErrorHandler(){ - $this->setExpectedException('Exception'); - $this->sandbox->set_error_handler(function($errno, $errstr){ - throw new \Exception($errstr); - }); - $this->sandbox->execute(function(){ $a[1]; }); - } - - /** - * Test whether sandbox custom exception handler intercepts exceptions - */ - public function testCustomExceptionHandler(){ - $this->setExpectedException('Exception'); - $this->sandbox->whitelist_type('Exception'); - $this->sandbox->set_exception_handler(function($exception){ - throw $exception; - }); - $this->sandbox->execute(function(){ throw new \Exception; }); - } - - /** - * Test whether sandbox converts errors to exceptions - */ - public function testConvertErrors(){ - $this->setExpectedException('ErrorException'); - $this->sandbox->convert_errors = true; - $this->sandbox->set_exception_handler(function($error){ - throw $error; - }); - $this->sandbox->execute(function(){ $a[1]; }); - } - - /** - * Test whether sandbox custom validation error handler intercepts validation Errors - */ - public function testCustomValidationErrorHandler(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->set_validation_error_handler(function($error){ - throw $error; - }); - $this->sandbox->execute(function(){ test2(); }); - } - - /** - * Test whether sandbox disallows violating callbacks - */ - public function testCallbackViolations(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ array_filter(array("1"), "var_dump"); }); - } - - /** - * Test whether sandbox disallows violating callbacks even with manipulated sandboxed strings - */ - public function testCallbackViolationsWithStringManipulation(){ - $this->setExpectedException('PHPSandbox\Error'); - $this->sandbox->execute(function(){ $x = substr("var_dump2", 0, -1); array_filter(array("1"), $x); }); - } - - /** - * Test whether sandboxed strings do not cause conflicts with intval - */ - public function testSandboxedStringsSatisfyIntval(){ - $this->sandbox->whitelist_func('intval'); - $this->assertEquals(1, $this->sandbox->execute(function(){ return intval("1"); })); - } - - /** - * Test whether sandboxed strings do not cause conflicts with is_string, is_object, or is_scalar - */ - public function testSandboxedStringsMimicStrings(){ - $this->sandbox->whitelist_func(array( - 'is_string', - 'is_object', - 'is_scalar' - )); - $this->assertEquals(true, $this->sandbox->execute(function(){ return is_string("system"); })); - $this->assertEquals(false, $this->sandbox->execute(function(){ return is_object("system"); })); - $this->assertEquals(true, $this->sandbox->execute(function(){ return is_scalar("system"); })); - } - - public function testStaticTypeOverwriting(){ - $class = 'B' . md5(time()); - $this->sandbox->define_class('A', $class); - $this->sandbox->allow_classes = true; - $this->sandbox->allow_functions = true; - $this->assertEquals("Yes", $this->sandbox->execute('value; - } - - return test' . $class . '(new ' . $class . '); - ?>')); - } - } \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/tests/bootstrap.php b/vendor/fieryprophet/php-sandbox/tests/bootstrap.php deleted file mode 100644 index 667f7cb..0000000 --- a/vendor/fieryprophet/php-sandbox/tests/bootstrap.php +++ /dev/null @@ -1,3 +0,0 @@ -add('PHPSandbox\Tests', __DIR__); \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/index.php b/vendor/fieryprophet/php-sandbox/toolkit/index.php deleted file mode 100644 index 3f070d0..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/index.php +++ /dev/null @@ -1,1859 +0,0 @@ -
'); - } - if(isset($_FILES['load'])){ - if($_FILES['load']['error'] == 0 && ($data = file_get_contents($_FILES['load']['tmp_name']))){ - header('Content-type: text/html'); - die(''); - } - header('Content-type: text/html'); - die(''); - } - - if(isset($_POST['save']) || isset($_POST['download'])){ - if(isset($_POST['download'])){ - $data = json_decode($_POST['download'], true); - if(!is_array($data)){ - header('Content-type: text/html'); - die(''); - } - $code = $data['code']; - $setup_code = isset($data['setup_code']) ? $data['setup_code'] : null; - $prepend_code = isset($data['prepend_code']) ? $data['prepend_code'] : null; - $append_code = isset($data['append_code']) ? $data['append_code'] : null; - $options = isset($data['options']) ? $data['options'] : array(); - $whitelist = isset($data['whitelist']) ? $data['whitelist'] : null; - $blacklist = isset($data['blacklist']) ? $data['blacklist'] : null; - $definitions = isset($data['definitions']) ? $data['definitions'] : null; - $filename = $template = stripslashes($data['save']); - } else { - $code = $_POST['code']; - $setup_code = isset($_POST['setup_code']) ? $_POST['setup_code'] : null; - $prepend_code = isset($_POST['prepend_code']) ? $_POST['prepend_code'] : null; - $append_code = isset($_POST['append_code']) ? $_POST['append_code'] : null; - $options = isset($_POST['options']) ? $_POST['options'] : array(); - $whitelist = isset($_POST['whitelist']) ? $_POST['whitelist'] : null; - $blacklist = isset($_POST['blacklist']) ? $_POST['blacklist'] : null; - $definitions = isset($_POST['definitions']) ? $_POST['definitions'] : null; - $template = stripslashes(isset($_POST['save']) ? $_POST['save'] : $_POST['download']); - $filename = isset($_POST['download']) ? $template : trim(preg_replace('/[^a-zA-Z0-9_ ]/', '_', $template), '_'); - } - if(!$filename){ - header('Content-type: text/html'); - die(json_encode(array( - 'message' => 'The template could not be saved because the requested template name was invalid. Please rename your template and try again.', - 'success' => false - ))); - } - $cnt = '001'; - if(isset($_POST['download'])){ - $filename = $filename . '.json'; - } else { - $cnt = count(glob('templates/*.json')) + 1; - $filename = str_pad($cnt, 3, '0', STR_PAD_LEFT) . ' - ' . $filename . '.json'; - } - if(!isset($_POST['download']) && file_exists('templates/' . $filename)){ - header('Content-type: text/html'); - die(json_encode(array( - 'message' => 'The template could not be saved because the another template already exists with the same name. Please rename your template and try again.', - 'success' => false - ))); - } - $data = array( - 'code' => $code, - 'setup_code' => $setup_code, - 'prepend_code' => $prepend_code, - 'append_code' => $append_code, - 'options' => null, - 'whitelist' => $whitelist, - 'blacklist' => $blacklist, - 'definitions' => $definitions - ); - if(count($options)){ - $sandbox = new \PHPSandbox\PHPSandbox; - foreach($options as $name => $value){ - if(($name == 'error_level' && $value != error_reporting()) || ($name != 'error_level' && $sandbox->get_option($name) != $value)){ //save unique options only - $data['options'][$name] = $value; - } - } - } - if(isset($_POST['download'])){ - header('Content-disposition: attachment; filename="' . $filename . '";'); - header('Content-type: application/json'); - die(json_encode($data)); - } else if(file_put_contents('templates/' . $filename, json_encode($data))){ - header('Content-type: text/html'); - die(json_encode(array( - 'message' => 'The template "' . $template . '" was saved successfully!', - 'name' => $cnt . ' - ' . $template, - 'file' => $filename, - 'success' => true - ))); - } - header('Content-type: text/html'); - die(json_encode(array( - 'message' => 'An error occurred that prevented your template from being saved!', - 'success' => false - ))); - } - - if(isset($_POST['code'])){ - $code = $_POST['code']; - $setup_code = isset($_POST['setup_code']) ? $_POST['setup_code'] : null; - $prepend_code = isset($_POST['prepend_code']) ? $_POST['prepend_code'] : null; - $append_code = isset($_POST['append_code']) ? $_POST['append_code'] : null; - $options = isset($_POST['options']) ? $_POST['options'] : array(); - $whitelist = isset($_POST['whitelist']) ? $_POST['whitelist'] : null; - $blacklist = isset($_POST['blacklist']) ? $_POST['blacklist'] : null; - $definitions = isset($_POST['definitions']) ? $_POST['definitions'] : null; - $sandbox = \PHPSandbox\PHPSandbox::create()->import(array( - 'setup_code' => $setup_code, - 'prepend_code' => $prepend_code, - 'append_code' => $append_code, - 'options' => $options, - 'whitelist' => $whitelist, - 'blacklist' => $blacklist, - 'definitions' => $definitions - )); - $sandbox->set_error_handler(function($errno, $errmsg, $errfile, $errline){ die('

Error: ' . $errmsg . ' on line ' . $errline . '

'); }); - $sandbox->set_exception_handler(function(\Exception $e){ die('

Exception: ' . $e->getMessage() . ' on line ' . $e->getLine() . '

'); }); - $sandbox->set_validation_error_handler(function(\PHPSandbox\Error $e){ die('

Validation Error: ' . $e->getMessage() . '

'); }); - try { - ob_start(); - if($setup_code){ - @eval($setup_code); - } - $result = $sandbox->execute($code); - if($result !== null){ - echo (ob_get_contents() ? '
' : '') . '

The sandbox returned this value:

'; - var_dump($result); - } - echo '
Preparation time: ' . round($sandbox->get_prepared_time()*1000, 2) . - ' ms, execution time: ' . round($sandbox->get_execution_time()*1000, 2) . - ' ms, total time: ' . round($sandbox->get_prepared_time()*1000, 2) . ' ms' . - '
Generated Code: ' . $sandbox->get_generated_code() . ''; - $buffer = ob_get_contents(); - ob_end_clean(); - die('
' . $buffer . '
'); - } catch(\PHPSandbox\Error $e){ - die('

' . $e->getMessage() . '

'); - } - } - - if(isset($_GET['template'])){ - $template = stripslashes($_GET['template']); - if(file_exists($template)){ - header('Content-type: text/html'); - readfile($template); - } - exit; - } - - if(isset($_REQUEST['download'])){ - exit; - } - - $data = json_decode(file_get_contents("templates/001 - Hello World.json"), true); -?> - - - - PHPSandbox - Toolkit - - - - - - - - -
- - - - -

Code Editor

-
-
- PHPSandbox -

- - API Documentation - -   —   - - Help - -

-
© Copyright 2013 - Elijah Horton. - Some Rights Reserved.
See LICENSE for details.
-
-

Choose Template:

-
- -
-
- -
- -
- - Download template? -
-
-

Sandbox Configuration:

-
-
-

Options

-
- $flag){ - if(is_bool($flag)){ - $lastname = strstr($name, '_', true); - $name = htmlentities($name); - echo ''; - echo '
'; - } - } - ?> -
-

Whitelists

-
- Add To: - -
- - -
- NOTE: Whitelists override blacklists. -
- - - - - - - - - - - - - - - -
-

Blacklists

-
- Add To: - -
- - -
- NOTE: Whitelists override blacklists. -
- - - - - - - - - - - - - - - -
-

Definitions

-
- - -
- NOTE: Definitions override both whitelists and blacklists, and are inherently trusted. -
- - - - - - - - - - -
-
-
-
- - -
-
- -
-
-
-

Output

-
Hello World!
-
-
-
- - - - - Function Name: -
- -
-
- Enter function arguments below in $argument = value format, e.g. $foo = 'Hello', $bar = 'World' -
- -
function (){
-
-
}
-
-
- Variable Name: -
- -
-
- Variable Type: -
- -
-
- Variable Value: -
- -

-
-
- Superglobal: -
- -
-
- Key: -
-
- -
-
- Superglobal Type: -
- -
-
- Superglobal Value: -
- -

-
-
- Constant Name: -
- -
-
- Constant Type: -
- -
-
- Constant Value: -
- -

-
-
- Magic Constant: -
- -
-
- Magic Constant Type: -
- -
-
- Magic Constant Value: -
- -

-
-
- Namespace: -
- -

-
-
- Use: -
- -
-
- Alias (leave blank for none): -
- -

-
-
- Redefine Class: -
- -
-
- To: -
- -

-
-
- Redefine Interface: -
- -
-
- To: -
- -

-
-
- Redefine Trait: -
- -
-
- To: -
- -

-
-
- -
- - -
- -
- - - - \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/001 - Hello World.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/001 - Hello World.json deleted file mode 100644 index 93de01f..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/001 - Hello World.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\necho 'Hello World!';","options":null,"blacklist":null,"whitelist":null} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/002 - Evil Function.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/002 - Evil Function.json deleted file mode 100644 index 8ad9d36..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/002 - Evil Function.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates how an eval is blocked\n if the eval function is not allowed\n*\/\n\neval('echo \"This should not work if eval is disallowed.\";');","options":{"allow_variables":"0"},"blacklist":null,"whitelist":null} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/003 - Whitelisting.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/003 - Whitelisting.json deleted file mode 100644 index f507f61..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/003 - Whitelisting.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates how whitelisting a function and a superglobal\n will expose them to your sandboxed code for use\n*\/\n\nprint_r($_POST);","options":null,"whitelist":{"func":["print_r"],"superglobal":["POST"]},"blacklist":null} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/004 - Setup Code.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/004 - Setup Code.json deleted file mode 100644 index 6041022..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/004 - Setup Code.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\necho \\Test\\test();","setup_code":"namespace Test;\n\nfunction test(){\n return 'hi';\n}","prepend_code":"","append_code":"","options":null,"whitelist":{"func":["Test\\test","test"],"namespace":["Test"]},"blacklist":null} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/005 - Ola World.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/005 - Ola World.json deleted file mode 100644 index 90fb744..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/005 - Ola World.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\ntest();\n\nvar_dump(test());\n\ntest($ola);\n\nvar_dump(test($ola));","setup_code":"","prepend_code":"","append_code":"","options":{"error_level":"32767"},"whitelist":{"func":["var_dump"]},"blacklist":null,"definitions":{"func":{"test":{"args":"$text = 'Hello'","code":"return \"$text World!\";","pass":0,"fullcode":"function($text = 'Hello'){return \"$text World!\";}"}},"var":{"ola":{"scalar":"string","value":"Ola"}}}} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/006 - Superglobals.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/006 - Superglobals.json deleted file mode 100644 index 0ff5a95..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/006 - Superglobals.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\nvar_dump($_GET);","setup_code":"","prepend_code":"","append_code":"","options":null,"whitelist":{"func":["var_dump"]},"blacklist":null,"definitions":{"superglobal":{"_GET":{"key":"test","scalar":"string","value":"test"}}}} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/007 - Magic Constants.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/007 - Magic Constants.json deleted file mode 100644 index 99d80ce..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/007 - Magic Constants.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\nvar_dump(__LINE__);","setup_code":"","prepend_code":"","append_code":"","options":null,"whitelist":{"func":["var_dump"]},"blacklist":null,"definitions":{"magic_const":{"__LINE__":{"scalar":"string","value":"test"}}}} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/008 - Namespaces.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/008 - Namespaces.json deleted file mode 100644 index 344bfb6..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/008 - Namespaces.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\necho __NAMESPACE__;","setup_code":"","prepend_code":"","append_code":"","options":null,"whitelist":{"magic_const":["__NAMESPACE__"]},"blacklist":null,"definitions":{"namespace":{"Test":"Test"},"alias":{"Test":"test","Test2":""}}} \ No newline at end of file diff --git a/vendor/fieryprophet/php-sandbox/toolkit/templates/009 - Redefining Classes.json b/vendor/fieryprophet/php-sandbox/toolkit/templates/009 - Redefining Classes.json deleted file mode 100644 index 121def6..0000000 --- a/vendor/fieryprophet/php-sandbox/toolkit/templates/009 - Redefining Classes.json +++ /dev/null @@ -1 +0,0 @@ -{"code":"\/*\n This template demonstrates a typical piece of code that will execute\n normally under the default PHPSandbox configuration\n*\/\n\n$tmp = new Test;\n\necho $tmp->v;\n\nvar_dump(get_declared_classes());","setup_code":"class Test {\n public $v = 'No';\n}\n\nclass Test2 {\n public $v = 'Yes!';\n}","prepend_code":"","append_code":"","options":null,"whitelist":{"func":["var_dump","get_declared_classes"]},"blacklist":null,"definitions":{"class":{"Test":"Test2"}}} \ No newline at end of file diff --git a/vendor/jeremeamia/FunctionParser/.gitattributes b/vendor/jeremeamia/FunctionParser/.gitattributes deleted file mode 100644 index 899780c..0000000 --- a/vendor/jeremeamia/FunctionParser/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -* text=auto - -/tests export-ignore -/.gitattributes export-ignore -/.gitignore export-ignore -/.travis.yml export-ignore -/build.xml export-ignore -/phpunit.xml.dist export-ignore -/README.md export-ignore diff --git a/vendor/jeremeamia/FunctionParser/.gitignore b/vendor/jeremeamia/FunctionParser/.gitignore deleted file mode 100644 index 6191e92..0000000 --- a/vendor/jeremeamia/FunctionParser/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/.idea -/vendor -/build -cache.properties -composer.lock -phpunit.xml diff --git a/vendor/jeremeamia/FunctionParser/.travis.yml b/vendor/jeremeamia/FunctionParser/.travis.yml deleted file mode 100644 index 5b55642..0000000 --- a/vendor/jeremeamia/FunctionParser/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: php - -php: - - 5.3.3 - - 5.3 - - 5.4 - - 5.5 - - 5.6 - - hhvm - -install: - - travis_retry composer install --no-interaction --prefer-source - -script: - - phpunit --coverage-text diff --git a/vendor/jeremeamia/FunctionParser/LICENSE b/vendor/jeremeamia/FunctionParser/LICENSE deleted file mode 100644 index 0bb0470..0000000 --- a/vendor/jeremeamia/FunctionParser/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -Copyright (c) 2011-2012 Jeremy Lindblom - -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/vendor/jeremeamia/FunctionParser/README.md b/vendor/jeremeamia/FunctionParser/README.md deleted file mode 100644 index 9e0b700..0000000 --- a/vendor/jeremeamia/FunctionParser/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# FunctionParser - -The PHP Function Parser library by Jeremy Lindblom. - -[![Build Status][travis-ci-status]][travis-ci] - -## Purpose - -The PHP FunctionParser provides the ability to parse and retrieve the code defining an existing function as a string. -This can be used in clever ways to generate documentation or example code or even to [serialize a closure][super-closure]. - -The class also allows you to get information about the function like the parameter names and the names and values of -variables in the `use` statement of a closure. - -## General Use - -The FunctionParser relies on the Reflection API and also on the PHP tokenizer (`token_get_all()`), so PHP must be -compiled with the `--enable-tokenizer` flag in order for the tokenizer to be available. - -Here is a small example of how it works: -```php -use FunctionParser\FunctionParser; - -$foo = 2; -$closure = function($bar) use($foo) { - return $foo + $bar; -}; - -$parser = new FunctionParser(new \ReflectionFunction($closure)); -$code = $parser->getCode(); -``` -You can also use the `fromCallable` factory method as a convenient way to generate the reflected function automatically -from any PHP callable: -```php -$parser = FunctionParser::fromCallable(function($foo) {echo $foo . 'bar';}); -$parser = FunctionParser::fromCallable('Foo::bar'); -$parser = FunctionParser::fromCallable(array('Foo', 'bar')); -``` -## Installation - -The FunctionParser relies on the Reflection API and also on the PHP tokenizer (`token_get_all()`), so PHP must be -compiled with the `--enable-tokenizer` flag in order for the tokenizer to be available. - -Requirements: - -- **PHP 5.3.2+** -- **PHPUnit** for tests -- **Composer** for consuming FunctionParser as a dependency - -To install FunctionParser as a dependency of your project using Composer, please add the following to your -`composer.json` config file. -```javascript -{ - "require": { - "jeremeamia/FunctionParser": "*" - } -} -``` -Then run `php composer.phar install --install-suggests` from your project's root directory to install the FunctionParser. - -## Building - -There is a `buid.xml` file that you can use to generate test coverage reports, documenation, and code analytics. The -current file is designed to be used with `ant`, but I will be migrating this to `phing` sometime soon. More on this later. - -The test suite and code coveage report are currently setup to run in Travis CI. [See FunctionParser on Travis CI] -[travis-ci] - -## Links - -- [FunctionParser on Travis CI][travis-ci] -- [FunctionParser on Packagist][packagist] -- [FunctionParser on Ohloh][ohloh] - - - -[travis-ci-status]: https://secure.travis-ci.org/jeremeamia/FunctionParser.png?branch=master -[travis-ci]: http://travis-ci.org/jeremeamia/FunctionParser -[super-closure]: https://github.com/jeremeamia/super_closure -[packagist]: http://packagist.org/packages/jeremeamia/FunctionParser -[ohloh]: https://www.ohloh.net/p/php-function-parser \ No newline at end of file diff --git a/vendor/jeremeamia/FunctionParser/build.xml b/vendor/jeremeamia/FunctionParser/build.xml deleted file mode 100644 index bece88c..0000000 --- a/vendor/jeremeamia/FunctionParser/build.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/jeremeamia/FunctionParser/composer.json b/vendor/jeremeamia/FunctionParser/composer.json deleted file mode 100644 index 392f453..0000000 --- a/vendor/jeremeamia/FunctionParser/composer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "jeremeamia/FunctionParser", - "type": "library", - "description": "Function parser for PHP functions, methods, and closures", - "keywords": ["function", "closure", "parser", "tokenizer"], - "homepage": "https://github.com/jeremeamia/FunctionParser", - "license": "MIT", - "authors": [ - { - "name": "Jeremy Lindblom" - } - ], - "require": { - "php": ">=5.3.2" - }, - "autoload": { - "psr-4": { "FunctionParser\\": "src/" } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - } -} diff --git a/vendor/jeremeamia/FunctionParser/demo/class-method.php b/vendor/jeremeamia/FunctionParser/demo/class-method.php deleted file mode 100644 index 4a238d6..0000000 --- a/vendor/jeremeamia/FunctionParser/demo/class-method.php +++ /dev/null @@ -1,26 +0,0 @@ -getClass()->getName() . '::' . $parser->getName() . '()' . PHP_EOL; -echo PHP_EOL; - -echo "INNER CODE:" . PHP_EOL; -echo trim($parser->getBody()) . PHP_EOL; -echo PHP_EOL; diff --git a/vendor/jeremeamia/FunctionParser/demo/simple-closure.php b/vendor/jeremeamia/FunctionParser/demo/simple-closure.php deleted file mode 100644 index 00bdcdd..0000000 --- a/vendor/jeremeamia/FunctionParser/demo/simple-closure.php +++ /dev/null @@ -1,28 +0,0 @@ -getCode() . PHP_EOL; -echo PHP_EOL; - -echo 'PARAMETERS:' . PHP_EOL; -var_dump($parser->getParameters()); -echo PHP_EOL; - -echo 'CLOSURES:' . PHP_EOL; -var_dump($parser->getContext()); -echo PHP_EOL; diff --git a/vendor/jeremeamia/FunctionParser/phpunit.xml.dist b/vendor/jeremeamia/FunctionParser/phpunit.xml.dist deleted file mode 100644 index 09d4645..0000000 --- a/vendor/jeremeamia/FunctionParser/phpunit.xml.dist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - ./tests - - - - - ./src - - - - - - - - - diff --git a/vendor/jeremeamia/FunctionParser/src/FunctionParser.php b/vendor/jeremeamia/FunctionParser/src/FunctionParser.php deleted file mode 100644 index 24ae3af..0000000 --- a/vendor/jeremeamia/FunctionParser/src/FunctionParser.php +++ /dev/null @@ -1,388 +0,0 @@ - 0) - { - $callable = explode('::', $callable); - } - - if (is_array($callable)) - { - list($class, $method) = $callable; - $reflection = new \ReflectionMethod($class, $method); - } - else - { - $reflection = new \ReflectionFunction($callable); - } - - return new static($reflection); - } - - /** - * Constructs a FunctionParser from a reflected function. Triggers all code parsing from the constructor. - * - * @param \ReflectionFunctionAbstract $reflection The reflected function or method. - */ - public function __construct(\ReflectionFunctionAbstract $reflection) - { - if (!$reflection->isUserDefined()) - { - throw new \InvalidArgumentException('You can only parse the code of user-defined functions.'); - } - - $this->reflection = $reflection; - $this->tokenizer = $this->fetchTokenizer(); - $this->parameters = $this->fetchParameters(); - $this->code = $this->parseCode(); - $this->body = $this->parseBody(); - $this->context = $this->parseContext(); - } - - /** - * Get the reflected method or function for this passer. - * - * @return \ReflectionFunctionAbstract The reflected function. - */ - public function getReflection() - { - return $this->reflection; - } - - /** - * Returns the name of the function, if there is one. - * - * @return null|string The name of the function. - */ - public function getName() - { - $name = $this->reflection->getName(); - - if (strpos($name, '{closure}') !== false) - { - return null; - } - - return $name; - } - - /** - * Returns a list of the parameter names of the function. - * - * @return array The array of parameter names. - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Returns the tokenizer used to parse the function. - * - * @return \FunctionParser\Tokenizer The tokenizer. - */ - public function getTokenizer() - { - return $this->tokenizer; - } - - /** - * Returns the code that defines the function as a string. - * - * @return string The code defining the function. - */ - public function getCode() - { - return $this->code; - } - - /** - * Returns the bosy of the code without the function signature or braces. - * - * @return string The body of the code. - */ - public function getBody() - { - return $this->body; - } - - /** - * Returns an array of variable names and values representing the context of the function. These variables are the - * ones specified in the "use" statement which can only be used when defining closures. If the function being parsed - * is not a closure, then getContext will return an empty array. - * - * @return array Array of "used" variables in the closure. - */ - public function getContext() - { - return $this->context; - } - - /** - * Returns the name of the class where the method being parsed is defined. If the function bieing parsed is not a - * method, then it will return null. - * - * @return null|string The parent class of the method. - */ - public function getClass() - { - if (method_exists($this->reflection, 'getDeclaringClass')) - { - return $this->reflection->getDeclaringClass(); - } - - return null; - } - - /** - * Uses reflection to get the parameter names for the functions. - * - * @return array An array of the parameter names. - */ - protected function fetchParameters() - { - return array_map( - function(\ReflectionParameter $param) { - return $param->name; - }, - $this->reflection->getParameters() - ); - } - - /** - * Creates a tokenizer representing the code that is the best candidate for representing the function. It uses - * reflection to find the file and lines of the code and then puts that code into the tokenizer. - * - * @return \FunctionParser\Tokenizer The tokenizer of the function's code. - */ - protected function fetchTokenizer() - { - // Load the file containing the code for the function - $file = new \SplFileObject($this->reflection->getFileName()); - - // Identify the first and last lines of the code for the function - $first_line = $this->reflection->getStartLine(); - $last_line = $this->reflection->getEndLine(); - - // Retrieve all of the lines that contain code for the function - $code = ''; - $file->seek($first_line - 1); - while ($file->key() < $last_line) - { - $code .= $file->current(); - $file->next(); - } - - // Setup the tokenizer with the code from the file - $tokenizer = new Tokenizer($code); - - // Eliminate tokens that are definitely not a part of the function code - $start = $tokenizer->findToken(T_FUNCTION); - $finish = $tokenizer->findToken('}', -1); - $tokenizer = $tokenizer->getTokenRange($start, $finish + 1); - - return $tokenizer; - } - - /** - * Parses the code using the tokenizer and keeping track of matching braces. - * - * @return string The code representing the function. - * @throws \RuntimeException on invalid code. - */ - protected function parseCode() - { - $brace_level = 0; - $parsed_code = ''; - $parsing_complete = false; - - // Parse the code looking for the end of the function - /** @var $token \FunctionParser\Token */ - foreach ($this->tokenizer as $token) - { - /*********************************************************************************************************** - * AFTER PARSING - * - * After the parsing is complete, we need to make sure there are no other T_FUNCTION tokens found, which - * would indicate a possible ambiguity in the function code we retrieved. This should only happen in - * situations where the code is minified or poorly formatted. - */ - if ($parsing_complete) - { - if ($token->is(T_FUNCTION)) - { - throw new \RuntimeException('Cannot parse the function; multiple, non-nested functions were defined' - . ' in the code block containing the desired function.'); - } - else - { - continue; - } - } - - /*********************************************************************************************************** - * WHILE PARSING - * - * Scan through the tokens (while keeping track of braces) and reconstruct the code from the parsed tokens. - */ - - // Keep track of opening and closing braces - if ($token->isOpeningBrace()) - { - $brace_level++; - } - elseif ($token->isClosingBrace()) - { - $brace_level--; - - // Once we reach the function's closing brace, mark as complete - if ($brace_level === 0) - { - $parsing_complete = true; - } - } - - // Reconstruct the code token by token - $parsed_code .= $token->code; - } - - /* - * If all tokens have been looked at and the closing brace was not found, then there is a - * problem with the code defining the Closure. This should probably never happen, but just - * in case... - */ - if (!$parsing_complete) - { - // @codeCoverageIgnoreStart - throw new \RuntimeException('Cannot parse the function because the code appeared to be invalid.'); - // @codeCoverageIgnoreEnd - } - - return $parsed_code; - } - - /** - * Removes the function signature and braces to expose only the procedural body of the function. - * - * @return string The body of the function. - */ - protected function parseBody() - { - // Remove the function signature and outer braces - $start = strpos($this->code, '{'); - $finish = strrpos($this->code, '}'); - $body = ltrim(rtrim(substr($this->code, $start + 1, $finish - $start - 1)), "\n"); - - return $body; - } - - /** - * Does some additional tokenizing and reflection to determine the names and values of variables included in the - * closure (or context) via "use" statement. For functions that are not closures, an empty array is returned. - * - * @return array The array of "used" variables in the closure (a.k.a the context). - */ - protected function parseContext() - { - $context = array(); - - if ($this->reflection->isClosure()) - { - $variable_names = array(); - $inside_use = false; - - // Parse the variable names from the "use" contruct by scanning tokens - /** @var $token \FunctionParser\Token */ - foreach ($this->tokenizer as $token) - { - if (!$inside_use && $token->is(T_USE)) - { - // Once we find the "use" construct, set the flag - $inside_use = true; - } - elseif ($inside_use && $token->is(T_VARIABLE)) - { - // For variables found in the "use" construct, get the name - $variable_names[] = trim($token->getCode(), '$ '); - } - elseif ($inside_use && $token->isClosingParenthesis()) - { - // Once we encounter a closing parenthesis at the end of the - // "use" construct, then we are finished parsing. - break; - } - } - - // Get the values of the variables that are closed upon in "use" - $variable_values = $this->reflection->getStaticVariables(); - - // Construct the context by combining the variable names and values - foreach ($variable_names as $variable_name) - { - if (isset($variable_values[$variable_name])) - { - $context[$variable_name] = $variable_values[$variable_name]; - } - } - } - - return $context; - } -} diff --git a/vendor/jeremeamia/FunctionParser/src/Token.php b/vendor/jeremeamia/FunctionParser/src/Token.php deleted file mode 100644 index 6775b0a..0000000 --- a/vendor/jeremeamia/FunctionParser/src/Token.php +++ /dev/null @@ -1,249 +0,0 @@ -name = null; - $this->value = null; - $this->code = $token; - $this->line = null; - } - elseif (is_array($token) && in_array(count($token), array(2, 3))) - { - $this->name = token_name($token[0]); - $this->value = $token[0]; - $this->code = $token[1]; - $this->line = isset($token[2]) ? $token[2] : null; - } - else - { - throw new \InvalidArgumentException('The token was invalid.'); - } - } - - /** - * Get the token name. - * - * @return string The token name. Always null for literal tokens. - */ - public function getName() - { - return $this->name; - } - - /** - * Get the token's integer value. Always null for literal tokens. - * - * @return integer The token value. - */ - public function getValue() - { - return $this->value; - } - - /** - * Get the token's PHP code as a string. - * - * @return string The token code - */ - public function getCode() - { - return $this->code; - } - - /** - * Get the line where the token was defined. Always null for literal tokens. - * - * @return integer The line number. - */ - public function getLine() - { - return $this->line; - } - - /** - * Determines whether the token is an opening brace. - * - * @return boolean True if the token is an opening brace. - */ - public function isOpeningBrace() - { - return ($this->code === '{' || $this->name === 'T_CURLY_OPEN' || $this->name === 'T_DOLLAR_OPEN_CURLY_BRACES'); - } - - /** - * Determines whether the token is an closing brace. - * - * @return boolean True if the token is an closing brace. - */ - public function isClosingBrace() - { - return ($this->code === '}'); - } - - /** - * Determines whether the token is an opening parenthsesis. - * - * @return boolean True if the token is an opening parenthsesis. - */ - public function isOpeningParenthesis() - { - return ($this->code === '('); - } - - /** - * Determines whether the token is an closing parenthsesis. - * - * @return boolean True if the token is an closing parenthsesis. - */ - public function isClosingParenthesis() - { - return ($this->code === ')'); - } - - /** - * Determines whether the token is a literal token. - * - * @return boolean True if the token is a literal token. - */ - public function isLiteralToken() - { - return ($this->name === null && $this->code !== null); - } - - /** - * Determines whether the token's integer value or code is equal to the specified value. - * - * @param mixed $value The value to check. - * @return boolean True if the token is equal to the value. - */ - public function is($value) - { - return ($this->code === $value || $this->value === $value); - } - - /** - * Typical magic getter. - * - * @param string $key The property name. - * @return mixed The property value. - * @throws \OutOfBoundsException - */ - public function __get($key) - { - if (property_exists(__CLASS__, $key)) - { - return $this->{$key}; - } - else - { - throw new \OutOfBoundsException("The property \"{$key}\" does not exist in Token."); - } - } - - /** - * Typical magic setter. - * - * @param string $key The property name. - * @param mixed $value The property's new value. - * @throws \OutOfBoundsException - */ - public function __set($key, $value) - { - if (property_exists(__CLASS__, $key)) - { - $this->{$key} = $value; - } - else - { - throw new \OutOfBoundsException("The property \"{$key}\" does not exist in Token."); - } - } - - /** - * Typical magic isset. - * - * @param string $key The property name. - * @return boolean Whether or not the property is set. - */ - public function __isset($key) - { - return isset($this->{$key}); - } - - /** - * Serializes the token. - * - * @return string The serialized token. - */ - public function serialize() - { - return serialize(array($this->name, $this->value, $this->code, $this->line)); - } - - /** - * Unserializes the token - * - * @param string $serialized The serialized token - */ - public function unserialize($serialized) - { - list($this->name, $this->value, $this->code, $this->line) = unserialize($serialized); - } - - /** - * Typical magic tostring. - * - * @return string The code. - */ - public function __toString() - { - return $this->code; - } -} diff --git a/vendor/jeremeamia/FunctionParser/src/Tokenizer.php b/vendor/jeremeamia/FunctionParser/src/Tokenizer.php deleted file mode 100644 index 344f5c5..0000000 --- a/vendor/jeremeamia/FunctionParser/src/Tokenizer.php +++ /dev/null @@ -1,444 +0,0 @@ -tokens = array_map(function($token) { - return new Token($token); - }, token_get_all($code)); - - // Remove the PHP opening tag token - array_shift($this->tokens); - } - elseif (is_array($code) && isset($code[0]) && $code[0] instanceof Token) - { - $this->tokens = $code; - } - else - { - throw new \InvalidArgumentException('The tokenizer either expects a string of code or an array of Tokens.'); - } - - $this->index = 0; - } - - /** - * Move to the next token and return it. Returns null if there are no more tokens. - * - * @return \FunctionParser\Token The next token in the tokenizer. - */ - public function getNextToken() - { - $this->next(); - - return $this->valid() ? $this->current() : null; - } - - /** - * Move to the previous token and return it. Returns null if there are no more tokens. - * - * @return \FunctionParser\Token The previous token in the tokenizer. - */ - public function getPreviousToken() - { - $this->prev(); - - return $this->valid() ? $this->current() : null; - } - - /** - * Determines whether or not there are more tokens left. - * - * @return boolean True if there are more tokens left in the tokenizer. - */ - public function hasMoreTokens() - { - return ($this->index < $this->count() - 1); - } - - /** - * Find a token in the tokenizer. You can search by the token's literal code or name. You can also specify on - * offset for the search. If the offset is negative, the search will be done starting from the end. - * - * @param string|integer $search The token's literal code or name. - * @param integer $offset The offset to start searching from. A negative offest searches from the end. - * @return integer|boolean The index of the token that has been found or false. - */ - public function findToken($search, $offset = 0) - { - if ($search === null) - { - throw new \InvalidArgumentException('A token cannot be searched for with a null value.'); - } - elseif (!is_int($offset)) - { - throw new \InvalidArgumentException('On offset must be specified as an integer.'); - } - - if ($offset >= 0) - { - // Offset is greater than zero. Search from left to right - $tokenizer = clone $this; - $is_reversed = false; - } - else - { - // Offset is negative. Search from right to left - $tokenizer = new Tokenizer(array_reverse($this->tokens)); - $offset = abs($offset) - 1; - $is_reversed = true; - } - - // Seek to the offset and start the search from there - $tokenizer->seek($offset); - - // Loop through the tokens and search for the target token - while ($tokenizer->valid()) - { - $token = $tokenizer->current(); - - if ($token->code === $search || $token->name === $search || $token->value === $search) - { - $index = $tokenizer->key(); - - // Calculate the index as if the tokenizer is not reversed - if ($is_reversed) - { - $index = count($tokenizer) - $index - 1; - } - - return $index; - } - - $tokenizer->next(); - } - - return false; - } - - /** - * Determines whether or not a token is in the tokenizer. Searches by literal token code or name - * - * @param string|integer $search The token's literal code or name. - * @return boolean Whether or not the token is in the tokenizer - */ - public function hasToken($search) - { - return (boolean) $this->findToken($search); - } - - /** - * Returns a new tokenizer that consists of a subset of the tokens specified by the provided range. - * - * @param integer $start The starting offset of the range - * @param integer $finish The ending offset of the range - * @return \FunctionParser\Tokenizer A tokenizer with a subset of tokens - */ - public function getTokenRange($start, $finish) - { - $tokens = array_slice($this->tokens, (integer) $start, (integer) $finish - (integer) $start); - - return new Tokenizer($tokens); - } - - /** - * Prepends a tokenizer to the beginning of this tokenizer. - * - * @param \FunctionParser\Tokenizer $new_tokens The tokenizer to prepend. - * @return \FunctionParser\Tokenizer - */ - public function prependTokens(Tokenizer $new_tokens) - { - $this->tokens = array_merge($new_tokens->asArray(), $this->tokens); - $this->rewind(); - - return $this; - } - - /** - * Appends a tokenizer to the beginning of this tokenizer. - * - * @param \FunctionParser\Tokenizer $new_tokens The tokenizer to append. - * @return \FunctionParser\Tokenizer - */ - public function appendTokens(Tokenizer $new_tokens) - { - $this->tokens = array_merge($this->tokens, $new_tokens->asArray()); - $this->rewind(); - - return $this; - } - - /** - * Get the first token. - * - * @return \FunctionParser\Token The first token. - */ - public function getFirst() - { - $this->index = 0; - - return $this->current(); - } - - /** - * Get the last token - * - * @return \FunctionParser\Token The last token. - */ - public function getLast() - { - $this->index = $this->count() - 1; - - return $this->current(); - } - - /** - * Returns the current token. - * - * @return \FunctionParser\Token The current token. - */ - public function current() - { - return $this->tokens[$this->index]; - } - - /** - * Move to the next token. - */ - public function next() - { - $this->index++; - } - - /** - * Move to the previous token. - */ - public function prev() - { - $this->index--; - } - - /** - * Return the current token's index. - * - * @return integer The token's index. - */ - public function key() - { - return $this->index; - } - - /** - * Determines whether or not the tokenizer's index points to a token. - * - * @return boolean True if the current token exists. - */ - public function valid() - { - return array_key_exists($this->index, $this->tokens); - } - - /** - * Move to the first token. - */ - public function rewind() - { - $this->index = 0; - } - - /** - * Move to the specified token. - * - * @param integer $index The index to seek to. - */ - public function seek($index) - { - $this->index = (integer) $index; - } - - /** - * Determines wheter or not the specified offset exists. - * - * @param integer $offset The offset to check. - * @return boolean Whether or not the offset exists. - */ - public function offsetExists($offset) - { - return is_integer($offset) && array_key_exists($offset, $this->tokens); - } - - /** - * Gets the token at the specified offset. - * - * @param integer $offset The offset to get. - * @return \FunctionParser\Token The token at the offset. - */ - public function offsetGet($offset) - { - return $this->tokens[$offset]; - } - - /** - * Sets the token at the specified offset. - * - * @param integer $offset The offset to set. - * @param \FunctionParser\Token The token to set. - * @throws \InvalidArgumentException - */ - public function offsetSet($offset, $value) - { - if (!(is_integer($offset) && $offset >= 0 && $offset <= $this->count())) - { - throw new \InvalidArgumentException('The offset must be a valid, positive integer.'); - } - - if (!$value instanceof Token) - { - throw new \InvalidArgumentException('The value provided must be a token.'); - } - - $this->tokens[$offset] = $value; - } - - /** - * Unsets the token at the specified offset. - * - * @param integer $offset The offset to unset. - */ - public function offsetUnset($offset) - { - if ($this->offsetExists($offset)) - { - unset($this->tokens[$offset]); - - // Re-index the tokens - $this->tokens = array_values($this->tokens); - - // If the current index is now outside of the valid indeces, reset the index - if (!$this->valid()) - { - $this->rewind(); - } - } - } - - /** - * Get the number of tokens in the tokenizer. - * - * @return integer The number of tokens. - */ - public function count() - { - return count($this->tokens); - } - - /** - * Serializes the tokenizer. - * - * @return string The serialized tokenizer. - */ - public function serialize() - { - return serialize(array( - 'tokens' => $this->tokens, - 'index' => $this->index, - )); - } - - /** - * Unserialize the tokenizer. - * - * @param string $serialized The serialized tokenizer. - */ - public function unserialize($serialized) - { - $unserialized = unserialize($serialized); - $this->__construct($unserialized['tokens']); - $this->seek($unserialized['index']); - } - - /** - * Gets the tokens as an array from the tokenizer. - * - * @return array The array of tokens. - */ - public function asArray() - { - return $this->tokens; - } - - /** - * Returns a tokenizer as a string of code. - * - * @return string The string of code. - */ - public function asString() - { - $code = ''; - - foreach ($this->tokens as $token) - { - $code .= $token; - } - - return $code; - } - - /** - * Returns a tokenizer as a string of code. - * - * @return string The string of code. - */ - public function __toString() - { - return $this->asString(); - } -} diff --git a/vendor/jeremeamia/FunctionParser/tests/IntegrationTest/FunctionParserTest.php b/vendor/jeremeamia/FunctionParser/tests/IntegrationTest/FunctionParserTest.php deleted file mode 100644 index c0461a5..0000000 --- a/vendor/jeremeamia/FunctionParser/tests/IntegrationTest/FunctionParserTest.php +++ /dev/null @@ -1,175 +0,0 @@ -assertEquals($code, $parser->getCode()); -} - - public function testParseRecursiveFunctionWorksCorrectly() - { - $factorial = function($number) use (&$factorial) - { - if ($number == 0) - { - return 1; - } - else - { - return $number * $factorial($number - 1); - } - }; - - $code = <<< 'CODE' -function($number) use (&$factorial) - { - if ($number == 0) - { - return 1; - } - else - { - return $number * $factorial($number - 1); - } - } -CODE; - - $parser = FunctionParser::fromCallable($factorial); - $this->assertEquals($code, $parser->getCode()); - } - - /** - * @expectedException \RuntimeException - */ - public function testParsingFunctionsWithMultipleFunctionsPerLineThrowsException() - { - $a = function(){return 'a';};$b = function(){return 'b';}; - - $parser = FunctionParser::fromCallable($a); - } - - public function testParseFunctionWithNestedFunctionWorksCorrectly() - { - $getIncreaseByPercentFunction = function($percent) - { - return function($number) use($percent) - { - return $number + ($number * $percent / 100); - }; - }; - - $code = <<< 'CODE' -function($percent) - { - return function($number) use($percent) - { - return $number + ($number * $percent / 100); - }; - } -CODE; - - $parser = FunctionParser::fromCallable($getIncreaseByPercentFunction); - $this->assertEquals($code, $parser->getCode()); - } - - public function testParseNestedFunctionWorksCorrectly() - { - $getIncreaseByPercentFunction = function($percent) - { - return function($number) use($percent) - { - return $number + ($number * $percent / 100); - }; - }; - - $code = <<< 'CODE' -function($number) use($percent) - { - return $number + ($number * $percent / 100); - } -CODE; - - $increaseBy50Percent = $getIncreaseByPercentFunction(50); - $parser = FunctionParser::fromCallable($increaseBy50Percent); - $this->assertEquals($code, $parser->getCode()); - } - - public function testParseFunctionWithCrazyStringInterpolationWorksCorrectly() - { - $doCrazyStringInterpolation = function($a, $b, $c, $d) - { - $string = "What are $a doing here? I am {$b} with my friend, ${c}. She has ${${$d}}. "; - $heredoc = <<< HERE -What are $a doing here? I am {$b} with my friend, ${c}. She has ${${$d}}. -HERE; - return $string . $heredoc; - }; - - $code = <<< 'CODE' -function($a, $b, $c, $d) - { - $string = "What are $a doing here? I am {$b} with my friend, ${c}. She has ${${$d}}. "; - $heredoc = <<< HERE -What are $a doing here? I am {$b} with my friend, ${c}. She has ${${$d}}. -HERE; - return $string . $heredoc; - } -CODE; - - $parser = FunctionParser::fromCallable($doCrazyStringInterpolation); - $this->assertEquals($code, $parser->getCode()); - } -} diff --git a/vendor/jeremeamia/FunctionParser/tests/UnitTest/FunctionParserTest.php b/vendor/jeremeamia/FunctionParser/tests/UnitTest/FunctionParserTest.php deleted file mode 100644 index 9e32fb9..0000000 --- a/vendor/jeremeamia/FunctionParser/tests/UnitTest/FunctionParserTest.php +++ /dev/null @@ -1,185 +0,0 @@ -functionParser = FunctionParser::fromCallable($function); - } - - /** - * Data provider for testFromCallableAcceptsAnyCallableType - */ - public function dataFromCallableAcceptsAnyCallableType() - { - return array( - array(array('\FunctionParser\FunctionParser', 'fromCallable')), - array('\FunctionParser\FunctionParser::fromCallable'), - array('\FunctionParser\UnitTest\foo'), - array(function() {return true;}), - ); - } - - /** - * @covers FunctionParser\FunctionParser::fromCallable - * @covers FunctionParser\FunctionParser::__construct - * @dataProvider dataFromCallableAcceptsAnyCallableType - */ - public function testFromCallableAcceptsAnyCallableType($callable) - { - if (!function_exists('\FunctionParser\UnitTest\foo')) - { - function foo() {return true;} - } - - $parser = FunctionParser::fromCallable($callable); - $this->assertInstanceOf('\FunctionParser\FunctionParser', $parser); - } - - /** - * Data provider for testFromCallableThrowsExceptionForInvalidArgs - */ - public function dataFromCallableThrowsExceptionForInvalidArgs() - { - return array( - array('foobar'), - array(5), - array('array_key_exists'), - array('\SplStack::shift'), - ); - } - - /** - * @covers FunctionParser\FunctionParser::fromCallable - * @covers FunctionParser\FunctionParser::__construct - * @dataProvider dataFromCallableThrowsExceptionForInvalidArgs - * @expectedException \InvalidArgumentException - */ - public function testFromCallableThrowsExceptionForInvalidArgs($callable) - { - $parser = FunctionParser::fromCallable($callable); - } - - /** - * @covers FunctionParser\FunctionParser::getReflection - */ - public function testGetReflectionReturnsReflectionFunctionObject() - { - $this->assertInstanceOf('\ReflectionFunctionAbstract', $this->functionParser->getReflection()); - } - - /** - * @covers FunctionParser\FunctionParser::getName - */ - public function testGetNameReturnsTheFunctionName() - { - if (!function_exists('\FunctionParser\UnitTest\foo')) - { - function foo() {return true;} - } - - $parser = FunctionParser::fromCallable('\FunctionParser\UnitTest\foo'); - - $this->assertEquals('FunctionParser\UnitTest\foo', $parser->getName()); - } - - /** - * @covers FunctionParser\FunctionParser::getName - */ - public function testGetNameReturnsNullIfClosure() - { - $this->assertNull($this->functionParser->getName()); - } - - /** - * @covers FunctionParser\FunctionParser::getParameters - * @covers FunctionParser\FunctionParser::fetchParameters - */ - public function testGetParametersReturnsParameterNamesForFunction() - { - $this->assertEquals(array('multiplier'), $this->functionParser->getParameters()); - } - - /** - * @covers FunctionParser\FunctionParser::getTokenizer - * @covers FunctionParser\FunctionParser::fetchTokenizer - */ - public function testGetTokenizerReturnsTheTokenzier() - { - $this->assertInstanceOf('\FunctionParser\Tokenizer', $this->functionParser->getTokenizer()); - } - - /** - * @covers FunctionParser\FunctionParser::getCode - * @covers FunctionParser\FunctionParser::parseCode - */ - public function testGetCodeReturnsTheActualCode() - { - $code = 'function($multiplier) use(&$iterations) { - return $multiplier * $iterations++; - }'; - - $this->assertEquals($code, $this->functionParser->getCode()); - } - - /** - * @covers FunctionParser\FunctionParser::parseCode - * @expectedException \RuntimeException - */ - public function testGetCodeThrowsExceptionWhenThereAreMultipleFunctionsPerLine() - { - $function = function() {return true;};function() {return false;}; - $parser = FunctionParser::fromCallable($function)->getCode(); - } - - /** - * @covers FunctionParser\FunctionParser::getBody - * @covers FunctionParser\FunctionParser::parseBody - */ - public function testGetBodyReturnsOnlyTheInnerPartOfTheCode() - { - $code = ' return $multiplier * $iterations++;'; - - $this->assertEquals($code, $this->functionParser->getBody()); - } - - /** - * @covers FunctionParser\FunctionParser::getContext - * @covers FunctionParser\FunctionParser::parseContext - */ - public function testGetContextReturnsTheClosuresContext() - { - $this->assertEquals(array('iterations'), array_keys($this->functionParser->getContext())); - } - - /** - * @covers FunctionParser\FunctionParser::getClass - */ - public function testGetClassReturnsNullForNonMethods() - { - $this->assertNull($this->functionParser->getClass()); - } - - /** - * @covers FunctionParser\FunctionParser::getClass - */ - public function testGetClassReturnsTheClassNameForMethods() - { - $parser = FunctionParser::fromCallable('\FunctionParser\FunctionParser::getClass'); - $this->assertEquals('FunctionParser\FunctionParser', $parser->getClass()->getName()); - } -} diff --git a/vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenTest.php b/vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenTest.php deleted file mode 100644 index 381f462..0000000 --- a/vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenTest.php +++ /dev/null @@ -1,223 +0,0 @@ -assertInstanceOf('FunctionParser\Token', $token); - - $token = new Token('{'); - $this->assertInstanceOf('FunctionParser\Token', $token); - } - - /** - * @covers FunctionParser\Token::__construct - * @expectedException \InvalidArgumentException - */ - public function testConstructorThrowsExceptionOnBadArguments() - { - $token = new Token(array(100)); - } - - /** - * @covers FunctionParser\Token::getName - */ - public function testGettingTheNameReturnsAStringForNormalTokens() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertEquals($token->getName(), 'T_FUNCTION'); - } - - /** - * @covers FunctionParser\Token::getName - */ - public function testGettingTheNameReturnsNullForLiteralTokens() - { - $token = new Token('{'); - $this->assertEquals($token->getName(), null); - } - - /** - * @covers FunctionParser\Token::getCode - */ - public function testGettingTheCodeReturnsStringOfCodeForAnyTokens() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertEquals($token->getCode(), 'function'); - - $token = new Token('{'); - $this->assertEquals($token->getCode(), '{'); - } - - /** - * @covers FunctionParser\Token::getLine - */ - public function testGettingTheLineReturnsAnIntegerForLiteralTokens() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertEquals($token->getLine(), 2); - } - - /** - * @covers FunctionParser\Token::getLine - */ - public function testGettingTheLineReturnsNullForLiteralTokens() - { - $token = new Token('{'); - $this->assertEquals($token->getValue(), null); - } - - /** - * @covers FunctionParser\Token::getValue - */ - public function testGettingTheValueReturnsAnIntegerForLiteralTokens() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertEquals($token->getValue(), T_FUNCTION); - } - - /** - * @covers FunctionParser\Token::getValue - */ - public function testGettingTheValueLineReturnsNullForLiteralTokens() - { - $token = new Token('{'); - $this->assertEquals($token->getLine(), null); - } - - /** - * @covers FunctionParser\Token::isOpeningBrace - */ - public function testOpeningBracesAreIdentifiedCorrectly() - { - $token = new Token('}'); - $this->assertFalse($token->isOpeningBrace()); - - $token = new Token('{'); - $this->assertTrue($token->isOpeningBrace()); - } - - /** - * @covers FunctionParser\Token::isClosingBrace - */ - public function testClosingBracesAreIdentifiedCorrectly() - { - $token = new Token('{'); - $this->assertFalse($token->isClosingBrace()); - - $token = new Token('}'); - $this->assertTrue($token->isClosingBrace()); - } - - /** - * @covers FunctionParser\Token::isOpeningParenthesis - */ - public function testOpeningParenthesesAreIdentifiedCorrectly() - { - $token = new Token(')'); - $this->assertFalse($token->isOpeningParenthesis()); - - $token = new Token('('); - $this->assertTrue($token->isOpeningParenthesis()); - } - - /** - * @covers FunctionParser\Token::isClosingParenthesis - */ - public function testClosingParenthesesAreIdentifiedCorrectly() - { - $token = new Token('('); - $this->assertFalse($token->isClosingParenthesis()); - - $token = new Token(')'); - $this->assertTrue($token->isClosingParenthesis()); - } - - /** - * @covers FunctionParser\Token::isLiteralToken - */ - public function testLiteralTokensAreIdentifiedCorrectly() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertFalse($token->isLiteralToken()); - - $token = new Token('{'); - $this->assertTrue($token->isLiteralToken()); - } - - /** - * @covers FunctionParser\Token::is - */ - public function testTokensAreIdentifiedCorrectlyByCodeOrValue() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - - $this->assertTrue($token->is(T_FUNCTION)); - $this->assertTrue($token->is('function')); - $this->assertFalse($token->is(T_VARIABLE)); - $this->assertFalse($token->is('foo')); - } - - /** - * @covers FunctionParser\Token::serialize - * @covers FunctionParser\Token::unserialize - */ - public function testSerializingAndUnserializingDoesNotAlterToken() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $serialized = serialize($token); - $unserialized = unserialize($serialized); - $this->assertEquals($token, $unserialized); - } - - /** - * @covers FunctionParser\Token::__isset - * @covers FunctionParser\Token::__get - * @covers FunctionParser\Token::__set - */ - public function testGettersAndSettersWorkCorrectly() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertTrue(isset($token->name)); - $this->assertEquals($token->getName(), $token->name); - $token->name = 'foo'; - $this->assertEquals($token->getName(), 'foo'); - } - - /** - * @covers FunctionParser\Token::__get - * @expectedException \OutOfBoundsException - */ - public function testGetterThrowsExceptionOnBadKey() - { - $token = new Token('{'); - $foo = $token->foo; - } - - /** - * @covers FunctionParser\Token::__set - * @expectedException \OutOfBoundsException - */ - public function testSetterThrowsExceptionOnBadKey() - { - $token = new Token('{'); - $token->foo = 'foo'; - } - - /** - * @covers FunctionParser\Token::__toString - */ - public function testConvertingToStringReturnsTheTokenCode() - { - $token = new Token(array(T_FUNCTION, 'function', 2)); - $this->assertEquals((string) $token, $token->getCode()); - } -} diff --git a/vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenizerTest.php b/vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenizerTest.php deleted file mode 100644 index 563a610..0000000 --- a/vendor/jeremeamia/FunctionParser/tests/UnitTest/TokenizerTest.php +++ /dev/null @@ -1,475 +0,0 @@ -code = 'function fooize(array $bar) {return \'foo(\'.join(\',\', $bar).\')\';}'; - $this->tokenizer = new Tokenizer($this->code); - } - - /** - * @covers FunctionParser\Tokenizer::__construct - */ - public function testConstructorAcceptsCodeAsString() - { - $tokenizer = new Tokenizer('echo $foo;'); - $this->assertInstanceOf('FunctionParser\Tokenizer', $tokenizer); - } - - /** - * @covers FunctionParser\Tokenizer::__construct - */ - public function testConstructorAcceptsArrayOfTokens() - { - $token_prototype = $this->getMockBuilder('FunctionParser\Token') - ->disableOriginalConstructor(true) - ->getMock(); - - $tokens = array( - clone $token_prototype, - clone $token_prototype, - clone $token_prototype, - ); - - $tokenizer = new Tokenizer($tokens); - $this->assertInstanceOf('FunctionParser\Tokenizer', $tokenizer); - } - - /** - * @covers FunctionParser\Tokenizer::__construct - * @expectedException \InvalidArgumentException - */ - public function testConstructorThrowsExceptionOnInvalidArgument() - { - $tokenizer = new Tokenizer(5); - } - - /** - * Data provider for testCanGetNextToken - */ - public function dataCanGetNextToken() - { - return array( - array( 5, '$bar', 6 ), - array( 0, ' ', 1 ), - array( 23, '}', 24 ), - array( 24, null, 25 ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::getNextToken - * @dataProvider dataCanGetNextToken - */ - public function testCanGetNextToken($seek_value, $next_token_value, $next_token_index) - { - $this->tokenizer->seek($seek_value); - $token = $this->tokenizer->getNextToken(); - - $this->assertEquals($next_token_value, $token ? $token->getCode() : $token); - $this->assertEquals($next_token_index, $this->tokenizer->key()); - } - - /** - * Data provider for testCanGetPreviousToken - */ - public function dataCanGetPreviousToken() - { - return array( - array( 5, 'array', 4 ), - array( 0, null, -1 ), - array( 1, 'function', 0 ), - array( 24, ';', 23 ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::getPreviousToken - * @dataProvider dataCanGetPreviousToken - */ - public function testCanGetPreviousToken($seek_value, $next_token_value, $next_token_index) - { - $this->tokenizer->seek($seek_value); - $token = $this->tokenizer->getPreviousToken(); - - $this->assertEquals($next_token_value, $token ? $token->getCode() : $token); - $this->assertEquals($next_token_index, $this->tokenizer->key()); - } - - /** - * Data provider for testHasMoreTokensWorksProperly - */ - public function dataHasMoreTokensWorksProperly() - { - return array( - array( 10, true ), - array( 0, true ), - array( 24, false ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::hasMoreTokens - * @dataProvider dataHasMoreTokensWorksProperly - */ - public function testHasMoreTokensWorksProperly($seek_value, $return_value) - { - $this->tokenizer->seek($seek_value); - $this->assertEquals($return_value, $this->tokenizer->hasMoreTokens()); - } - - /** - * Data provider for testFindTokenWorksProperly - */ - public function dataFindTokenWorksProperly() - { - return array( - array( T_STRING, 0, 2 ), - array( T_STRING, 5, 14 ), - array( T_STRING, -1, 14 ), - array( 'T_STRING', 0, 2 ), - array( 'T_STRING', 5, 14 ), - array( 'T_STRING', -1, 14 ), - array( 'fooize', 0, 2 ), - array( 'join', 5, 14 ), - array( 'join', -1, 14 ), - array( 'cheese', 0, false ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::findToken - * @dataProvider dataFindTokenWorksProperly - */ - public function testFindTokenWorksProperly($search, $offset, $result) - { - $index = $this->tokenizer->findToken($search, $offset); - $this->assertEquals($result, $index); - } - - /** - * Data provider for testFindTokenThrowsExceptionOnBadArgs - */ - public function dataFindTokenThrowsExceptionOnBadArgs() - { - return array( - array( null, 0 ), - array( '{', null ), - array( null, null ), - array( '{', '{' ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::findToken - * @dataProvider dataFindTokenThrowsExceptionOnBadArgs - * @expectedException \InvalidArgumentException - */ - public function testFindTokenThrowsExceptionOnBadArgs($search, $offset) - { - $token = $this->tokenizer->findToken($search, $offset); - } - - /** - * @covers FunctionParser\Tokenizer::hasToken - */ - public function testHasTokenReturnsTrueOnExistingToken() - { - $this->assertTrue($this->tokenizer->hasToken(T_STRING)); - } - - /** - * @covers FunctionParser\Tokenizer::getTokenRange - */ - public function testGetTokenRangeGetsTheCorrectTokens() - { - $range = 'fooize(array $bar)'; - $this->assertEquals($range, $this->tokenizer->getTokenRange(2, 8)->asString()); - } - - /** - * @covers FunctionParser\Tokenizer::appendTokens - */ - public function testAppendTokensCorrectlyAddsTokensToTheEnd() - { - $new_code = 'var_dump($foo);'; - $new_tokens = new Tokenizer($new_code); - $this->tokenizer->appendTokens($new_tokens); - $this->assertEquals(30, $this->tokenizer->count()); - $this->assertEquals($new_code, substr($this->tokenizer, strlen($this->tokenizer) - strlen($new_code))); - } - - /** - * @covers FunctionParser\Tokenizer::prependTokens - */ - public function testPrependTokensCorrectlyAddsTokensToTheBeginning() - { - $new_code = 'var_dump($foo);'; - $new_tokens = new Tokenizer($new_code); - $this->tokenizer->prependTokens($new_tokens); - $this->assertEquals(30, $this->tokenizer->count()); - $this->assertEquals($new_code, substr($this->tokenizer, 0, strlen($new_code))); - } - - /** - * @covers FunctionParser\Tokenizer::getFirst - */ - public function testGetFirstReturnsTheFirstToken() - { - $this->assertEquals('function', $this->tokenizer->getFirst()->getCode()); - } - - /** - * @covers FunctionParser\Tokenizer::getLast - */ - public function testGetLastReturnsTheLastToken() - { - $this->assertEquals('}', $this->tokenizer->getLast()->getCode()); - } - - /** - * @covers FunctionParser\Tokenizer::current - */ - public function testCurrentFeatureOfIteratorWorks() - { - $this->assertEquals('function', $this->tokenizer->current()); - } - - /** - * @covers FunctionParser\Tokenizer::next - */ - public function testNextFeatureOfIteratorWorks() - { - $this->tokenizer->seek(10); - $this->tokenizer->next(); - $this->assertEquals(11, $this->tokenizer->key()); - } - - /** - * @covers FunctionParser\Tokenizer::prev - */ - public function testPrevFeatureOfIteratorWorks() - { - $this->tokenizer->seek(10); - $this->tokenizer->prev(); - $this->assertEquals(9, $this->tokenizer->key()); - } - - /** - * @covers FunctionParser\Tokenizer::key - */ - public function testKeyFeatureOfIteratorWorks() - { - $this->assertEquals(0, $this->tokenizer->key()); - } - - /** - * Data provider for testValidFeatureOfIteratorWorks - */ - public function dataValidFeatureOfIteratorWorks() - { - return array( - array( -1, false ), - array( 0, true ), - array( 14, true ), - array( 24, true ), - array( 25, false ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::valid - * @dataProvider dataValidFeatureOfIteratorWorks - */ - public function testValidFeatureOfIteratorWorks($seek, $result) - { - $this->tokenizer->seek($seek); - $this->assertEquals($result, $this->tokenizer->valid()); - } - - /** - * @covers FunctionParser\Tokenizer::rewind - */ - public function testRewindFeatureOfIteratorWorks() - { - $this->tokenizer->rewind(); - $this->assertEquals(0, $this->tokenizer->key()); - } - - /** - * @covers FunctionParser\Tokenizer::seek - */ - public function testSeekFeatureOfIteratorWorks() - { - $this->tokenizer->seek(5); - $this->assertEquals(5, $this->tokenizer->key()); - } - - /** - * @covers FunctionParser\Tokenizer::offsetExists - * @dataProvider dataValidFeatureOfIteratorWorks - */ - public function testOffsetExistsWorksProperly($offset, $result) - { - $this->assertEquals($result, isset($this->tokenizer[$offset])); - } - - /** - * Data provider for testOffsetGetWorksProperly - */ - public function dataOffsetGetWorksProperly() - { - return array( - array( -1, null ), - array( 0, 'function' ), - array( 14, 'join' ), - array( 24, '}' ), - array( 25, null ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::offsetGet - * @dataProvider dataOffsetGetWorksProperly - */ - public function testOffsetGetWorksProperly($offset, $result) - { - $this->assertEquals($result, isset($this->tokenizer[$offset]) ? $this->tokenizer[$offset]->getCode() : null); - } - - /** - * Data provider for testOffsetSetWorksProperly - */ - public function dataOffsetSetWorksProperly() - { - return array( - array( 0, 'dummy' ), - array( 14, 'dummy' ), - array( 24, 'dummy' ), - array( 25, 'dummy' ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::offsetSet - * @dataProvider dataOffsetSetWorksProperly - */ - public function testOffsetSetWorksProperly($offset, $token_value) - { - $token = $this->getMockBuilder('FunctionParser\Token') - ->setConstructorArgs(array($token_value)) - ->getMock(); - - $this->tokenizer[$offset] = $token; - $this->assertSame($token, $this->tokenizer[$offset]); - } - - /** - * Data provider for testOffsetSetThrowsExceptionOnInvalidArgs - */ - public function dataOffsetSetThrowsExceptionOnInvalidArgs() - { - return array( - array( 'foo', 'dummy' ), - array( -1, 'dummy' ), - array( 26, 'dummy' ), - array( 12, null ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::offsetSet - * @dataProvider dataOffsetSetThrowsExceptionOnInvalidArgs - * @expectedException \InvalidArgumentException - */ - public function testOffsetSetThrowsExceptionOnInvalidArgs($offset, $value) - { - $this->tokenizer[$offset] = $value ? $this->getMockBuilder('FunctionParser\Token') - ->setConstructorArgs(array($value)) - ->getMock() : null; - } - - /** - * Data provider for testOffsetUnsetWorksProperly - */ - public function dataOffsetUnsetWorksProperly() - { - return array( - array( 0, 5, 5, 24 ), - array( 14, 5, 5, 24 ), - array( 24, 24, 0, 24 ), - array( 30, 5, 5, 25 ), - ); - } - - /** - * @covers FunctionParser\Tokenizer::offsetUnset - * @dataProvider dataOffsetUnsetWorksProperly - */ - public function testOffsetUnsetWorksProperly($offset, $starting_key, $ending_key, $ending_count) - { - $this->tokenizer->seek($starting_key); - unset($this->tokenizer[$offset]); - $this->assertEquals($ending_key, $this->tokenizer->key()); - $this->assertEquals($ending_count, $this->tokenizer->count()); - } - - /** - * @covers FunctionParser\Tokenizer::count - */ - public function testCountCorrectlyGetsNumberOfTokens() - { - $this->assertEquals(25, count($this->tokenizer)); - } - - /** - * @covers FunctionParser\Tokenizer::serialize - * @covers FunctionParser\Tokenizer::unserialize - */ - public function testSerializingAndUnserializingDoesNotAlterTokenizer() - { - $serialized = serialize($this->tokenizer); - $unserialized = unserialize($serialized); - $this->assertEquals($this->tokenizer, $unserialized); - } - - /** - * @covers FunctionParser\Tokenizer::asString - * @covers FunctionParser\Tokenizer::__toString - */ - public function testConvertingToStringReturnsCode() - { - $this->assertEquals($this->code, (string) $this->tokenizer); - } - - /** - * @covers FunctionParser\Tokenizer::asArray - * @covers FunctionParser\Tokenizer::__toString - */ - public function testConvertingToArrayReturnsTokens() - { - $tokens = array(); - - foreach ($this->tokenizer as $token) - { - $tokens[] = $token; - } - - $this->assertEquals($tokens, $this->tokenizer->asArray()); - } -} diff --git a/vendor/nikic/php-parser/.travis.yml b/vendor/nikic/php-parser/.travis.yml deleted file mode 100644 index e5ec7c9..0000000 --- a/vendor/nikic/php-parser/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: php - -php: - - 5.2 - - 5.3 - - 5.4 - - 5.5 \ No newline at end of file diff --git a/vendor/nikic/php-parser/CHANGELOG.md b/vendor/nikic/php-parser/CHANGELOG.md deleted file mode 100644 index 4bd88c1..0000000 --- a/vendor/nikic/php-parser/CHANGELOG.md +++ /dev/null @@ -1,156 +0,0 @@ -Version 0.9.5-dev ------------------ - -* Added `NodeTraverser::removeVisitor()` method, which removes a visitor from the node traverser. This also modifies the - corresponding `NodeTraverserInterface`. - -Version 0.9.4 (25.08.2013) --------------------------- -* [PHP 5.5] Add support for `ClassName::class`. This is parsed as an `Expr_ClassConstFetch` with `'class'` being the - constant name. - -* Syntax errors now include information on expected tokens and mimic the format of PHP's own (pre 5.4) error messages. - Example: - - Old: Unexpected token T_STATIC on line 1 - New: Syntax error, unexpected T_STATIC, expecting T_STRING or T_NS_SEPARATOR or '{' - -* `PHPParser_PrettyPrinter_Zend` was renamed to `PHPParser_PrettyPrinter_Default` as the default pretty printer only - very loosely applies the Zend Coding Standard. The class `PHPParser_PrettyPrinter_Zend` extends - `PHPParser_PrettyPrinter_Default` to maintain backwards compatibility. - -* The pretty printer now prints namespaces in semicolon-style if possible (i.e. if the file does not contain a global - namespace declaration). - -* Added `prettyPrintFile(array $stmts)` method which will pretty print a file of statements including the opening - `` at the start and end - of files using inline HTML. - -* There now is a builder for interfaces (`PHPParser_Builder_Interface`). - -* An interface for the node traversation has been added: `PHPParser_NodeTraverserInterface` - -* Fix pretty printing of `include` expressions (precedence information was missing). - -* Fix "undefined index" notices when generating the expected tokens for a syntax error. - -* Improve performance of `PrettyPrinter` construction by no longer using the `uniqid()` function. - -Version 0.9.3 (22.11.2012) --------------------------- - -* [BC] As `list()` in `foreach` is now supported the structure of list assignments changed: - - 1. There is no longer a dedicated `AssignList` node; instead a normal `Assign` node is used with a `List` as `var`. - 2. Nested lists are now `List` nodes too, instead of just arrays. - -* [BC] As arbitrary expressions are allowed in `empty()` now its subnode was renamed from `var` to `expr`. - -* [BC] The protected `pSafe()` method in `PrettyPrinterAbstract` was renamed to `pNoIndent()`. - -* [PHP 5.5] Add support for arbitrary expressions in `empty()`. - -* [PHP 5.5] Add support for constant array / string dereferencing. - Examples: `"foo"[2]`, `[1, 2, 3][2]` - -* [PHP 5.5] Add support for `yield` expressions. This adds a new `Yield` expression type, with subnodes `key` and - `value`. - -* [PHP 5.5] Add support for `finally`. This adds a new `finallyStmts` subnode to the `TryCatch` node. If there is no - finally clause it will be `null`. - -* [PHP 5.5] Add support for `list()` destructuring of `foreach` values. - Example: `foreach ($coords as list($x, $y)) { ... }` - -* Improve pretty printing of expressions by printing less unnecessary parentheses. In particular concatenations are now - printed as `$a . $b . $c . $d . $e` rather than `$a . ($b . ($c . ($d . $e)))`. This is implemented by taking operator - associativity into account. New protected methods added to the pretty printer are `pPrec()`, `pInfixOp()`, - `pPrefixOp()` and `pPostfixOp()`. This also fixes an issue with extraneous parentheses in closure bodies. - -* Fix formatting of fall-through `case` statements in the Zend pretty printer. - -* Fix parsing of `$foo =& new Bar`. It is now properly parsed as `AssignRef` (instead of `Assign`). - -* Fix assignment of `$endAttributes`. Sometimes the attributes of the token right after the node were assigned, rather - than the attributes of the last token in the node. - -* `rebuildParser.php` is now designed to be run from the command line rather than from the browser. - -Version 0.9.2 (07.07.2012) --------------------------- - -* Add `Class->getMethods()` function, which returns all methods contained in the `stmts` array of the class node. This - does not take inherited methods into account. - -* Add `isPublic()`, `isProtected()`, `isPrivate()`. `isAbstract()`, `isFinal()` and `isStatic()` accessors to the - `ClassMethod`, `Property` and `Class` nodes. (`Property` and `Class` obviously only have the accessors relevant to - them.) - -* Fix parsing of new expressions in parentheses, e.g. `return(new Foo);`. - -* [BC] Due to the below changes nodes now optionally accept an `$attributes` array as the - last parameter, instead of the previously used `$line` and `$docComment` parameters. - -* Add mechanism for adding attributes to nodes in the lexer. - - The following attributes are now added by default: - - * `startLine`: The line the node started in. - * `endLine`: The line the node ended in. - * `comments`: An array of comments. The comments are instances of `PHPParser_Comment` - (or `PHPParser_Comment_Doc` for doc comments). - - The methods `getLine()` and `setLine()` still exist and function as before, but internally - operator on the `startLine` attribute. - - `getDocComment()` also continues to exist. It returns the last comment in the `comments` - attribute if it is a doc comment, otherwise `null`. As `getDocComment()` now returns a - comment object (which can be modified using `->setText()`) the `setDocComment()` method was - removed. Comment objects implement a `__toString()` method, so `getDocComment()` should - continue to work properly with old code. - -* [BC] Use inject-once approach for lexer: - - Now the lexer is injected only once when creating the parser. Instead of - - $parser = new PHPParser_Parser; - $parser->parse(new PHPParser_Lexer($code)); - $parser->parse(new PHPParser_Lexer($code2)); - - you write: - - $parser = new PHPParser_Parser(new PHPParser_Lexer); - $parser->parse($code); - $parser->parse($code2); - -* Fix `NameResolver` visitor to also resolve class names in `catch` blocks. - -Version 0.9.1 (24.04.2012) --------------------------- - -* Add ability to add attributes to nodes: - - It is now possible to add attributes to a node using `$node->setAttribute('name', 'value')` and to retrieve them using - `$node->getAttribute('name' [, 'default'])`. Additionally the existance of an attribute can be checked with - `$node->hasAttribute('name')` and all attributes can be returned using `$node->getAttributes()`. - -* Add code generation features: Builders and templates. - - For more infos, see the [code generation documentation][1]. - -* [BC] Don't traverse nodes merged by another visitor: - - If a NodeVisitor returns an array of nodes to merge, these will no longer be traversed by all other visitors. This - behavior only caused problems. - -* Fix line numbers for some list structures. -* Fix XML unserialization of empty nodes. -* Fix parsing of integers that overflow into floats. -* Fix emulation of NOWDOC and binary floats. - -Version 0.9.0 (05.01.2012) --------------------------- - -First version. - - [1]: https://github.com/nikic/PHP-Parser/blob/master/doc/3_Code_generation.markdown \ No newline at end of file diff --git a/vendor/nikic/php-parser/LICENSE b/vendor/nikic/php-parser/LICENSE deleted file mode 100644 index 443210b..0000000 --- a/vendor/nikic/php-parser/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Copyright (c) 2011 by Nikita Popov. - -Some 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. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -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 -OWNER 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. \ No newline at end of file diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md deleted file mode 100644 index 8711eab..0000000 --- a/vendor/nikic/php-parser/README.md +++ /dev/null @@ -1,78 +0,0 @@ -PHP Parser -========== - -This is a PHP 5.5 (and older) parser written in PHP. It's purpose is to simplify static code analysis and -manipulation. - -Documentation can be found in the [`doc/`][1] directory. - -***Note: This project is experimental, so the API is subject to change.*** - -In a Nutshell -------------- - -Basically, the parser does nothing more than turn some PHP code into an abstract syntax tree. ("nothing -more" is kind of sarcastic here as PHP has a ... uhm, let's just say "not nice" ... grammar, which makes -parsing PHP very hard.) - -For example, if you stick this code in the parser: - -```php -=5.2", - "ext-tokenizer": "*" - }, - "autoload": { - "psr-0": { "PHPParser": "lib/" } - }, - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - } -} diff --git a/vendor/nikic/php-parser/doc/0_Introduction.markdown b/vendor/nikic/php-parser/doc/0_Introduction.markdown deleted file mode 100644 index d4b0b7b..0000000 --- a/vendor/nikic/php-parser/doc/0_Introduction.markdown +++ /dev/null @@ -1,81 +0,0 @@ -Introduction -============ - -This project is a PHP 5.5 (and older) parser **written in PHP itself**. - -What is this for? ------------------ - -A parser is useful for [static analysis][0] and manipulation of code and basically any other -application dealing with code programmatically. A parser constructs an [Abstract Syntax Tree][1] -(AST) of the code and thus allows dealing with it in an abstract and robust way. - -There are other ways of dealing with source code. One that PHP supports natively is using the -token stream generated by [`token_get_all`][2]. The token stream is much more low level than -the AST and thus has different applications: It allows to also analyze the exact formatting of -a file. On the other hand the token stream is much harder to deal with for more complex analysis. -For example an AST abstracts away the fact that in PHP variables can be written as `$foo`, but also -as `$$bar`, `${'foobar'}` or even `${!${''}=barfoo()}`. You don't have to worry about recognizing -all the different syntaxes from a stream of tokens. - -Another questions is: Why would I want to have a PHP parser *written in PHP*? Well, PHP might not be -a language especially suited for fast parsing, but processing the AST is much easier in PHP than it -would be in other, faster languages like C. Furthermore the people most probably wanting to do -programmatic PHP code analysis are incidentally PHP developers, not C developers. - -What can it parse? ------------------- - -The parser uses a PHP 5.5 compliant grammar, which is backwards compatible with at least PHP 5.4, PHP 5.3 -and PHP 5.2 (and maybe older). - -As the parser is based on the tokens returned by `token_get_all` (which is only able to lex the PHP -version it runs on), additionally a wrapper for emulating new tokens from 5.3, 5.4 and 5.5 is provided. This -allows to parse PHP 5.5 source code running on PHP 5.2, for example. This emulation is very hacky and not -yet perfect, but it should work well on any sane code. - -What output does it produce? ----------------------------- - -The parser produces an [Abstract Syntax Tree][1] (AST) also known as a node tree. How this looks like -can best be seen in an example. The program `parse($code); -} catch (PHPParser_Error $e) { - echo 'Parse Error: ', $e->getMessage(); -} -``` - -The `parse` method will return an array of statement nodes (`$stmts`). - -### Emulative lexer - -Instead of `PHPParser_Lexer` one can also use `PHPParser_Lexer_Emulative`. This class will emulate tokens -of newer PHP versions and as such allow parsing PHP 5.5 on PHP 5.2, for example. So if you want to parse -PHP code of newer versions than the one you are running, you should use the emulative lexer. - -Node tree ---------- - -If you use the above code with `$code = "subNodeName`. The `Stmt_Echo` node has only one subnode `exprs`. So in order to access it -in the above example you would write `$stmts[0]->exprs`. If you wanted to access name of the function -call, you would write `$stmts[0]->exprs[1]->name`. - -All nodes also define a `getType()` method that returns the node type (the type is the class name -without the `PHPParser_Node_` prefix). - -It is possible to associate custom metadata with a node using the `setAttribute()` method. This data -can then be retrieved using `hasAttribute()`, `getAttribute()` and `getAttributes()`. - -By default the lexer adds the `startLine`, `endLine` and `comments` attributes. `comments` is an array -of `PHPParser_Comment[_Doc]` instances. - -The start line can also be accessed using `getLine()`/`setLine()` (instead of `getAttribute('startLine')`). -The last doc comment from the `comments` attribute can be obtained using `getDocComment()`. - -Pretty printer --------------- - -The pretty printer component compiles the AST back to PHP code. As the parser does not retain formatting -information the formatting is done using a specified scheme. Currently there is only one scheme available, -namely `PHPParser_PrettyPrinter_Default`. - -```php -parse($code); - - // change - $stmts[0] // the echo statement - ->exprs // sub expressions - [0] // the first of them (the string node) - ->value // it's value, i.e. 'Hi ' - = 'Hallo '; // change to 'Hallo ' - - // pretty print - $code = 'prettyPrint($stmts); - - echo $code; -} catch (PHPParser_Error $e) { - echo 'Parse Error: ', $e->getMessage(); -} -``` - -The above code will output: - - parse`, then changed and then -again converted to code using `PHPParser_PrettyPrinter_Default->prettyPrint`. - -The `prettyPrint` method pretty prints a statements array. It is also possible to pretty print only a -single expression using `prettyPrintExpr`. - -Node traversation ------------------ - -The above pretty printing example used the fact that the source code was known and thus it was easy to -write code that accesses a certain part of a node tree and changes it. Normally this is not the case. -Usually you want to change / analyze code in a generic way, where you don't know how the node tree is -going to look like. - -For this purpose the parser provides a component for traversing and visiting the node tree. The basic -structure of a program using this `PHPParser_NodeTraverser` looks like this: - -```php -addVisitor(new MyNodeVisitor); - -try { - // parse - $stmts = $parser->parse($code); - - // traverse - $stmts = $traverser->traverse($stmts); - - // pretty print - $code = 'prettyPrint($stmts); - - echo $code; -} catch (PHPParser_Error $e) { - echo 'Parse Error: ', $e->getMessage(); -} -``` - -A same node visitor for this code might look like this: - -```php -value = 'foo'; - } - } -} -``` - -The above node visitor would change all string literals in the program to `'foo'`. - -All visitors must implement the `PHPParser_NodeVisitor` interface, which defined the following four -methods: - - public function beforeTraverse(array $nodes); - public function enterNode(PHPParser_Node $node); - public function leaveNode(PHPParser_Node $node); - public function afterTraverse(array $nodes); - -The `beforeTraverse` method is called once before the traversal begins and is passed the nodes the -traverser was called with. This method can be used for resetting values before traversation or -preparing the tree for traversal. - -The `afterTraverse` method is similar to the `beforeTraverse` method, with the only difference that -it is called once after the traversal. - -The `enterNode` and `leaveNode` methods are called on every node, the former when it is entered, -i.e. before its subnodes are traversed, the latter when it is left. - -All four methods can either return the changed node or not return at all (i.e. `null`) in which -case the current node is not changed. The `leaveNode` method can furthermore return two special -values: If `false` is returned the current node will be removed from the parent array. If an `array` -is returned the current node will be merged into the parent array at the offset of the current node. -I.e. if in `array(A, B, C)` the node `B` should be replaced with `array(X, Y, Z)` the result will be -`array(A, X, Y, Z, C)`. - -Instead of manually implementing the `NodeVisitor` interface you can also extend the `NodeVisitorAbstract` -class, which will define empty default implementations for all the above methods. - -The NameResolver node visitor ------------------------------ - -One visitor is already bundled with the package: `PHPParser_NodeVisitor_NameResolver`. This visitor -helps you work with namespaced code by trying to resolve most names to fully qualified ones. - -For example, consider the following code: - - use A as B; - new B\C(); - -In order to know that `B\C` really is `A\C` you would need to track aliases and namespaces yourself. -The `NameResolver` takes care of that and resolves names as far as possible. - -After running it most names will be fully qualified. The only names that will stay unqualified are -unqualified function and constant names. These are resolved at runtime and thus the visitor can't -know which function they are referring to. In most cases this is a non-issue as the global functions -are meant. - -Also the `NameResolver` adds a `namespacedName` subnode to class, function and constant declarations -that contains the namespaced name instead of only the shortname that is available via `name`. - -Example: Converting namespaced code to pseudo namespaces --------------------------------------------------------- - -A small example to understand the concept: We want to convert namespaced code to pseudo namespaces -so it works on 5.2, i.e. names like `A\\B` should be converted to `A_B`. Note that such conversions -are fairly complicated if you take PHP's dynamic features into account, so our conversion will -assume that no dynamic features are used. - -We start off with the following base code: - -```php -addVisitor(new PHPParser_NodeVisitor_NameResolver); // we will need resolved names -$traverser->addVisitor(new NodeVisitor_NamespaceConverter); // our own node visitor - -// iterate over all .php files in the directory -$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(IN_DIR)); -$files = new RegexIterator($files, '/\.php$/'); - -foreach ($files as $file) { - try { - // read the file that should be converted - $code = file_get_contents($file); - - // parse - $stmts = $parser->parse($code); - - // traverse - $stmts = $traverser->traverse($stmts); - - // pretty print - $code = 'prettyPrint($stmts); - - // write the converted file to the target directory - file_put_contents( - substr_replace($file->getPathname(), OUT_DIR, 0, strlen(IN_DIR)), - $code - ); - } catch (PHPParser_Error $e) { - echo 'Parse Error: ', $e->getMessage(); - } -} -``` - -Now lets start with the main code, the `NodeVisitor_NamespaceConverter`. One thing it needs to do -is convert `A\\B` style names to `A_B` style ones. - -```php -toString('_')); - } - } -} -``` - -The above code profits from the fact that the `NameResolver` already resolved all names as far as -possible, so we don't need to do that. All the need to create a string with the name parts separated -by underscores instead of backslashes. This is what `$node->toString('_')` does. (If you want to -create a name with backslashes either write `$node->toString()` or `(string) $node`.) Then we create -a new name from the string and return it. Returning a new node replaces the old node. - -Another thing we need to do is change the class/function/const declarations. Currently they contain -only the shortname (i.e. the last part of the name), but they need to contain the complete class -name: - -```php -toString('_')); - } elseif ($node instanceof PHPParser_Node_Stmt_Class - || $node instanceof PHPParser_Node_Stmt_Interface - || $node instanceof PHPParser_Node_Stmt_Function) { - $node->name = $node->namespacedName->toString('_'); - } elseif ($node instanceof PHPParser_Node_Stmt_Const) { - foreach ($node->consts as $const) { - $const->name = $const->namespacedName->toString('_'); - } - } - } -} -``` - -There is not much more to it than converting the namespaced name to string with `_` as separator. - -The last thing we need to do is remove the `namespace` and `use` statements: - -```php -toString('_')); - } elseif ($node instanceof PHPParser_Node_Stmt_Class - || $node instanceof PHPParser_Node_Stmt_Interface - || $node instanceof PHPParser_Node_Stmt_Function) { - $node->name = $node->namespacedName->toString('_'); - } elseif ($node instanceof PHPParser_Node_Stmt_Const) { - foreach ($node->consts as $const) { - $const->name = $const->namespacedName->toString('_'); - } - } elseif ($node instanceof PHPParser_Node_Stmt_Namespace) { - // returning an array merges is into the parent array - return $node->stmts; - } elseif ($node instanceof PHPParser_Node_Stmt_Use) { - // returning false removed the node altogether - return false; - } - } -} -``` - -That's all. \ No newline at end of file diff --git a/vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown b/vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown deleted file mode 100644 index e4fc080..0000000 --- a/vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown +++ /dev/null @@ -1,201 +0,0 @@ -Other node tree representations -=============================== - -It is possible to convert the AST in several textual representations, which serve different uses. - -Simple serialization --------------------- - -It is possible to serialize the node tree using `serialize()` and also unserialize it using -`unserialize()`. The output is not human readable and not easily processable from anything -but PHP, but it is compact and generates fast. The main application thus is in caching. - -Human readable dumping ----------------------- - -Furthermore it is possible to dump nodes into a human readable form using the `dump` method of -`PHPParser_NodeDumper`. This can be used for debugging. - -```php -parse($code); - - echo '
' . htmlspecialchars($nodeDumper->dump($stmts)) . '
'; -} catch (PHPParser_Error $e) { - echo 'Parse Error: ', $e->getMessage(); -} -``` - -The above output will have an output looking roughly like this: - -``` -array( - 0: Stmt_Function( - byRef: false - params: array( - 0: Param( - name: msg - default: null - type: null - byRef: false - ) - ) - stmts: array( - 0: Stmt_Echo( - exprs: array( - 0: Expr_Variable( - name: msg - ) - 1: Scalar_String( - value: - - ) - ) - ) - ) - name: printLine - ) - 1: Expr_FuncCall( - name: Name( - parts: array( - 0: printLine - ) - ) - args: array( - 0: Arg( - value: Scalar_String( - value: Hallo World!!! - ) - byRef: false - ) - ) - ) -) -``` - -Serialization to XML --------------------- - -It is also possible to serialize the node tree to XML using `PHPParser_Serializer_XML->serialize()` -and to unserialize it using `PHPParser_Unserializer_XML->unserialize()`. This is useful for -interfacing with other languages and applications or for doing transformation using XSLT. - -```php -parse($code); - - echo '
' . htmlspecialchars($serializer->serialize($stmts)) . '
'; -} catch (PHPParser_Error $e) { - echo 'Parse Error: ', $e->getMessage(); -} -``` - -Produces: - -```xml - - - - - - - - - - - - msg - - - - - - - - - - - - - - - - - - - - - msg - - - - - - - - - - - - - - - printLine - - - - - - - - printLine - - - - - - - - - - - Hallo World!!! - - - - - - - - - - - - -``` \ No newline at end of file diff --git a/vendor/nikic/php-parser/doc/4_Code_generation.markdown b/vendor/nikic/php-parser/doc/4_Code_generation.markdown deleted file mode 100644 index 9541573..0000000 --- a/vendor/nikic/php-parser/doc/4_Code_generation.markdown +++ /dev/null @@ -1,265 +0,0 @@ -Code generation -=============== - -It is also possible to generate code using the parser, by first creating an Abstract Syntax Tree and then using the -pretty printer to convert it to PHP code. To simplify code generation, the project comes with a set of builders for -common structures as well as simple templating support. Both features are described in the following: - -Builders --------- - -The project provides builders for classes, interfaces, methods, functions, parameters and properties, which -allow creating node trees with a fluid interface, instead of instantiating all nodes manually. - -Here is an example: - -```php -class('SomeClass') - ->extend('SomeOtherClass') - ->implement('A\Few', 'Interfaces') - ->makeAbstract() // ->makeFinal() - - ->addStmt($factory->method('someMethod') - ->makeAbstract() // ->makeFinal() - ->addParam($factory->param('someParam')->setTypeHint('SomeClass')) - ) - - ->addStmt($factory->method('anotherMethod') - ->makeProtected() // ->makePublic() [default], ->makePrivate() - ->addParam($factory->param('someParam')->setDefault('test')) - // it is possible to add manually created nodes - ->addStmt(new PHPParser_Node_Expr_Print(new PHPParser_Node_Expr_Variable('someParam'))) - ) - - // properties will be correctly reordered above the methods - ->addStmt($factory->property('someProperty')->makeProtected()) - ->addStmt($factory->property('anotherProperty')->makePrivate()->setDefault(array(1, 2, 3))) - - ->getNode() -; - -$stmts = array($node); -echo $prettyPrinter->prettyPrint($stmts); -``` - -This will produce the following output with the default pretty printer: - -```php -__name__; - } - - /** - * Sets the __name__. - * - * @param __type__ $__name__ The new __name__ - */ - public function set__Name__($__name__) { - $this->__name__ = $__name__; - } -} -``` - -Using this template we can easily create a class with multiple properties and their respective getters and setters: - -```php - 'title', 'type' => 'string'], - ['name' => 'body', 'type' => 'string'], - ['name' => 'author', 'type' => 'User'], - ['name' => 'timestamp', 'type' => 'DateTime'], -]; - -$class = $factory->class('BlogPost')->implement('Post'); - -foreach ($properties as $propertyPlaceholders) { - $stmts = $template->getStmts($propertyPlaceholders); - - $class->addStmts( - // $stmts contains all statements from the template. So [0] fetches the class statement - // and ->stmts retrieves the methods. - $stmts[0]->stmts - ); -} - -echo $prettyPrinter->prettyPrint(array($class->getNode())); -``` - -The result would look roughly like this: - -```php -title; - } - - /** - * Sets the title. - * - * @param string $title The new title - */ - public function setTitle($title) - { - $this->title = $title; - } - - /** - * Gets the body. - * - * @return string The body - */ - public function getBody() - { - return $this->body; - } - - /** - * Sets the body. - * - * @param string $body The new body - */ - public function setBody($body) - { - $this->body = $body; - } - - /** - * Gets the author. - * - * @return User The author - */ - public function getAuthor() - { - return $this->author; - } - - /** - * Sets the author. - * - * @param User $author The new author - */ - public function setAuthor($author) - { - $this->author = $author; - } - - /** - * Gets the timestamp. - * - * @return DateTime The timestamp - */ - public function getTimestamp() - { - return $this->timestamp; - } - - /** - * Sets the timestamp. - * - * @param DateTime $timestamp The new timestamp - */ - public function setTimestamp($timestamp) - { - $this->timestamp = $timestamp; - } -} -``` - -When using multiple templates it is easier to manage them on the filesystem. They can be loaded using the -`TemplateLoader`: - -```php -load('GetterSetter'); - -// loads ./templates/Collection.php -$collectionTemplate = $loader->load('Collection'); - -// The use of a suffix is optional. The following code for example is equivalent: -$loader = new PHPParser_TemplateLoader($parser, './templates'); - -// loads ./templates/GetterSetter.php -$getterSetterTemplate = $loader->load('GetterSetter.php'); - -// loads ./templates/Collection.php -$collectionTemplate = $loader->load('Collection.php'); -``` \ No newline at end of file diff --git a/vendor/nikic/php-parser/doc/component/Lexer.markdown b/vendor/nikic/php-parser/doc/component/Lexer.markdown deleted file mode 100644 index cfdea4b..0000000 --- a/vendor/nikic/php-parser/doc/component/Lexer.markdown +++ /dev/null @@ -1,114 +0,0 @@ -Lexer component documentation -============================= - -The lexer is responsible for providing tokens to the parser. The project comes with two lexers: `PHPParser_Lexer` and -`PHPParser_Lexer_Emulative`. The latter is an extension of the former, which adds the ability to emulate tokens of -newer PHP versions and thus allows parsing of new code on older versions. - -A lexer has to define the following public interface: - - startLexing($code); - getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null); - handleHaltCompiler(); - -startLexing ------------ - -The `startLexing` method is invoked when the `parse()` method of the parser is called. It's argument will be whatever -was passed to the `parse()` method. - -Even though `startLexing` is meant to accept a source code string, you could for example overwrite it to accept a file: - -```php -parse('someFile.php')); -var_dump($parser->parse('someOtherFile.php')); -``` - -getNextToken ------------- - -`getNextToken` returns the ID of the next token and sets some additional information in the three variables which it -accepts by-ref. If no more tokens are available it has to return `0`, which is the ID of the `EOF` token. - -The first by-ref variable `$value` should contain the textual content of the token. It is what will be available as `$1` -etc in the parser. - -The other two by-ref variables `$startAttributes` and `$endAttributes` define which attributes will eventually be -assigned to the generated nodes: The parser will take the `$startAttributes` from the first token which is part of the -node and the `$endAttributes` from the last token that is part of the node. - -E.g. if the tokens `T_FUNCTION T_STRING ... '{' ... '}'` constitute a node, then the `$startAttributes` from the -`T_FUNCTION` token will be taken and the `$endAttributes` from the `'}'` token. - -By default the lexer creates the attributes `startLine`, `comments` (both part of `$startAttributes`) and `endLine` -(part of `$endAttributes`). - -If you don't want all these attributes to be added (to reduce memory usage of the AST) you can simply remove them by -overriding the method: - -```php -fileName = $fileName; - parent::startLexing(file_get_contents($fileName)); - } - - public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) { - $tokenId = parent::getNextToken($value, $startAttributes, $endAttributes); - - // we could use either $startAttributes or $endAttributes here, because the fileName is always the same - // (regardless of whether it is the start or end token). We choose $endAttributes, because it is slightly - // more efficient (as the parser has to keep a stack for the $startAttributes). - $endAttributes['fileName'] = $fileName; - - return $tokenId; - } -} -``` - -handleHaltCompiler ------------------- - -The method is invoked whenever a `T_HALT_COMPILER` token is encountered. It has to return the remaining string after the -construct (not including `();`). \ No newline at end of file diff --git a/vendor/nikic/php-parser/grammar/README.md b/vendor/nikic/php-parser/grammar/README.md deleted file mode 100644 index b39b13f..0000000 --- a/vendor/nikic/php-parser/grammar/README.md +++ /dev/null @@ -1,29 +0,0 @@ -What do all those files mean? -============================= - - * `zend_language_parser.phpy`: PHP grammer written in a pseudo language - * `analyze.php`: Analyzes the `.phpy`-grammer and outputs some info about it - * `rebuildParser.php`: Preprocesses the `.phpy`-grammar and builds the parser using `kmyacc` - * `kmyacc.php.parser`: A `kmyacc` parser prototype file for PHP - -.phpy pseudo language -===================== - -The `.phpy` file is a normal grammer in `kmyacc` (`yacc`) style, with some transformations -applied to it: - - * Nodes are created using the syntax `Name[..., ...]`. This is transformed into - `new PHPParser_Node_Name(..., ..., $attributes)` - * `Name::abc` is transformed to `PHPParser_Node_Name::abc` - * Some function-like constructs are resolved (see `rebuildParser.php` for a list) - * Associative arrays are written as `[key: value, ...]`, which is transformed to - `array('key' => value, ...)` - -Building the parser -=================== - -In order to rebuild the parser, you need [moriyoshi's fork of kmyacc](https://github.com/moriyoshi/kmyacc-forked). -After you compiled/installed it, run the `rebuildParser.php` script. - -By default only the `Parser.php` is built. If you want to additionally build `Parser/Debug.php` and `y.output` run the -script with `--debug`. If you want to retain the preprocessed grammar pass `--keep-tmp-grammar`. \ No newline at end of file diff --git a/vendor/nikic/php-parser/grammar/analyze.php b/vendor/nikic/php-parser/grammar/analyze.php deleted file mode 100644 index 50101df..0000000 --- a/vendor/nikic/php-parser/grammar/analyze.php +++ /dev/null @@ -1,96 +0,0 @@ -\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\') - (?"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+") - (?(?&singleQuotedString)|(?&doubleQuotedString)) - (?/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/) - (?\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+}) -)'; - -const RULE_BLOCK = '(?[a-z_]++):(?[^\'"/{};]*+(?:(?:(?&string)|(?&comment)|(?&code)|/|})[^\'"/{};]*+)*+);'; - -$usedTerminals = array_flip(array( - 'T_VARIABLE', 'T_STRING', 'T_INLINE_HTML', 'T_ENCAPSED_AND_WHITESPACE', - 'T_LNUMBER', 'T_DNUMBER', 'T_CONSTANT_ENCAPSED_STRING', 'T_STRING_VARNAME', 'T_NUM_STRING' -)); -$unusedNonterminals = array_flip(array( - 'case_separator', 'optional_comma' -)); - -function regex($regex) { - return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~'; -} - -function magicSplit($regex, $string) { - $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string); - - foreach ($pieces as &$piece) { - $piece = trim($piece); - } - - return array_filter($pieces); -} - -echo '
';
-
-////////////////////
-////////////////////
-////////////////////
-
-list($defs, $ruleBlocks) = magicSplit('%%', file_get_contents(GRAMMAR_FILE));
-
-if ('' !== trim(preg_replace(regex(RULE_BLOCK), '', $ruleBlocks))) {
-    die('Not all rule blocks were properly recognized!');
-}
-
-preg_match_all(regex(RULE_BLOCK), $ruleBlocks, $ruleBlocksMatches, PREG_SET_ORDER);
-foreach ($ruleBlocksMatches as $match) {
-    $ruleBlockName = $match['name'];
-    $rules = magicSplit('\|', $match['rules']);
-
-    foreach ($rules as &$rule) {
-        $parts = magicSplit('\s+', $rule);
-        $usedParts = array();
-
-        foreach ($parts as $part) {
-            if ('{' === $part[0]) {
-                preg_match_all('~\$([0-9]+)~', $part, $backReferencesMatches, PREG_SET_ORDER);
-                foreach ($backReferencesMatches as $match) {
-                    $usedParts[$match[1]] = true;
-                }
-            }
-        }
-
-        $i = 1;
-        foreach ($parts as &$part) {
-            if ('/' === $part[0]) {
-                continue;
-            }
-
-            if (isset($usedParts[$i])) {
-                if ('\'' === $part[0] || '{' === $part[0]
-                    || (ctype_upper($part[0]) && !isset($usedTerminals[$part]))
-                    || (ctype_lower($part[0]) && isset($unusedNonterminals[$part]))
-                ) {
-                    $part = '' . $part . '';
-                } else {
-                    $part = '' . $part . '';
-                }
-            } elseif ((ctype_upper($part[0]) && isset($usedTerminals[$part]))
-                      || (ctype_lower($part[0]) && !isset($unusedNonterminals[$part]))
-
-            ) {
-                $part = '' . $part . '';
-            }
-
-            ++$i;
-        }
-
-        $rule = implode(' ', $parts);
-    }
-
-    echo $ruleBlockName, ':', "\n", '      ', implode("\n" . '    | ', $rules), "\n", ';', "\n\n";
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/grammar/kmyacc.php.parser b/vendor/nikic/php-parser/grammar/kmyacc.php.parser
deleted file mode 100644
index 757c752..0000000
--- a/vendor/nikic/php-parser/grammar/kmyacc.php.parser
+++ /dev/null
@@ -1,361 +0,0 @@
-yyval
-#semval($,%t) $this->yyval
-#semval(%n) $this->yyastk[$this->stackPos-(%l-%n)]
-#semval(%n,%t) $this->yyastk[$this->stackPos-(%l-%n)]
-#include;
-
-/* This is an automatically GENERATED file, which should not be manually edited.
- * Instead edit one of the following:
- *  * the grammar file grammar/zend_language_parser.phpy
- *  * the parser skeleton grammar/kymacc.php.parser
- *  * the preprocessing script grammar/rebuildParser.php
- *
- * The skeleton for this parser was written by Moriyoshi Koizumi and is based on
- * the work by Masato Bito and is in the PUBLIC DOMAIN.
- */
-#if -t
-class #(-p)_Debug extends #(-p)
-#endif
-#ifnot -t
-class #(-p)
-#endif
-{
-#ifnot -t
-    const TOKEN_NONE    = -1;
-    const TOKEN_INVALID = #(YYBADCH);
-
-    const TOKEN_MAP_SIZE = #(YYMAXLEX);
-
-    const YYLAST       = #(YYLAST);
-    const YY2TBLSTATE  = #(YY2TBLSTATE);
-    const YYGLAST      = #(YYGLAST);
-    const YYNLSTATES   = #(YYNLSTATES);
-    const YYUNEXPECTED = #(YYUNEXPECTED);
-    const YYDEFAULT    = #(YYDEFAULT);
-
-    // {{{ Tokens
-#tokenval
-    const %s = %n;
-#endtokenval
-    // }}}
-
-    /* @var array Map of token ids to their respective names */
-    protected static $terminals = array(
-        #listvar terminals
-        , "???"
-    );
-
-    /* @var array Map which translates lexer tokens to internal tokens */
-    protected static $translate = array(
-        #listvar yytranslate
-    );
-
-    protected static $yyaction = array(
-        #listvar yyaction
-    );
-
-    protected static $yycheck = array(
-        #listvar yycheck
-    );
-
-    protected static $yybase = array(
-        #listvar yybase
-    );
-
-    protected static $yydefault = array(
-        #listvar yydefault
-    );
-
-    protected static $yygoto = array(
-        #listvar yygoto
-    );
-
-    protected static $yygcheck = array(
-        #listvar yygcheck
-    );
-
-    protected static $yygbase = array(
-        #listvar yygbase
-    );
-
-    protected static $yygdefault = array(
-        #listvar yygdefault
-    );
-
-    protected static $yylhs = array(
-        #listvar yylhs
-    );
-
-    protected static $yylen = array(
-        #listvar yylen
-    );
-
-    protected $yyval;
-    protected $yyastk;
-    protected $stackPos;
-    protected $lexer;
-
-    /**
-     * Creates a parser instance.
-     *
-     * @param PHPParser_Lexer $lexer A lexer
-     */
-    public function __construct(PHPParser_Lexer $lexer) {
-        $this->lexer = $lexer;
-    }
-#endif
-#if -t
-    protected static $yyproduction = array(
-        #production-strings;
-    );
-
-    protected function yyprintln($msg) {
-        echo $msg, "\n";
-    }
-
-    protected function YYTRACE_NEWSTATE($state, $tokenId) {
-        $this->yyprintln(
-            '% State ' . $state
-          . ', Lookahead ' . ($tokenId == self::TOKEN_NONE ? '--none--' : self::$terminals[$tokenId])
-        );
-    }
-
-    protected function YYTRACE_READ($tokenId) {
-        $this->yyprintln('% Reading ' . self::$terminals[$tokenId]);
-    }
-
-    protected function YYTRACE_SHIFT($tokenId) {
-        $this->yyprintln('% Shift ' . self::$terminals[$tokenId]);
-    }
-
-    protected function YYTRACE_ACCEPT() {
-        $this->yyprintln('% Accepted.');
-    }
-
-    protected function YYTRACE_REDUCE($n) {
-        $this->yyprintln('% Reduce by (' . $n . ') ' . self::$yyproduction[$n]);
-    }
-
-    protected function YYTRACE_POP($state) {
-        $this->yyprintln('% Recovering, uncovers state ' . $state);
-    }
-
-    protected function YYTRACE_DISCARD($tokenId) {
-        $this->yyprintln('% Discard ' . self::$terminals[$tokenId]);
-    }
-#endif
-
-    /**
-#ifnot -t
-     * Parses PHP code into a node tree.
-#endif
-#if -t
-     * Parses PHP code into a node tree and prints out debugging information.
-#endif
-     *
-     * @param string $code The source code to parse
-     *
-     * @return PHPParser_Node[] Array of statements
-     */
-    public function parse($code) {
-        $this->lexer->startLexing($code);
-
-        // We start off with no lookahead-token
-        $tokenId = self::TOKEN_NONE;
-
-        // The attributes for a node are taken from the first and last token of the node.
-        // From the first token only the startAttributes are taken and from the last only
-        // the endAttributes. Both are merged using the array union operator (+).
-        $startAttributes = array('startLine' => 1);
-        $endAttributes   = array();
-
-        // In order to figure out the attributes for the starting token, we have to keep
-        // them in a stack
-        $attributeStack = array($startAttributes);
-
-        // Start off in the initial state and keep a stack of previous states
-        $state = 0;
-        $stateStack = array($state);
-
-        // AST stack (?)
-        $this->yyastk = array();
-
-        // Current position in the stack(s)
-        $this->stackPos = 0;
-
-        for (;;) {
-#if -t
-            $this->YYTRACE_NEWSTATE($state, $tokenId);
-
-#endif
-            if (self::$yybase[$state] == 0) {
-                $yyn = self::$yydefault[$state];
-            } else {
-                if ($tokenId === self::TOKEN_NONE) {
-                    // Fetch the next token id from the lexer and fetch additional info by-ref.
-                    // The end attributes are fetched into a temporary variable and only set once the token is really
-                    // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is
-                    // reduced after a token was read but not yet shifted.
-                    $origTokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $nextEndAttributes);
-
-                    // map the lexer token id to the internally used token id's
-                    $tokenId = $origTokenId >= 0 && $origTokenId < self::TOKEN_MAP_SIZE
-                        ? self::$translate[$origTokenId]
-                        : self::TOKEN_INVALID;
-
-                    if ($tokenId === self::TOKEN_INVALID) {
-                        throw new RangeException(sprintf(
-                            'The lexer returned an invalid token (id=%d, value=%s)',
-                            $origTokenId, $tokenValue
-                        ));
-                    }
-
-                    $attributeStack[$this->stackPos] = $startAttributes;
-#if -t
-
-                    $this->YYTRACE_READ($tokenId);
-#endif
-                }
-
-                if ((($yyn = self::$yybase[$state] + $tokenId) >= 0
-                     && $yyn < self::YYLAST && self::$yycheck[$yyn] == $tokenId
-                     || ($state < self::YY2TBLSTATE
-                        && ($yyn = self::$yybase[$state + self::YYNLSTATES] + $tokenId) >= 0
-                        && $yyn < self::YYLAST
-                        && self::$yycheck[$yyn] == $tokenId))
-                    && ($yyn = self::$yyaction[$yyn]) != self::YYDEFAULT) {
-                    /*
-                     * >= YYNLSTATE: shift and reduce
-                     * > 0: shift
-                     * = 0: accept
-                     * < 0: reduce
-                     * = -YYUNEXPECTED: error
-                     */
-                    if ($yyn > 0) {
-                        /* shift */
-#if -t
-                        $this->YYTRACE_SHIFT($tokenId);
-
-#endif
-                        ++$this->stackPos;
-
-                        $stateStack[$this->stackPos]     = $state = $yyn;
-                        $this->yyastk[$this->stackPos]   = $tokenValue;
-                        $attributeStack[$this->stackPos] = $startAttributes;
-                        $endAttributes = $nextEndAttributes;
-                        $tokenId = self::TOKEN_NONE;
-
-                        if ($yyn < self::YYNLSTATES)
-                            continue;
-
-                        /* $yyn >= YYNLSTATES means shift-and-reduce */
-                        $yyn -= self::YYNLSTATES;
-                    } else {
-                        $yyn = -$yyn;
-                    }
-                } else {
-                    $yyn = self::$yydefault[$state];
-                }
-            }
-
-            for (;;) {
-                /* reduce/error */
-                if ($yyn == 0) {
-                    /* accept */
-#if -t
-                    $this->YYTRACE_ACCEPT();
-#endif
-                    return $this->yyval;
-                } elseif ($yyn != self::YYUNEXPECTED) {
-                    /* reduce */
-#if -t
-                    $this->YYTRACE_REDUCE($yyn);
-#endif
-                    try {
-                        $this->{'yyn' . $yyn}(
-                            $attributeStack[$this->stackPos - self::$yylen[$yyn]]
-                            + $endAttributes
-                        );
-                    } catch (PHPParser_Error $e) {
-                        if (-1 === $e->getRawLine()) {
-                            $e->setRawLine($startAttributes['startLine']);
-                        }
-
-                        throw $e;
-                    }
-
-                    /* Goto - shift nonterminal */
-                    $this->stackPos -= self::$yylen[$yyn];
-                    $yyn = self::$yylhs[$yyn];
-                    if (($yyp = self::$yygbase[$yyn] + $stateStack[$this->stackPos]) >= 0
-                         && $yyp < self::YYGLAST
-                         && self::$yygcheck[$yyp] == $yyn) {
-                        $state = self::$yygoto[$yyp];
-                    } else {
-                        $state = self::$yygdefault[$yyn];
-                    }
-
-                    ++$this->stackPos;
-
-                    $stateStack[$this->stackPos]     = $state;
-                    $this->yyastk[$this->stackPos]   = $this->yyval;
-                    $attributeStack[$this->stackPos] = $startAttributes;
-                } else {
-                    /* error */
-                    $expected = array();
-
-                    $base = self::$yybase[$state];
-                    for ($i = 0; $i < self::TOKEN_MAP_SIZE; ++$i) {
-                        $n = $base + $i;
-                        if ($n >= 0 && $n < self::YYLAST && self::$yycheck[$n] == $i
-                         || $state < self::YY2TBLSTATE
-                            && ($n = self::$yybase[$state + self::YYNLSTATES] + $i) >= 0
-                            && $n < self::YYLAST && self::$yycheck[$n] == $i
-                        ) {
-                            if (self::$yyaction[$n] != self::YYUNEXPECTED) {
-                                if (count($expected) == 4) {
-                                    /* Too many expected tokens */
-                                    $expected = array();
-                                    break;
-                                }
-
-                                $expected[] = self::$terminals[$i];
-                            }
-                        }
-                    }
-
-                    $expectedString = '';
-                    if ($expected) {
-                        $expectedString = ', expecting ' . implode(' or ', $expected);
-                    }
-
-                    throw new PHPParser_Error(
-                        'Syntax error, unexpected ' . self::$terminals[$tokenId] . $expectedString,
-                        $startAttributes['startLine']
-                    );
-                }
-
-                if ($state < self::YYNLSTATES)
-                    break;
-                /* >= YYNLSTATES means shift-and-reduce */
-                $yyn = $state - self::YYNLSTATES;
-            }
-        }
-    }
-#ifnot -t
-#reduce
-
-    protected function yyn%n($attributes) {
-        %b
-    }
-#noact
-
-    protected function yyn%n() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-#endreduce
-#endif
-}
-#tailcode;
diff --git a/vendor/nikic/php-parser/grammar/rebuildParser.php b/vendor/nikic/php-parser/grammar/rebuildParser.php
deleted file mode 100644
index 0aa1f8b..0000000
--- a/vendor/nikic/php-parser/grammar/rebuildParser.php
+++ /dev/null
@@ -1,225 +0,0 @@
-\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\')
-    (?"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+")
-    (?(?&singleQuotedString)|(?&doubleQuotedString))
-    (?/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/)
-    (?\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+})
-)';
-
-const PARAMS = '\[(?[^[\]]*+(?:\[(?¶ms)\][^[\]]*+)*+)\]';
-const ARGS   = '\((?[^()]*+(?:\((?&args)\)[^()]*+)*+)\)';
-
-///////////////////
-/// Main script ///
-///////////////////
-
-echo 'Building temporary preproprocessed grammar file.', "\n";
-
-$grammarCode = file_get_contents($grammarFile);
-
-$grammarCode = resolveConstants($grammarCode);
-$grammarCode = resolveNodes($grammarCode);
-$grammarCode = resolveMacros($grammarCode);
-$grammarCode = resolveArrays($grammarCode);
-
-file_put_contents($tmpGrammarFile, $grammarCode);
-
-echo "Building parser.\n";
-$output = trim(shell_exec("$kmyacc -l -m $skeletonFile -p PHPParser_Parser $tmpGrammarFile 2>&1"));
-echo "Output: \"$output\"\n";
-
-moveFileWithDirCheck($tmpResultFile, $parserResultFile);
-
-if ($optionDebug) {
-    echo "Building debug parser.\n";
-    $output = trim(shell_exec("$kmyacc -t -v -l -m $skeletonFile -p PHPParser_Parser $tmpGrammarFile 2>&1"));
-    echo "Output: \"$output\"\n";
-
-    moveFileWithDirCheck($tmpResultFile, $debugParserResultFile);
-}
-
-if (!$optionKeepTmpGrammar) {
-    unlink($tmpGrammarFile);
-}
-
-///////////////////////////////
-/// Preprocessing functions ///
-///////////////////////////////
-
-function resolveConstants($code) {
-    return preg_replace('~[A-Z][a-zA-Z_]++::~', 'PHPParser_Node_$0', $code);
-}
-
-function resolveNodes($code) {
-    return preg_replace_callback(
-        '~(?[A-Z][a-zA-Z_]++)\s*' . PARAMS . '~',
-        function($matches) {
-            // recurse
-            $matches['params'] = resolveNodes($matches['params']);
-
-            $params = magicSplit(
-                '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
-                $matches['params']
-            );
-
-            $paramCode = '';
-            foreach ($params as $param) {
-                $paramCode .= $param . ', ';
-            }
-
-            return 'new PHPParser_Node_' . $matches['name'] . '(' . $paramCode . '$attributes)';
-        },
-        $code
-    );
-}
-
-function resolveMacros($code) {
-    return preg_replace_callback(
-        '~\b(?)(?!array\()(?[a-z][A-Za-z]++)' . ARGS . '~',
-        function($matches) {
-            // recurse
-            $matches['args'] = resolveMacros($matches['args']);
-
-            $name = $matches['name'];
-            $args = magicSplit(
-                '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
-                $matches['args']
-            );
-
-            if ('error' == $name) {
-                assertArgs(1, $args, $name);
-
-                return 'throw new PHPParser_Error(' . $args[0] . ')';
-            }
-
-            if ('init' == $name) {
-                return '$$ = array(' . implode(', ', $args) . ')';
-            }
-
-            if ('push' == $name) {
-                assertArgs(2, $args, $name);
-
-                return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0];
-            }
-
-            if ('pushNormalizing' == $name) {
-                assertArgs(2, $args, $name);
-
-                return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); } else { ' . $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0] . '; }';
-            }
-
-            if ('toArray' == $name) {
-                assertArgs(1, $args, $name);
-
-                return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')';
-            }
-
-            if ('parseVar' == $name) {
-                assertArgs(1, $args, $name);
-
-                return 'substr(' . $args[0] . ', 1)';
-            }
-
-            if ('parseEncapsed' == $name) {
-                assertArgs(2, $args, $name);
-
-                return 'foreach (' . $args[0] . ' as &$s) { if (is_string($s)) { $s = PHPParser_Node_Scalar_String::parseEscapeSequences($s, ' . $args[1] . '); } }';
-            }
-
-            if ('parseEncapsedDoc' == $name) {
-                assertArgs(1, $args, $name);
-
-                return 'foreach (' . $args[0] . ' as &$s) { if (is_string($s)) { $s = PHPParser_Node_Scalar_String::parseEscapeSequences($s, null); } } $s = preg_replace(\'~(\r\n|\n|\r)$~\', \'\', $s); if (\'\' === $s) array_pop(' . $args[0] . ');';
-            }
-
-            throw new Exception(sprintf('Unknown macro "%s"', $name));
-        },
-        $code
-    );
-}
-
-function assertArgs($num, $args, $name) {
-    if ($num != count($args)) {
-        die('Wrong argument count for ' . $name . '().');
-    }
-}
-
-function resolveArrays($code) {
-    return preg_replace_callback(
-        '~' . PARAMS . '~',
-        function ($matches) {
-            $elements = magicSplit(
-                '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
-                $matches['params']
-            );
-
-            // don't convert [] to array, it might have different meaning
-            if (empty($elements)) {
-                return $matches[0];
-            }
-
-            $elementCodes = array();
-            foreach ($elements as $element) {
-                // convert only arrays where all elements have keys
-                if (false === strpos($element, ':')) {
-                    return $matches[0];
-                }
-
-                list($key, $value) = explode(':', $element, 2);
-                $elementCodes[] = "'" . $key . "' =>" . $value;
-            }
-
-            return 'array(' . implode(', ', $elementCodes) . ')';
-        },
-        $code
-    );
-}
-
-function moveFileWithDirCheck($fromPath, $toPath) {
-    $dir = dirname($toPath);
-    if (!is_dir($dir)) {
-        mkdir($dir, 0777, true);
-    }
-    rename($fromPath, $toPath);
-}
-
-//////////////////////////////
-/// Regex helper functions ///
-//////////////////////////////
-
-function regex($regex) {
-    return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~';
-}
-
-function magicSplit($regex, $string) {
-    $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string);
-
-    foreach ($pieces as &$piece) {
-        $piece = trim($piece);
-    }
-
-    return array_filter($pieces);
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/grammar/zend_language_parser.phpy b/vendor/nikic/php-parser/grammar/zend_language_parser.phpy
deleted file mode 100644
index 85d72b2..0000000
--- a/vendor/nikic/php-parser/grammar/zend_language_parser.phpy
+++ /dev/null
@@ -1,906 +0,0 @@
-%pure_parser
-%expect 2
-
-%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
-%left ','
-%left T_LOGICAL_OR
-%left T_LOGICAL_XOR
-%left T_LOGICAL_AND
-%right T_PRINT
-%right T_YIELD
-%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
-%left '?' ':'
-%left T_BOOLEAN_OR
-%left T_BOOLEAN_AND
-%left '|'
-%left '^'
-%left '&'
-%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL
-%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
-%left T_SL T_SR
-%left '+' '-' '.'
-%left '*' '/' '%'
-%right '!'
-%nonassoc T_INSTANCEOF
-%right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
-%right '['
-%nonassoc T_NEW T_CLONE
-%token T_EXIT
-%token T_IF
-%left T_ELSEIF
-%left T_ELSE
-%left T_ENDIF
-%token T_LNUMBER
-%token T_DNUMBER
-%token T_STRING
-%token T_STRING_VARNAME
-%token T_VARIABLE
-%token T_NUM_STRING
-%token T_INLINE_HTML
-%token T_CHARACTER
-%token T_BAD_CHARACTER
-%token T_ENCAPSED_AND_WHITESPACE
-%token T_CONSTANT_ENCAPSED_STRING
-%token T_ECHO
-%token T_DO
-%token T_WHILE
-%token T_ENDWHILE
-%token T_FOR
-%token T_ENDFOR
-%token T_FOREACH
-%token T_ENDFOREACH
-%token T_DECLARE
-%token T_ENDDECLARE
-%token T_AS
-%token T_SWITCH
-%token T_ENDSWITCH
-%token T_CASE
-%token T_DEFAULT
-%token T_BREAK
-%token T_CONTINUE
-%token T_GOTO
-%token T_FUNCTION
-%token T_CONST
-%token T_RETURN
-%token T_TRY
-%token T_CATCH
-%token T_FINALLY
-%token T_THROW
-%token T_USE
-%token T_INSTEADOF
-%token T_GLOBAL
-%right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC
-%token T_VAR
-%token T_UNSET
-%token T_ISSET
-%token T_EMPTY
-%token T_HALT_COMPILER
-%token T_CLASS
-%token T_TRAIT
-%token T_INTERFACE
-%token T_EXTENDS
-%token T_IMPLEMENTS
-%token T_OBJECT_OPERATOR
-%token T_DOUBLE_ARROW
-%token T_LIST
-%token T_ARRAY
-%token T_CALLABLE
-%token T_CLASS_C
-%token T_TRAIT_C
-%token T_METHOD_C
-%token T_FUNC_C
-%token T_LINE
-%token T_FILE
-%token T_COMMENT
-%token T_DOC_COMMENT
-%token T_OPEN_TAG
-%token T_OPEN_TAG_WITH_ECHO
-%token T_CLOSE_TAG
-%token T_WHITESPACE
-%token T_START_HEREDOC
-%token T_END_HEREDOC
-%token T_DOLLAR_OPEN_CURLY_BRACES
-%token T_CURLY_OPEN
-%token T_PAAMAYIM_NEKUDOTAYIM
-%token T_NAMESPACE
-%token T_NS_C
-%token T_DIR
-%token T_NS_SEPARATOR
-
-%%
-
-start:
-    top_statement_list                                      { $$ = Stmt_Namespace::postprocess($1); }
-;
-
-top_statement_list:
-      top_statement_list top_statement                      { pushNormalizing($1, $2); }
-    | /* empty */                                           { init(); }
-;
-
-namespace_name:
-      T_STRING                                              { init($1); }
-    | namespace_name T_NS_SEPARATOR T_STRING                { push($1, $3); }
-;
-
-top_statement:
-      statement                                             { $$ = $1; }
-    | function_declaration_statement                        { $$ = $1; }
-    | class_declaration_statement                           { $$ = $1; }
-    | T_HALT_COMPILER
-          { $$ = Stmt_HaltCompiler[$this->lexer->handleHaltCompiler()]; }
-    | T_NAMESPACE namespace_name ';'                        { $$ = Stmt_Namespace[Name[$2], null]; }
-    | T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Stmt_Namespace[Name[$2], $4]; }
-    | T_NAMESPACE '{' top_statement_list '}'                { $$ = Stmt_Namespace[null,     $3]; }
-    | T_USE use_declarations ';'                            { $$ = Stmt_Use[$2]; }
-    | T_CONST constant_declaration_list ';'                 { $$ = Stmt_Const[$2]; }
-;
-
-use_declarations:
-      use_declarations ',' use_declaration                  { push($1, $3); }
-    | use_declaration                                       { init($1); }
-;
-
-use_declaration:
-      namespace_name                                        { $$ = Stmt_UseUse[Name[$1], null]; }
-    | namespace_name T_AS T_STRING                          { $$ = Stmt_UseUse[Name[$1], $3]; }
-    | T_NS_SEPARATOR namespace_name                         { $$ = Stmt_UseUse[Name[$2], null]; }
-    | T_NS_SEPARATOR namespace_name T_AS T_STRING           { $$ = Stmt_UseUse[Name[$2], $4]; }
-;
-
-constant_declaration_list:
-      constant_declaration_list ',' constant_declaration    { push($1, $3); }
-    | constant_declaration                                  { init($1); }
-;
-
-constant_declaration:
-    T_STRING '=' static_scalar                              { $$ = Const[$1, $3]; }
-;
-
-inner_statement_list:
-      inner_statement_list inner_statement                  { pushNormalizing($1, $2); }
-    | /* empty */                                           { init(); }
-;
-
-inner_statement:
-      statement                                             { $$ = $1; }
-    | function_declaration_statement                        { $$ = $1; }
-    | class_declaration_statement                           { $$ = $1; }
-    | T_HALT_COMPILER                                       { error('__halt_compiler() can only be used from the outermost scope'); }
-;
-
-statement:
-      '{' inner_statement_list '}'                          { $$ = $2; }
-    | T_IF parentheses_expr statement elseif_list else_single
-          { $$ = Stmt_If[$2, [stmts: toArray($3), elseifs: $4, else: $5]]; }
-    | T_IF parentheses_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';'
-          { $$ = Stmt_If[$2, [stmts: $4, elseifs: $5, else: $6]]; }
-    | T_WHILE parentheses_expr while_statement              { $$ = Stmt_While[$2, $3]; }
-    | T_DO statement T_WHILE parentheses_expr ';'           { $$ = Stmt_Do   [$4, toArray($2)]; }
-    | T_FOR '(' for_expr ';'  for_expr ';' for_expr ')' for_statement
-          { $$ = Stmt_For[[init: $3, cond: $5, loop: $7, stmts: $9]]; }
-    | T_SWITCH parentheses_expr switch_case_list            { $$ = Stmt_Switch[$2, $3]; }
-    | T_BREAK ';'                                           { $$ = Stmt_Break[null]; }
-    | T_BREAK expr ';'                                      { $$ = Stmt_Break[$2]; }
-    | T_CONTINUE ';'                                        { $$ = Stmt_Continue[null]; }
-    | T_CONTINUE expr ';'                                   { $$ = Stmt_Continue[$2]; }
-    | T_RETURN ';'                                          { $$ = Stmt_Return[null]; }
-    | T_RETURN expr ';'                                     { $$ = Stmt_Return[$2]; }
-    | yield_expr ';'                                        { $$ = $1; }
-    | T_GLOBAL global_var_list ';'                          { $$ = Stmt_Global[$2]; }
-    | T_STATIC static_var_list ';'                          { $$ = Stmt_Static[$2]; }
-    | T_ECHO expr_list ';'                                  { $$ = Stmt_Echo[$2]; }
-    | T_INLINE_HTML                                         { $$ = Stmt_InlineHTML[$1]; }
-    | expr ';'                                              { $$ = $1; }
-    | T_UNSET '(' variables_list ')' ';'                    { $$ = Stmt_Unset[$3]; }
-    | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
-          { $$ = Stmt_Foreach[$3, $5[0], [keyVar: null, byRef: $5[1], stmts: $7]]; }
-    | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement
-          { $$ = Stmt_Foreach[$3, $7[0], [keyVar: $5, byRef: $7[1], stmts: $9]]; }
-    | T_DECLARE '(' declare_list ')' declare_statement      { $$ = Stmt_Declare[$3, $5]; }
-    | ';'                                                   { $$ = array(); /* means: no statement */ }
-    | T_TRY '{' inner_statement_list '}' catches optional_finally
-          { $$ = Stmt_TryCatch[$3, $5, $6]; }
-    | T_THROW expr ';'                                      { $$ = Stmt_Throw[$2]; }
-    | T_GOTO T_STRING ';'                                   { $$ = Stmt_Goto[$2]; }
-    | T_STRING ':'                                          { $$ = Stmt_Label[$1]; }
-;
-
-catches:
-      /* empty */                                           { init(); }
-    | catches catch                                         { push($1, $2); }
-;
-
-catch:
-    T_CATCH '(' name T_VARIABLE ')' '{' inner_statement_list '}'
-        { $$ = Stmt_Catch[$3, parseVar($4), $7]; }
-;
-
-optional_finally:
-      /* empty */                                           { $$ = null; }
-    | T_FINALLY '{' inner_statement_list '}'                { $$ = $3; }
-;
-
-variables_list:
-      variable                                              { init($1); }
-    | variables_list ',' variable                           { push($1, $3); }
-;
-
-optional_ref:
-      /* empty */                                           { $$ = false; }
-    | '&'                                                   { $$ = true; }
-;
-
-function_declaration_statement:
-    T_FUNCTION optional_ref T_STRING '(' parameter_list ')' '{' inner_statement_list '}'
-        { $$ = Stmt_Function[$3, [byRef: $2, params: $5, stmts: $8]]; }
-;
-
-class_declaration_statement:
-      class_entry_type T_STRING extends_from implements_list '{' class_statement_list '}'
-          { $$ = Stmt_Class[$2, [type: $1, extends: $3, implements: $4, stmts: $6]]; }
-    | T_INTERFACE T_STRING interface_extends_list '{' class_statement_list '}'
-          { $$ = Stmt_Interface[$2, [extends: $3, stmts: $5]]; }
-    | T_TRAIT T_STRING '{' class_statement_list '}'
-          { $$ = Stmt_Trait[$2, $4]; }
-;
-
-class_entry_type:
-      T_CLASS                                               { $$ = 0; }
-    | T_ABSTRACT T_CLASS                                    { $$ = Stmt_Class::MODIFIER_ABSTRACT; }
-    | T_FINAL T_CLASS                                       { $$ = Stmt_Class::MODIFIER_FINAL; }
-;
-
-extends_from:
-      /* empty */                                           { $$ = null; }
-    | T_EXTENDS name                                        { $$ = $2; }
-;
-
-interface_extends_list:
-      /* empty */                                           { $$ = array(); }
-    | T_EXTENDS name_list                                   { $$ = $2; }
-;
-
-implements_list:
-      /* empty */                                           { $$ = array(); }
-    | T_IMPLEMENTS name_list                                { $$ = $2; }
-;
-
-name_list:
-      name                                                  { init($1); }
-    | name_list ',' name                                    { push($1, $3); }
-;
-
-for_statement:
-      statement                                             { $$ = toArray($1); }
-    | ':' inner_statement_list T_ENDFOR ';'                 { $$ = $2; }
-;
-
-foreach_statement:
-      statement                                             { $$ = toArray($1); }
-    | ':' inner_statement_list T_ENDFOREACH ';'             { $$ = $2; }
-;
-
-declare_statement:
-      statement                                             { $$ = toArray($1); }
-    | ':' inner_statement_list T_ENDDECLARE ';'             { $$ = $2; }
-;
-
-declare_list:
-      declare_list_element                                  { init($1); }
-    | declare_list ',' declare_list_element                 { push($1, $3); }
-;
-
-declare_list_element:
-      T_STRING '=' static_scalar                            { $$ = Stmt_DeclareDeclare[$1, $3]; }
-;
-
-switch_case_list:
-      '{' case_list '}'                                     { $$ = $2; }
-    | '{' ';' case_list '}'                                 { $$ = $3; }
-    | ':' case_list T_ENDSWITCH ';'                         { $$ = $2; }
-    | ':' ';' case_list T_ENDSWITCH ';'                     { $$ = $3; }
-;
-
-case_list:
-      /* empty */                                           { init(); }
-    | case_list case                                        { push($1, $2); }
-;
-
-case:
-      T_CASE expr case_separator inner_statement_list       { $$ = Stmt_Case[$2, $4]; }
-    | T_DEFAULT case_separator inner_statement_list         { $$ = Stmt_Case[null, $3]; }
-;
-
-case_separator:
-      ':'
-    | ';'
-;
-
-while_statement:
-      statement                                             { $$ = toArray($1); }
-    | ':' inner_statement_list T_ENDWHILE ';'               { $$ = $2; }
-;
-
-elseif_list:
-      /* empty */                                           { init(); }
-    | elseif_list elseif                                    { push($1, $2); }
-;
-
-elseif:
-      T_ELSEIF parentheses_expr statement                   { $$ = Stmt_ElseIf[$2, toArray($3)]; }
-;
-
-new_elseif_list:
-      /* empty */                                           { init(); }
-    | new_elseif_list new_elseif                            { push($1, $2); }
-;
-
-new_elseif:
-     T_ELSEIF parentheses_expr ':' inner_statement_list     { $$ = Stmt_ElseIf[$2, $4]; }
-;
-
-else_single:
-      /* empty */                                           { $$ = null; }
-    | T_ELSE statement                                      { $$ = Stmt_Else[toArray($2)]; }
-;
-
-new_else_single:
-      /* empty */                                           { $$ = null; }
-    | T_ELSE ':' inner_statement_list                       { $$ = Stmt_Else[$3]; }
-;
-
-foreach_variable:
-      variable                                              { $$ = array($1, false); }
-    | '&' variable                                          { $$ = array($2, true); }
-    | list_expr                                             { $$ = array($1, false); }
-;
-
-parameter_list:
-      non_empty_parameter_list                              { $$ = $1; }
-    | /* empty */                                           { $$ = array(); }
-;
-
-non_empty_parameter_list:
-      parameter                                             { init($1); }
-    | non_empty_parameter_list ',' parameter                { push($1, $3); }
-;
-
-parameter:
-      optional_class_type optional_ref T_VARIABLE
-          { $$ = Param[parseVar($3), null, $1, $2]; }
-    | optional_class_type optional_ref T_VARIABLE '=' static_scalar
-          { $$ = Param[parseVar($3), $5, $1, $2]; }
-;
-
-optional_class_type:
-      /* empty */                                           { $$ = null; }
-    | name                                                  { $$ = $1; }
-    | T_ARRAY                                               { $$ = 'array'; }
-    | T_CALLABLE                                            { $$ = 'callable'; }
-;
-
-argument_list:
-      '(' ')'                                               { $$ = array(); }
-    | '(' non_empty_argument_list ')'                       { $$ = $2; }
-    | '(' yield_expr ')'                                    { $$ = array(Arg[$2, false]); }
-;
-
-non_empty_argument_list:
-      argument                                              { init($1); }
-    | non_empty_argument_list ',' argument                  { push($1, $3); }
-;
-
-argument:
-      expr                                                  { $$ = Arg[$1, false]; }
-    | '&' variable                                          { $$ = Arg[$2, true]; }
-;
-
-global_var_list:
-      global_var_list ',' global_var                        { push($1, $3); }
-    | global_var                                            { init($1); }
-;
-
-global_var:
-      T_VARIABLE                                            { $$ = Expr_Variable[parseVar($1)]; }
-    | '$' variable                                          { $$ = Expr_Variable[$2]; }
-    | '$' '{' expr '}'                                      { $$ = Expr_Variable[$3]; }
-;
-
-static_var_list:
-      static_var_list ',' static_var                        { push($1, $3); }
-    | static_var                                            { init($1); }
-;
-
-static_var:
-      T_VARIABLE                                            { $$ = Stmt_StaticVar[parseVar($1), null]; }
-    | T_VARIABLE '=' static_scalar                          { $$ = Stmt_StaticVar[parseVar($1), $3]; }
-;
-
-class_statement_list:
-      class_statement_list class_statement                  { push($1, $2); }
-    | /* empty */                                           { init(); }
-;
-
-class_statement:
-      variable_modifiers property_declaration_list ';'      { $$ = Stmt_Property[$1, $2]; }
-    | T_CONST constant_declaration_list ';'                 { $$ = Stmt_ClassConst[$2]; }
-    | method_modifiers T_FUNCTION optional_ref T_STRING '(' parameter_list ')' method_body
-          { $$ = Stmt_ClassMethod[$4, [type: $1, byRef: $3, params: $6, stmts: $8]]; }
-    | T_USE name_list trait_adaptations                     { $$ = Stmt_TraitUse[$2, $3]; }
-;
-
-trait_adaptations:
-      ';'                                                   { $$ = array(); }
-    | '{' trait_adaptation_list '}'                         { $$ = $2; }
-;
-
-trait_adaptation_list:
-      /* empty */                                           { init(); }
-    | trait_adaptation_list trait_adaptation                { push($1, $2); }
-;
-
-trait_adaptation:
-      trait_method_reference_fully_qualified T_INSTEADOF name_list ';'
-          { $$ = Stmt_TraitUseAdaptation_Precedence[$1[0], $1[1], $3]; }
-    | trait_method_reference T_AS member_modifier T_STRING ';'
-          { $$ = Stmt_TraitUseAdaptation_Alias[$1[0], $1[1], $3, $4]; }
-    | trait_method_reference T_AS member_modifier ';'
-          { $$ = Stmt_TraitUseAdaptation_Alias[$1[0], $1[1], $3, null]; }
-    | trait_method_reference T_AS T_STRING ';'
-          { $$ = Stmt_TraitUseAdaptation_Alias[$1[0], $1[1], null, $3]; }
-;
-
-trait_method_reference_fully_qualified:
-      name T_PAAMAYIM_NEKUDOTAYIM T_STRING                  { $$ = array($1, $3); }
-;
-trait_method_reference:
-      trait_method_reference_fully_qualified                { $$ = $1; }
-    | T_STRING                                              { $$ = array(null, $1); }
-;
-
-method_body:
-      ';' /* abstract method */                             { $$ = null; }
-    | '{' inner_statement_list '}'                          { $$ = $2; }
-;
-
-variable_modifiers:
-      non_empty_member_modifiers                            { $$ = $1; }
-    | T_VAR                                                 { $$ = Stmt_Class::MODIFIER_PUBLIC; }
-;
-
-method_modifiers:
-      /* empty */                                           { $$ = Stmt_Class::MODIFIER_PUBLIC; }
-    | non_empty_member_modifiers                            { $$ = $1; }
-;
-
-non_empty_member_modifiers:
-      member_modifier                                       { $$ = $1; }
-    | non_empty_member_modifiers member_modifier            { Stmt_Class::verifyModifier($1, $2); $$ = $1 | $2; }
-;
-
-member_modifier:
-      T_PUBLIC                                              { $$ = Stmt_Class::MODIFIER_PUBLIC; }
-    | T_PROTECTED                                           { $$ = Stmt_Class::MODIFIER_PROTECTED; }
-    | T_PRIVATE                                             { $$ = Stmt_Class::MODIFIER_PRIVATE; }
-    | T_STATIC                                              { $$ = Stmt_Class::MODIFIER_STATIC; }
-    | T_ABSTRACT                                            { $$ = Stmt_Class::MODIFIER_ABSTRACT; }
-    | T_FINAL                                               { $$ = Stmt_Class::MODIFIER_FINAL; }
-;
-
-property_declaration_list:
-      property_declaration                                  { init($1); }
-    | property_declaration_list ',' property_declaration    { push($1, $3); }
-;
-
-property_declaration:
-      T_VARIABLE                                            { $$ = Stmt_PropertyProperty[parseVar($1), null]; }
-    | T_VARIABLE '=' static_scalar                          { $$ = Stmt_PropertyProperty[parseVar($1), $3]; }
-;
-
-expr_list:
-      expr_list ',' expr                                    { push($1, $3); }
-    | expr                                                  { init($1); }
-;
-
-for_expr:
-      /* empty */                                           { $$ = array(); }
-    | expr_list                                             { $$ = $1; }
-;
-
-expr:
-      variable                                              { $$ = $1; }
-    | list_expr '=' expr                                    { $$ = Expr_Assign[$1, $3]; }
-    | variable '=' expr                                     { $$ = Expr_Assign[$1, $3]; }
-    | variable '=' '&' variable                             { $$ = Expr_AssignRef[$1, $4]; }
-    | variable '=' '&' new_expr                             { $$ = Expr_AssignRef[$1, $4]; }
-    | new_expr                                              { $$ = $1; }
-    | T_CLONE expr                                          { $$ = Expr_Clone[$2]; }
-    | variable T_PLUS_EQUAL expr                            { $$ = Expr_AssignPlus      [$1, $3]; }
-    | variable T_MINUS_EQUAL expr                           { $$ = Expr_AssignMinus     [$1, $3]; }
-    | variable T_MUL_EQUAL expr                             { $$ = Expr_AssignMul       [$1, $3]; }
-    | variable T_DIV_EQUAL expr                             { $$ = Expr_AssignDiv       [$1, $3]; }
-    | variable T_CONCAT_EQUAL expr                          { $$ = Expr_AssignConcat    [$1, $3]; }
-    | variable T_MOD_EQUAL expr                             { $$ = Expr_AssignMod       [$1, $3]; }
-    | variable T_AND_EQUAL expr                             { $$ = Expr_AssignBitwiseAnd[$1, $3]; }
-    | variable T_OR_EQUAL expr                              { $$ = Expr_AssignBitwiseOr [$1, $3]; }
-    | variable T_XOR_EQUAL expr                             { $$ = Expr_AssignBitwiseXor[$1, $3]; }
-    | variable T_SL_EQUAL expr                              { $$ = Expr_AssignShiftLeft [$1, $3]; }
-    | variable T_SR_EQUAL expr                              { $$ = Expr_AssignShiftRight[$1, $3]; }
-    | variable T_INC                                        { $$ = Expr_PostInc[$1]; }
-    | T_INC variable                                        { $$ = Expr_PreInc [$2]; }
-    | variable T_DEC                                        { $$ = Expr_PostDec[$1]; }
-    | T_DEC variable                                        { $$ = Expr_PreDec [$2]; }
-    | expr T_BOOLEAN_OR expr                                { $$ = Expr_BooleanOr [$1, $3]; }
-    | expr T_BOOLEAN_AND expr                               { $$ = Expr_BooleanAnd[$1, $3]; }
-    | expr T_LOGICAL_OR expr                                { $$ = Expr_LogicalOr [$1, $3]; }
-    | expr T_LOGICAL_AND expr                               { $$ = Expr_LogicalAnd[$1, $3]; }
-    | expr T_LOGICAL_XOR expr                               { $$ = Expr_LogicalXor[$1, $3]; }
-    | expr '|' expr                                         { $$ = Expr_BitwiseOr [$1, $3]; }
-    | expr '&' expr                                         { $$ = Expr_BitwiseAnd[$1, $3]; }
-    | expr '^' expr                                         { $$ = Expr_BitwiseXor[$1, $3]; }
-    | expr '.' expr                                         { $$ = Expr_Concat    [$1, $3]; }
-    | expr '+' expr                                         { $$ = Expr_Plus      [$1, $3]; }
-    | expr '-' expr                                         { $$ = Expr_Minus     [$1, $3]; }
-    | expr '*' expr                                         { $$ = Expr_Mul       [$1, $3]; }
-    | expr '/' expr                                         { $$ = Expr_Div       [$1, $3]; }
-    | expr '%' expr                                         { $$ = Expr_Mod       [$1, $3]; }
-    | expr T_SL expr                                        { $$ = Expr_ShiftLeft [$1, $3]; }
-    | expr T_SR expr                                        { $$ = Expr_ShiftRight[$1, $3]; }
-    | '+' expr %prec T_INC                                  { $$ = Expr_UnaryPlus [$2]; }
-    | '-' expr %prec T_INC                                  { $$ = Expr_UnaryMinus[$2]; }
-    | '!' expr                                              { $$ = Expr_BooleanNot[$2]; }
-    | '~' expr                                              { $$ = Expr_BitwiseNot[$2]; }
-    | expr T_IS_IDENTICAL expr                              { $$ = Expr_Identical     [$1, $3]; }
-    | expr T_IS_NOT_IDENTICAL expr                          { $$ = Expr_NotIdentical  [$1, $3]; }
-    | expr T_IS_EQUAL expr                                  { $$ = Expr_Equal         [$1, $3]; }
-    | expr T_IS_NOT_EQUAL expr                              { $$ = Expr_NotEqual      [$1, $3]; }
-    | expr '<' expr                                         { $$ = Expr_Smaller       [$1, $3]; }
-    | expr T_IS_SMALLER_OR_EQUAL expr                       { $$ = Expr_SmallerOrEqual[$1, $3]; }
-    | expr '>' expr                                         { $$ = Expr_Greater       [$1, $3]; }
-    | expr T_IS_GREATER_OR_EQUAL expr                       { $$ = Expr_GreaterOrEqual[$1, $3]; }
-    | expr T_INSTANCEOF class_name_reference                { $$ = Expr_Instanceof    [$1, $3]; }
-    | parentheses_expr                                      { $$ = $1; }
-    /* we need a separate '(' new_expr ')' rule to avoid problems caused by a s/r conflict */
-    | '(' new_expr ')'                                      { $$ = $2; }
-    | expr '?' expr ':' expr                                { $$ = Expr_Ternary[$1, $3,   $5]; }
-    | expr '?' ':' expr                                     { $$ = Expr_Ternary[$1, null, $4]; }
-    | T_ISSET '(' variables_list ')'                        { $$ = Expr_Isset[$3]; }
-    | T_EMPTY '(' expr ')'                                  { $$ = Expr_Empty[$3]; }
-    | T_INCLUDE expr                                        { $$ = Expr_Include[$2, Expr_Include::TYPE_INCLUDE]; }
-    | T_INCLUDE_ONCE expr                                   { $$ = Expr_Include[$2, Expr_Include::TYPE_INCLUDE_ONCE]; }
-    | T_EVAL parentheses_expr                               { $$ = Expr_Eval[$2]; }
-    | T_REQUIRE expr                                        { $$ = Expr_Include[$2, Expr_Include::TYPE_REQUIRE]; }
-    | T_REQUIRE_ONCE expr                                   { $$ = Expr_Include[$2, Expr_Include::TYPE_REQUIRE_ONCE]; }
-    | T_INT_CAST expr                                       { $$ = Expr_Cast_Int     [$2]; }
-    | T_DOUBLE_CAST expr                                    { $$ = Expr_Cast_Double  [$2]; }
-    | T_STRING_CAST expr                                    { $$ = Expr_Cast_String  [$2]; }
-    | T_ARRAY_CAST expr                                     { $$ = Expr_Cast_Array   [$2]; }
-    | T_OBJECT_CAST expr                                    { $$ = Expr_Cast_Object  [$2]; }
-    | T_BOOL_CAST expr                                      { $$ = Expr_Cast_Bool    [$2]; }
-    | T_UNSET_CAST expr                                     { $$ = Expr_Cast_Unset   [$2]; }
-    | T_EXIT exit_expr                                      { $$ = Expr_Exit         [$2]; }
-    | '@' expr                                              { $$ = Expr_ErrorSuppress[$2]; }
-    | scalar                                                { $$ = $1; }
-    | array_expr                                            { $$ = $1; }
-    | scalar_dereference                                    { $$ = $1; }
-    | '`' backticks_expr '`'                                { $$ = Expr_ShellExec[$2]; }
-    | T_PRINT expr                                          { $$ = Expr_Print[$2]; }
-    | T_YIELD                                               { $$ = Expr_Yield[null, null]; }
-    | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars '{' inner_statement_list '}'
-          { $$ = Expr_Closure[[static: false, byRef: $2, params: $4, uses: $6, stmts: $8]]; }
-    | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars '{' inner_statement_list '}'
-          { $$ = Expr_Closure[[static: true, byRef: $3, params: $5, uses: $7, stmts: $9]]; }
-;
-
-parentheses_expr:
-      '(' expr ')'                                          { $$ = $2; }
-    | '(' yield_expr ')'                                    { $$ = $2; }
-;
-
-yield_expr:
-      T_YIELD expr                                          { $$ = Expr_Yield[$2, null]; }
-    | T_YIELD expr T_DOUBLE_ARROW expr                      { $$ = Expr_Yield[$4, $2]; }
-;
-
-array_expr:
-      T_ARRAY '(' array_pair_list ')'                       { $$ = Expr_Array[$3]; }
-    | '[' array_pair_list ']'                               { $$ = Expr_Array[$2]; }
-;
-
-scalar_dereference:
-      array_expr '[' dim_offset ']'                         { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']'
-          { $$ = Expr_ArrayDimFetch[Scalar_String[Scalar_String::parse($1)], $3]; }
-    | scalar_dereference '[' dim_offset ']'                 { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    /* alternative array syntax missing intentionally */
-;
-
-new_expr:
-      T_NEW class_name_reference ctor_arguments             { $$ = Expr_New[$2, $3]; }
-;
-
-lexical_vars:
-      /* empty */                                           { $$ = array(); }
-    | T_USE '(' lexical_var_list ')'                        { $$ = $3; }
-;
-
-lexical_var_list:
-      lexical_var                                           { init($1); }
-    | lexical_var_list ',' lexical_var                      { push($1, $3); }
-;
-
-lexical_var:
-      optional_ref T_VARIABLE                               { $$ = Expr_ClosureUse[parseVar($2), $1]; }
-;
-
-function_call:
-      name argument_list                                    { $$ = Expr_FuncCall[$1, $2]; }
-    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM T_STRING argument_list
-          { $$ = Expr_StaticCall[$1, $3, $4]; }
-    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '{' expr '}' argument_list
-          { $$ = Expr_StaticCall[$1, $4, $6]; }
-    | static_property argument_list {
-            if ($1 instanceof PHPParser_Node_Expr_StaticPropertyFetch) {
-                $$ = Expr_StaticCall[$1->class, Expr_Variable[$1->name], $2];
-            } elseif ($1 instanceof PHPParser_Node_Expr_ArrayDimFetch) {
-                $tmp = $1;
-                while ($tmp->var instanceof PHPParser_Node_Expr_ArrayDimFetch) {
-                    $tmp = $tmp->var;
-                }
-
-                $$ = Expr_StaticCall[$tmp->var->class, $1, $2];
-                $tmp->var = Expr_Variable[$tmp->var->name];
-            } else {
-                throw new Exception;
-            }
-          }
-    | variable_without_objects argument_list
-          { $$ = Expr_FuncCall[$1, $2]; }
-    | function_call '[' dim_offset ']'                      { $$ = Expr_ArrayDimFetch[$1, $3]; }
-      /* alternative array syntax missing intentionally */
-;
-
-class_name:
-      T_STATIC                                              { $$ = Name['static']; }
-    | name                                                  { $$ = $1; }
-;
-
-name:
-      namespace_name                                        { $$ = Name[$1]; }
-    | T_NS_SEPARATOR namespace_name                         { $$ = Name_FullyQualified[$2]; }
-    | T_NAMESPACE T_NS_SEPARATOR namespace_name             { $$ = Name_Relative[$3]; }
-;
-
-class_name_reference:
-      class_name                                            { $$ = $1; }
-    | dynamic_class_name_reference                          { $$ = $1; }
-;
-
-dynamic_class_name_reference:
-      object_access_for_dcnr                                { $$ = $1; }
-    | base_variable                                         { $$ = $1; }
-;
-
-class_name_or_var:
-      class_name                                            { $$ = $1; }
-    | reference_variable                                    { $$ = $1; }
-;
-
-object_access_for_dcnr:
-    | base_variable T_OBJECT_OPERATOR object_property
-          { $$ = Expr_PropertyFetch[$1, $3]; }
-    | object_access_for_dcnr T_OBJECT_OPERATOR object_property
-          { $$ = Expr_PropertyFetch[$1, $3]; }
-    | object_access_for_dcnr '[' dim_offset ']'             { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    | object_access_for_dcnr '{' expr '}'                   { $$ = Expr_ArrayDimFetch[$1, $3]; }
-;
-
-exit_expr:
-      /* empty */                                           { $$ = null; }
-    | '(' ')'                                               { $$ = null; }
-    | parentheses_expr                                      { $$ = $1; }
-;
-
-backticks_expr:
-      /* empty */                                           { $$ = array(); }
-    | T_ENCAPSED_AND_WHITESPACE                             { $$ = array(Scalar_String::parseEscapeSequences($1, '`')); }
-    | encaps_list                                           { parseEncapsed($1, '`'); $$ = $1; }
-;
-
-ctor_arguments:
-      /* empty */                                           { $$ = array(); }
-    | argument_list                                         { $$ = $1; }
-;
-
-common_scalar:
-      T_LNUMBER                                             { $$ = Scalar_LNumber[Scalar_LNumber::parse($1)]; }
-    | T_DNUMBER                                             { $$ = Scalar_DNumber[Scalar_DNumber::parse($1)]; }
-    | T_CONSTANT_ENCAPSED_STRING                            { $$ = Scalar_String[Scalar_String::parse($1)]; }
-    | T_LINE                                                { $$ = Scalar_LineConst[]; }
-    | T_FILE                                                { $$ = Scalar_FileConst[]; }
-    | T_DIR                                                 { $$ = Scalar_DirConst[]; }
-    | T_CLASS_C                                             { $$ = Scalar_ClassConst[]; }
-    | T_TRAIT_C                                             { $$ = Scalar_TraitConst[]; }
-    | T_METHOD_C                                            { $$ = Scalar_MethodConst[]; }
-    | T_FUNC_C                                              { $$ = Scalar_FuncConst[]; }
-    | T_NS_C                                                { $$ = Scalar_NSConst[]; }
-    | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
-          { $$ = Scalar_String[Scalar_String::parseDocString($1, $2)]; }
-    | T_START_HEREDOC T_END_HEREDOC
-          { $$ = Scalar_String['']; }
-    | name                                                  { $$ = Expr_ConstFetch[$1]; }
-;
-
-static_scalar: /* compile-time evaluated scalars */
-      common_scalar                                         { $$ = $1; }
-    | class_name T_PAAMAYIM_NEKUDOTAYIM class_const_name    { $$ = Expr_ClassConstFetch[$1, $3]; }
-    | '+' static_scalar                                     { $$ = Expr_UnaryPlus[$2]; }
-    | '-' static_scalar                                     { $$ = Expr_UnaryMinus[$2]; }
-    | T_ARRAY '(' static_array_pair_list ')'                { $$ = Expr_Array[$3]; }
-    | '[' static_array_pair_list ']'                        { $$ = Expr_Array[$2]; }
-;
-
-scalar:
-      common_scalar                                         { $$ = $1; }
-    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM class_const_name
-          { $$ = Expr_ClassConstFetch[$1, $3]; }
-    | '"' encaps_list '"'
-          { parseEncapsed($2, '"'); $$ = Scalar_Encapsed[$2]; }
-    | T_START_HEREDOC encaps_list T_END_HEREDOC
-          { parseEncapsedDoc($2); $$ = Scalar_Encapsed[$2]; }
-;
-
-class_const_name:
-      T_STRING                                              { $$ = $1; }
-    | T_CLASS                                               { $$ = 'class'; }
-;
-
-static_array_pair_list:
-      /* empty */                                           { $$ = array(); }
-    | non_empty_static_array_pair_list optional_comma       { $$ = $1; }
-;
-
-optional_comma:
-      /* empty */
-    | ','
-;
-
-non_empty_static_array_pair_list:
-      non_empty_static_array_pair_list ',' static_array_pair { push($1, $3); }
-    | static_array_pair                                      { init($1); }
-;
-
-static_array_pair:
-      static_scalar T_DOUBLE_ARROW static_scalar            { $$ = Expr_ArrayItem[$3, $1,   false]; }
-    | static_scalar                                         { $$ = Expr_ArrayItem[$1, null, false]; }
-;
-
-variable:
-      object_access                                         { $$ = $1; }
-    | base_variable                                         { $$ = $1; }
-    | function_call                                         { $$ = $1; }
-    | new_expr_array_deref                                  { $$ = $1; }
-;
-
-new_expr_array_deref:
-      '(' new_expr ')' '[' dim_offset ']'                   { $$ = Expr_ArrayDimFetch[$2, $5]; }
-    | new_expr_array_deref '[' dim_offset ']'               { $$ = Expr_ArrayDimFetch[$1, $3]; }
-      /* alternative array syntax missing intentionally */
-;
-
-object_access:
-      variable_or_new_expr T_OBJECT_OPERATOR object_property
-          { $$ = Expr_PropertyFetch[$1, $3]; }
-    | variable_or_new_expr T_OBJECT_OPERATOR object_property argument_list
-          { $$ = Expr_MethodCall[$1, $3, $4]; }
-    | object_access argument_list                           { $$ = Expr_FuncCall[$1, $2]; }
-    | object_access '[' dim_offset ']'                      { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    | object_access '{' expr '}'                            { $$ = Expr_ArrayDimFetch[$1, $3]; }
-;
-
-variable_or_new_expr:
-      variable                                              { $$ = $1; }
-    | '(' new_expr ')'                                      { $$ = $2; }
-;
-
-variable_without_objects:
-      reference_variable                                    { $$ = $1; }
-    | '$' variable_without_objects                          { $$ = Expr_Variable[$2]; }
-;
-
-base_variable:
-      variable_without_objects                              { $$ = $1; }
-    | static_property                                       { $$ = $1; }
-;
-
-static_property:
-      class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' reference_variable
-          { $$ = Expr_StaticPropertyFetch[$1, $4]; }
-    | static_property_with_arrays                           { $$ = $1; }
-;
-
-static_property_with_arrays:
-      class_name_or_var T_PAAMAYIM_NEKUDOTAYIM T_VARIABLE
-          { $$ = Expr_StaticPropertyFetch[$1, parseVar($3)]; }
-    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' '{' expr '}'
-          { $$ = Expr_StaticPropertyFetch[$1, $5]; }
-    | static_property_with_arrays '[' dim_offset ']'        { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    | static_property_with_arrays '{' expr '}'              { $$ = Expr_ArrayDimFetch[$1, $3]; }
-;
-
-reference_variable:
-      reference_variable '[' dim_offset ']'                 { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    | reference_variable '{' expr '}'                       { $$ = Expr_ArrayDimFetch[$1, $3]; }
-    | T_VARIABLE                                            { $$ = Expr_Variable[parseVar($1)]; }
-    | '$' '{' expr '}'                                      { $$ = Expr_Variable[$3]; }
-;
-
-dim_offset:
-      /* empty */                                           { $$ = null; }
-    | expr                                                  { $$ = $1; }
-;
-
-object_property:
-      T_STRING                                              { $$ = $1; }
-    | '{' expr '}'                                          { $$ = $2; }
-    | variable_without_objects                              { $$ = $1; }
-;
-
-list_expr:
-      T_LIST '(' list_expr_elements ')'                     { $$ = Expr_List[$3]; }
-;
-
-list_expr_elements:
-      list_expr_elements ',' list_expr_element              { push($1, $3); }
-    | list_expr_element                                     { init($1); }
-;
-
-list_expr_element:
-      variable                                              { $$ = $1; }
-    | list_expr                                             { $$ = $1; }
-    | /* empty */                                           { $$ = null; }
-;
-
-array_pair_list:
-      /* empty */                                           { $$ = array(); }
-    | non_empty_array_pair_list optional_comma              { $$ = $1; }
-;
-
-non_empty_array_pair_list:
-      non_empty_array_pair_list ',' array_pair              { push($1, $3); }
-    | array_pair                                            { init($1); }
-;
-
-array_pair:
-      expr T_DOUBLE_ARROW expr                              { $$ = Expr_ArrayItem[$3, $1,   false]; }
-    | expr                                                  { $$ = Expr_ArrayItem[$1, null, false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr_ArrayItem[$4, $1,   true]; }
-    | '&' variable                                          { $$ = Expr_ArrayItem[$2, null, true]; }
-;
-
-encaps_list:
-      encaps_list encaps_var                                { push($1, $2); }
-    | encaps_list T_ENCAPSED_AND_WHITESPACE                 { push($1, $2); }
-    | encaps_var                                            { init($1); }
-    | T_ENCAPSED_AND_WHITESPACE encaps_var                  { init($1, $2); }
-;
-
-encaps_var:
-      T_VARIABLE                                            { $$ = Expr_Variable[parseVar($1)]; }
-    | T_VARIABLE '[' encaps_var_offset ']'                  { $$ = Expr_ArrayDimFetch[Expr_Variable[parseVar($1)], $3]; }
-    | T_VARIABLE T_OBJECT_OPERATOR T_STRING                 { $$ = Expr_PropertyFetch[Expr_Variable[parseVar($1)], $3]; }
-    | T_DOLLAR_OPEN_CURLY_BRACES expr '}'                   { $$ = Expr_Variable[$2]; }
-    | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}'       { $$ = Expr_Variable[$2]; }
-    | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}'
-          { $$ = Expr_ArrayDimFetch[Expr_Variable[$2], $4]; }
-    | T_CURLY_OPEN variable '}'                             { $$ = $2; }
-;
-
-encaps_var_offset:
-      T_STRING                                              { $$ = Scalar_String[$1]; }
-    | T_NUM_STRING                                          { $$ = Scalar_String[$1]; }
-    | T_VARIABLE                                            { $$ = Expr_Variable[parseVar($1)]; }
-;
-
-%%
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Autoloader.php b/vendor/nikic/php-parser/lib/PHPParser/Autoloader.php
deleted file mode 100644
index 314dffb..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Autoloader.php
+++ /dev/null
@@ -1,33 +0,0 @@
-name = $name;
-
-        $this->type = 0;
-        $this->extends = null;
-        $this->implements = array();
-
-        $this->uses = $this->constants = $this->properties = $this->methods = array();
-    }
-
-    /**
-     * Extends a class.
-     *
-     * @param PHPParser_Node_Name|string $class Name of class to extend
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function extend($class) {
-        $this->extends = $this->normalizeName($class);
-
-        return $this;
-    }
-
-    /**
-     * Implements one or more interfaces.
-     *
-     * @param PHPParser_Node_Name|string $interface Name of interface to implement
-     * @param PHPParser_Node_Name|string $...       More interfaces to implement
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function implement() {
-        foreach (func_get_args() as $interface) {
-            $this->implements[] = $this->normalizeName($interface);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Makes the class abstract.
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function makeAbstract() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT);
-
-        return $this;
-    }
-
-    /**
-     * Makes the class final.
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function makeFinal() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_FINAL);
-
-        return $this;
-    }
-
-    /**
-     * Adds a statement.
-     *
-     * @param PHPParser_Node_Stmt|PHPParser_Builder $stmt The statement to add
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function addStmt($stmt) {
-        $stmt = $this->normalizeNode($stmt);
-
-        $targets = array(
-            'Stmt_TraitUse'    => &$this->uses,
-            'Stmt_ClassConst'  => &$this->constants,
-            'Stmt_Property'    => &$this->properties,
-            'Stmt_ClassMethod' => &$this->methods,
-        );
-
-        $type = $stmt->getType();
-        if (!isset($targets[$type])) {
-            throw new LogicException(sprintf('Unexpected node of type "%s"', $type));
-        }
-
-        $targets[$type][] = $stmt;
-
-        return $this;
-    }
-
-    /**
-     * Adds multiple statements.
-     *
-     * @param array $stmts The statements to add
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function addStmts(array $stmts) {
-        foreach ($stmts as $stmt) {
-            $this->addStmt($stmt);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the built class node.
-     *
-     * @return PHPParser_Node_Stmt_Class The built class node
-     */
-    public function getNode() {
-        return new PHPParser_Node_Stmt_Class($this->name, array(
-            'type' => $this->type,
-            'extends' => $this->extends,
-            'implements' => $this->implements,
-            'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods),
-        ));
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Builder/Function.php b/vendor/nikic/php-parser/lib/PHPParser/Builder/Function.php
deleted file mode 100644
index 462ad96..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Builder/Function.php
+++ /dev/null
@@ -1,109 +0,0 @@
-name = $name;
-
-        $this->returnByRef = false;
-        $this->params = array();
-        $this->stmts = array();
-    }
-
-    /**
-     * Make the function return by reference.
-     *
-     * @return PHPParser_Builder_Function The builder instance (for fluid interface)
-     */
-    public function makeReturnByRef() {
-        $this->returnByRef = true;
-
-        return $this;
-    }
-
-    /**
-     * Adds a parameter.
-     *
-     * @param PHPParser_Node_Param|PHPParser_Builder_Param $param The parameter to add
-     *
-     * @return PHPParser_Builder_Function The builder instance (for fluid interface)
-     */
-    public function addParam($param) {
-        $param = $this->normalizeNode($param);
-
-        if (!$param instanceof PHPParser_Node_Param) {
-            throw new LogicException(sprintf('Expected parameter node, got "%s"', $param->getType()));
-        }
-
-        $this->params[] = $param;
-
-        return $this;
-    }
-
-    /**
-     * Adds multiple parameters.
-     *
-     * @param array $params The parameters to add
-     *
-     * @return PHPParser_Builder_Function The builder instance (for fluid interface)
-     */
-    public function addParams(array $params) {
-        foreach ($params as $param) {
-            $this->addParam($param);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Adds a statement.
-     *
-     * @param PHPParser_Node|PHPParser_Builder $stmt The statement to add
-     *
-     * @return PHPParser_Builder_Function The builder instance (for fluid interface)
-     */
-    public function addStmt($stmt) {
-        $this->stmts[] = $this->normalizeNode($stmt);
-
-        return $this;
-    }
-
-    /**
-     * Adds multiple statements.
-     *
-     * @param array $stmts The statements to add
-     *
-     * @return PHPParser_Builder_Function The builder instance (for fluid interface)
-     */
-    public function addStmts(array $stmts) {
-        foreach ($stmts as $stmt) {
-            $this->addStmt($stmt);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the built function node.
-     *
-     * @return PHPParser_Node_Stmt_Function The built function node
-     */
-    public function getNode() {
-        return new PHPParser_Node_Stmt_Function($this->name, array(
-            'byRef'  => $this->returnByRef,
-            'params' => $this->params,
-            'stmts'  => $this->stmts,
-        ));
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Builder/Interface.php b/vendor/nikic/php-parser/lib/PHPParser/Builder/Interface.php
deleted file mode 100644
index 8c76dc9..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Builder/Interface.php
+++ /dev/null
@@ -1,92 +0,0 @@
-name = $name;
-        $this->extends = array();
-        $this->constants = $this->methods = array();
-    }
-
-    /**
-     * Extends one or more interfaces.
-     *
-     * @param PHPParser_Node_Name|string $interface Name of interface to extend
-     * @param PHPParser_Node_Name|string $...       More interfaces to extend
-     *
-     * @return PHPParser_Builder_Interface The builder instance (for fluid interface)
-     */
-    public function extend() {
-        foreach (func_get_args() as $interface) {
-            $this->extends[] = $this->normalizeName($interface);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Adds a statement.
-     *
-     * @param PHPParser_Node_Stmt|PHPParser_Builder $stmt The statement to add
-     *
-     * @return PHPParser_Builder_Interface The builder instance (for fluid interface)
-     */
-    public function addStmt($stmt) {
-        $stmt = $this->normalizeNode($stmt);
-
-        $type = $stmt->getType();
-        switch ($type) {
-            case 'Stmt_ClassConst':
-                $this->constants[] = $stmt;
-                break;
-
-            case 'Stmt_ClassMethod':
-                // we erase all statements in the body of an interface method
-                $stmt->stmts = null;
-                $this->methods[] = $stmt;
-                break;
-
-            default:
-                throw new LogicException(sprintf('Unexpected node of type "%s"', $type));
-        }
-
-        return $this;
-    }
-
-    /**
-     * Adds multiple statements.
-     *
-     * @param array $stmts The statements to add
-     *
-     * @return PHPParser_Builder_Class The builder instance (for fluid interface)
-     */
-    public function addStmts(array $stmts) {
-        foreach ($stmts as $stmt) {
-            $this->addStmt($stmt);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the built class node.
-     *
-     * @return PHPParser_Node_Stmt_Interface The built interface node
-     */
-    public function getNode() {
-        return new PHPParser_Node_Stmt_Interface($this->name, array(
-            'extends' => $this->extends,
-            'stmts' => array_merge($this->constants, $this->methods),
-        ));
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Builder/Method.php b/vendor/nikic/php-parser/lib/PHPParser/Builder/Method.php
deleted file mode 100644
index 7244ba5..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Builder/Method.php
+++ /dev/null
@@ -1,187 +0,0 @@
-name = $name;
-
-        $this->type = 0;
-        $this->returnByRef = false;
-        $this->params = array();
-        $this->stmts = array();
-    }
-
-    /**
-     * Makes the method public.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makePublic() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC);
-
-        return $this;
-    }
-
-    /**
-     * Makes the method protected.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makeProtected() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED);
-
-        return $this;
-    }
-
-    /**
-     * Makes the method private.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makePrivate() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE);
-
-        return $this;
-    }
-
-    /**
-     * Makes the method static.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makeStatic() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_STATIC);
-
-        return $this;
-    }
-
-    /**
-     * Makes the method abstract.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makeAbstract() {
-        if (!empty($this->stmts)) {
-            throw new LogicException('Cannot make method with statements abstract');
-        }
-
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT);
-        $this->stmts = null; // abstract methods don't have statements
-
-        return $this;
-    }
-
-    /**
-     * Makes the method final.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makeFinal() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_FINAL);
-
-        return $this;
-    }
-
-    /**
-     * Make the method return by reference.
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function makeReturnByRef() {
-        $this->returnByRef = true;
-
-        return $this;
-    }
-
-    /**
-     * Adds a parameter.
-     *
-     * @param PHPParser_Node_Param|PHPParser_Builder_Param $param The parameter to add
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function addParam($param) {
-        $param = $this->normalizeNode($param);
-
-        if (!$param instanceof PHPParser_Node_Param) {
-            throw new LogicException(sprintf('Expected parameter node, got "%s"', $param->getType()));
-        }
-
-        $this->params[] = $param;
-
-        return $this;
-    }
-
-    /**
-     * Adds multiple parameters.
-     *
-     * @param array $params The parameters to add
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function addParams(array $params) {
-        foreach ($params as $param) {
-            $this->addParam($param);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Adds a statement.
-     *
-     * @param PHPParser_Node|PHPParser_Builder $stmt The statement to add
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function addStmt($stmt) {
-        if (null === $this->stmts) {
-            throw new LogicException('Cannot add statements to an abstract method');
-        }
-
-        $this->stmts[] = $this->normalizeNode($stmt);
-
-        return $this;
-    }
-
-    /**
-     * Adds multiple statements.
-     *
-     * @param array $stmts The statements to add
-     *
-     * @return PHPParser_Builder_Method The builder instance (for fluid interface)
-     */
-    public function addStmts(array $stmts) {
-        foreach ($stmts as $stmt) {
-            $this->addStmt($stmt);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the built method node.
-     *
-     * @return PHPParser_Node_Stmt_ClassMethod The built method node
-     */
-    public function getNode() {
-        return new PHPParser_Node_Stmt_ClassMethod($this->name, array(
-            'type'   => $this->type !== 0 ? $this->type : PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC,
-            'byRef'  => $this->returnByRef,
-            'params' => $this->params,
-            'stmts'  => $this->stmts,
-        ));
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Builder/Param.php b/vendor/nikic/php-parser/lib/PHPParser/Builder/Param.php
deleted file mode 100644
index 4c217a9..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Builder/Param.php
+++ /dev/null
@@ -1,75 +0,0 @@
-name = $name;
-
-        $this->default = null;
-        $this->type = null;
-        $this->byRef = false;
-    }
-
-    /**
-     * Sets default value for the parameter.
-     *
-     * @param mixed $value Default value to use
-     *
-     * @return PHPParser_Builder_Param The builder instance (for fluid interface)
-     */
-    public function setDefault($value) {
-        $this->default = $this->normalizeValue($value);
-
-        return $this;
-    }
-
-    /**
-     * Sets type hint for the parameter.
-     *
-     * @param string|PHPParser_Node_Name $type Type hint to use
-     *
-     * @return PHPParser_Builder_Param The builder instance (for fluid interface)
-     */
-    public function setTypeHint($type) {
-        if ($type === 'array' || $type === 'callable') {
-            $this->type = $type;
-        } else {
-            $this->type = $this->normalizeName($type);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Make the parameter accept the value by reference.
-     *
-     * @return PHPParser_Builder_Param The builder instance (for fluid interface)
-     */
-    public function makeByRef() {
-        $this->byRef = true;
-
-        return $this;
-    }
-
-    /**
-     * Returns the built parameter node.
-     *
-     * @return PHPParser_Node_Param The built parameter node
-     */
-    public function getNode() {
-        return new PHPParser_Node_Param(
-            $this->name, $this->default, $this->type, $this->byRef
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Builder/Property.php b/vendor/nikic/php-parser/lib/PHPParser/Builder/Property.php
deleted file mode 100644
index 806632c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Builder/Property.php
+++ /dev/null
@@ -1,92 +0,0 @@
-name = $name;
-
-        $this->type = 0;
-        $this->default = null;
-    }
-
-    /**
-     * Makes the property public.
-     *
-     * @return PHPParser_Builder_Property The builder instance (for fluid interface)
-     */
-    public function makePublic() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC);
-
-        return $this;
-    }
-
-    /**
-     * Makes the property protected.
-     *
-     * @return PHPParser_Builder_Property The builder instance (for fluid interface)
-     */
-    public function makeProtected() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED);
-
-        return $this;
-    }
-
-    /**
-     * Makes the property private.
-     *
-     * @return PHPParser_Builder_Property The builder instance (for fluid interface)
-     */
-    public function makePrivate() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE);
-
-        return $this;
-    }
-
-    /**
-     * Makes the property static.
-     *
-     * @return PHPParser_Builder_Property The builder instance (for fluid interface)
-     */
-    public function makeStatic() {
-        $this->setModifier(PHPParser_Node_Stmt_Class::MODIFIER_STATIC);
-
-        return $this;
-    }
-
-    /**
-     * Sets default value for the property.
-     *
-     * @param mixed $value Default value to use
-     *
-     * @return PHPParser_Builder_Property The builder instance (for fluid interface)
-     */
-    public function setDefault($value) {
-        $this->default = $this->normalizeValue($value);
-
-        return $this;
-    }
-
-    /**
-     * Returns the built class node.
-     *
-     * @return PHPParser_Node_Stmt_Property The built property node
-     */
-    public function getNode() {
-        return new PHPParser_Node_Stmt_Property(
-            $this->type !== 0 ? $this->type : PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC,
-            array(
-                new PHPParser_Node_Stmt_PropertyProperty($this->name, $this->default)
-            )
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/BuilderAbstract.php b/vendor/nikic/php-parser/lib/PHPParser/BuilderAbstract.php
deleted file mode 100644
index d17b060..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/BuilderAbstract.php
+++ /dev/null
@@ -1,94 +0,0 @@
-getNode();
-        } elseif ($node instanceof PHPParser_Node) {
-            return $node;
-        }
-
-        throw new LogicException('Expected node or builder object');
-    }
-
-    /**
-     * Normalizes a name: Converts plain string names to PHPParser_Node_Name.
-     *
-     * @param PHPParser_Node_Name|string $name The name to normalize
-     *
-     * @return PHPParser_Node_Name The normalized name
-     */
-    protected function normalizeName($name) {
-        if ($name instanceof PHPParser_Node_Name) {
-            return $name;
-        } else {
-            return new PHPParser_Node_Name($name);
-        }
-    }
-
-    /**
-     * Normalizes a value: Converts nulls, booleans, integers,
-     * floats, strings and arrays into their respective nodes
-     *
-     * @param mixed $value The value to normalize
-     *
-     * @return PHPParser_Node_Expr The normalized value
-     */
-    protected function normalizeValue($value) {
-        if ($value instanceof PHPParser_Node) {
-            return $value;
-        } elseif (is_null($value)) {
-            return new PHPParser_Node_Expr_ConstFetch(
-                new PHPParser_Node_Name('null')
-            );
-        } elseif (is_bool($value)) {
-            return new PHPParser_Node_Expr_ConstFetch(
-                new PHPParser_Node_Name($value ? 'true' : 'false')
-            );
-        } elseif (is_int($value)) {
-            return new PHPParser_Node_Scalar_LNumber($value);
-        } elseif (is_float($value)) {
-            return new PHPParser_Node_Scalar_DNumber($value);
-        } elseif (is_string($value)) {
-            return new PHPParser_Node_Scalar_String($value);
-        } elseif (is_array($value)) {
-            $items = array();
-            $lastKey = -1;
-            foreach ($value as $itemKey => $itemValue) {
-                // for consecutive, numeric keys don't generate keys
-                if (null !== $lastKey && ++$lastKey === $itemKey) {
-                    $items[] = new PHPParser_Node_Expr_ArrayItem(
-                        $this->normalizeValue($itemValue)
-                    );
-                } else {
-                    $lastKey = null;
-                    $items[] = new PHPParser_Node_Expr_ArrayItem(
-                        $this->normalizeValue($itemValue),
-                        $this->normalizeValue($itemKey)
-                    );
-                }
-            }
-
-            return new PHPParser_Node_Expr_Array($items);
-        } else {
-            throw new LogicException('Invalid value');
-        }
-    }
-
-    /**
-     * Sets a modifier in the $this->type property.
-     *
-     * @param int $modifier Modifier to set
-     */
-    protected function setModifier($modifier) {
-        PHPParser_Node_Stmt_Class::verifyModifier($this->type, $modifier);
-        $this->type |= $modifier;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/BuilderFactory.php b/vendor/nikic/php-parser/lib/PHPParser/BuilderFactory.php
deleted file mode 100644
index 48941dc..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/BuilderFactory.php
+++ /dev/null
@@ -1,87 +0,0 @@
-text = $text;
-        $this->line = $line;
-    }
-
-    /**
-     * Gets the comment text.
-     *
-     * @return string The comment text (including comment delimiters like /*)
-     */
-    public function getText() {
-        return $this->text;
-    }
-
-    /**
-     * Sets the comment text.
-     *
-     * @param string $text The comment text (including comment delimiters like /*)
-     */
-    public function setText($text) {
-        $this->text = $text;
-    }
-
-    /**
-     * Gets the line number the comment started on.
-     *
-     * @return int Line number
-     */
-    public function getLine() {
-        return $this->line;
-    }
-
-    /**
-     * Sets the line number the comment started on.
-     *
-     * @param int $line Line number
-     */
-    public function setLine($line) {
-        $this->line = $line;
-    }
-
-    /**
-     * Gets the comment text.
-     *
-     * @return string The comment text (including comment delimiters like /*)
-     */
-    public function __toString() {
-        return $this->text;
-    }
-
-    /**
-     * Gets the reformatted comment text.
-     *
-     * "Reformatted" here means that we try to clean up the whitespace at the
-     * starts of the lines. This is necessary because we receive the comments
-     * without trailing whitespace on the first line, but with trailing whitespace
-     * on all subsequent lines.
-     *
-     * @return mixed|string
-     */
-    public function getReformattedText() {
-        $text = trim($this->text);
-        if (false === strpos($text, "\n")) {
-            // Single line comments don't need further processing
-            return $text;
-        } elseif (preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\R\s+\*.*)+$)', $text)) {
-            // Multi line comment of the type
-            //
-            //     /*
-            //      * Some text.
-            //      * Some more text.
-            //      */
-            //
-            // is handled by replacing the whitespace sequences before the * by a single space
-            return preg_replace('(^\s+\*)m', ' *', $this->text);
-        } elseif (preg_match('(^/\*\*?\s*[\r\n])', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) {
-            // Multi line comment of the type
-            //
-            //    /*
-            //        Some text.
-            //        Some more text.
-            //    */
-            //
-            // is handled by removing the whitespace sequence on the line before the closing
-            // */ on all lines. So if the last line is "    */", then "    " is removed at the
-            // start of all lines.
-            return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text);
-        } elseif (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) {
-            // Multi line comment of the type
-            //
-            //     /* Some text.
-            //        Some more text.
-            //        Even more text. */
-            //
-            // is handled by taking the length of the "/* " segment and leaving only that
-            // many space characters before the lines. Thus in the above example only three
-            // space characters are left at the start of every line.
-            return preg_replace('(^\s*(?= {' . strlen($matches[0]) . '}(?!\s)))m', '', $text);
-        }
-
-        // No idea how to format this comment, so simply return as is
-        return $text;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Comment/Doc.php b/vendor/nikic/php-parser/lib/PHPParser/Comment/Doc.php
deleted file mode 100644
index 95e4bc9..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Comment/Doc.php
+++ /dev/null
@@ -1,5 +0,0 @@
-rawMessage = (string) $message;
-        $this->rawLine    = (int) $line;
-        $this->updateMessage();
-    }
-
-    /**
-     * Gets the error message
-     *
-     * @return string Error message
-     */
-    public function getRawMessage() {
-        return $this->rawMessage;
-    }
-
-    /**
-     * Sets the line of the PHP file the error occurred in.
-     *
-     * @param string $message Error message
-     */
-    public function setRawMessage($message) {
-        $this->rawMessage = (string) $message;
-        $this->updateMessage();
-    }
-
-    /**
-     * Gets the error line in the PHP file.
-     *
-     * @return int Error line in the PHP file
-     */
-    public function getRawLine() {
-        return $this->rawLine;
-    }
-
-    /**
-     * Sets the line of the PHP file the error occurred in.
-     *
-     * @param int $line Error line in the PHP file
-     */
-    public function setRawLine($line) {
-        $this->rawLine = (int) $line;
-        $this->updateMessage();
-    }
-
-    /**
-     * Updates the exception message after a change to rawMessage or rawLine.
-     */
-    protected function updateMessage() {
-        $this->message = $this->rawMessage;
-
-        if (-1 === $this->rawLine) {
-            $this->message .= ' on unknown line';
-        } else {
-            $this->message .= ' on line ' . $this->rawLine;
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Lexer.php b/vendor/nikic/php-parser/lib/PHPParser/Lexer.php
deleted file mode 100644
index eb3117d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Lexer.php
+++ /dev/null
@@ -1,191 +0,0 @@
-tokenMap = $this->createTokenMap();
-
-        // map of tokens to drop while lexing (the map is only used for isset lookup,
-        // that's why the value is simply set to 1; the value is never actually used.)
-        $this->dropTokens = array_fill_keys(array(T_WHITESPACE, T_OPEN_TAG), 1);
-    }
-
-    /**
-     * Initializes the lexer for lexing the provided source code.
-     *
-     * @param string $code The source code to lex
-     *
-     * @throws PHPParser_Error on lexing errors (unterminated comment or unexpected character)
-     */
-    public function startLexing($code) {
-        $this->resetErrors();
-        $this->tokens = @token_get_all($code);
-        $this->handleErrors();
-
-        $this->code = $code; // keep the code around for __halt_compiler() handling
-        $this->pos  = -1;
-        $this->line =  1;
-    }
-
-    protected function resetErrors() {
-        // clear error_get_last() by forcing an undefined variable error
-        // @$undefinedVariable;
-    }
-
-    protected function handleErrors() {
-        $error = error_get_last();
-
-        if (preg_match(
-            '~^Unterminated comment starting line ([0-9]+)$~',
-            $error['message'], $matches
-        )) {
-            throw new PHPParser_Error('Unterminated comment', $matches[1]);
-        }
-
-        if (preg_match(
-            '~^Unexpected character in input:  \'(.)\' \(ASCII=([0-9]+)\)~s',
-            $error['message'], $matches
-        )) {
-            throw new PHPParser_Error(sprintf(
-                'Unexpected character "%s" (ASCII %d)',
-                $matches[1], $matches[2]
-            ));
-        }
-
-        // PHP cuts error message after null byte, so need special case
-        if (preg_match('~^Unexpected character in input:  \'$~', $error['message'])) {
-            throw new PHPParser_Error('Unexpected null byte');
-        }
-    }
-
-    /**
-     * Fetches the next token.
-     *
-     * @param mixed $value           Variable to store token content in
-     * @param mixed $startAttributes Variable to store start attributes in
-     * @param mixed $endAttributes   Variable to store end attributes in
-     *
-     * @return int Token id
-     */
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
-        $startAttributes = array();
-        $endAttributes   = array();
-
-        while (isset($this->tokens[++$this->pos])) {
-            $token = $this->tokens[$this->pos];
-
-            if (is_string($token)) {
-                $startAttributes['startLine'] = $this->line;
-                $endAttributes['endLine']     = $this->line;
-
-                // bug in token_get_all
-                if ('b"' === $token) {
-                    $value = 'b"';
-                    return ord('"');
-                } else {
-                    $value = $token;
-                    return ord($token);
-                }
-            } else {
-                $this->line += substr_count($token[1], "\n");
-
-                if (T_COMMENT === $token[0]) {
-                    $startAttributes['comments'][] = new PHPParser_Comment($token[1], $token[2]);
-                } elseif (T_DOC_COMMENT === $token[0]) {
-                    $startAttributes['comments'][] = new PHPParser_Comment_Doc($token[1], $token[2]);
-                } elseif (!isset($this->dropTokens[$token[0]])) {
-                    $value = $token[1];
-                    $startAttributes['startLine'] = $token[2];
-                    $endAttributes['endLine']     = $this->line;
-
-                    return $this->tokenMap[$token[0]];
-                }
-            }
-        }
-
-        $startAttributes['startLine'] = $this->line;
-
-        // 0 is the EOF token
-        return 0;
-    }
-
-    /**
-     * Handles __halt_compiler() by returning the text after it.
-     *
-     * @return string Remaining text
-     */
-    public function handleHaltCompiler() {
-        // get the length of the text before the T_HALT_COMPILER token
-        $textBefore = '';
-        for ($i = 0; $i <= $this->pos; ++$i) {
-            if (is_string($this->tokens[$i])) {
-                $textBefore .= $this->tokens[$i];
-            } else {
-                $textBefore .= $this->tokens[$i][1];
-            }
-        }
-
-        // text after T_HALT_COMPILER, still including ();
-        $textAfter = substr($this->code, strlen($textBefore));
-
-        // ensure that it is followed by ();
-        // this simplifies the situation, by not allowing any comments
-        // in between of the tokens.
-        if (!preg_match('~\s*\(\s*\)\s*(?:;|\?>\r?\n?)~', $textAfter, $matches)) {
-            throw new PHPParser_Error('__halt_compiler must be followed by "();"');
-        }
-
-        // prevent the lexer from returning any further tokens
-        $this->pos = count($this->tokens);
-
-        // return with (); removed
-        return (string) substr($textAfter, strlen($matches[0])); // (string) converts false to ''
-    }
-
-    /**
-     * Creates the token map.
-     *
-     * The token map maps the PHP internal token identifiers
-     * to the identifiers used by the Parser. Additionally it
-     * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'.
-     *
-     * @return array The token map
-     */
-    protected function createTokenMap() {
-        $tokenMap = array();
-
-        // 256 is the minimum possible token number, as everything below
-        // it is an ASCII value
-        for ($i = 256; $i < 1000; ++$i) {
-            // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM
-            if (T_DOUBLE_COLON === $i) {
-                $tokenMap[$i] = PHPParser_Parser::T_PAAMAYIM_NEKUDOTAYIM;
-            // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO
-            } elseif(T_OPEN_TAG_WITH_ECHO === $i) {
-                $tokenMap[$i] = PHPParser_Parser::T_ECHO;
-            // T_CLOSE_TAG is equivalent to ';'
-            } elseif(T_CLOSE_TAG === $i) {
-                $tokenMap[$i] = ord(';');
-            // and the others can be mapped directly
-            } elseif ('UNKNOWN' !== ($name = token_name($i))
-                      && defined($name = 'PHPParser_Parser::' . $name)
-            ) {
-                $tokenMap[$i] = constant($name);
-            }
-        }
-
-        return $tokenMap;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Lexer/Emulative.php b/vendor/nikic/php-parser/lib/PHPParser/Lexer/Emulative.php
deleted file mode 100644
index 1c74ef0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Lexer/Emulative.php
+++ /dev/null
@@ -1,200 +0,0 @@
- array(
-                'finally'       => PHPParser_Parser::T_FINALLY,
-                'yield'         => PHPParser_Parser::T_YIELD,
-            ),
-            '5.4.0-dev' => array(
-                'callable'      => PHPParser_Parser::T_CALLABLE,
-                'insteadof'     => PHPParser_Parser::T_INSTEADOF,
-                'trait'         => PHPParser_Parser::T_TRAIT,
-                '__trait__'     => PHPParser_Parser::T_TRAIT_C,
-            ),
-            '5.3.0-dev' => array(
-                '__dir__'       => PHPParser_Parser::T_DIR,
-                'goto'          => PHPParser_Parser::T_GOTO,
-                'namespace'     => PHPParser_Parser::T_NAMESPACE,
-                '__namespace__' => PHPParser_Parser::T_NS_C,
-            ),
-        );
-
-        $this->newKeywords = array();
-        foreach ($newKeywordsPerVersion as $version => $newKeywords) {
-            if (version_compare(PHP_VERSION, $version, '>=')) {
-                break;
-            }
-
-            $this->newKeywords += $newKeywords;
-        }
-    }
-
-    public function startLexing($code) {
-        $this->inObjectAccess = false;
-
-        // on PHP 5.4 don't do anything
-        if (version_compare(PHP_VERSION, '5.4.0RC1', '>=')) {
-            parent::startLexing($code);
-        } else {
-            $code = $this->preprocessCode($code);
-            parent::startLexing($code);
-            $this->postprocessTokens();
-        }
-    }
-
-    /*
-     * Replaces new features in the code by ~__EMU__{NAME}__{DATA}__~ sequences.
-     * ~LABEL~ is never valid PHP code, that's why we can (to some degree) safely
-     * use it here.
-     * Later when preprocessing the tokens these sequences will either be replaced
-     * by real tokens or replaced with their original content (e.g. if they occured
-     * inside a string, i.e. a place where they don't have a special meaning).
-     */
-    protected function preprocessCode($code) {
-        // binary notation (0b010101101001...)
-        $code = preg_replace('(\b0b[01]+\b)', '~__EMU__BINARY__$0__~', $code);
-
-        if (version_compare(PHP_VERSION, '5.3.0', '<')) {
-            // namespace separator (backslash not followed by some special characters,
-            // which are not valid after a NS separator, but would cause problems with
-            // escape sequence parsing if one would replace the backslash there)
-            $code = preg_replace('(\\\\(?!["\'`${\\\\]))', '~__EMU__NS__~', $code);
-
-            // nowdoc (<<<'ABC'\ncontent\nABC;)
-            $code = preg_replace_callback(
-                '((*BSR_ANYCRLF)        # set \R to (?>\r\n|\r|\n)
-                  (b?<<<[\t ]*\'([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\'\R) # opening token
-                  ((?:(?!\2;?\R).*\R)*) # content
-                  (\2)                  # closing token
-                  (?=;?\R)              # must be followed by newline (with optional semicolon)
-                 )x',
-                array($this, 'encodeNowdocCallback'),
-                $code
-            );
-        }
-
-        return $code;
-    }
-
-    /*
-     * As nowdocs can have arbitrary content but LABELs can only contain a certain
-     * range of characters, the nowdoc content is encoded as hex and separated by
-     * 'x' tokens. So the result of the encoding will look like this:
-     * ~__EMU__NOWDOC__{HEX(START_TOKEN)}x{HEX(CONTENT)}x{HEX(END_TOKEN)}~
-     */
-    public function encodeNowdocCallback(array $matches) {
-        return '~__EMU__NOWDOC__'
-                . bin2hex($matches[1]) . 'x' . bin2hex($matches[3]) . 'x' . bin2hex($matches[4])
-                . '__~';
-    }
-
-    /*
-     * Replaces the ~__EMU__...~ sequences with real tokens or their original
-     * value.
-     */
-    protected function postprocessTokens() {
-        // we need to manually iterate and manage a count because we'll change
-        // the tokens array on the way
-        for ($i = 0, $c = count($this->tokens); $i < $c; ++$i) {
-            // first check that the following tokens are form ~LABEL~,
-            // then match the __EMU__... sequence.
-            if ('~' === $this->tokens[$i]
-                && isset($this->tokens[$i + 2])
-                && '~' === $this->tokens[$i + 2]
-                && T_STRING === $this->tokens[$i + 1][0]
-                && preg_match('(^__EMU__([A-Z]++)__(?:([A-Za-z0-9]++)__)?$)', $this->tokens[$i + 1][1], $matches)
-            ) {
-                if ('BINARY' === $matches[1]) {
-                    // the binary number can either be an integer or a double, so return a LNUMBER
-                    // or DNUMBER respectively
-                    $replace = array(
-                        array(is_int(bindec($matches[2])) ? T_LNUMBER : T_DNUMBER, $matches[2], $this->tokens[$i + 1][2])
-                    );
-                } elseif ('NS' === $matches[1]) {
-                    // a \ single char token is returned here and replaced by a
-                    // PHPParser_Parser::T_NS_SEPARATOR token in ->getNextToken(). This hacks around
-                    // the limitations arising from T_NS_SEPARATOR not being defined on 5.3
-                    $replace = array('\\');
-                } elseif ('NOWDOC' === $matches[1]) {
-                    // decode the encoded nowdoc payload; pack('H*' is bin2hex( for 5.3
-                    list($start, $content, $end) = explode('x', $matches[2]);
-                    list($start, $content, $end) = array(pack('H*', $start), pack('H*', $content), pack('H*', $end));
-
-                    $replace = array();
-                    $replace[] = array(T_START_HEREDOC, $start, $this->tokens[$i + 1][2]);
-                    if ('' !== $content) {
-                        $replace[] = array(T_ENCAPSED_AND_WHITESPACE, $content, -1);
-                    }
-                    $replace[] = array(T_END_HEREDOC, $end, -1);
-                } else {
-                    // just ignore all other __EMU__ sequences
-                    continue;
-                }
-
-                array_splice($this->tokens, $i, 3, $replace);
-                $c -= 3 - count($replace);
-            // for multichar tokens (e.g. strings) replace any ~__EMU__...~ sequences
-            // in their content with the original character sequence
-            } elseif (is_array($this->tokens[$i])
-                      && 0 !== strpos($this->tokens[$i][1], '__EMU__')
-            ) {
-                $this->tokens[$i][1] = preg_replace_callback(
-                    '(~__EMU__([A-Z]++)__(?:([A-Za-z0-9]++)__)?~)',
-                    array($this, 'restoreContentCallback'),
-                    $this->tokens[$i][1]
-                );
-            }
-        }
-    }
-
-    /*
-     * This method is a callback for restoring EMU sequences in
-     * multichar tokens (like strings) to their original value.
-     */
-    public function restoreContentCallback(array $matches) {
-        if ('BINARY' === $matches[1]) {
-            return $matches[2];
-        } elseif ('NS' === $matches[1]) {
-            return '\\';
-        } elseif ('NOWDOC' === $matches[1]) {
-            list($start, $content, $end) = explode('x', $matches[2]);
-            return pack('H*', $start) . pack('H*', $content) . pack('H*', $end);
-        } else {
-            return $matches[0];
-        }
-    }
-
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
-        $token = parent::getNextToken($value, $startAttributes, $endAttributes);
-
-        // replace new keywords by their respective tokens. This is not done
-        // if we currently are in an object access (e.g. in $obj->namespace
-        // "namespace" stays a T_STRING tokens and isn't converted to T_NAMESPACE)
-        if (PHPParser_Parser::T_STRING === $token && !$this->inObjectAccess) {
-            if (isset($this->newKeywords[strtolower($value)])) {
-                return $this->newKeywords[strtolower($value)];
-            }
-        // backslashes are replaced by T_NS_SEPARATOR tokens
-        } elseif (92 === $token) { // ord('\\')
-            return PHPParser_Parser::T_NS_SEPARATOR;
-        // keep track of whether we currently are in an object access (after ->)
-        } elseif (PHPParser_Parser::T_OBJECT_OPERATOR === $token) {
-            $this->inObjectAccess = true;
-        } else {
-            $this->inObjectAccess = false;
-        }
-
-        return $token;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node.php b/vendor/nikic/php-parser/lib/PHPParser/Node.php
deleted file mode 100644
index c47d49d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node.php
+++ /dev/null
@@ -1,75 +0,0 @@
- $value,
-                'byRef' => $byRef
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Const.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Const.php
deleted file mode 100644
index e4e7794..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Const.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $name,
-                'value' => $value,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr.php
deleted file mode 100644
index 293dab3..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr.php
+++ /dev/null
@@ -1,5 +0,0 @@
- $items
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayDimFetch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayDimFetch.php
deleted file mode 100644
index f7d8628..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayDimFetch.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'dim' => $dim
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayItem.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayItem.php
deleted file mode 100644
index f3c42ba..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ArrayItem.php
+++ /dev/null
@@ -1,28 +0,0 @@
- $key,
-                'value' => $value,
-                'byRef' => $byRef
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Assign.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Assign.php
deleted file mode 100644
index 1619425..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Assign.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseAnd.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseAnd.php
deleted file mode 100644
index 013f1a8..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseAnd.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseOr.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseOr.php
deleted file mode 100644
index c5c4764..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseOr.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseXor.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseXor.php
deleted file mode 100644
index 91ed068..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignBitwiseXor.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignConcat.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignConcat.php
deleted file mode 100644
index 3f634ae..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignConcat.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignDiv.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignDiv.php
deleted file mode 100644
index 7992a66..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignDiv.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMinus.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMinus.php
deleted file mode 100644
index 62f00b3..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMinus.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMod.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMod.php
deleted file mode 100644
index 98cbe75..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMod.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMul.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMul.php
deleted file mode 100644
index 63bdae7..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignMul.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignPlus.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignPlus.php
deleted file mode 100644
index 99b866c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignPlus.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignRef.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignRef.php
deleted file mode 100644
index 0bcf0b0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignRef.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftLeft.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftLeft.php
deleted file mode 100644
index f3ec3e5..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftLeft.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftRight.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftRight.php
deleted file mode 100644
index 0b4743b..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/AssignShiftRight.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'expr' => $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseAnd.php
deleted file mode 100644
index fffac44..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseAnd.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseNot.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseNot.php
deleted file mode 100644
index 635d200..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseNot.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseOr.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseOr.php
deleted file mode 100644
index cebd70d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseOr.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseXor.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseXor.php
deleted file mode 100644
index 742ca82..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BitwiseXor.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanAnd.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanAnd.php
deleted file mode 100644
index fd7e499..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanAnd.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanNot.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanNot.php
deleted file mode 100644
index 0a8a24c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanNot.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanOr.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanOr.php
deleted file mode 100644
index cd03851..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/BooleanOr.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast.php
deleted file mode 100644
index 562cccc..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Array.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Array.php
deleted file mode 100644
index e712d49..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Cast/Array.php
+++ /dev/null
@@ -1,5 +0,0 @@
- $class,
-                'name'  => $name
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Clone.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Clone.php
deleted file mode 100644
index 1d9d023..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Clone.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Closure.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Closure.php
deleted file mode 100644
index 536268d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Closure.php
+++ /dev/null
@@ -1,35 +0,0 @@
- array(): Statements
-     *                          'params' => array(): Parameters
-     *                          'uses'   => array(): use()s
-     *                          'byRef'  => false  : Whether to return by reference
-     *                          'static' => false  : Whether the closure is static
-     * @param array $attributes Additional attributes
-     */
-    public function __construct(array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'stmts'  => array(),
-                'params' => array(),
-                'uses'   => array(),
-                'byRef'  => false,
-                'static' => false,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ClosureUse.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ClosureUse.php
deleted file mode 100644
index f10b3a7..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ClosureUse.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'byRef' => $byRef
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Concat.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Concat.php
deleted file mode 100644
index 724cb6b..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Concat.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ConstFetch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ConstFetch.php
deleted file mode 100644
index 8a21884..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ConstFetch.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $name
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Div.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Div.php
deleted file mode 100644
index caa5d2c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Div.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Empty.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Empty.php
deleted file mode 100644
index fb55505..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Empty.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Equal.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Equal.php
deleted file mode 100644
index 64861c1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Equal.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ErrorSuppress.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ErrorSuppress.php
deleted file mode 100644
index 7222529..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ErrorSuppress.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Eval.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Eval.php
deleted file mode 100644
index 0b607b0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Eval.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Exit.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Exit.php
deleted file mode 100644
index 6870b44..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Exit.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/FuncCall.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/FuncCall.php
deleted file mode 100644
index 8f85df1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/FuncCall.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $name,
-                'args' => $args
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Greater.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Greater.php
deleted file mode 100644
index 2ff3b94..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Greater.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/GreaterOrEqual.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/GreaterOrEqual.php
deleted file mode 100644
index 015106d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/GreaterOrEqual.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Identical.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Identical.php
deleted file mode 100644
index 1f2ac01..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Identical.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Include.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Include.php
deleted file mode 100644
index 040de25..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Include.php
+++ /dev/null
@@ -1,30 +0,0 @@
- $expr,
-                'type' => $type
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Instanceof.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Instanceof.php
deleted file mode 100644
index 95da70c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Instanceof.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $expr,
-                'class' => $class
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Isset.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Isset.php
deleted file mode 100644
index b831dad..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Isset.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $vars
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/List.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/List.php
deleted file mode 100644
index 8c491c9..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/List.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $vars,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalAnd.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalAnd.php
deleted file mode 100644
index 98609c8..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalAnd.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalOr.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalOr.php
deleted file mode 100644
index f472644..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalOr.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalXor.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalXor.php
deleted file mode 100644
index 16c24ff..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/LogicalXor.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/MethodCall.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/MethodCall.php
deleted file mode 100644
index 89187e2..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/MethodCall.php
+++ /dev/null
@@ -1,28 +0,0 @@
- $var,
-                'name' => $name,
-                'args' => $args
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Minus.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Minus.php
deleted file mode 100644
index b9c4f46..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Minus.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mod.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mod.php
deleted file mode 100644
index f3d706f..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mod.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mul.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mul.php
deleted file mode 100644
index 007c4be..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Mul.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/New.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/New.php
deleted file mode 100644
index 5faaadc..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/New.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $class,
-                'args'  => $args
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotEqual.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotEqual.php
deleted file mode 100644
index 5e6b1be..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotEqual.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotIdentical.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotIdentical.php
deleted file mode 100644
index 4756cff..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/NotIdentical.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Plus.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Plus.php
deleted file mode 100644
index a9ea336..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Plus.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostDec.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostDec.php
deleted file mode 100644
index 2fdcfad..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostDec.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $var
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostInc.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostInc.php
deleted file mode 100644
index 93968ff..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PostInc.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $var
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreDec.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreDec.php
deleted file mode 100644
index fdb3c9e..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreDec.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $var
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreInc.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreInc.php
deleted file mode 100644
index 0074966..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PreInc.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $var
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Print.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Print.php
deleted file mode 100644
index 04eb120..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Print.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PropertyFetch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PropertyFetch.php
deleted file mode 100644
index f77756e..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/PropertyFetch.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $var,
-                'name' => $name
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShellExec.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShellExec.php
deleted file mode 100644
index 86fd2e2..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShellExec.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $parts
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftLeft.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftLeft.php
deleted file mode 100644
index 8953056..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftLeft.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftRight.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftRight.php
deleted file mode 100644
index f5079d4..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/ShiftRight.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Smaller.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Smaller.php
deleted file mode 100644
index 9f6c862..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Smaller.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/SmallerOrEqual.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/SmallerOrEqual.php
deleted file mode 100644
index 01741bb..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/SmallerOrEqual.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $left,
-                'right' => $right
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticCall.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticCall.php
deleted file mode 100644
index 68b8415..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticCall.php
+++ /dev/null
@@ -1,28 +0,0 @@
- $class,
-                'name'  => $name,
-                'args'  => $args
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticPropertyFetch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticPropertyFetch.php
deleted file mode 100644
index 0e7826d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/StaticPropertyFetch.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $class,
-                'name'  => $name
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Ternary.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Ternary.php
deleted file mode 100644
index 6b25c34..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Ternary.php
+++ /dev/null
@@ -1,28 +0,0 @@
- $cond,
-                'if'   => $if,
-                'else' => $else
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryMinus.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryMinus.php
deleted file mode 100644
index 1bf6edd..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryMinus.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryPlus.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryPlus.php
deleted file mode 100644
index 588a9e9..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/UnaryPlus.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Variable.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Variable.php
deleted file mode 100644
index 8e3ac26..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Variable.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $name
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Yield.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Yield.php
deleted file mode 100644
index 051ab3b..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Expr/Yield.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $key,
-                'value' => $value,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Name.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Name.php
deleted file mode 100644
index d553632..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Name.php
+++ /dev/null
@@ -1,168 +0,0 @@
- $parts,
-            ),
-            $attributes
-        );
-    }
-
-    /**
-     * Gets the first part of the name, i.e. everything before the first namespace separator.
-     *
-     * @return string First part of the name
-     */
-    public function getFirst() {
-        return $this->parts[0];
-    }
-
-    /**
-     * Gets the last part of the name, i.e. everything after the last namespace separator.
-     *
-     * @return string Last part of the name
-     */
-    public function getLast() {
-        return $this->parts[count($this->parts) - 1];
-    }
-
-    /**
-     * Checks whether the name is unqualified. (E.g. Name)
-     *
-     * @return bool Whether the name is unqualified
-     */
-    public function isUnqualified() {
-        return 1 == count($this->parts);
-    }
-
-    /**
-     * Checks whether the name is qualified. (E.g. Name\Name)
-     *
-     * @return bool Whether the name is qualified
-     */
-    public function isQualified() {
-        return 1 < count($this->parts);
-    }
-
-    /**
-     * Checks whether the name is fully qualified. (E.g. \Name)
-     *
-     * @return bool Whether the name is fully qualified
-     */
-    public function isFullyQualified() {
-        return false;
-    }
-
-    /**
-     * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
-     *
-     * @return bool Whether the name is relative
-     */
-    public function isRelative() {
-        return false;
-    }
-
-    /**
-     * Returns a string representation of the name by imploding the namespace parts with a separator.
-     *
-     * @param string $separator The separator to use (defaults to the namespace separator \)
-     *
-     * @return string String representation
-     */
-    public function toString($separator = '\\') {
-        return implode($separator, $this->parts);
-    }
-
-    /**
-     * Returns a string representation of the name by imploding the namespace parts with the
-     * namespace separator.
-     *
-     * @return string String representation
-     */
-    public function __toString() {
-        return implode('\\', $this->parts);
-    }
-
-    /**
-     * Sets the whole name.
-     *
-     * @param string|array|self $name The name to set the whole name to
-     */
-    public function set($name) {
-        $this->parts = $this->prepareName($name);
-    }
-
-    /**
-     * Prepends a name to this name.
-     *
-     * @param string|array|self $name Name to prepend
-     */
-    public function prepend($name) {
-        $this->parts = array_merge($this->prepareName($name), $this->parts);
-    }
-
-    /**
-     * Appends a name to this name.
-     *
-     * @param string|array|self $name Name to append
-     */
-    public function append($name) {
-        $this->parts = array_merge($this->parts, $this->prepareName($name));
-    }
-
-    /**
-     * Sets the first part of the name.
-     *
-     * @param string|array|self $name The name to set the first part to
-     */
-    public function setFirst($name) {
-        array_splice($this->parts, 0, 1, $this->prepareName($name));
-    }
-
-    /**
-     * Sets the last part of the name.
-     *
-     * @param string|array|self $name The name to set the last part to
-     */
-    public function setLast($name) {
-        array_splice($this->parts, -1, 1, $this->prepareName($name));
-    }
-
-    /**
-     * Prepares a (string, array or Name node) name for use in name changing methods by converting
-     * it to an array.
-     *
-     * @param string|array|self $name Name to prepare
-     *
-     * @return array Prepared name
-     */
-    protected function prepareName($name) {
-        if (is_string($name)) {
-            return explode('\\', $name);
-        } elseif (is_array($name)) {
-            return $name;
-        } elseif ($name instanceof self) {
-            return $name->parts;
-        }
-
-        throw new InvalidArgumentException(
-            'When changing a name you need to pass either a string, an array or a Name node'
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Name/FullyQualified.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Name/FullyQualified.php
deleted file mode 100644
index 5531ad1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Name/FullyQualified.php
+++ /dev/null
@@ -1,40 +0,0 @@
- $name,
-                'default' => $default,
-                'type'    => $type,
-                'byRef'   => $byRef
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar.php
deleted file mode 100644
index a2cfeb2..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar.php
+++ /dev/null
@@ -1,5 +0,0 @@
- $value
-            ),
-            $attributes
-        );
-    }
-
-    /**
-     * Parses a DNUMBER token like PHP would.
-     *
-     * @param string $str A string number
-     *
-     * @return float The parsed number
-     */
-    public static function parse($str) {
-        // if string contains any of .eE just cast it to float
-        if (false !== strpbrk($str, '.eE')) {
-            return (float) $str;
-        }
-
-        // otherwise it's an integer notation that overflowed into a float
-        // if it starts with 0 it's one of the special integer notations
-        if ('0' === $str[0]) {
-            // hex
-            if ('x' === $str[1] || 'X' === $str[1]) {
-                return hexdec($str);
-            }
-
-            // bin
-            if ('b' === $str[1] || 'B' === $str[1]) {
-                return bindec($str);
-            }
-
-            // oct
-            // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit (8 or 9)
-            // so that only the digits before that are used
-            return octdec(substr($str, 0, strcspn($str, '89')));
-        }
-
-        // dec
-        return (float) $str;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/DirConst.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/DirConst.php
deleted file mode 100644
index d3be11b..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/DirConst.php
+++ /dev/null
@@ -1,13 +0,0 @@
- $parts
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/FileConst.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/FileConst.php
deleted file mode 100644
index b0737f0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/FileConst.php
+++ /dev/null
@@ -1,13 +0,0 @@
- $value
-            ),
-            $attributes
-        );
-    }
-
-    /**
-     * Parses an LNUMBER token (dec, hex, oct and bin notations) like PHP would.
-     *
-     * @param string $str A string number
-     *
-     * @return int The parsed number
-     */
-    public static function parse($str) {
-        // handle plain 0 specially
-        if ('0' === $str) {
-            return 0;
-        }
-
-        // if first char is 0 (and number isn't 0) it's a special syntax
-        if ('0' === $str[0]) {
-            // hex
-            if ('x' === $str[1] || 'X' === $str[1]) {
-                return hexdec($str);
-            }
-
-            // bin
-            if ('b' === $str[1] || 'B' === $str[1]) {
-                return bindec($str);
-            }
-
-            // oct (intval instead of octdec to get proper cutting behavior with malformed numbers)
-            return intval($str, 8);
-        }
-
-        // dec
-        return (int) $str;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/LineConst.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/LineConst.php
deleted file mode 100644
index bde002d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Scalar/LineConst.php
+++ /dev/null
@@ -1,13 +0,0 @@
- '\\',
-        '$'  =>  '$',
-        'n'  => "\n",
-        'r'  => "\r",
-        't'  => "\t",
-        'f'  => "\f",
-        'v'  => "\v",
-        'e'  => "\x1B",
-    );
-
-    /**
-     * Constructs a string scalar node.
-     *
-     * @param string $value      Value of the string
-     * @param array  $attributes Additional attributes
-     */
-    public function __construct($value = '', array $attributes = array()) {
-        parent::__construct(
-            array(
-                'value' => $value
-            ),
-            $attributes
-        );
-    }
-
-    /**
-     * Parses a string token.
-     *
-     * @param string $str String token content
-     *
-     * @return string The parsed string
-     */
-    public static function parse($str) {
-        $bLength = 0;
-        if ('b' === $str[0]) {
-            $bLength = 1;
-        }
-
-        if ('\'' === $str[$bLength]) {
-            return str_replace(
-                array('\\\\', '\\\''),
-                array(  '\\',   '\''),
-                substr($str, $bLength + 1, -1)
-            );
-        } else {
-            return self::parseEscapeSequences(substr($str, $bLength + 1, -1), '"');
-        }
-    }
-
-    /**
-     * Parses escape sequences in strings (all string types apart from single quoted).
-     *
-     * @param string      $str   String without quotes
-     * @param null|string $quote Quote type
-     *
-     * @return string String with escape sequences parsed
-     */
-    public static function parseEscapeSequences($str, $quote) {
-        if (null !== $quote) {
-            $str = str_replace('\\' . $quote, $quote, $str);
-        }
-
-        return preg_replace_callback(
-            '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~',
-            array(__CLASS__, 'parseCallback'),
-            $str
-        );
-    }
-
-    public static function parseCallback($matches) {
-        $str = $matches[1];
-
-        if (isset(self::$replacements[$str])) {
-            return self::$replacements[$str];
-        } elseif ('x' === $str[0] || 'X' === $str[0]) {
-            return chr(hexdec($str));
-        } else {
-            return chr(octdec($str));
-        }
-    }
-
-    /**
-     * Parses a constant doc string.
-     *
-     * @param string $startToken Doc string start token content (<< $num,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Case.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Case.php
deleted file mode 100644
index bf90c6e..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Case.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $cond,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Catch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Catch.php
deleted file mode 100644
index 336cf2d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Catch.php
+++ /dev/null
@@ -1,28 +0,0 @@
- $type,
-                'var'   => $var,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Class.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Class.php
deleted file mode 100644
index 2585d98..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Class.php
+++ /dev/null
@@ -1,102 +0,0 @@
- true,
-        'parent' => true,
-        'static' => true,
-    );
-
-    /**
-     * Constructs a class node.
-     *
-     * @param string      $name       Name
-     * @param array       $subNodes   Array of the following optional subnodes:
-     *                                'type'       => 0      : Type
-     *                                'extends'    => null   : Name of extended class
-     *                                'implements' => array(): Names of implemented interfaces
-     *                                'stmts'      => array(): Statements
-     * @param array       $attributes Additional attributes
-     */
-    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'type'       => 0,
-                'extends'    => null,
-                'implements' => array(),
-                'stmts'      => array(),
-            ),
-            $attributes
-        );
-        $this->name = $name;
-
-        if (isset(self::$specialNames[(string) $this->name])) {
-            throw new PHPParser_Error(sprintf('Cannot use "%s" as class name as it is reserved', $this->name));
-        }
-
-        if (isset(self::$specialNames[(string) $this->extends])) {
-            throw new PHPParser_Error(sprintf('Cannot use "%s" as class name as it is reserved', $this->extends));
-        }
-
-        foreach ($this->implements as $interface) {
-            if (isset(self::$specialNames[(string) $interface])) {
-                throw new PHPParser_Error(sprintf('Cannot use "%s" as interface name as it is reserved', $interface));
-            }
-        }
-    }
-
-    public function isAbstract() {
-        return (bool) ($this->type & self::MODIFIER_ABSTRACT);
-    }
-
-    public function isFinal() {
-        return (bool) ($this->type & self::MODIFIER_FINAL);
-    }
-
-    public function getMethods() {
-        $methods = array();
-        foreach ($this->stmts as $stmt) {
-            if ($stmt instanceof PHPParser_Node_Stmt_ClassMethod) {
-                $methods[] = $stmt;
-            }
-        }
-        return $methods;
-    }
-
-    public static function verifyModifier($a, $b) {
-        if ($a & 7 && $b & 7) {
-            throw new PHPParser_Error('Multiple access type modifiers are not allowed');
-        }
-
-        if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) {
-            throw new PHPParser_Error('Multiple abstract modifiers are not allowed');
-        }
-
-        if ($a & self::MODIFIER_STATIC && $b & self::MODIFIER_STATIC) {
-            throw new PHPParser_Error('Multiple static modifiers are not allowed');
-        }
-
-        if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) {
-            throw new PHPParser_Error('Multiple final modifiers are not allowed');
-        }
-
-        if ($a & 48 && $b & 48) {
-            throw new PHPParser_Error('Cannot use the final and abstract modifier at the same time');
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassConst.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassConst.php
deleted file mode 100644
index 6d0895c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassConst.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $consts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassMethod.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassMethod.php
deleted file mode 100644
index 99c0c3d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ClassMethod.php
+++ /dev/null
@@ -1,66 +0,0 @@
- MODIFIER_PUBLIC: Type
-     *                                'byRef'  => false          : Whether to return by reference
-     *                                'params' => array()        : Parameters
-     *                                'stmts'  => array()        : Statements
-     * @param array       $attributes Additional attributes
-     */
-    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'type'   => PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC,
-                'byRef'  => false,
-                'params' => array(),
-                'stmts'  => array(),
-            ),
-            $attributes
-        );
-        $this->name = $name;
-
-        if (($this->type & PHPParser_Node_Stmt_Class::MODIFIER_STATIC)
-            && ('__construct' == $this->name || '__destruct' == $this->name || '__clone' == $this->name)
-        ) {
-            throw new PHPParser_Error(sprintf('"%s" method cannot be static', $this->name));
-        }
-    }
-
-    public function isPublic() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC);
-    }
-
-    public function isProtected() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED);
-    }
-
-    public function isPrivate() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE);
-    }
-
-    public function isAbstract() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT);
-    }
-
-    public function isFinal() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_FINAL);
-    }
-
-    public function isStatic() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_STATIC);
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Const.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Const.php
deleted file mode 100644
index 9a7ea08..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Const.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $consts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Continue.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Continue.php
deleted file mode 100644
index bc82e54..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Continue.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $num,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Declare.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Declare.php
deleted file mode 100644
index c10083c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Declare.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $declares,
-                'stmts'    => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/DeclareDeclare.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/DeclareDeclare.php
deleted file mode 100644
index 1526e66..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/DeclareDeclare.php
+++ /dev/null
@@ -1,25 +0,0 @@
-value pair node.
-     *
-     * @param string              $key        Key
-     * @param PHPParser_Node_Expr $value      Value
-     * @param array               $attributes Additional attributes
-     */
-    public function __construct($key, PHPParser_Node_Expr $value, array $attributes = array()) {
-        parent::__construct(
-            array(
-                'key'   => $key,
-                'value' => $value,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Do.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Do.php
deleted file mode 100644
index 12070c0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Do.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $cond,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Echo.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Echo.php
deleted file mode 100644
index 77a5d59..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Echo.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $exprs,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Else.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Else.php
deleted file mode 100644
index 18ff649..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Else.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ElseIf.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ElseIf.php
deleted file mode 100644
index ec0cff8..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/ElseIf.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $cond,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/For.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/For.php
deleted file mode 100644
index 870c7a1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/For.php
+++ /dev/null
@@ -1,32 +0,0 @@
- array(): Init expressions
-     *                          'cond'  => array(): Loop conditions
-     *                          'loop'  => array(): Loop expressions
-     *                          'stmts' => array(): Statements
-     * @param array $attributes Additional attributes
-     */
-    public function __construct(array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'init'  => array(),
-                'cond'  => array(),
-                'loop'  => array(),
-                'stmts' => array(),
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Foreach.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Foreach.php
deleted file mode 100644
index a209c32..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Foreach.php
+++ /dev/null
@@ -1,35 +0,0 @@
- null   : Variable to assign key to
-     *                                        'byRef'  => false  : Whether to assign value by reference
-     *                                        'stmts'  => array(): Statements
-     * @param array               $attributes Additional attributes
-     */
-    public function __construct(PHPParser_Node_Expr $expr, PHPParser_Node_Expr $valueVar, array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'keyVar' => null,
-                'byRef'  => false,
-                'stmts'  => array(),
-            ),
-            $attributes
-        );
-        $this->expr     = $expr;
-        $this->valueVar = $valueVar;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Function.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Function.php
deleted file mode 100644
index f62de9e..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Function.php
+++ /dev/null
@@ -1,32 +0,0 @@
- false  : Whether to return by reference
-     *                           'params' => array(): Parameters
-     *                           'stmts'  => array(): Statements
-     * @param array  $attributes Additional attributes
-     */
-    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'byRef'  => false,
-                'params' => array(),
-                'stmts'  => array(),
-            ),
-            $attributes
-        );
-        $this->name = $name;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Global.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Global.php
deleted file mode 100644
index ba841ca..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Global.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $vars,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Goto.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Goto.php
deleted file mode 100644
index 8de1020..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Goto.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $name,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/HaltCompiler.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/HaltCompiler.php
deleted file mode 100644
index 0f4c4b1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/HaltCompiler.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $remaining,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/If.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/If.php
deleted file mode 100644
index 44c150b..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/If.php
+++ /dev/null
@@ -1,33 +0,0 @@
- array(): Statements
-     *                                        'elseifs' => array(): Elseif clauses
-     *                                        'else'    => null   : Else clause
-     * @param array               $attributes Additional attributes
-     */
-    public function __construct(PHPParser_Node_Expr $cond, array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'stmts'   => array(),
-                'elseifs' => array(),
-                'else'    => null,
-            ),
-            $attributes
-        );
-        $this->cond = $cond;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/InlineHTML.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/InlineHTML.php
deleted file mode 100644
index d0578de..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/InlineHTML.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $value,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Interface.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Interface.php
deleted file mode 100644
index 8fc0241..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Interface.php
+++ /dev/null
@@ -1,45 +0,0 @@
- true,
-        'parent' => true,
-        'static' => true,
-    );
-
-    /**
-     * Constructs a class node.
-     *
-     * @param string $name       Name
-     * @param array  $subNodes   Array of the following optional subnodes:
-     *                           'extends' => array(): Name of extended interfaces
-     *                           'stmts'   => array(): Statements
-     * @param array  $attributes Additional attributes
-     */
-    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
-        parent::__construct(
-            $subNodes + array(
-                'extends' => array(),
-                'stmts'   => array(),
-            ),
-            $attributes
-        );
-        $this->name = $name;
-
-        if (isset(self::$specialNames[(string) $this->name])) {
-            throw new PHPParser_Error(sprintf('Cannot use "%s" as interface name as it is reserved', $this->name));
-        }
-
-        foreach ($this->extends as $interface) {
-            if (isset(self::$specialNames[(string) $interface])) {
-                throw new PHPParser_Error(sprintf('Cannot use "%s" as interface name as it is reserved', $interface));
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Label.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Label.php
deleted file mode 100644
index 66dc51e..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Label.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $name,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Namespace.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Namespace.php
deleted file mode 100644
index 7647239..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Namespace.php
+++ /dev/null
@@ -1,122 +0,0 @@
- true,
-        'parent' => true,
-        'static' => true,
-    );
-
-    /**
-     * Constructs a namespace node.
-     *
-     * @param null|PHPParser_Node_Name $name       Name
-     * @param PHPParser_Node[]         $stmts      Statements
-     * @param array                    $attributes Additional attributes
-     */
-    public function __construct(PHPParser_Node_Name $name = null, $stmts = array(), array $attributes = array()) {
-        parent::__construct(
-            array(
-                'name'  => $name,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-
-        if (isset(self::$specialNames[(string) $this->name])) {
-            throw new PHPParser_Error(sprintf('Cannot use "%s" as namespace name as it is reserved', $this->name));
-        }
-
-        if (null !== $this->stmts) {
-            foreach ($this->stmts as $stmt) {
-                if ($stmt instanceof PHPParser_Node_Stmt_Namespace) {
-                    throw new PHPParser_Error('Namespace declarations cannot be nested', $stmt->getLine());
-                }
-            }
-        }
-    }
-
-    public static function postprocess(array $stmts) {
-        // null = not in namespace, false = semicolon style, true = bracket style
-        $bracketed = null;
-
-        // whether any statements that aren't allowed before a namespace declaration are encountered
-        // (the only valid statement currently is a declare)
-        $hasNotAllowedStmts = false;
-
-        // offsets for semicolon style namespaces
-        // (required for transplanting the following statements into their ->stmts property)
-        $nsOffsets = array();
-
-        foreach ($stmts as $i => $stmt) {
-            if ($stmt instanceof PHPParser_Node_Stmt_Namespace) {
-                // ->stmts is null if semicolon style is used
-                $currentBracketed = null !== $stmt->stmts;
-
-                // if no namespace statement has been encountered yet
-                if (!isset($bracketed)) {
-                    // set the namespacing style
-                    $bracketed = $currentBracketed;
-
-                    // and ensure that it isn't preceded by a not allowed statement
-                    if ($hasNotAllowedStmts) {
-                        throw new PHPParser_Error('Namespace declaration statement has to be the very first statement in the script', $stmt->getLine());
-                    }
-                // otherwise ensure that the style of the current namespace matches the style of
-                // namespaceing used before in this document
-                } elseif ($bracketed !== $currentBracketed) {
-                    throw new PHPParser_Error('Cannot mix bracketed namespace declarations with unbracketed namespace declarations', $stmt->getLine());
-                }
-
-                // for semicolon style namespaces remember the offset
-                if (!$bracketed) {
-                    $nsOffsets[] = $i;
-                }
-            // declare() and __halt_compiler() are the only valid statements outside of namespace declarations
-            } elseif (!$stmt instanceof PHPParser_Node_Stmt_Declare
-                      && !$stmt instanceof PHPParser_Node_Stmt_HaltCompiler
-            ) {
-                if (true === $bracketed) {
-                    throw new PHPParser_Error('No code may exist outside of namespace {}', $stmt->getLine());
-                }
-
-                $hasNotAllowedStmts = true;
-            }
-        }
-
-        // if bracketed namespaces were used or no namespaces were used at all just return the
-        // original statements
-        if (!isset($bracketed) || true === $bracketed) {
-            return $stmts;
-        // for semicolon style transplant statements
-        } else {
-            // take all statements preceding the first namespace
-            $newStmts = array_slice($stmts, 0, $nsOffsets[0]);
-
-            // iterate over all following namespaces
-            for ($i = 0, $c = count($nsOffsets); $i < $c; ++$i) {
-                $newStmts[] = $nsStmt = $stmts[$nsOffsets[$i]];
-
-                // the last namespace takes all statements after it
-                if ($c === $i + 1) {
-                    $nsStmt->stmts = array_slice($stmts, $nsOffsets[$i] + 1);
-
-                    // if the last statement is __halt_compiler() put it outside the namespace
-                    if (end($nsStmt->stmts) instanceof PHPParser_Node_Stmt_HaltCompiler) {
-                        $newStmts[] = array_pop($nsStmt->stmts);
-                    }
-                // and all the others take all statements between the current and the following one
-                } else {
-                    $nsStmt->stmts = array_slice($stmts, $nsOffsets[$i] + 1, $nsOffsets[$i + 1] - $nsOffsets[$i] - 1);
-                }
-            }
-
-            return $newStmts;
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Property.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Property.php
deleted file mode 100644
index 5cc9d0c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Property.php
+++ /dev/null
@@ -1,41 +0,0 @@
- $type,
-                'props' => $props,
-            ),
-            $attributes
-        );
-    }
-
-    public function isPublic() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC);
-    }
-
-    public function isProtected() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED);
-    }
-
-    public function isPrivate() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE);
-    }
-
-    public function isStatic() {
-        return (bool) ($this->type & PHPParser_Node_Stmt_Class::MODIFIER_STATIC);
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/PropertyProperty.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/PropertyProperty.php
deleted file mode 100644
index e2854f1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/PropertyProperty.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $name,
-                'default' => $default,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Return.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Return.php
deleted file mode 100644
index 4697530..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Return.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Static.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Static.php
deleted file mode 100644
index f44d1ed..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Static.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $vars,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/StaticVar.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/StaticVar.php
deleted file mode 100644
index 3c5b144..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/StaticVar.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $name,
-                'default' => $default,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Switch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Switch.php
deleted file mode 100644
index f7022a0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Switch.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $cond,
-                'cases' => $cases,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Throw.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Throw.php
deleted file mode 100644
index 990de1a..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Throw.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $expr,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Trait.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Trait.php
deleted file mode 100644
index 14737a5..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Trait.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $name,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUse.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUse.php
deleted file mode 100644
index 8db1b7e..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUse.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $traits,
-                'adaptations' => $adaptations,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation.php
deleted file mode 100644
index 63b2b27..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation.php
+++ /dev/null
@@ -1,5 +0,0 @@
- $trait,
-                'method'      => $method,
-                'newModifier' => $newModifier,
-                'newName'     => $newName,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation/Precedence.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation/Precedence.php
deleted file mode 100644
index 30ae8e4..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TraitUseAdaptation/Precedence.php
+++ /dev/null
@@ -1,28 +0,0 @@
- $trait,
-                'method'    => $method,
-                'insteadof' => $insteadof,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TryCatch.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TryCatch.php
deleted file mode 100644
index 796aae3..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/TryCatch.php
+++ /dev/null
@@ -1,32 +0,0 @@
- $stmts,
-                'catches'      => $catches,
-                'finallyStmts' => $finallyStmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Unset.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Unset.php
deleted file mode 100644
index e079c29..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Unset.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $vars,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Use.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Use.php
deleted file mode 100644
index 36dc0b1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/Use.php
+++ /dev/null
@@ -1,22 +0,0 @@
- $uses,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/UseUse.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/UseUse.php
deleted file mode 100644
index 2287af0..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/UseUse.php
+++ /dev/null
@@ -1,36 +0,0 @@
-getLast();
-        }
-
-        if ('self' == $alias || 'parent' == $alias) {
-            throw new PHPParser_Error(sprintf(
-                'Cannot use "%s" as "%s" because "%2$s" is a special class name',
-                $name, $alias
-            ));
-        }
-
-        parent::__construct(
-            array(
-                'name'  => $name,
-                'alias' => $alias,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/While.php b/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/While.php
deleted file mode 100644
index 4dde965..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Node/Stmt/While.php
+++ /dev/null
@@ -1,25 +0,0 @@
- $cond,
-                'stmts' => $stmts,
-            ),
-            $attributes
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/NodeAbstract.php b/vendor/nikic/php-parser/lib/PHPParser/NodeAbstract.php
deleted file mode 100644
index e7d0456..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/NodeAbstract.php
+++ /dev/null
@@ -1,125 +0,0 @@
-subNodes   = $subNodes;
-        $this->attributes = $attributes;
-    }
-
-    /**
-     * Gets the type of the node.
-     *
-     * @return string Type of the node
-     */
-    public function getType() {
-        return substr(get_class($this), 15);
-    }
-
-    /**
-     * Gets the names of the sub nodes.
-     *
-     * @return array Names of sub nodes
-     */
-    public function getSubNodeNames() {
-        return array_keys($this->subNodes);
-    }
-
-    /**
-     * Gets line the node started in.
-     *
-     * @return int Line
-     */
-    public function getLine() {
-        return $this->getAttribute('startLine', -1);
-    }
-
-    /**
-     * Sets line the node started in.
-     *
-     * @param int $line Line
-     */
-    public function setLine($line) {
-        $this->setAttribute('startLine', (int) $line);
-    }
-
-    /**
-     * Gets the doc comment of the node.
-     *
-     * The doc comment has to be the last comment associated with the node.
-     *
-     * @return null|PHPParser_Comment_Doc Doc comment object or null
-     */
-    public function getDocComment() {
-        $comments = $this->getAttribute('comments');
-        if (!$comments) {
-            return null;
-        }
-
-        $lastComment = $comments[count($comments) - 1];
-        if (!$lastComment instanceof PHPParser_Comment_Doc) {
-            return null;
-        }
-
-        return $lastComment;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function setAttribute($key, $value) {
-        $this->attributes[$key] = $value;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hasAttribute($key) {
-        return array_key_exists($key, $this->attributes);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function &getAttribute($key, $default = null) {
-        if (!array_key_exists($key, $this->attributes)) {
-            return $default;
-        } else {
-            return $this->attributes[$key];
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getAttributes() {
-        return $this->attributes;
-    }
-
-    /* Magic interfaces */
-
-    public function &__get($name) {
-        return $this->subNodes[$name];
-    }
-    public function __set($name, $value) {
-        $this->subNodes[$name] = $value;
-    }
-    public function __isset($name) {
-        return isset($this->subNodes[$name]);
-    }
-    public function __unset($name) {
-        unset($this->subNodes[$name]);
-    }
-    public function getIterator() {
-        return new ArrayIterator($this->subNodes);
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/NodeDumper.php b/vendor/nikic/php-parser/lib/PHPParser/NodeDumper.php
deleted file mode 100644
index 283d630..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/NodeDumper.php
+++ /dev/null
@@ -1,39 +0,0 @@
-getType() . '(';
-        } elseif (is_array($node)) {
-            $r = 'array(';
-        } else {
-            throw new InvalidArgumentException('Can only dump nodes and arrays.');
-        }
-
-        foreach ($node as $key => $value) {
-            $r .= "\n" . '    ' . $key . ': ';
-
-            if (null === $value) {
-                $r .= 'null';
-            } elseif (false === $value) {
-                $r .= 'false';
-            } elseif (true === $value) {
-                $r .= 'true';
-            } elseif (is_scalar($value)) {
-                $r .= $value;
-            } else {
-                $r .= str_replace("\n", "\n" . '    ', $this->dump($value));
-            }
-        }
-
-        return $r . "\n" . ')';
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/NodeTraverser.php b/vendor/nikic/php-parser/lib/PHPParser/NodeTraverser.php
deleted file mode 100644
index cfe9bf1..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/NodeTraverser.php
+++ /dev/null
@@ -1,132 +0,0 @@
-visitors = array();
-    }
-
-    /**
-     * Adds a visitor.
-     *
-     * @param PHPParser_NodeVisitor $visitor Visitor to add
-     */
-    public function addVisitor(PHPParser_NodeVisitor $visitor) {
-        $this->visitors[] = $visitor;
-    }
-
-    /**
-     * Removes an added visitor.
-     *
-     * @param PHPParser_NodeVisitor $visitor
-     */
-    public function removeVisitor(PHPParser_NodeVisitor $visitor) {
-        foreach ($this->visitors as $index => $storedVisitor) {
-            if ($storedVisitor === $visitor) {
-                unset($this->visitors[$index]);
-                break;
-            }
-        }
-    }
-
-    /**
-     * Traverses an array of nodes using the registered visitors.
-     *
-     * @param PHPParser_Node[] $nodes Array of nodes
-     *
-     * @return PHPParser_Node[] Traversed array of nodes
-     */
-    public function traverse(array $nodes) {
-        foreach ($this->visitors as $visitor) {
-            if (null !== $return = $visitor->beforeTraverse($nodes)) {
-                $nodes = $return;
-            }
-        }
-
-        $nodes = $this->traverseArray($nodes);
-
-        foreach ($this->visitors as $visitor) {
-            if (null !== $return = $visitor->afterTraverse($nodes)) {
-                $nodes = $return;
-            }
-        }
-
-        return $nodes;
-    }
-
-    protected function traverseNode(PHPParser_Node $node) {
-        $node = clone $node;
-
-        foreach ($node->getSubNodeNames() as $name) {
-            $subNode =& $node->$name;
-
-            if (is_array($subNode)) {
-                $subNode = $this->traverseArray($subNode);
-            } elseif ($subNode instanceof PHPParser_Node) {
-                foreach ($this->visitors as $visitor) {
-                    if (null !== $return = $visitor->enterNode($subNode)) {
-                        $subNode = $return;
-                    }
-                }
-
-                $subNode = $this->traverseNode($subNode);
-
-                foreach ($this->visitors as $visitor) {
-                    if (null !== $return = $visitor->leaveNode($subNode)) {
-                        $subNode = $return;
-                    }
-                }
-            }
-        }
-
-        return $node;
-    }
-
-    protected function traverseArray(array $nodes) {
-        $doNodes = array();
-
-        foreach ($nodes as $i => &$node) {
-            if (is_array($node)) {
-                $node = $this->traverseArray($node);
-            } elseif ($node instanceof PHPParser_Node) {
-                foreach ($this->visitors as $visitor) {
-                    if (null !== $return = $visitor->enterNode($node)) {
-                        $node = $return;
-                    }
-                }
-
-                $node = $this->traverseNode($node);
-
-                foreach ($this->visitors as $visitor) {
-                    $return = $visitor->leaveNode($node);
-
-                    if (false === $return) {
-                        $doNodes[] = array($i, array());
-                        break;
-                    } elseif (is_array($return)) {
-                        $doNodes[] = array($i, $return);
-                        break;
-                    } elseif (null !== $return) {
-                        $node = $return;
-                    }
-                }
-            }
-        }
-
-        if (!empty($doNodes)) {
-            while (list($i, $replace) = array_pop($doNodes)) {
-                array_splice($nodes, $i, 1, $replace);
-            }
-        }
-
-        return $nodes;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/NodeTraverserInterface.php b/vendor/nikic/php-parser/lib/PHPParser/NodeTraverserInterface.php
deleted file mode 100644
index ff7749c..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/NodeTraverserInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace = null;
-        $this->aliases   = array();
-    }
-
-    public function enterNode(PHPParser_Node $node) {
-        if ($node instanceof PHPParser_Node_Stmt_Namespace) {
-            $this->namespace = $node->name;
-            $this->aliases   = array();
-        } elseif ($node instanceof PHPParser_Node_Stmt_UseUse) {
-            if (isset($this->aliases[$node->alias])) {
-                throw new PHPParser_Error(
-                    sprintf(
-                        'Cannot use "%s" as "%s" because the name is already in use',
-                        $node->name, $node->alias
-                    ),
-                    $node->getLine()
-                );
-            }
-
-            $this->aliases[$node->alias] = $node->name;
-        } elseif ($node instanceof PHPParser_Node_Stmt_Class) {
-            if (null !== $node->extends) {
-                $node->extends = $this->resolveClassName($node->extends);
-            }
-
-            foreach ($node->implements as &$interface) {
-                $interface = $this->resolveClassName($interface);
-            }
-
-            $this->addNamespacedName($node);
-        } elseif ($node instanceof PHPParser_Node_Stmt_Interface) {
-            foreach ($node->extends as &$interface) {
-                $interface = $this->resolveClassName($interface);
-            }
-
-            $this->addNamespacedName($node);
-        } elseif ($node instanceof PHPParser_Node_Stmt_Trait) {
-            $this->addNamespacedName($node);
-        } elseif ($node instanceof PHPParser_Node_Stmt_Function) {
-            $this->addNamespacedName($node);
-        } elseif ($node instanceof PHPParser_Node_Stmt_Const) {
-            foreach ($node->consts as $const) {
-                $this->addNamespacedName($const);
-            }
-        } elseif ($node instanceof PHPParser_Node_Expr_StaticCall
-                  || $node instanceof PHPParser_Node_Expr_StaticPropertyFetch
-                  || $node instanceof PHPParser_Node_Expr_ClassConstFetch
-                  || $node instanceof PHPParser_Node_Expr_New
-                  || $node instanceof PHPParser_Node_Expr_Instanceof
-        ) {
-            if ($node->class instanceof PHPParser_Node_Name) {
-                $node->class = $this->resolveClassName($node->class);
-            }
-        } elseif ($node instanceof PHPParser_Node_Stmt_Catch) {
-            $node->type = $this->resolveClassName($node->type);
-        } elseif ($node instanceof PHPParser_Node_Expr_FuncCall
-                  || $node instanceof PHPParser_Node_Expr_ConstFetch
-        ) {
-            if ($node->name instanceof PHPParser_Node_Name) {
-                $node->name = $this->resolveOtherName($node->name);
-            }
-        } elseif ($node instanceof PHPParser_Node_Stmt_TraitUse) {
-            foreach ($node->traits as &$trait) {
-                $trait = $this->resolveClassName($trait);
-            }
-        } elseif ($node instanceof PHPParser_Node_Param
-                  && $node->type instanceof PHPParser_Node_Name
-        ) {
-            $node->type = $this->resolveClassName($node->type);
-        }
-    }
-
-    protected function resolveClassName(PHPParser_Node_Name $name) {
-        // don't resolve special class names
-        if (in_array((string) $name, array('self', 'parent', 'static'))) {
-            return $name;
-        }
-
-        // fully qualified names are already resolved
-        if ($name->isFullyQualified()) {
-            return $name;
-        }
-
-        // resolve aliases (for non-relative names)
-        if (!$name->isRelative() && isset($this->aliases[$name->getFirst()])) {
-            $name->setFirst($this->aliases[$name->getFirst()]);
-        // if no alias exists prepend current namespace
-        } elseif (null !== $this->namespace) {
-            $name->prepend($this->namespace);
-        }
-
-        return new PHPParser_Node_Name_FullyQualified($name->parts, $name->getAttributes());
-    }
-
-    protected function resolveOtherName(PHPParser_Node_Name $name) {
-        // fully qualified names are already resolved and we can't do anything about unqualified
-        // ones at compiler-time
-        if ($name->isFullyQualified() || $name->isUnqualified()) {
-            return $name;
-        }
-
-        // resolve aliases for qualified names
-        if ($name->isQualified() && isset($this->aliases[$name->getFirst()])) {
-            $name->setFirst($this->aliases[$name->getFirst()]);
-        // prepend namespace for relative names
-        } elseif (null !== $this->namespace) {
-            $name->prepend($this->namespace);
-        }
-
-        return new PHPParser_Node_Name_FullyQualified($name->parts, $name->getAttributes());
-    }
-
-    protected function addNamespacedName(PHPParser_Node $node) {
-        if (null !== $this->namespace) {
-            $node->namespacedName = clone $this->namespace;
-            $node->namespacedName->append($node->name);
-        } else {
-            $node->namespacedName = new PHPParser_Node_Name($node->name, $node->getAttributes());
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/NodeVisitorAbstract.php b/vendor/nikic/php-parser/lib/PHPParser/NodeVisitorAbstract.php
deleted file mode 100644
index 75ae698..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/NodeVisitorAbstract.php
+++ /dev/null
@@ -1,12 +0,0 @@
-'",
-        "T_IS_GREATER_OR_EQUAL",
-        "T_SL",
-        "T_SR",
-        "'+'",
-        "'-'",
-        "'.'",
-        "'*'",
-        "'/'",
-        "'%'",
-        "'!'",
-        "T_INSTANCEOF",
-        "'~'",
-        "T_INC",
-        "T_DEC",
-        "T_INT_CAST",
-        "T_DOUBLE_CAST",
-        "T_STRING_CAST",
-        "T_ARRAY_CAST",
-        "T_OBJECT_CAST",
-        "T_BOOL_CAST",
-        "T_UNSET_CAST",
-        "'@'",
-        "'['",
-        "T_NEW",
-        "T_CLONE",
-        "T_EXIT",
-        "T_IF",
-        "T_ELSEIF",
-        "T_ELSE",
-        "T_ENDIF",
-        "T_LNUMBER",
-        "T_DNUMBER",
-        "T_STRING",
-        "T_STRING_VARNAME",
-        "T_VARIABLE",
-        "T_NUM_STRING",
-        "T_INLINE_HTML",
-        "T_ENCAPSED_AND_WHITESPACE",
-        "T_CONSTANT_ENCAPSED_STRING",
-        "T_ECHO",
-        "T_DO",
-        "T_WHILE",
-        "T_ENDWHILE",
-        "T_FOR",
-        "T_ENDFOR",
-        "T_FOREACH",
-        "T_ENDFOREACH",
-        "T_DECLARE",
-        "T_ENDDECLARE",
-        "T_AS",
-        "T_SWITCH",
-        "T_ENDSWITCH",
-        "T_CASE",
-        "T_DEFAULT",
-        "T_BREAK",
-        "T_CONTINUE",
-        "T_GOTO",
-        "T_FUNCTION",
-        "T_CONST",
-        "T_RETURN",
-        "T_TRY",
-        "T_CATCH",
-        "T_FINALLY",
-        "T_THROW",
-        "T_USE",
-        "T_INSTEADOF",
-        "T_GLOBAL",
-        "T_STATIC",
-        "T_ABSTRACT",
-        "T_FINAL",
-        "T_PRIVATE",
-        "T_PROTECTED",
-        "T_PUBLIC",
-        "T_VAR",
-        "T_UNSET",
-        "T_ISSET",
-        "T_EMPTY",
-        "T_HALT_COMPILER",
-        "T_CLASS",
-        "T_TRAIT",
-        "T_INTERFACE",
-        "T_EXTENDS",
-        "T_IMPLEMENTS",
-        "T_OBJECT_OPERATOR",
-        "T_DOUBLE_ARROW",
-        "T_LIST",
-        "T_ARRAY",
-        "T_CALLABLE",
-        "T_CLASS_C",
-        "T_TRAIT_C",
-        "T_METHOD_C",
-        "T_FUNC_C",
-        "T_LINE",
-        "T_FILE",
-        "T_START_HEREDOC",
-        "T_END_HEREDOC",
-        "T_DOLLAR_OPEN_CURLY_BRACES",
-        "T_CURLY_OPEN",
-        "T_PAAMAYIM_NEKUDOTAYIM",
-        "T_NAMESPACE",
-        "T_NS_C",
-        "T_DIR",
-        "T_NS_SEPARATOR",
-        "';'",
-        "'{'",
-        "'}'",
-        "'('",
-        "')'",
-        "'$'",
-        "'`'",
-        "']'",
-        "'\"'"
-        , "???"
-    );
-
-    /* @var array Map which translates lexer tokens to internal tokens */
-    protected static $translate = array(
-            0,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,   48,  150,  151,  147,   47,   31,  151,
-          145,  146,   45,   42,    7,   43,   44,   46,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,   26,  142,
-           36,   13,   38,   25,   60,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,   61,  151,  149,   30,  151,  148,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  143,   29,  144,   50,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
-          151,  151,  151,  151,  151,  151,    1,    2,    3,    4,
-            5,    6,    8,    9,   10,   11,   12,   14,   15,   16,
-           17,   18,   19,   20,   21,   22,   23,   24,   27,   28,
-           32,   33,   34,   35,   37,   39,   40,   41,   49,   51,
-           52,   53,   54,   55,   56,   57,   58,   59,   62,   63,
-           64,   65,   66,   67,   68,   69,   70,   71,   72,   73,
-           74,   75,  151,  151,   76,   77,   78,   79,   80,   81,
-           82,   83,   84,   85,   86,   87,   88,   89,   90,   91,
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
-          132,  151,  151,  151,  151,  151,  151,  133,  134,  135,
-          136,  137,  138,  139,  140,  141
-    );
-
-    protected static $yyaction = array(
-           59,   60,  325,   61,   62,-32766,-32766,-32766,  324,   63,
-           64,-32767,-32767,-32767,-32767,   98,   99,  100,  101,  102,
-           57,  917,-32766,  298,-32766,-32766,   41,  106,  107,  108,
-          109,  110,  111,  112,  113,  114,  115,  116,  267,  346,
-           65,   66,  927,  249,  929,  928,   67,  535,   68,  220,
-          221,   69,   70,   71,   72,   73,   74,   75,   76,   31,
-          232,   77,  318,  326,  730,  732,  462,  836,  837,  362,
-          348,  895,  238,  578,  280,  363,   46,   27,  327,  859,
-          364,  246,  365,  454,  366,   39,  223,  328,-32766,-32766,
-        -32766,   36,   37,  367,  333,  360,   38,  368,  329,  423,
-           78,  848,  122,  278,  279,-32766,  286,-32766,   35,  369,
-          370,  371,  372,  373,  389,  343,  861,  330,  560,  602,
-          374,  375,  376,  377,  848,  842,  843,  844,  845,  839,
-          840,  239,   82,   83,   84, -350,  389,  846,  841,  330,
-          584,  504,  126,   47,  227,  259,  244,  802,  248,   40,
-          351,   85,   86,   87,   88,   89,   90,   91,   92,   93,
-           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-          104,  105,  788,  233,  576,-32766,-32766,-32766,  701,  702,
-          703,  700,  699,  698,  630,    0,-32766,-32766,-32766,  655,
-          656,  216,-32766,  215,-32766,-32766,-32766,-32766,-32766,-32767,
-        -32767,-32767,-32767,-32766,  788,  322,  329,  319,  899,  544,
-         -117,  257,  128,  277,-32766,-32766,-32766,  369,  370,  889,
-          693,  261,  895,  225,  226,-32766,  540,  602,  374,  375,
-          675,  535,  344,-32766,  535,-32766,  895,  376,-32766,-32766,
-        -32766,  575,-32766,   53,-32766,  322,-32766,  658,  263,-32766,
-          187,  257,  600,-32766,-32766,-32766,  788,-32766,-32766,-32766,
-          693,   34,-32766,  535,  350,-32766,  388,-32766,  860,  812,
-        -32766,-32766,-32766,-32766,-32766,  222,-32766,   54,-32766,   56,
-          127,-32766,  100,  101,  102,-32766,-32766,-32766,  788,   22,
-        -32766,-32766,  601,  268,-32766,  924,  259,-32766,  388,  666,
-          631,  389,-32766,-32766,  330,-32766,  322,  224,  334,-32766,
-          259,  917,  257,  503,  861,  535,  103,  104,  105,-32766,
-          233,  693,-32766,-32766,-32766,  118,-32766,  494,-32766,  340,
-        -32766,  506,  902,-32766,-32766,-32766,  126,-32766,-32766,-32766,
-          345,-32766,-32766,-32766,  213,  123,-32766,  535,  130,-32766,
-          388,-32766,  452,  599,-32766,-32766,-32766,-32766,-32766,  119,
-        -32766,  120,-32766,  788,  233,-32766,  189, -113,  190,-32766,
-        -32766,-32766,  194,  217,-32766,-32766,  195,  125,-32766,-32766,
-        -32766,-32766,  388,  188,  685,  858,-32766,-32766,  117,-32766,
-          329,  319,  353,   28,  509,  788,  597,  277,  357,  468,
-          680,  369,  370,  516,-32766,-32766,-32766,  131,  287,   49,
-          540,  602,  374,  375,  477,  478,-32766,  520,-32766,-32766,
-          528,-32766,  535,-32766,-32766,-32766,-32766,  655,  656,-32766,
-        -32766,-32766,  263,-32766,  519,-32766,  507,-32766,  542,  129,
-        -32766,  679,  525,  588,-32766,-32766,-32766,  526,-32766,-32766,
-        -32766,  690,  530,-32766,  535,  306,-32766,  388,-32766,  541,
-          511,-32766,-32766,-32766,-32766,-32766,  224,-32766,   50,-32766,
-           58,  482,-32766,   55,  805,   51,-32766,-32766,-32766,  788,
-           52,-32766,-32766,  416,  232,-32766,  502,  687,-32766,  388,
-          445,  491,  229,-32766,-32766,  551,-32766,  922,  549,  415,
-        -32766,  339,  341,  535,  536,  399,  535,  400,  402,  414,
-        -32766, -158,  401,-32766,-32766,-32766,  493,-32766,  479,-32766,
-          475,-32766, -161,  604,-32766,-32766,-32766,  265,-32766,-32766,
-        -32766,  788,-32766,-32766,-32766,  266,  917,-32766,  535,  256,
-        -32766,  388,-32766,  342,  212,-32766,-32766,-32766,-32766,-32766,
-          338,-32766,  471,-32766,  457,  473,-32766,  359,  603,  258,
-        -32766,-32766,-32766,  788,  255,-32766,-32766,  577,  260,-32766,
-          376,  579,-32766,  388,  847,  247,    0,-32766,-32766, -350,
-        -32766,  657,    0,  337,-32766,    0,    0, -351,  245,    0,
-          535,  121,  193,   42,-32766, -282,  791,-32766,-32766,-32766,
-            0,-32766,    0,-32766,    0,-32766,    0,    0,-32766,  570,
-        -32766, -290,-32766,-32766,-32766,  788,-32766,-32766,-32766, -291,
-          499,-32766,  535,  300,-32766,  388,-32766,  288,  251,-32766,
-        -32766,-32766,-32766,-32766,  242,-32766,  407,-32766,  684,  340,
-        -32766,  686,  614,  616,-32766,-32766,-32766,  618,  563,-32766,
-        -32766,  625,  624,-32766,  633,  580,-32766,  388,  565,  587,
-          574,  572,-32766,  513,-32766,  512,   45,   44,-32766,  569,
-          571,  573,  586,  545,  535,  683,  676,  234,-32766,  510,
-          515,-32766,-32766,-32766,  517,-32766,  522,-32766,   81,-32766,
-          124,  523,-32766,-32766,-32766,  524,-32766,-32766,-32766,  527,
-        -32766,-32766,-32766,  505,  529,-32766,  535,  890,-32766,  388,
-        -32766,  900,  668,-32766,-32766,-32766,-32766,-32766,  827,-32766,
-          892,-32766,  880,  894,-32766,  191,  192,  896,-32766,-32766,
-        -32766,  923,  356,-32766,-32766,  623,  926,-32766,  622,  925,
-        -32766,  388,   32,   33,  185,  568,-32766,  321,-32766,  317,
-           43,  262,  836,  837,  237,-32766,-32766,  236,   48,-32766,
-          838,  535,  235,   30,  219,-32766,  218,  214,-32766,-32766,
-        -32766,  186,-32766,   80,-32766,   79,-32766,-32766,-32766,-32766,
-          768,  829,  767,-32766,-32766,-32766,  446, -114,-32766,-32766,
-          854,  659,-32766,  795,  792,-32766,  388,  498,  472,  437,
-          358,  354,  307,-32766,  289,   25,   24,   23,  442, -113,
-          842,  843,  844,  845,  839,  840,  309,  786,    0,  480,
-          874,  855,  846,  841,  329,  319,  921,  826,-32766,  329,
-        -32766,  277,-32766,-32766,  891,  369,  370,-32766,-32766,-32766,
-          369,  370,  875,  879,  540,  602,  374,  375,  893,  560,
-          602,  374,  375,  329,-32766,  811,-32766,-32766,-32766,-32766,
-        -32766,  799,  797,  798,  369,  370,  263,  329,  796,    0,
-            0,  329,  543,  560,  602,  374,  375,  598,  369,  370,
-            0,    0,  369,  370,  329,    0,    0,  560,  602,  374,
-          375,  560,  602,  374,  375,  369,  370,    0,    0,    0,
-          329,  691,    0,    0,  560,  602,  374,  375,    0,    0,
-            0,  369,  370,  329,    0,  790,    0,  329,  501,  591,
-          560,  602,  374,  375,  369,  370,    0,    0,  369,  370,
-            0,  329,  593,  560,  602,  374,  375,  560,  602,  374,
-          375,    0,  369,  370,  492,    0,    0,    0,  514,    0,
-          486,  560,  602,  374,  375,  329,    0,    0,    0,  329,
-            0,  561,    0,    0,    0,  789,  369,  370,    0,    0,
-          369,  370,-32766,-32766,-32766,  560,  602,  374,  375,  560,
-          602,  374,  375,    0,  329,    0,    0,    0,    0,-32766,
-            0,-32766,-32766,-32766,-32766,  369,  370,    0,    0,    0,
-            0,    0,    0,    0,  560,  602,  374,  375
-    );
-
-    protected static $yycheck = array(
-            2,    3,    4,    5,    6,    8,    9,   10,    7,   11,
-           12,   36,   37,   38,   39,   40,   41,   42,   43,   44,
-           61,   76,   25,   73,   27,   28,   13,   14,   15,   16,
-           17,   18,   19,   20,   21,   22,   23,   24,   61,    7,
-           42,   43,   71,   76,   73,   74,   48,   71,   50,   51,
-           52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
-           62,   63,   64,   65,   51,   52,   76,   69,   70,   71,
-           71,   73,    7,   75,    7,   77,   78,   79,   80,  134,
-           82,  122,   84,   81,   86,  135,  136,   89,    8,    9,
-           10,   93,   94,   95,   96,    7,   98,   99,   96,  122,
-          102,  134,  143,  105,  106,   25,    7,   27,    7,  107,
-          108,  113,  114,  115,  138,   26,  117,  141,  116,  117,
-          118,  119,  124,  125,  134,  127,  128,  129,  130,  131,
-          132,  133,    8,    9,   10,  122,  138,  139,  140,  141,
-          142,  143,  143,  145,   31,  147,  148,  146,  150,   25,
-            7,   27,   28,   29,   30,   31,   32,   33,   34,   35,
-           36,   37,   38,   39,   40,   41,   42,   43,   44,   45,
-           46,   47,   12,   49,  142,    8,    9,   10,  106,  107,
-          108,  109,  110,  111,   26,    0,    8,    9,   10,  125,
-          126,   31,   25,    7,   27,   28,   29,   30,   31,   32,
-           33,   34,   35,   25,   12,   97,   96,   97,   71,  142,
-          146,  103,   61,  103,    8,    9,   10,  107,  108,   73,
-          112,    7,   73,   31,    7,   65,  116,  117,  118,  119,
-          142,   71,  143,    8,   71,   75,   73,  124,   78,   79,
-           80,  142,   82,   61,   84,   97,   86,  146,  138,   89,
-            7,  103,  144,   93,   94,   95,   12,   65,   98,   99,
-          112,    7,  102,   71,   71,  105,  106,   75,   71,  106,
-           78,   79,   80,  113,   82,   31,   84,   61,   86,   61,
-          143,   89,   42,   43,   44,   93,   94,   95,   12,  146,
-           98,   99,  144,  147,  102,  144,  147,  105,  106,   73,
-          142,  138,  142,  143,  141,  113,   97,   31,  145,   65,
-          147,   76,  103,   71,  117,   71,   45,   46,   47,   75,
-           49,  112,   78,   79,   80,  143,   82,   71,   84,  141,
-           86,  143,  146,   89,  142,  143,  143,   93,   94,   95,
-            7,   65,   98,   99,  123,    7,  102,   71,  143,  105,
-          106,   75,  147,  144,   78,   79,   80,  113,   82,  143,
-           84,  143,   86,   12,   49,   89,   13,  146,   13,   93,
-           94,   95,   13,  147,   98,   99,   13,   26,  102,    8,
-            9,  105,  106,   13,  142,  150,  142,  143,   13,  113,
-           96,   97,   66,   67,   26,   12,   31,  103,   66,   67,
-          144,  107,  108,   26,    8,    9,   10,   91,   92,   61,
-          116,  117,  118,  119,  100,  101,   65,   26,  142,  143,
-           26,   25,   71,   27,   28,   29,   75,  125,  126,   78,
-           79,   80,  138,   82,   26,   84,   26,   86,  144,   26,
-           89,  142,  143,   26,   93,   94,   95,   26,   65,   98,
-           99,  142,  143,  102,   71,   72,  105,  106,   75,  142,
-          143,   78,   79,   80,  113,   82,   31,   84,   61,   86,
-           61,   68,   89,   61,   73,   61,   93,   94,   95,   12,
-           61,   98,   99,   88,   62,  102,   71,   71,  105,  106,
-           88,   71,   88,  142,  143,   71,  113,   71,   71,   71,
-           65,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-           75,   88,   73,   78,   79,   80,   73,   82,   73,   84,
-           73,   86,   73,  117,   89,  142,  143,   76,   93,   94,
-           95,   12,   65,   98,   99,   76,   76,  102,   71,  121,
-          105,  106,   75,   80,   88,   78,   79,   80,  113,   82,
-           96,   84,   90,   86,   90,  103,   89,   96,  117,  104,
-           93,   94,   95,   12,  120,   98,   99,  142,  120,  102,
-          124,  142,  105,  106,  134,  122,   -1,  142,  143,  122,
-          113,  146,   -1,  141,   65,   -1,   -1,  122,  122,   -1,
-           71,  123,  123,  123,   75,  137,  146,   78,   79,   80,
-           -1,   82,   -1,   84,   -1,   86,   -1,   -1,   89,  142,
-          143,  137,   93,   94,   95,   12,   65,   98,   99,  137,
-          137,  102,   71,  137,  105,  106,   75,  137,  137,   78,
-           79,   80,  113,   82,  137,   84,  141,   86,  142,  141,
-           89,  142,  142,  142,   93,   94,   95,  142,  142,   98,
-           99,  142,  142,  102,  142,  142,  105,  106,  142,  142,
-          142,  142,  143,  142,  113,  142,  142,  142,   65,  142,
-          142,  142,  142,  142,   71,  142,  142,  145,   75,  143,
-          143,   78,   79,   80,  143,   82,  143,   84,  143,   86,
-          143,  143,   89,  142,  143,  143,   93,   94,   95,  143,
-           65,   98,   99,  143,  143,  102,   71,  144,  105,  106,
-           75,  144,  144,   78,   79,   80,  113,   82,  144,   84,
-          144,   86,  144,  144,   89,   42,   43,  144,   93,   94,
-           95,  144,  144,   98,   99,  144,  144,  102,  144,  144,
-          105,  106,  145,  145,   61,  142,  143,  145,  113,  145,
-          145,  145,   69,   70,  145,   65,   73,  145,  145,  145,
-           77,   71,  145,  145,  145,   75,  145,  145,   78,   79,
-           80,  145,   82,  145,   84,  145,   86,  142,  143,   89,
-          146,  146,  146,   93,   94,   95,  146,  146,   98,   99,
-          146,  146,  102,  146,  146,  105,  106,  146,  146,  146,
-          146,  146,  146,  113,  146,  146,  146,  146,  125,  146,
-          127,  128,  129,  130,  131,  132,  133,  148,   -1,  149,
-          149,  149,  139,  140,   96,   97,  149,  149,  145,   96,
-          147,  103,  142,  143,  149,  107,  108,    8,    9,   10,
-          107,  108,  149,  149,  116,  117,  118,  119,  149,  116,
-          117,  118,  119,   96,   25,  149,   27,   28,   29,   30,
-           31,  149,  149,  149,  107,  108,  138,   96,  149,   -1,
-           -1,   96,  144,  116,  117,  118,  119,  144,  107,  108,
-           -1,   -1,  107,  108,   96,   -1,   -1,  116,  117,  118,
-          119,  116,  117,  118,  119,  107,  108,   -1,   -1,   -1,
-           96,  144,   -1,   -1,  116,  117,  118,  119,   -1,   -1,
-           -1,  107,  108,   96,   -1,  144,   -1,   96,   83,  144,
-          116,  117,  118,  119,  107,  108,   -1,   -1,  107,  108,
-           -1,   96,  144,  116,  117,  118,  119,  116,  117,  118,
-          119,   -1,  107,  108,   85,   -1,   -1,   -1,  144,   -1,
-           87,  116,  117,  118,  119,   96,   -1,   -1,   -1,   96,
-           -1,  144,   -1,   -1,   -1,  144,  107,  108,   -1,   -1,
-          107,  108,    8,    9,   10,  116,  117,  118,  119,  116,
-          117,  118,  119,   -1,   96,   -1,   -1,   -1,   -1,   25,
-           -1,   27,   28,   29,   30,  107,  108,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,  116,  117,  118,  119
-    );
-
-    protected static $yybase = array(
-            0,  728,  294,  110,  817,  804,    2,  863,  859,  733,
-          821,  788,  771,  835,  775,  757,  888,  888,  888,  888,
-          888,  368,  377,  391,  394,  391,  410,   -2,   -2,   -2,
-          435,  244,  244,  635,  244,  276,  603,  467,  519,  383,
-          351,  160,  192,  551,  551,  551,  551,  690,  690,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-          551,  551,  158,  429,  468,  470,  527,  528,  529,  530,
-          450,  456,  634,  587,  583,  413,  579,  578,  576,  574,
-          568,  588,  567,  670,  563,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  225,  371,  206,  206,  206,
-          206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-          206,  206,  178,  178,   80,  683,  683,  683,  683,  683,
-          683,  683,  683,  683,  683,  683,   -3,  396,  964,  829,
-          167,  167,  167,  167,   13,  -25,  -25,  -25,  -25,  148,
-          108,  209,  113,  113,  446,  446,  422,  547,  163,  163,
-          163,  163,  163,  163,  163,  163,  163,  163,  449,  415,
-          240,  240,  614,  614,   64,   64,   64,   64,  302,  -33,
-          -55,  235,   -1,  256,  451,  137,  137,  137,  459,  440,
-          460,  193,  271,  271,  271,  -24,  -24,  -24,  -24,  545,
-          -24,  -24,  -24,  188,  216,  -50,  -50,  -29,  205,  464,
-          594,  462,  591,  299,  482,  -41,  317,  442,  226,  454,
-          442,  326,  332,  314,  458,   89,  226,  158,  197,  309,
-          218,  425,  428,  531,  395,   67,   99,   32,  -23,  182,
-          146,  143,  402,  640,  636,  186,  151,  465,  101,  -10,
-          182,  221,  534,   88,    1,  533,  242,  365,  598,  436,
-          618,  438,  436,  445,  365,  613,  613,  613,  613,  365,
-          432,  618,  618,  365,  422,  618,  254,  432,  365,  444,
-          432,  448,  613,  523,  521,  436,  439,  418,  618,  618,
-          618,  438,  365,  613,  452,  243,  618,  613,  452,  365,
-          445,  185,  417,  348,  605,  630,  602,  434,  560,  441,
-          406,  621,  619,  628,  437,  430,  622,  597,  495,  518,
-          431,  375,  407,  414,  419,  497,  412,  466,  454,  498,
-          315,  457,  491,  457,  719,  486,  474,  453,  463,  517,
-          370,  353,  536,  495,  648,  656,  669,  433,  532,  653,
-          457,  714,  525,  338,  355,  617,  427,  457,  612,  457,
-          537,  457,  647,  426,  592,  495,  315,  315,  315,  645,
-          713,  712,  706,  699,  694,  693,  685,  409,  678,  516,
-          655,   65,  626,  458,  490,  424,  513,  214,  677,  457,
-          457,  541,  545,  457,  512,  524,  661,  510,  652,  447,
-          469,  672,  440,  654,  457,  461,  671,  214,  408,  403,
-          641,  509,  543,  604,  548,  359,  644,  606,  552,  363,
-          595,  421,  506,  660,  659,  663,  505,  556,  420,  401,
-          443,  609,  501,  651,  423,  483,  455,  404,  561,  416,
-          658,  500,  499,  496,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,    0,    0,
-            0,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-           -2,   -2,   -2,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  163,  163,  163,  163,
-          163,  163,  163,  163,  163,  163,  163,  124,  124,  124,
-          124,  124,  124,  124,  124,    0,  271,  271,  271,  271,
-           72,   72,   72,  163,  163,  163,  163,  163,  163,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,   72,
-           72,  271,  271,  163,  163,  -24,  -24,  -24,  -24,  -24,
-          -50,  -50,  -50,  146,  -24,  -50,  149,  149,  149,  -50,
-          -50,  -50,  146,    0,    0,    0,    0,    0,    0,    0,
-          149,    0,    0,    0,  432,  618,    0,    0,    0,  149,
-          316,  316,  316,  316,  214,  182,    0,  495,  432,    0,
-          439,  432,    0,    0,    0,  618,    0,    0,    0,    0,
-            0,    0,  338,  532,  333,  495,    0,    0,    0,    0,
-            0,    0,    0,  495,  217,  217,    0,    0,  409,    0,
-            0,    0,    0,  333,    0,    0,  214
-    );
-
-    protected static $yydefault = array(
-            3,32767,32767,    1,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  106,   98,  112,   97,
-          108,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  377,  377,32767,  334,32767,32767,32767,32767,32767,
-        32767,32767,32767,  179,  179,  179,32767,32767,32767,  366,
-          366,  366,  366,  366,  366,  366,  366,  366,  366,32767,
-        32767,32767,32767,32767,  257,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  262,  382,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  238,  239,  241,  242,  178,
-          367,  131,  263,  381,  177,  205,  207,  256,  206,  183,
-          188,  189,  190,  191,  192,  193,  194,  195,  196,  197,
-          198,  182,  235,  234,  203,  331,  331,  334,32767,32767,
-        32767,32767,32767,32767,32767,32767,  204,  208,  210,  209,
-          225,  226,  223,  224,  181,  227,  228,  229,  230,  163,
-          163,  163,32767,32767,  376,  376,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  164,32767,
-          217,  218,  292,  292,  122,  122,  122,  122,  122,32767,
-        32767,32767,32767,32767,  300,32767,32767,32767,32767,32767,
-          302,32767,  212,  213,  211,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  339,  301,32767,32767,32767,32767,
-        32767,32767,32767,32767,  352,  288,32767,32767,32767,  281,
-        32767,  109,  111,   61,  318,32767,32767,32767,32767,32767,
-          357,32767,32767,32767,   17,32767,32767,32767,  389,  352,
-        32767,32767,   19,32767,32767,32767,32767,  233,32767,32767,
-          356,  350,32767,32767,32767,32767,32767,   65,  297,32767,
-          303,32767,32767,32767,   65,32767,32767,32767,32767,   65,
-        32767,  355,  354,   65,32767,  282,  333,32767,   65,   76,
-        32767,   74,32767,   95,   95,32767,32767,   78,  329,  345,
-        32767,32767,   65,32767,  270,  333,32767,32767,  270,   65,
-        32767,32767,    4,  307,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  283,32767,
-        32767,32767,  253,  254,  341,32767,  342,32767,  281,32767,
-          221,  200,32767,  202,32767,32767,  286,  289,32767,32767,
-        32767,  140,32767,  284,32767,  186,32767,32767,32767,32767,
-          384,32767,32767,  180,32767,32767,32767,  136,32767,   63,
-        32767,  374,32767,32767,  350,  285,  214,  215,  216,32767,
-        32767,32767,32767,32767,32767,32767,32767,  351,32767,32767,
-        32767,  116,32767,  318,32767,32767,32767,   77,32767,  184,
-          132,32767,32767,  383,32767,32767,32767,32767,32767,32767,
-          338,32767,32767,32767,   64,32767,32767,   79,32767,32767,
-          350,32767,32767,32767,32767,  120,32767,32767,32767,  175,
-        32767,32767,32767,32767,32767,  350,32767,32767,32767,32767,
-        32767,32767,32767,32767,    4,32767,  157,32767,32767,32767,
-        32767,32767,32767,32767,   25,   25,    3,   25,  103,   25,
-          143,    3,   95,   95,   58,  143,   25,  143,   25,   25,
-           25,   25,   25,   25,   25,  150,   25,   25,   25,   25,
-           25
-    );
-
-    protected static $yygoto = array(
-          161,  135,  135,  140,  135,  161,  136,  137,  138,  143,
-          145,  169,  163,  159,  159,  159,  159,  140,  140,  160,
-          160,  160,  160,  160,  160,  160,  160,  160,  160,  155,
-          156,  157,  158,  167,  134,  750,  751,  390,  753,  774,
-          775,  776,  777,  778,  779,  780,  782,  718,  139,  141,
-          142,  144,  165,  166,  168,  184,  196,  197,  198,  199,
-          200,  201,  202,  203,  205,  206,  207,  208,  230,  231,
-          252,  253,  254,  426,  427,  428,  170,  171,  172,  173,
-          174,  175,  176,  177,  178,  179,  180,  181,  146,  147,
-          148,  162,  149,  164,  150,  182,  151,  152,  153,  183,
-          154,  132,  443,  443,  443,  443,  443,  443,  443,  443,
-          443,  443,  443,  311,  485,  421,  421,  449,  417,  419,
-          419,  391,  393,  410,  424,  450,  453,  464,  470,  335,
-          335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
-          335,  335,  335,  335,  335,  646,  646,  906,  906,  813,
-          813,  654,  654,  654,  654,  654,  405,  538,  538,  538,
-          495,  444,  444,  444,  444,  444,  444,  444,  444,  444,
-          444,  444,  611,  611,  611,  611,  270,  606,  612,  490,
-          392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-          392,  392,  392,  392,  392,  392,  539,  539,  539,  582,
-          395,  395,    5,  878,   16,  210,    6,  211,  396,  396,
-          537,  537,  537,    7,  422,   17,   18,    8,   19,    9,
-           10,   11,  910,   20,   12,   13,   14,   15,  455,  483,
-          632,  617,  615,  613,  615,  508,  398,  641,  636,  850,
-          850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
-          430,  431,  432,  433,  434,  435,  436,  438,  466,  835,
-          458,  463,  500,  467,  273,  315,  830,    1,  697,  316,
-          809,  810,    2,  771,   26,   21,  285,  554,  672,  621,
-          852,  853,  868,  652,  707,  276,  661,  807,  877,  807,
-          439,  291,  250,  885,  885,  808,  241,  886,  886,  294,
-          476,   29,  294,  916,  916,  481,  901,  901,  901,  866,
-          292,  484,  919,  916,  408,  903,  299,  299,  299,  418,
-          884,  304,  397,  397,  429,  716,  762,  404,  919,  919,
-          299,  825,  824,  459,  650,  546,  664,  851,  518,  310,
-          488,  404,  404,  312,  271,  272,  552,  804,  669,  620,
-          863,  487,  403,    0,  705,    0,    0,    0,    0,  302,
-            0,    0,  425,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  409
-    );
-
-    protected static $yygcheck = array(
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   38,   38,   38,   38,   38,   38,   38,   38,
-           38,   38,   38,   32,   32,   32,   32,   32,   32,   32,
-           32,   32,   32,   32,   32,   32,   32,   32,   32,   38,
-           38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
-           38,   38,   38,   38,   38,   53,   53,   53,   53,   38,
-           38,   38,   38,   38,   38,   38,   75,    6,    6,    6,
-           38,   92,   92,   92,   92,   92,   92,   92,   92,   92,
-           92,   92,   38,   38,   38,   38,   48,   38,   38,   38,
-           89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-           89,   89,   89,   89,   89,   89,    7,    7,    7,   31,
-           89,   89,   13,   57,   13,   44,   13,   44,   92,   92,
-            5,    5,    5,   13,   83,   13,   13,   13,   13,   13,
-           13,   13,  112,   13,   13,   13,   13,   13,   21,   21,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,   99,
-           99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
-           84,   84,   84,   84,   84,   84,   84,   84,   84,   57,
-           40,   40,   40,   46,   46,   46,   15,    2,   72,   72,
-           57,   57,    2,   15,   15,   15,   15,   12,   12,   12,
-           12,   12,   12,   12,   12,    4,   59,   57,   57,   57,
-           15,   28,   98,   91,   91,   57,   98,   90,   90,    4,
-          101,   15,    4,  113,  113,   15,   91,   91,   91,  104,
-           39,   30,  113,  113,   39,  110,   96,   96,   96,   39,
-           91,   29,   95,   95,   25,   75,   76,   25,  113,  113,
-           96,   97,   97,   39,   55,   10,   60,  100,   50,   96,
-           39,   25,   25,    9,   48,   48,   11,   87,   61,   47,
-          103,   82,    4,   -1,   74,   -1,   -1,   -1,   -1,    4,
-           -1,   -1,    4,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   75
-    );
-
-    protected static $yygbase = array(
-            0,    0, -239,    0,   22,  209,  156,  195,    0,   21,
-           55,    1,   89, -303,    0,  -52,    0,    0,    0,    0,
-            0,  184,    0,    0,  -30,  294,    0,    0,  245,  102,
-           98,  174,  -99,    0,    0,    0,    0,    0,  -83,  -19,
-           25,    0,    0,    0, -310,    0,    7,   -2, -168,    0,
-           51,    0,    0,  -67,    0,   96,    0,  -61,    0,  251,
-           50,    2,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,   40,    0,   -6,  109,   93,    0,    0,    0,
-            0,    0,   -7,  182,  200,    0,    0,   23,    0,  -32,
-           65,   61,  -24,    0,    0,   90,   71,   85,   48,   54,
-           49,  114,    0,   -5,  122,    0,    0,    0,    0,    0,
-          100,    0,  188,   63,    0
-    );
-
-    protected static $yygdefault = array(
-        -32768,  361,    3,  533,  378,  557,  558,  559,  295,  293,
-          547,  553,  460,    4,  555,  763,  281,  562,  282,  469,
-          564,  412,  566,  567,  133,  379,  296,  297,  413,  303,
-          456,  581,  204,  301,  583,  283,  585,  590,  284,  489,
-          440,  380,  347,  451,  209,  420,  447,  619,  269,  627,
-          521,  635,  638,  381,  441,  649,  352,  806,  308,  660,
-          665,  670,  673,  323,  313,  465,  677,  678,  243,  682,
-          496,  497,  696,  228,  704,  717,  320,  781,  783,  382,
-          383,  406,  474,  394,  411,  800,  314,  803,  384,  385,
-          331,  332,  821,  818,  275,  871,  274,  349,  240,  856,
-          857,  461,  355,  909,  867,  264,  386,  387,  290,  305,
-          904,  336,  911,  918,  448
-    );
-
-    protected static $yylhs = array(
-            0,    1,    2,    2,    4,    4,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    8,    8,   10,   10,   10,
-           10,    9,    9,   11,   13,   13,   14,   14,   14,   14,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,   35,   35,
-           37,   36,   36,   29,   29,   39,   39,    6,    7,    7,
-            7,   41,   41,   41,   42,   42,   45,   45,   43,   43,
-           46,   46,   22,   22,   31,   31,   34,   34,   33,   33,
-           47,   23,   23,   23,   23,   48,   48,   49,   49,   50,
-           50,   20,   20,   16,   16,   51,   18,   18,   52,   17,
-           17,   19,   19,   30,   30,   30,   40,   40,   54,   54,
-           55,   55,   56,   56,   56,   56,   57,   57,   57,   58,
-           58,   59,   59,   26,   26,   60,   60,   60,   27,   27,
-           61,   61,   44,   44,   62,   62,   62,   62,   67,   67,
-           68,   68,   69,   69,   69,   69,   70,   71,   71,   66,
-           66,   63,   63,   65,   65,   73,   73,   72,   72,   72,
-           72,   72,   72,   64,   64,   74,   74,   28,   28,   21,
-           21,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
-           15,   15,   25,   25,   79,   79,   80,   80,   80,   75,
-           82,   82,   86,   86,   87,   88,   88,   88,   88,   88,
-           88,   92,   92,   38,   38,   38,   76,   76,   93,   93,
-           89,   89,   94,   94,   94,   94,   94,   77,   77,   77,
-           81,   81,   81,   85,   85,   99,   99,   99,   99,   99,
-           99,   99,   99,   99,   99,   99,   99,   99,   99,   12,
-           12,   12,   12,   12,   12,   78,   78,   78,   78,  100,
-          100,  101,  101,  103,  103,  102,  102,  104,  104,   32,
-           32,   32,   32,  106,  106,  105,  105,  105,  105,  105,
-          107,  107,   91,   91,   95,   95,   90,   90,  108,  108,
-          108,  108,   96,   96,   96,   96,   84,   84,   97,   97,
-           97,   53,  109,  109,  110,  110,  110,   83,   83,  111,
-          111,  112,  112,  112,  112,   98,   98,   98,   98,  113,
-          113,  113,  113,  113,  113,  113,  114,  114,  114
-    );
-
-    protected static $yylen = array(
-            1,    1,    2,    0,    1,    3,    1,    1,    1,    1,
-            3,    5,    4,    3,    3,    3,    1,    1,    3,    2,
-            4,    3,    1,    3,    2,    0,    1,    1,    1,    1,
-            3,    5,    8,    3,    5,    9,    3,    2,    3,    2,
-            3,    2,    3,    2,    3,    3,    3,    1,    2,    5,
-            7,    9,    5,    1,    6,    3,    3,    2,    0,    2,
-            8,    0,    4,    1,    3,    0,    1,    9,    7,    6,
-            5,    1,    2,    2,    0,    2,    0,    2,    0,    2,
-            1,    3,    1,    4,    1,    4,    1,    4,    1,    3,
-            3,    3,    4,    4,    5,    0,    2,    4,    3,    1,
-            1,    1,    4,    0,    2,    3,    0,    2,    4,    0,
-            2,    0,    3,    1,    2,    1,    1,    0,    1,    3,
-            3,    5,    0,    1,    1,    1,    2,    3,    3,    1,
-            3,    1,    2,    3,    1,    1,    2,    4,    3,    1,
-            1,    3,    2,    0,    3,    3,    8,    3,    1,    3,
-            0,    2,    4,    5,    4,    4,    3,    1,    1,    1,
-            3,    1,    1,    0,    1,    1,    2,    1,    1,    1,
-            1,    1,    1,    1,    3,    1,    3,    3,    1,    0,
-            1,    1,    3,    3,    4,    4,    1,    2,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    2,
-            2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    2,
-            2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    1,    3,    5,    4,    4,    4,    2,    2,
-            2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-            2,    2,    1,    1,    1,    3,    2,    1,    9,   10,
-            3,    3,    2,    4,    4,    3,    4,    4,    4,    3,
-            0,    4,    1,    3,    2,    2,    4,    6,    2,    2,
-            4,    1,    1,    1,    2,    3,    1,    1,    1,    1,
-            1,    1,    0,    3,    3,    4,    4,    0,    2,    1,
-            0,    1,    1,    0,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    3,    2,    1,    1,
-            3,    2,    2,    4,    3,    1,    3,    3,    3,    1,
-            1,    0,    2,    0,    1,    3,    1,    3,    1,    1,
-            1,    1,    1,    6,    4,    3,    4,    2,    4,    4,
-            1,    3,    1,    2,    1,    1,    4,    1,    3,    6,
-            4,    4,    4,    4,    1,    4,    0,    1,    1,    3,
-            1,    4,    3,    1,    1,    1,    0,    0,    2,    3,
-            1,    3,    1,    4,    2,    2,    2,    1,    2,    1,
-            4,    3,    3,    3,    6,    3,    1,    1,    1
-    );
-
-    protected $yyval;
-    protected $yyastk;
-    protected $stackPos;
-    protected $lexer;
-
-    /**
-     * Creates a parser instance.
-     *
-     * @param PHPParser_Lexer $lexer A lexer
-     */
-    public function __construct(PHPParser_Lexer $lexer) {
-        $this->lexer = $lexer;
-    }
-
-    /**
-     * Parses PHP code into a node tree.
-     *
-     * @param string $code The source code to parse
-     *
-     * @return PHPParser_Node[] Array of statements
-     */
-    public function parse($code) {
-        $this->lexer->startLexing($code);
-
-        // We start off with no lookahead-token
-        $tokenId = self::TOKEN_NONE;
-
-        // The attributes for a node are taken from the first and last token of the node.
-        // From the first token only the startAttributes are taken and from the last only
-        // the endAttributes. Both are merged using the array union operator (+).
-        $startAttributes = array('startLine' => 1);
-        $endAttributes   = array();
-
-        // In order to figure out the attributes for the starting token, we have to keep
-        // them in a stack
-        $attributeStack = array($startAttributes);
-
-        // Start off in the initial state and keep a stack of previous states
-        $state = 0;
-        $stateStack = array($state);
-
-        // AST stack (?)
-        $this->yyastk = array();
-
-        // Current position in the stack(s)
-        $this->stackPos = 0;
-
-        for (;;) {
-            if (self::$yybase[$state] == 0) {
-                $yyn = self::$yydefault[$state];
-            } else {
-                if ($tokenId === self::TOKEN_NONE) {
-                    // Fetch the next token id from the lexer and fetch additional info by-ref.
-                    // The end attributes are fetched into a temporary variable and only set once the token is really
-                    // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is
-                    // reduced after a token was read but not yet shifted.
-                    $origTokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $nextEndAttributes);
-
-                    // map the lexer token id to the internally used token id's
-                    $tokenId = $origTokenId >= 0 && $origTokenId < self::TOKEN_MAP_SIZE
-                        ? self::$translate[$origTokenId]
-                        : self::TOKEN_INVALID;
-
-                    if ($tokenId === self::TOKEN_INVALID) {
-                        throw new RangeException(sprintf(
-                            'The lexer returned an invalid token (id=%d, value=%s)',
-                            $origTokenId, $tokenValue
-                        ));
-                    }
-
-                    $attributeStack[$this->stackPos] = $startAttributes;
-                }
-
-                if ((($yyn = self::$yybase[$state] + $tokenId) >= 0
-                     && $yyn < self::YYLAST && self::$yycheck[$yyn] == $tokenId
-                     || ($state < self::YY2TBLSTATE
-                        && ($yyn = self::$yybase[$state + self::YYNLSTATES] + $tokenId) >= 0
-                        && $yyn < self::YYLAST
-                        && self::$yycheck[$yyn] == $tokenId))
-                    && ($yyn = self::$yyaction[$yyn]) != self::YYDEFAULT) {
-                    /*
-                     * >= YYNLSTATE: shift and reduce
-                     * > 0: shift
-                     * = 0: accept
-                     * < 0: reduce
-                     * = -YYUNEXPECTED: error
-                     */
-                    if ($yyn > 0) {
-                        /* shift */
-                        ++$this->stackPos;
-
-                        $stateStack[$this->stackPos]     = $state = $yyn;
-                        $this->yyastk[$this->stackPos]   = $tokenValue;
-                        $attributeStack[$this->stackPos] = $startAttributes;
-                        $endAttributes = $nextEndAttributes;
-                        $tokenId = self::TOKEN_NONE;
-
-                        if ($yyn < self::YYNLSTATES)
-                            continue;
-
-                        /* $yyn >= YYNLSTATES means shift-and-reduce */
-                        $yyn -= self::YYNLSTATES;
-                    } else {
-                        $yyn = -$yyn;
-                    }
-                } else {
-                    $yyn = self::$yydefault[$state];
-                }
-            }
-
-            for (;;) {
-                /* reduce/error */
-                if ($yyn == 0) {
-                    /* accept */
-                    return $this->yyval;
-                } elseif ($yyn != self::YYUNEXPECTED) {
-                    /* reduce */
-                    try {
-                        $this->{'yyn' . $yyn}(
-                            $attributeStack[$this->stackPos - self::$yylen[$yyn]]
-                            + $endAttributes
-                        );
-                    } catch (PHPParser_Error $e) {
-                        if (-1 === $e->getRawLine()) {
-                            $e->setRawLine($startAttributes['startLine']);
-                        }
-
-                        throw $e;
-                    }
-
-                    /* Goto - shift nonterminal */
-                    $this->stackPos -= self::$yylen[$yyn];
-                    $yyn = self::$yylhs[$yyn];
-                    if (($yyp = self::$yygbase[$yyn] + $stateStack[$this->stackPos]) >= 0
-                         && $yyp < self::YYGLAST
-                         && self::$yygcheck[$yyp] == $yyn) {
-                        $state = self::$yygoto[$yyp];
-                    } else {
-                        $state = self::$yygdefault[$yyn];
-                    }
-
-                    ++$this->stackPos;
-
-                    $stateStack[$this->stackPos]     = $state;
-                    $this->yyastk[$this->stackPos]   = $this->yyval;
-                    $attributeStack[$this->stackPos] = $startAttributes;
-                } else {
-                    /* error */
-                    $expected = array();
-
-                    $base = self::$yybase[$state];
-                    for ($i = 0; $i < self::TOKEN_MAP_SIZE; ++$i) {
-                        $n = $base + $i;
-                        if ($n >= 0 && $n < self::YYLAST && self::$yycheck[$n] == $i
-                         || $state < self::YY2TBLSTATE
-                            && ($n = self::$yybase[$state + self::YYNLSTATES] + $i) >= 0
-                            && $n < self::YYLAST && self::$yycheck[$n] == $i
-                        ) {
-                            if (self::$yyaction[$n] != self::YYUNEXPECTED) {
-                                if (count($expected) == 4) {
-                                    /* Too many expected tokens */
-                                    $expected = array();
-                                    break;
-                                }
-
-                                $expected[] = self::$terminals[$i];
-                            }
-                        }
-                    }
-
-                    $expectedString = '';
-                    if ($expected) {
-                        $expectedString = ', expecting ' . implode(' or ', $expected);
-                    }
-
-                    throw new PHPParser_Error(
-                        'Syntax error, unexpected ' . self::$terminals[$tokenId] . $expectedString,
-                        $startAttributes['startLine']
-                    );
-                }
-
-                if ($state < self::YYNLSTATES)
-                    break;
-                /* >= YYNLSTATES means shift-and-reduce */
-                $yyn = $state - self::YYNLSTATES;
-            }
-        }
-    }
-
-    protected function yyn0() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-
-    protected function yyn1($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Namespace::postprocess($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn2($attributes) {
-         if (is_array($this->yyastk[$this->stackPos-(2-2)])) { $this->yyval = array_merge($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)]); } else { $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; }; 
-    }
-
-    protected function yyn3($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn4($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn5($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn6($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn7($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn8($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn9($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_HaltCompiler($this->lexer->handleHaltCompiler(), $attributes); 
-    }
-
-    protected function yyn10($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Namespace(new PHPParser_Node_Name($this->yyastk[$this->stackPos-(3-2)], $attributes), null, $attributes); 
-    }
-
-    protected function yyn11($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Namespace(new PHPParser_Node_Name($this->yyastk[$this->stackPos-(5-2)], $attributes), $this->yyastk[$this->stackPos-(5-4)], $attributes); 
-    }
-
-    protected function yyn12($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Namespace(null, $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn13($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Use($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn14($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Const($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn15($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn16($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn17($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_UseUse(new PHPParser_Node_Name($this->yyastk[$this->stackPos-(1-1)], $attributes), null, $attributes); 
-    }
-
-    protected function yyn18($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_UseUse(new PHPParser_Node_Name($this->yyastk[$this->stackPos-(3-1)], $attributes), $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn19($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_UseUse(new PHPParser_Node_Name($this->yyastk[$this->stackPos-(2-2)], $attributes), null, $attributes); 
-    }
-
-    protected function yyn20($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_UseUse(new PHPParser_Node_Name($this->yyastk[$this->stackPos-(4-2)], $attributes), $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn21($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn22($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn23($attributes) {
-         $this->yyval = new PHPParser_Node_Const($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn24($attributes) {
-         if (is_array($this->yyastk[$this->stackPos-(2-2)])) { $this->yyval = array_merge($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)]); } else { $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; }; 
-    }
-
-    protected function yyn25($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn26($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn27($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn28($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn29($attributes) {
-         throw new PHPParser_Error('__halt_compiler() can only be used from the outermost scope'); 
-    }
-
-    protected function yyn30($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn31($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_If($this->yyastk[$this->stackPos-(5-2)], array('stmts' => is_array($this->yyastk[$this->stackPos-(5-3)]) ? $this->yyastk[$this->stackPos-(5-3)] : array($this->yyastk[$this->stackPos-(5-3)]), 'elseifs' => $this->yyastk[$this->stackPos-(5-4)], 'else' => $this->yyastk[$this->stackPos-(5-5)]), $attributes); 
-    }
-
-    protected function yyn32($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_If($this->yyastk[$this->stackPos-(8-2)], array('stmts' => $this->yyastk[$this->stackPos-(8-4)], 'elseifs' => $this->yyastk[$this->stackPos-(8-5)], 'else' => $this->yyastk[$this->stackPos-(8-6)]), $attributes); 
-    }
-
-    protected function yyn33($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_While($this->yyastk[$this->stackPos-(3-2)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn34($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Do($this->yyastk[$this->stackPos-(5-4)], is_array($this->yyastk[$this->stackPos-(5-2)]) ? $this->yyastk[$this->stackPos-(5-2)] : array($this->yyastk[$this->stackPos-(5-2)]), $attributes); 
-    }
-
-    protected function yyn35($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_For(array('init' => $this->yyastk[$this->stackPos-(9-3)], 'cond' => $this->yyastk[$this->stackPos-(9-5)], 'loop' => $this->yyastk[$this->stackPos-(9-7)], 'stmts' => $this->yyastk[$this->stackPos-(9-9)]), $attributes); 
-    }
-
-    protected function yyn36($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Switch($this->yyastk[$this->stackPos-(3-2)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn37($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Break(null, $attributes); 
-    }
-
-    protected function yyn38($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Break($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn39($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Continue(null, $attributes); 
-    }
-
-    protected function yyn40($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Continue($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn41($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Return(null, $attributes); 
-    }
-
-    protected function yyn42($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Return($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn43($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn44($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Global($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn45($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Static($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn46($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Echo($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn47($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_InlineHTML($this->yyastk[$this->stackPos-(1-1)], $attributes); 
-    }
-
-    protected function yyn48($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn49($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Unset($this->yyastk[$this->stackPos-(5-3)], $attributes); 
-    }
-
-    protected function yyn50($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Foreach($this->yyastk[$this->stackPos-(7-3)], $this->yyastk[$this->stackPos-(7-5)][0], array('keyVar' => null, 'byRef' => $this->yyastk[$this->stackPos-(7-5)][1], 'stmts' => $this->yyastk[$this->stackPos-(7-7)]), $attributes); 
-    }
-
-    protected function yyn51($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Foreach($this->yyastk[$this->stackPos-(9-3)], $this->yyastk[$this->stackPos-(9-7)][0], array('keyVar' => $this->yyastk[$this->stackPos-(9-5)], 'byRef' => $this->yyastk[$this->stackPos-(9-7)][1], 'stmts' => $this->yyastk[$this->stackPos-(9-9)]), $attributes); 
-    }
-
-    protected function yyn52($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Declare($this->yyastk[$this->stackPos-(5-3)], $this->yyastk[$this->stackPos-(5-5)], $attributes); 
-    }
-
-    protected function yyn53($attributes) {
-         $this->yyval = array(); /* means: no statement */ 
-    }
-
-    protected function yyn54($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_TryCatch($this->yyastk[$this->stackPos-(6-3)], $this->yyastk[$this->stackPos-(6-5)], $this->yyastk[$this->stackPos-(6-6)], $attributes); 
-    }
-
-    protected function yyn55($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Throw($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn56($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Goto($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn57($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Label($this->yyastk[$this->stackPos-(2-1)], $attributes); 
-    }
-
-    protected function yyn58($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn59($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn60($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Catch($this->yyastk[$this->stackPos-(8-3)], substr($this->yyastk[$this->stackPos-(8-4)], 1), $this->yyastk[$this->stackPos-(8-7)], $attributes); 
-    }
-
-    protected function yyn61($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn62($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-3)]; 
-    }
-
-    protected function yyn63($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn64($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn65($attributes) {
-         $this->yyval = false; 
-    }
-
-    protected function yyn66($attributes) {
-         $this->yyval = true; 
-    }
-
-    protected function yyn67($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Function($this->yyastk[$this->stackPos-(9-3)], array('byRef' => $this->yyastk[$this->stackPos-(9-2)], 'params' => $this->yyastk[$this->stackPos-(9-5)], 'stmts' => $this->yyastk[$this->stackPos-(9-8)]), $attributes); 
-    }
-
-    protected function yyn68($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Class($this->yyastk[$this->stackPos-(7-2)], array('type' => $this->yyastk[$this->stackPos-(7-1)], 'extends' => $this->yyastk[$this->stackPos-(7-3)], 'implements' => $this->yyastk[$this->stackPos-(7-4)], 'stmts' => $this->yyastk[$this->stackPos-(7-6)]), $attributes); 
-    }
-
-    protected function yyn69($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Interface($this->yyastk[$this->stackPos-(6-2)], array('extends' => $this->yyastk[$this->stackPos-(6-3)], 'stmts' => $this->yyastk[$this->stackPos-(6-5)]), $attributes); 
-    }
-
-    protected function yyn70($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Trait($this->yyastk[$this->stackPos-(5-2)], $this->yyastk[$this->stackPos-(5-4)], $attributes); 
-    }
-
-    protected function yyn71($attributes) {
-         $this->yyval = 0; 
-    }
-
-    protected function yyn72($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT; 
-    }
-
-    protected function yyn73($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_FINAL; 
-    }
-
-    protected function yyn74($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn75($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-2)]; 
-    }
-
-    protected function yyn76($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn77($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-2)]; 
-    }
-
-    protected function yyn78($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn79($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-2)]; 
-    }
-
-    protected function yyn80($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn81($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn82($attributes) {
-         $this->yyval = is_array($this->yyastk[$this->stackPos-(1-1)]) ? $this->yyastk[$this->stackPos-(1-1)] : array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn83($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-2)]; 
-    }
-
-    protected function yyn84($attributes) {
-         $this->yyval = is_array($this->yyastk[$this->stackPos-(1-1)]) ? $this->yyastk[$this->stackPos-(1-1)] : array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn85($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-2)]; 
-    }
-
-    protected function yyn86($attributes) {
-         $this->yyval = is_array($this->yyastk[$this->stackPos-(1-1)]) ? $this->yyastk[$this->stackPos-(1-1)] : array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn87($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-2)]; 
-    }
-
-    protected function yyn88($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn89($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn90($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_DeclareDeclare($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn91($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn92($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-3)]; 
-    }
-
-    protected function yyn93($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-2)]; 
-    }
-
-    protected function yyn94($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(5-3)]; 
-    }
-
-    protected function yyn95($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn96($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn97($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Case($this->yyastk[$this->stackPos-(4-2)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn98($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Case(null, $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn99() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-
-    protected function yyn100() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-
-    protected function yyn101($attributes) {
-         $this->yyval = is_array($this->yyastk[$this->stackPos-(1-1)]) ? $this->yyastk[$this->stackPos-(1-1)] : array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn102($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-2)]; 
-    }
-
-    protected function yyn103($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn104($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn105($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_ElseIf($this->yyastk[$this->stackPos-(3-2)], is_array($this->yyastk[$this->stackPos-(3-3)]) ? $this->yyastk[$this->stackPos-(3-3)] : array($this->yyastk[$this->stackPos-(3-3)]), $attributes); 
-    }
-
-    protected function yyn106($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn107($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn108($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_ElseIf($this->yyastk[$this->stackPos-(4-2)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn109($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn110($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Else(is_array($this->yyastk[$this->stackPos-(2-2)]) ? $this->yyastk[$this->stackPos-(2-2)] : array($this->yyastk[$this->stackPos-(2-2)]), $attributes); 
-    }
-
-    protected function yyn111($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn112($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Else($this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn113($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)], false); 
-    }
-
-    protected function yyn114($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(2-2)], true); 
-    }
-
-    protected function yyn115($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)], false); 
-    }
-
-    protected function yyn116($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn117($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn118($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn119($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn120($attributes) {
-         $this->yyval = new PHPParser_Node_Param(substr($this->yyastk[$this->stackPos-(3-3)], 1), null, $this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn121($attributes) {
-         $this->yyval = new PHPParser_Node_Param(substr($this->yyastk[$this->stackPos-(5-3)], 1), $this->yyastk[$this->stackPos-(5-5)], $this->yyastk[$this->stackPos-(5-1)], $this->yyastk[$this->stackPos-(5-2)], $attributes); 
-    }
-
-    protected function yyn122($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn123($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn124($attributes) {
-         $this->yyval = 'array'; 
-    }
-
-    protected function yyn125($attributes) {
-         $this->yyval = 'callable'; 
-    }
-
-    protected function yyn126($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn127($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn128($attributes) {
-         $this->yyval = array(new PHPParser_Node_Arg($this->yyastk[$this->stackPos-(3-2)], false, $attributes)); 
-    }
-
-    protected function yyn129($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn130($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn131($attributes) {
-         $this->yyval = new PHPParser_Node_Arg($this->yyastk[$this->stackPos-(1-1)], false, $attributes); 
-    }
-
-    protected function yyn132($attributes) {
-         $this->yyval = new PHPParser_Node_Arg($this->yyastk[$this->stackPos-(2-2)], true, $attributes); 
-    }
-
-    protected function yyn133($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn134($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn135($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable(substr($this->yyastk[$this->stackPos-(1-1)], 1), $attributes); 
-    }
-
-    protected function yyn136($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn137($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn138($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn139($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn140($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_StaticVar(substr($this->yyastk[$this->stackPos-(1-1)], 1), null, $attributes); 
-    }
-
-    protected function yyn141($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_StaticVar(substr($this->yyastk[$this->stackPos-(3-1)], 1), $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn142($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn143($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn144($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_Property($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn145($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_ClassConst($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn146($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_ClassMethod($this->yyastk[$this->stackPos-(8-4)], array('type' => $this->yyastk[$this->stackPos-(8-1)], 'byRef' => $this->yyastk[$this->stackPos-(8-3)], 'params' => $this->yyastk[$this->stackPos-(8-6)], 'stmts' => $this->yyastk[$this->stackPos-(8-8)]), $attributes); 
-    }
-
-    protected function yyn147($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_TraitUse($this->yyastk[$this->stackPos-(3-2)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn148($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn149($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn150($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn151($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn152($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_TraitUseAdaptation_Precedence($this->yyastk[$this->stackPos-(4-1)][0], $this->yyastk[$this->stackPos-(4-1)][1], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn153($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_TraitUseAdaptation_Alias($this->yyastk[$this->stackPos-(5-1)][0], $this->yyastk[$this->stackPos-(5-1)][1], $this->yyastk[$this->stackPos-(5-3)], $this->yyastk[$this->stackPos-(5-4)], $attributes); 
-    }
-
-    protected function yyn154($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_TraitUseAdaptation_Alias($this->yyastk[$this->stackPos-(4-1)][0], $this->yyastk[$this->stackPos-(4-1)][1], $this->yyastk[$this->stackPos-(4-3)], null, $attributes); 
-    }
-
-    protected function yyn155($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_TraitUseAdaptation_Alias($this->yyastk[$this->stackPos-(4-1)][0], $this->yyastk[$this->stackPos-(4-1)][1], null, $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn156($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)]); 
-    }
-
-    protected function yyn157($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn158($attributes) {
-         $this->yyval = array(null, $this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn159($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn160($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn161($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn162($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC; 
-    }
-
-    protected function yyn163($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC; 
-    }
-
-    protected function yyn164($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn165($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn166($attributes) {
-         PHPParser_Node_Stmt_Class::verifyModifier($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)]); $this->yyval = $this->yyastk[$this->stackPos-(2-1)] | $this->yyastk[$this->stackPos-(2-2)]; 
-    }
-
-    protected function yyn167($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC; 
-    }
-
-    protected function yyn168($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED; 
-    }
-
-    protected function yyn169($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE; 
-    }
-
-    protected function yyn170($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_STATIC; 
-    }
-
-    protected function yyn171($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT; 
-    }
-
-    protected function yyn172($attributes) {
-         $this->yyval = PHPParser_Node_Stmt_Class::MODIFIER_FINAL; 
-    }
-
-    protected function yyn173($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn174($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn175($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_PropertyProperty(substr($this->yyastk[$this->stackPos-(1-1)], 1), null, $attributes); 
-    }
-
-    protected function yyn176($attributes) {
-         $this->yyval = new PHPParser_Node_Stmt_PropertyProperty(substr($this->yyastk[$this->stackPos-(3-1)], 1), $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn177($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn178($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn179($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn180($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn181($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn182($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Assign($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn183($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Assign($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn184($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignRef($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn185($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignRef($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn186($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn187($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Clone($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn188($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignPlus($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn189($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignMinus($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn190($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignMul($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn191($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignDiv($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn192($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignConcat($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn193($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignMod($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn194($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignBitwiseAnd($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn195($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignBitwiseOr($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn196($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignBitwiseXor($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn197($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignShiftLeft($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn198($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_AssignShiftRight($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn199($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PostInc($this->yyastk[$this->stackPos-(2-1)], $attributes); 
-    }
-
-    protected function yyn200($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PreInc($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn201($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PostDec($this->yyastk[$this->stackPos-(2-1)], $attributes); 
-    }
-
-    protected function yyn202($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PreDec($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn203($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BooleanOr($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn204($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BooleanAnd($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn205($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_LogicalOr($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn206($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_LogicalAnd($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn207($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_LogicalXor($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn208($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BitwiseOr($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn209($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BitwiseAnd($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn210($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BitwiseXor($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn211($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Concat($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn212($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Plus($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn213($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Minus($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn214($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Mul($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn215($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Div($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn216($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Mod($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn217($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ShiftLeft($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn218($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ShiftRight($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn219($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_UnaryPlus($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn220($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_UnaryMinus($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn221($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BooleanNot($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn222($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_BitwiseNot($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn223($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Identical($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn224($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_NotIdentical($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn225($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Equal($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn226($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_NotEqual($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn227($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Smaller($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn228($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_SmallerOrEqual($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn229($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Greater($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn230($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_GreaterOrEqual($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn231($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Instanceof($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn232($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn233($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn234($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Ternary($this->yyastk[$this->stackPos-(5-1)], $this->yyastk[$this->stackPos-(5-3)], $this->yyastk[$this->stackPos-(5-5)], $attributes); 
-    }
-
-    protected function yyn235($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Ternary($this->yyastk[$this->stackPos-(4-1)], null, $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn236($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Isset($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn237($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Empty($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn238($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Include($this->yyastk[$this->stackPos-(2-2)], PHPParser_Node_Expr_Include::TYPE_INCLUDE, $attributes); 
-    }
-
-    protected function yyn239($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Include($this->yyastk[$this->stackPos-(2-2)], PHPParser_Node_Expr_Include::TYPE_INCLUDE_ONCE, $attributes); 
-    }
-
-    protected function yyn240($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Eval($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn241($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Include($this->yyastk[$this->stackPos-(2-2)], PHPParser_Node_Expr_Include::TYPE_REQUIRE, $attributes); 
-    }
-
-    protected function yyn242($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Include($this->yyastk[$this->stackPos-(2-2)], PHPParser_Node_Expr_Include::TYPE_REQUIRE_ONCE, $attributes); 
-    }
-
-    protected function yyn243($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_Int($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn244($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_Double($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn245($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_String($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn246($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_Array($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn247($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_Object($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn248($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_Bool($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn249($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Cast_Unset($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn250($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Exit($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn251($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ErrorSuppress($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn252($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn253($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn254($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn255($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ShellExec($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn256($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Print($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn257($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Yield(null, null, $attributes); 
-    }
-
-    protected function yyn258($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Closure(array('static' => false, 'byRef' => $this->yyastk[$this->stackPos-(9-2)], 'params' => $this->yyastk[$this->stackPos-(9-4)], 'uses' => $this->yyastk[$this->stackPos-(9-6)], 'stmts' => $this->yyastk[$this->stackPos-(9-8)]), $attributes); 
-    }
-
-    protected function yyn259($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Closure(array('static' => true, 'byRef' => $this->yyastk[$this->stackPos-(10-3)], 'params' => $this->yyastk[$this->stackPos-(10-5)], 'uses' => $this->yyastk[$this->stackPos-(10-7)], 'stmts' => $this->yyastk[$this->stackPos-(10-9)]), $attributes); 
-    }
-
-    protected function yyn260($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn261($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn262($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Yield($this->yyastk[$this->stackPos-(2-2)], null, $attributes); 
-    }
-
-    protected function yyn263($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Yield($this->yyastk[$this->stackPos-(4-4)], $this->yyastk[$this->stackPos-(4-2)], $attributes); 
-    }
-
-    protected function yyn264($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Array($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn265($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Array($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn266($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn267($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch(new PHPParser_Node_Scalar_String(PHPParser_Node_Scalar_String::parse($this->yyastk[$this->stackPos-(4-1)]), $attributes), $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn268($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn269($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_New($this->yyastk[$this->stackPos-(3-2)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn270($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn271($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(4-3)]; 
-    }
-
-    protected function yyn272($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn273($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn274($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ClosureUse(substr($this->yyastk[$this->stackPos-(2-2)], 1), $this->yyastk[$this->stackPos-(2-1)], $attributes); 
-    }
-
-    protected function yyn275($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_FuncCall($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn276($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_StaticCall($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn277($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_StaticCall($this->yyastk[$this->stackPos-(6-1)], $this->yyastk[$this->stackPos-(6-4)], $this->yyastk[$this->stackPos-(6-6)], $attributes); 
-    }
-
-    protected function yyn278($attributes) {
-        
-            if ($this->yyastk[$this->stackPos-(2-1)] instanceof PHPParser_Node_Expr_StaticPropertyFetch) {
-                $this->yyval = new PHPParser_Node_Expr_StaticCall($this->yyastk[$this->stackPos-(2-1)]->class, new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(2-1)]->name, $attributes), $this->yyastk[$this->stackPos-(2-2)], $attributes);
-            } elseif ($this->yyastk[$this->stackPos-(2-1)] instanceof PHPParser_Node_Expr_ArrayDimFetch) {
-                $tmp = $this->yyastk[$this->stackPos-(2-1)];
-                while ($tmp->var instanceof PHPParser_Node_Expr_ArrayDimFetch) {
-                    $tmp = $tmp->var;
-                }
-
-                $this->yyval = new PHPParser_Node_Expr_StaticCall($tmp->var->class, $this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)], $attributes);
-                $tmp->var = new PHPParser_Node_Expr_Variable($tmp->var->name, $attributes);
-            } else {
-                throw new Exception;
-            }
-          
-    }
-
-    protected function yyn279($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_FuncCall($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn280($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn281($attributes) {
-         $this->yyval = new PHPParser_Node_Name('static', $attributes); 
-    }
-
-    protected function yyn282($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn283($attributes) {
-         $this->yyval = new PHPParser_Node_Name($this->yyastk[$this->stackPos-(1-1)], $attributes); 
-    }
-
-    protected function yyn284($attributes) {
-         $this->yyval = new PHPParser_Node_Name_FullyQualified($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn285($attributes) {
-         $this->yyval = new PHPParser_Node_Name_Relative($this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn286($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn287($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn288($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn289($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn290($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn291($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn292() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-
-    protected function yyn293($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PropertyFetch($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn294($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PropertyFetch($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn295($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn296($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn297($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn298($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn299($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn300($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn301($attributes) {
-         $this->yyval = array(PHPParser_Node_Scalar_String::parseEscapeSequences($this->yyastk[$this->stackPos-(1-1)], '`')); 
-    }
-
-    protected function yyn302($attributes) {
-         foreach ($this->yyastk[$this->stackPos-(1-1)] as &$s) { if (is_string($s)) { $s = PHPParser_Node_Scalar_String::parseEscapeSequences($s, '`'); } }; $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn303($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn304($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn305($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_LNumber(PHPParser_Node_Scalar_LNumber::parse($this->yyastk[$this->stackPos-(1-1)]), $attributes); 
-    }
-
-    protected function yyn306($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_DNumber(PHPParser_Node_Scalar_DNumber::parse($this->yyastk[$this->stackPos-(1-1)]), $attributes); 
-    }
-
-    protected function yyn307($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_String(PHPParser_Node_Scalar_String::parse($this->yyastk[$this->stackPos-(1-1)]), $attributes); 
-    }
-
-    protected function yyn308($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_LineConst($attributes); 
-    }
-
-    protected function yyn309($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_FileConst($attributes); 
-    }
-
-    protected function yyn310($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_DirConst($attributes); 
-    }
-
-    protected function yyn311($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_ClassConst($attributes); 
-    }
-
-    protected function yyn312($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_TraitConst($attributes); 
-    }
-
-    protected function yyn313($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_MethodConst($attributes); 
-    }
-
-    protected function yyn314($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_FuncConst($attributes); 
-    }
-
-    protected function yyn315($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_NSConst($attributes); 
-    }
-
-    protected function yyn316($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_String(PHPParser_Node_Scalar_String::parseDocString($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-2)]), $attributes); 
-    }
-
-    protected function yyn317($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_String('', $attributes); 
-    }
-
-    protected function yyn318($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ConstFetch($this->yyastk[$this->stackPos-(1-1)], $attributes); 
-    }
-
-    protected function yyn319($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn320($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ClassConstFetch($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn321($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_UnaryPlus($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn322($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_UnaryMinus($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn323($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Array($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn324($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Array($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn325($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn326($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ClassConstFetch($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn327($attributes) {
-         foreach ($this->yyastk[$this->stackPos-(3-2)] as &$s) { if (is_string($s)) { $s = PHPParser_Node_Scalar_String::parseEscapeSequences($s, '"'); } }; $this->yyval = new PHPParser_Node_Scalar_Encapsed($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn328($attributes) {
-         foreach ($this->yyastk[$this->stackPos-(3-2)] as &$s) { if (is_string($s)) { $s = PHPParser_Node_Scalar_String::parseEscapeSequences($s, null); } } $s = preg_replace('~(\r\n|\n|\r)$~', '', $s); if ('' === $s) array_pop($this->yyastk[$this->stackPos-(3-2)]);; $this->yyval = new PHPParser_Node_Scalar_Encapsed($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn329($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn330($attributes) {
-         $this->yyval = 'class'; 
-    }
-
-    protected function yyn331($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn332($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn333() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-
-    protected function yyn334() {
-        $this->yyval = $this->yyastk[$this->stackPos];
-    }
-
-    protected function yyn335($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn336($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn337($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayItem($this->yyastk[$this->stackPos-(3-3)], $this->yyastk[$this->stackPos-(3-1)], false, $attributes); 
-    }
-
-    protected function yyn338($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayItem($this->yyastk[$this->stackPos-(1-1)], null, false, $attributes); 
-    }
-
-    protected function yyn339($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn340($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn341($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn342($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn343($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(6-2)], $this->yyastk[$this->stackPos-(6-5)], $attributes); 
-    }
-
-    protected function yyn344($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn345($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PropertyFetch($this->yyastk[$this->stackPos-(3-1)], $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn346($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_MethodCall($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn347($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_FuncCall($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn348($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn349($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn350($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn351($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn352($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn353($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(2-2)], $attributes); 
-    }
-
-    protected function yyn354($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn355($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn356($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_StaticPropertyFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-4)], $attributes); 
-    }
-
-    protected function yyn357($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn358($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_StaticPropertyFetch($this->yyastk[$this->stackPos-(3-1)], substr($this->yyastk[$this->stackPos-(3-3)], 1), $attributes); 
-    }
-
-    protected function yyn359($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_StaticPropertyFetch($this->yyastk[$this->stackPos-(6-1)], $this->yyastk[$this->stackPos-(6-5)], $attributes); 
-    }
-
-    protected function yyn360($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn361($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn362($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn363($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch($this->yyastk[$this->stackPos-(4-1)], $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn364($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable(substr($this->yyastk[$this->stackPos-(1-1)], 1), $attributes); 
-    }
-
-    protected function yyn365($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn366($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn367($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn368($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn369($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn370($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn371($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_List($this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn372($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn373($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn374($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn375($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(1-1)]; 
-    }
-
-    protected function yyn376($attributes) {
-         $this->yyval = null; 
-    }
-
-    protected function yyn377($attributes) {
-         $this->yyval = array(); 
-    }
-
-    protected function yyn378($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn379($attributes) {
-         $this->yyastk[$this->stackPos-(3-1)][] = $this->yyastk[$this->stackPos-(3-3)]; $this->yyval = $this->yyastk[$this->stackPos-(3-1)]; 
-    }
-
-    protected function yyn380($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn381($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayItem($this->yyastk[$this->stackPos-(3-3)], $this->yyastk[$this->stackPos-(3-1)], false, $attributes); 
-    }
-
-    protected function yyn382($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayItem($this->yyastk[$this->stackPos-(1-1)], null, false, $attributes); 
-    }
-
-    protected function yyn383($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayItem($this->yyastk[$this->stackPos-(4-4)], $this->yyastk[$this->stackPos-(4-1)], true, $attributes); 
-    }
-
-    protected function yyn384($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayItem($this->yyastk[$this->stackPos-(2-2)], null, true, $attributes); 
-    }
-
-    protected function yyn385($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn386($attributes) {
-         $this->yyastk[$this->stackPos-(2-1)][] = $this->yyastk[$this->stackPos-(2-2)]; $this->yyval = $this->yyastk[$this->stackPos-(2-1)]; 
-    }
-
-    protected function yyn387($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(1-1)]); 
-    }
-
-    protected function yyn388($attributes) {
-         $this->yyval = array($this->yyastk[$this->stackPos-(2-1)], $this->yyastk[$this->stackPos-(2-2)]); 
-    }
-
-    protected function yyn389($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable(substr($this->yyastk[$this->stackPos-(1-1)], 1), $attributes); 
-    }
-
-    protected function yyn390($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch(new PHPParser_Node_Expr_Variable(substr($this->yyastk[$this->stackPos-(4-1)], 1), $attributes), $this->yyastk[$this->stackPos-(4-3)], $attributes); 
-    }
-
-    protected function yyn391($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_PropertyFetch(new PHPParser_Node_Expr_Variable(substr($this->yyastk[$this->stackPos-(3-1)], 1), $attributes), $this->yyastk[$this->stackPos-(3-3)], $attributes); 
-    }
-
-    protected function yyn392($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn393($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(3-2)], $attributes); 
-    }
-
-    protected function yyn394($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_ArrayDimFetch(new PHPParser_Node_Expr_Variable($this->yyastk[$this->stackPos-(6-2)], $attributes), $this->yyastk[$this->stackPos-(6-4)], $attributes); 
-    }
-
-    protected function yyn395($attributes) {
-         $this->yyval = $this->yyastk[$this->stackPos-(3-2)]; 
-    }
-
-    protected function yyn396($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_String($this->yyastk[$this->stackPos-(1-1)], $attributes); 
-    }
-
-    protected function yyn397($attributes) {
-         $this->yyval = new PHPParser_Node_Scalar_String($this->yyastk[$this->stackPos-(1-1)], $attributes); 
-    }
-
-    protected function yyn398($attributes) {
-         $this->yyval = new PHPParser_Node_Expr_Variable(substr($this->yyastk[$this->stackPos-(1-1)], 1), $attributes); 
-    }
-}
diff --git a/vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Default.php b/vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Default.php
deleted file mode 100644
index ad2b4b7..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Default.php
+++ /dev/null
@@ -1,725 +0,0 @@
-type ? (is_string($node->type) ? $node->type : $this->p($node->type)) . ' ' : '')
-             . ($node->byRef ? '&' : '')
-             . '$' . $node->name
-             . ($node->default ? ' = ' . $this->p($node->default) : '');
-    }
-
-    public function pArg(PHPParser_Node_Arg $node) {
-        return ($node->byRef ? '&' : '') . $this->p($node->value);
-    }
-
-    public function pConst(PHPParser_Node_Const $node) {
-        return $node->name . ' = ' . $this->p($node->value);
-    }
-
-    // Names
-
-    public function pName(PHPParser_Node_Name $node) {
-        return implode('\\', $node->parts);
-    }
-
-    public function pName_FullyQualified(PHPParser_Node_Name_FullyQualified $node) {
-        return '\\' . implode('\\', $node->parts);
-    }
-
-    public function pName_Relative(PHPParser_Node_Name_Relative $node) {
-        return 'namespace\\' . implode('\\', $node->parts);
-    }
-
-    // Magic Constants
-
-    public function pScalar_ClassConst(PHPParser_Node_Scalar_ClassConst $node) {
-        return '__CLASS__';
-    }
-
-    public function pScalar_TraitConst(PHPParser_Node_Scalar_TraitConst $node) {
-        return '__TRAIT__';
-    }
-
-    public function pScalar_DirConst(PHPParser_Node_Scalar_DirConst $node) {
-        return '__DIR__';
-    }
-
-    public function pScalar_FileConst(PHPParser_Node_Scalar_FileConst $node) {
-        return '__FILE__';
-    }
-
-    public function pScalar_FuncConst(PHPParser_Node_Scalar_FuncConst $node) {
-        return '__FUNCTION__';
-    }
-
-    public function pScalar_LineConst(PHPParser_Node_Scalar_LineConst $node) {
-        return '__LINE__';
-    }
-
-    public function pScalar_MethodConst(PHPParser_Node_Scalar_MethodConst $node) {
-        return '__METHOD__';
-    }
-
-    public function pScalar_NSConst(PHPParser_Node_Scalar_NSConst $node) {
-        return '__NAMESPACE__';
-    }
-
-    // Scalars
-
-    public function pScalar_String(PHPParser_Node_Scalar_String $node) {
-        return '\'' . $this->pNoIndent(addcslashes($node->value, '\'\\')) . '\'';
-    }
-
-    public function pScalar_Encapsed(PHPParser_Node_Scalar_Encapsed $node) {
-        return '"' . $this->pEncapsList($node->parts, '"') . '"';
-    }
-
-    public function pScalar_LNumber(PHPParser_Node_Scalar_LNumber $node) {
-        return (string) $node->value;
-    }
-
-    public function pScalar_DNumber(PHPParser_Node_Scalar_DNumber $node) {
-        $stringValue = (string) $node->value;
-
-        // ensure that number is really printed as float
-        return ctype_digit($stringValue) ? $stringValue . '.0' : $stringValue;
-    }
-
-    // Assignments
-
-    public function pExpr_Assign(PHPParser_Node_Expr_Assign $node) {
-        return $this->pInfixOp('Expr_Assign', $node->var, ' = ', $node->expr);
-    }
-
-    public function pExpr_AssignRef(PHPParser_Node_Expr_AssignRef $node) {
-        return $this->pInfixOp('Expr_AssignRef', $node->var, ' =& ', $node->expr);
-    }
-
-    public function pExpr_AssignPlus(PHPParser_Node_Expr_AssignPlus $node) {
-        return $this->pInfixOp('Expr_AssignPlus', $node->var, ' += ', $node->expr);
-    }
-
-    public function pExpr_AssignMinus(PHPParser_Node_Expr_AssignMinus $node) {
-        return $this->pInfixOp('Expr_AssignMinus', $node->var, ' -= ', $node->expr);
-    }
-
-    public function pExpr_AssignMul(PHPParser_Node_Expr_AssignMul $node) {
-        return $this->pInfixOp('Expr_AssignMul', $node->var, ' *= ', $node->expr);
-    }
-
-    public function pExpr_AssignDiv(PHPParser_Node_Expr_AssignDiv $node) {
-        return $this->pInfixOp('Expr_AssignDiv', $node->var, ' /= ', $node->expr);
-    }
-
-    public function pExpr_AssignConcat(PHPParser_Node_Expr_AssignConcat $node) {
-        return $this->pInfixOp('Expr_AssignConcat', $node->var, ' .= ', $node->expr);
-    }
-
-    public function pExpr_AssignMod(PHPParser_Node_Expr_AssignMod $node) {
-        return $this->pInfixOp('Expr_AssignMod', $node->var, ' %= ', $node->expr);
-    }
-
-    public function pExpr_AssignBitwiseAnd(PHPParser_Node_Expr_AssignBitwiseAnd $node) {
-        return $this->pInfixOp('Expr_AssignBitwiseAnd', $node->var, ' &= ', $node->expr);
-    }
-
-    public function pExpr_AssignBitwiseOr(PHPParser_Node_Expr_AssignBitwiseOr $node) {
-        return $this->pInfixOp('Expr_AssignBitwiseOr', $node->var, ' |= ', $node->expr);
-    }
-
-    public function pExpr_AssignBitwiseXor(PHPParser_Node_Expr_AssignBitwiseXor $node) {
-        return $this->pInfixOp('Expr_AssignBitwiseXor', $node->var, ' ^= ', $node->expr);
-    }
-
-    public function pExpr_AssignShiftLeft(PHPParser_Node_Expr_AssignShiftLeft $node) {
-        return $this->pInfixOp('Expr_AssignShiftLeft', $node->var, ' <<= ', $node->expr);
-    }
-
-    public function pExpr_AssignShiftRight(PHPParser_Node_Expr_AssignShiftRight $node) {
-        return $this->pInfixOp('Expr_AssignShiftRight', $node->var, ' >>= ', $node->expr);
-    }
-
-    // Binary expressions
-
-    public function pExpr_Plus(PHPParser_Node_Expr_Plus $node) {
-        return $this->pInfixOp('Expr_Plus', $node->left, ' + ', $node->right);
-    }
-
-    public function pExpr_Minus(PHPParser_Node_Expr_Minus $node) {
-        return $this->pInfixOp('Expr_Minus', $node->left, ' - ', $node->right);
-    }
-
-    public function pExpr_Mul(PHPParser_Node_Expr_Mul $node) {
-        return $this->pInfixOp('Expr_Mul', $node->left, ' * ', $node->right);
-    }
-
-    public function pExpr_Div(PHPParser_Node_Expr_Div $node) {
-        return $this->pInfixOp('Expr_Div', $node->left, ' / ', $node->right);
-    }
-
-    public function pExpr_Concat(PHPParser_Node_Expr_Concat $node) {
-        return $this->pInfixOp('Expr_Concat', $node->left, ' . ', $node->right);
-    }
-
-    public function pExpr_Mod(PHPParser_Node_Expr_Mod $node) {
-        return $this->pInfixOp('Expr_Mod', $node->left, ' % ', $node->right);
-    }
-
-    public function pExpr_BooleanAnd(PHPParser_Node_Expr_BooleanAnd $node) {
-        return $this->pInfixOp('Expr_BooleanAnd', $node->left, ' && ', $node->right);
-    }
-
-    public function pExpr_BooleanOr(PHPParser_Node_Expr_BooleanOr $node) {
-        return $this->pInfixOp('Expr_BooleanOr', $node->left, ' || ', $node->right);
-    }
-
-    public function pExpr_BitwiseAnd(PHPParser_Node_Expr_BitwiseAnd $node) {
-        return $this->pInfixOp('Expr_BitwiseAnd', $node->left, ' & ', $node->right);
-    }
-
-    public function pExpr_BitwiseOr(PHPParser_Node_Expr_BitwiseOr $node) {
-        return $this->pInfixOp('Expr_BitwiseOr', $node->left, ' | ', $node->right);
-    }
-
-    public function pExpr_BitwiseXor(PHPParser_Node_Expr_BitwiseXor $node) {
-        return $this->pInfixOp('Expr_BitwiseXor', $node->left, ' ^ ', $node->right);
-    }
-
-    public function pExpr_ShiftLeft(PHPParser_Node_Expr_ShiftLeft $node) {
-        return $this->pInfixOp('Expr_ShiftLeft', $node->left, ' << ', $node->right);
-    }
-
-    public function pExpr_ShiftRight(PHPParser_Node_Expr_ShiftRight $node) {
-        return $this->pInfixOp('Expr_ShiftRight', $node->left, ' >> ', $node->right);
-    }
-
-    public function pExpr_LogicalAnd(PHPParser_Node_Expr_LogicalAnd $node) {
-        return $this->pInfixOp('Expr_LogicalAnd', $node->left, ' and ', $node->right);
-    }
-
-    public function pExpr_LogicalOr(PHPParser_Node_Expr_LogicalOr $node) {
-        return $this->pInfixOp('Expr_LogicalOr', $node->left, ' or ', $node->right);
-    }
-
-    public function pExpr_LogicalXor(PHPParser_Node_Expr_LogicalXor $node) {
-        return $this->pInfixOp('Expr_LogicalXor', $node->left, ' xor ', $node->right);
-    }
-
-    public function pExpr_Equal(PHPParser_Node_Expr_Equal $node) {
-        return $this->pInfixOp('Expr_Equal', $node->left, ' == ', $node->right);
-    }
-
-    public function pExpr_NotEqual(PHPParser_Node_Expr_NotEqual $node) {
-        return $this->pInfixOp('Expr_NotEqual', $node->left, ' != ', $node->right);
-    }
-
-    public function pExpr_Identical(PHPParser_Node_Expr_Identical $node) {
-        return $this->pInfixOp('Expr_Identical', $node->left, ' === ', $node->right);
-    }
-
-    public function pExpr_NotIdentical(PHPParser_Node_Expr_NotIdentical $node) {
-        return $this->pInfixOp('Expr_NotIdentical', $node->left, ' !== ', $node->right);
-    }
-
-    public function pExpr_Greater(PHPParser_Node_Expr_Greater $node) {
-        return $this->pInfixOp('Expr_Greater', $node->left, ' > ', $node->right);
-    }
-
-    public function pExpr_GreaterOrEqual(PHPParser_Node_Expr_GreaterOrEqual $node) {
-        return $this->pInfixOp('Expr_GreaterOrEqual', $node->left, ' >= ', $node->right);
-    }
-
-    public function pExpr_Smaller(PHPParser_Node_Expr_Smaller $node) {
-        return $this->pInfixOp('Expr_Smaller', $node->left, ' < ', $node->right);
-    }
-
-    public function pExpr_SmallerOrEqual(PHPParser_Node_Expr_SmallerOrEqual $node) {
-        return $this->pInfixOp('Expr_SmallerOrEqual', $node->left, ' <= ', $node->right);
-    }
-
-    public function pExpr_Instanceof(PHPParser_Node_Expr_Instanceof $node) {
-        return $this->pInfixOp('Expr_Instanceof', $node->expr, ' instanceof ', $node->class);
-    }
-
-    // Unary expressions
-
-    public function pExpr_BooleanNot(PHPParser_Node_Expr_BooleanNot $node) {
-        return $this->pPrefixOp('Expr_BooleanNot', '!', $node->expr);
-    }
-
-    public function pExpr_BitwiseNot(PHPParser_Node_Expr_BitwiseNot $node) {
-        return $this->pPrefixOp('Expr_BitwiseNot', '~', $node->expr);
-    }
-
-    public function pExpr_UnaryMinus(PHPParser_Node_Expr_UnaryMinus $node) {
-        return $this->pPrefixOp('Expr_UnaryMinus', '-', $node->expr);
-    }
-
-    public function pExpr_UnaryPlus(PHPParser_Node_Expr_UnaryPlus $node) {
-        return $this->pPrefixOp('Expr_UnaryPlus', '+', $node->expr);
-    }
-
-    public function pExpr_PreInc(PHPParser_Node_Expr_PreInc $node) {
-        return $this->pPrefixOp('Expr_PreInc', '++', $node->var);
-    }
-
-    public function pExpr_PreDec(PHPParser_Node_Expr_PreDec $node) {
-        return $this->pPrefixOp('Expr_PreDec', '--', $node->var);
-    }
-
-    public function pExpr_PostInc(PHPParser_Node_Expr_PostInc $node) {
-        return $this->pPostfixOp('Expr_PostInc', $node->var, '++');
-    }
-
-    public function pExpr_PostDec(PHPParser_Node_Expr_PostDec $node) {
-        return $this->pPostfixOp('Expr_PostDec', $node->var, '--');
-    }
-
-    public function pExpr_ErrorSuppress(PHPParser_Node_Expr_ErrorSuppress $node) {
-        return $this->pPrefixOp('Expr_ErrorSuppress', '@', $node->expr);
-    }
-
-    // Casts
-
-    public function pExpr_Cast_Int(PHPParser_Node_Expr_Cast_Int $node) {
-        return $this->pPrefixOp('Expr_Cast_Int', '(int) ', $node->expr);
-    }
-
-    public function pExpr_Cast_Double(PHPParser_Node_Expr_Cast_Double $node) {
-        return $this->pPrefixOp('Expr_Cast_Double', '(double) ', $node->expr);
-    }
-
-    public function pExpr_Cast_String(PHPParser_Node_Expr_Cast_String $node) {
-        return $this->pPrefixOp('Expr_Cast_String', '(string) ', $node->expr);
-    }
-
-    public function pExpr_Cast_Array(PHPParser_Node_Expr_Cast_Array $node) {
-        return $this->pPrefixOp('Expr_Cast_Array', '(array) ', $node->expr);
-    }
-
-    public function pExpr_Cast_Object(PHPParser_Node_Expr_Cast_Object $node) {
-        return $this->pPrefixOp('Expr_Cast_Object', '(object) ', $node->expr);
-    }
-
-    public function pExpr_Cast_Bool(PHPParser_Node_Expr_Cast_Bool $node) {
-        return $this->pPrefixOp('Expr_Cast_Bool', '(bool) ', $node->expr);
-    }
-
-    public function pExpr_Cast_Unset(PHPParser_Node_Expr_Cast_Unset $node) {
-        return $this->pPrefixOp('Expr_Cast_Unset', '(unset) ', $node->expr);
-    }
-
-    // Function calls and similar constructs
-
-    public function pExpr_FuncCall(PHPParser_Node_Expr_FuncCall $node) {
-        return $this->p($node->name) . '(' . $this->pCommaSeparated($node->args) . ')';
-    }
-
-    public function pExpr_MethodCall(PHPParser_Node_Expr_MethodCall $node) {
-        return $this->pVarOrNewExpr($node->var) . '->' . $this->pObjectProperty($node->name)
-             . '(' . $this->pCommaSeparated($node->args) . ')';
-    }
-
-    public function pExpr_StaticCall(PHPParser_Node_Expr_StaticCall $node) {
-        return $this->p($node->class) . '::'
-             . ($node->name instanceof PHPParser_Node_Expr
-                ? ($node->name instanceof PHPParser_Node_Expr_Variable
-                   || $node->name instanceof PHPParser_Node_Expr_ArrayDimFetch
-                   ? $this->p($node->name)
-                   : '{' . $this->p($node->name) . '}')
-                : $node->name)
-             . '(' . $this->pCommaSeparated($node->args) . ')';
-    }
-
-    public function pExpr_Empty(PHPParser_Node_Expr_Empty $node) {
-        return 'empty(' . $this->p($node->expr) . ')';
-    }
-
-    public function pExpr_Isset(PHPParser_Node_Expr_Isset $node) {
-        return 'isset(' . $this->pCommaSeparated($node->vars) . ')';
-    }
-
-    public function pExpr_Print(PHPParser_Node_Expr_Print $node) {
-        return 'print ' . $this->p($node->expr);
-    }
-
-    public function pExpr_Eval(PHPParser_Node_Expr_Eval $node) {
-        return 'eval(' . $this->p($node->expr) . ')';
-    }
-
-    public function pExpr_Include(PHPParser_Node_Expr_Include $node) {
-        static $map = array(
-            PHPParser_Node_Expr_Include::TYPE_INCLUDE      => 'include',
-            PHPParser_Node_Expr_Include::TYPE_INCLUDE_ONCE => 'include_once',
-            PHPParser_Node_Expr_Include::TYPE_REQUIRE      => 'require',
-            PHPParser_Node_Expr_Include::TYPE_REQUIRE_ONCE => 'require_once',
-        );
-
-        return $map[$node->type] . ' ' . $this->p($node->expr);
-    }
-
-    public function pExpr_List(PHPParser_Node_Expr_List $node) {
-        $pList = array();
-        foreach ($node->vars as $var) {
-            if (null === $var) {
-                $pList[] = '';
-            } else {
-                $pList[] = $this->p($var);
-            }
-        }
-
-        return 'list(' . implode(', ', $pList) . ')';
-    }
-
-    // Other
-
-    public function pExpr_Variable(PHPParser_Node_Expr_Variable $node) {
-        if ($node->name instanceof PHPParser_Node_Expr) {
-            return '${' . $this->p($node->name) . '}';
-        } else {
-            return '$' . $node->name;
-        }
-    }
-
-    public function pExpr_Array(PHPParser_Node_Expr_Array $node) {
-        return 'array(' . $this->pCommaSeparated($node->items) . ')';
-    }
-
-    public function pExpr_ArrayItem(PHPParser_Node_Expr_ArrayItem $node) {
-        return (null !== $node->key ? $this->p($node->key) . ' => ' : '')
-             . ($node->byRef ? '&' : '') . $this->p($node->value);
-    }
-
-    public function pExpr_ArrayDimFetch(PHPParser_Node_Expr_ArrayDimFetch $node) {
-        return $this->pVarOrNewExpr($node->var)
-             . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']';
-    }
-
-    public function pExpr_ConstFetch(PHPParser_Node_Expr_ConstFetch $node) {
-        return $this->p($node->name);
-    }
-
-    public function pExpr_ClassConstFetch(PHPParser_Node_Expr_ClassConstFetch $node) {
-        return $this->p($node->class) . '::' . $node->name;
-    }
-
-    public function pExpr_PropertyFetch(PHPParser_Node_Expr_PropertyFetch $node) {
-        return $this->pVarOrNewExpr($node->var) . '->' . $this->pObjectProperty($node->name);
-    }
-
-    public function pExpr_StaticPropertyFetch(PHPParser_Node_Expr_StaticPropertyFetch $node) {
-        return $this->p($node->class) . '::$' . $this->pObjectProperty($node->name);
-    }
-
-    public function pExpr_ShellExec(PHPParser_Node_Expr_ShellExec $node) {
-        return '`' . $this->pEncapsList($node->parts, '`') . '`';
-    }
-
-    public function pExpr_Closure(PHPParser_Node_Expr_Closure $node) {
-        return ($node->static ? 'static ' : '')
-             . 'function ' . ($node->byRef ? '&' : '')
-             . '(' . $this->pCommaSeparated($node->params) . ')'
-             . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')': '')
-             . ' {' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pExpr_ClosureUse(PHPParser_Node_Expr_ClosureUse $node) {
-        return ($node->byRef ? '&' : '') . '$' . $node->var;
-    }
-
-    public function pExpr_New(PHPParser_Node_Expr_New $node) {
-        return 'new ' . $this->p($node->class) . '(' . $this->pCommaSeparated($node->args) . ')';
-    }
-
-    public function pExpr_Clone(PHPParser_Node_Expr_Clone $node) {
-        return 'clone ' . $this->p($node->expr);
-    }
-
-    public function pExpr_Ternary(PHPParser_Node_Expr_Ternary $node) {
-        // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator.
-        // this is okay because the part between ? and : never needs parentheses.
-        return $this->pInfixOp('Expr_Ternary',
-            $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else
-        );
-    }
-
-    public function pExpr_Exit(PHPParser_Node_Expr_Exit $node) {
-        return 'die' . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : '');
-    }
-
-    public function pExpr_Yield(PHPParser_Node_Expr_Yield $node) {
-        if ($node->value === null) {
-            return 'yield';
-        } else {
-            // this is a bit ugly, but currently there is no way to detect whether the parentheses are necessary
-            return '(yield '
-                 . ($node->key !== null ? $this->p($node->key) . ' => ' : '')
-                 . $this->p($node->value)
-                 . ')';
-        }
-    }
-
-    // Declarations
-
-    public function pStmt_Namespace(PHPParser_Node_Stmt_Namespace $node) {
-        if ($this->canUseSemicolonNamespaces) {
-            return 'namespace ' . $this->p($node->name) . ';' . "\n\n" . $this->pStmts($node->stmts, false);
-        } else {
-            return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '')
-                 . ' {' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-        }
-    }
-
-    public function pStmt_Use(PHPParser_Node_Stmt_Use $node) {
-        return 'use ' . $this->pCommaSeparated($node->uses) . ';';
-    }
-
-    public function pStmt_UseUse(PHPParser_Node_Stmt_UseUse $node) {
-        return $this->p($node->name)
-             . ($node->name->getLast() !== $node->alias ? ' as ' . $node->alias : '');
-    }
-
-    public function pStmt_Interface(PHPParser_Node_Stmt_Interface $node) {
-        return 'interface ' . $node->name
-             . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '')
-             . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Class(PHPParser_Node_Stmt_Class $node) {
-        return $this->pModifiers($node->type)
-             . 'class ' . $node->name
-             . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
-             . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
-             . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Trait(PHPParser_Node_Stmt_Trait $node) {
-        return 'trait ' . $node->name
-             . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_TraitUse(PHPParser_Node_Stmt_TraitUse $node) {
-        return 'use ' . $this->pCommaSeparated($node->traits)
-             . (empty($node->adaptations)
-                ? ';'
-                : ' {' . "\n" . $this->pStmts($node->adaptations) . "\n" . '}');
-    }
-
-    public function pStmt_TraitUseAdaptation_Precedence(PHPParser_Node_Stmt_TraitUseAdaptation_Precedence $node) {
-        return $this->p($node->trait) . '::' . $node->method
-             . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';';
-    }
-
-    public function pStmt_TraitUseAdaptation_Alias(PHPParser_Node_Stmt_TraitUseAdaptation_Alias $node) {
-        return (null !== $node->trait ? $this->p($node->trait) . '::' : '')
-             . $node->method . ' as'
-             . (null !== $node->newModifier ? ' ' . $this->pModifiers($node->newModifier) : '')
-             . (null !== $node->newName     ? ' ' . $node->newName                        : '')
-             . ';';
-    }
-
-    public function pStmt_Property(PHPParser_Node_Stmt_Property $node) {
-        return $this->pModifiers($node->type) . $this->pCommaSeparated($node->props) . ';';
-    }
-
-    public function pStmt_PropertyProperty(PHPParser_Node_Stmt_PropertyProperty $node) {
-        return '$' . $node->name
-             . (null !== $node->default ? ' = ' . $this->p($node->default) : '');
-    }
-
-    public function pStmt_ClassMethod(PHPParser_Node_Stmt_ClassMethod $node) {
-        return $this->pModifiers($node->type)
-             . 'function ' . ($node->byRef ? '&' : '') . $node->name
-             . '(' . $this->pCommaSeparated($node->params) . ')'
-             . (null !== $node->stmts
-                ? "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}'
-                : ';');
-    }
-
-    public function pStmt_ClassConst(PHPParser_Node_Stmt_ClassConst $node) {
-        return 'const ' . $this->pCommaSeparated($node->consts) . ';';
-    }
-
-    public function pStmt_Function(PHPParser_Node_Stmt_Function $node) {
-        return 'function ' . ($node->byRef ? '&' : '') . $node->name
-             . '(' . $this->pCommaSeparated($node->params) . ')'
-             . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Const(PHPParser_Node_Stmt_Const $node) {
-        return 'const ' . $this->pCommaSeparated($node->consts) . ';';
-    }
-
-    public function pStmt_Declare(PHPParser_Node_Stmt_Declare $node) {
-        return 'declare (' . $this->pCommaSeparated($node->declares) . ') {'
-             . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_DeclareDeclare(PHPParser_Node_Stmt_DeclareDeclare $node) {
-        return $node->key . ' = ' . $this->p($node->value);
-    }
-
-    // Control flow
-
-    public function pStmt_If(PHPParser_Node_Stmt_If $node) {
-        return 'if (' . $this->p($node->cond) . ') {'
-             . "\n" . $this->pStmts($node->stmts) . "\n" . '}'
-             . $this->pImplode($node->elseifs)
-             . (null !== $node->else ? $this->p($node->else) : '');
-    }
-
-    public function pStmt_Elseif(PHPParser_Node_Stmt_Elseif $node) {
-        return ' elseif (' . $this->p($node->cond) . ') {'
-             . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Else(PHPParser_Node_Stmt_Else $node) {
-        return ' else {' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_For(PHPParser_Node_Stmt_For $node) {
-        return 'for ('
-             . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '')
-             . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '')
-             . $this->pCommaSeparated($node->loop)
-             . ') {' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Foreach(PHPParser_Node_Stmt_Foreach $node) {
-        return 'foreach (' . $this->p($node->expr) . ' as '
-             . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '')
-             . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {'
-             . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_While(PHPParser_Node_Stmt_While $node) {
-        return 'while (' . $this->p($node->cond) . ') {'
-             . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Do(PHPParser_Node_Stmt_Do $node) {
-        return 'do {' . "\n" . $this->pStmts($node->stmts) . "\n"
-             . '} while (' . $this->p($node->cond) . ');';
-    }
-
-    public function pStmt_Switch(PHPParser_Node_Stmt_Switch $node) {
-        return 'switch (' . $this->p($node->cond) . ') {'
-             . "\n" . $this->pStmts($node->cases) . "\n" . '}';
-    }
-
-    public function pStmt_Case(PHPParser_Node_Stmt_Case $node) {
-        return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':'
-             . ($node->stmts ? "\n" . $this->pStmts($node->stmts) : '');
-    }
-
-    public function pStmt_TryCatch(PHPParser_Node_Stmt_TryCatch $node) {
-        return 'try {' . "\n" . $this->pStmts($node->stmts) . "\n" . '}'
-             . $this->pImplode($node->catches)
-             . ($node->finallyStmts !== null
-                ? ' finally {' . "\n" . $this->pStmts($node->finallyStmts) . "\n" . '}'
-                : '');
-    }
-
-    public function pStmt_Catch(PHPParser_Node_Stmt_Catch $node) {
-        return ' catch (' . $this->p($node->type) . ' $' . $node->var . ') {'
-             . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-
-    public function pStmt_Break(PHPParser_Node_Stmt_Break $node) {
-        return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';';
-    }
-
-    public function pStmt_Continue(PHPParser_Node_Stmt_Continue $node) {
-        return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';';
-    }
-
-    public function pStmt_Return(PHPParser_Node_Stmt_Return $node) {
-        return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';';
-    }
-
-    public function pStmt_Throw(PHPParser_Node_Stmt_Throw $node) {
-        return 'throw ' . $this->p($node->expr) . ';';
-    }
-
-    public function pStmt_Label(PHPParser_Node_Stmt_Label $node) {
-        return $node->name . ':';
-    }
-
-    public function pStmt_Goto(PHPParser_Node_Stmt_Goto $node) {
-        return 'goto ' . $node->name . ';';
-    }
-
-    // Other
-
-    public function pStmt_Echo(PHPParser_Node_Stmt_Echo $node) {
-        return 'echo ' . $this->pCommaSeparated($node->exprs) . ';';
-    }
-
-    public function pStmt_Static(PHPParser_Node_Stmt_Static $node) {
-        return 'static ' . $this->pCommaSeparated($node->vars) . ';';
-    }
-
-    public function pStmt_Global(PHPParser_Node_Stmt_Global $node) {
-        return 'global ' . $this->pCommaSeparated($node->vars) . ';';
-    }
-
-    public function pStmt_StaticVar(PHPParser_Node_Stmt_StaticVar $node) {
-        return '$' . $node->name
-             . (null !== $node->default ? ' = ' . $this->p($node->default) : '');
-    }
-
-    public function pStmt_Unset(PHPParser_Node_Stmt_Unset $node) {
-        return 'unset(' . $this->pCommaSeparated($node->vars) . ');';
-    }
-
-    public function pStmt_InlineHTML(PHPParser_Node_Stmt_InlineHTML $node) {
-        return '?>' . $this->pNoIndent("\n" . $node->value) . 'remaining;
-    }
-
-    // Helpers
-
-    public function pObjectProperty($node) {
-        if ($node instanceof PHPParser_Node_Expr) {
-            return '{' . $this->p($node) . '}';
-        } else {
-            return $node;
-        }
-    }
-
-    public function pModifiers($modifiers) {
-        return ($modifiers & PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC    ? 'public '    : '')
-             . ($modifiers & PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED ? 'protected ' : '')
-             . ($modifiers & PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE   ? 'private '   : '')
-             . ($modifiers & PHPParser_Node_Stmt_Class::MODIFIER_STATIC    ? 'static '    : '')
-             . ($modifiers & PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT  ? 'abstract '  : '')
-             . ($modifiers & PHPParser_Node_Stmt_Class::MODIFIER_FINAL     ? 'final '     : '');
-    }
-
-    public function pEncapsList(array $encapsList, $quote) {
-        $return = '';
-        foreach ($encapsList as $element) {
-            if (is_string($element)) {
-                $return .= addcslashes($element, "\n\r\t\f\v$" . $quote . "\\");
-            } else {
-                $return .= '{' . $this->p($element) . '}';
-            }
-        }
-
-        return $return;
-    }
-
-    public function pVarOrNewExpr(PHPParser_Node $node) {
-        if ($node instanceof PHPParser_Node_Expr_New) {
-            return '(' . $this->p($node) . ')';
-        } else {
-            return $this->p($node);
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Zend.php b/vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Zend.php
deleted file mode 100644
index f9fd0c4..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/PrettyPrinter/Zend.php
+++ /dev/null
@@ -1,10 +0,0 @@
- array( 1,  1),
-        'Expr_PreInc'           => array( 1,  1),
-        'Expr_PreDec'           => array( 1,  1),
-        'Expr_PostInc'          => array( 1, -1),
-        'Expr_PostDec'          => array( 1, -1),
-        'Expr_UnaryPlus'        => array( 1,  1),
-        'Expr_UnaryMinus'       => array( 1,  1),
-        'Expr_Cast_Int'         => array( 1,  1),
-        'Expr_Cast_Double'      => array( 1,  1),
-        'Expr_Cast_String'      => array( 1,  1),
-        'Expr_Cast_Array'       => array( 1,  1),
-        'Expr_Cast_Object'      => array( 1,  1),
-        'Expr_Cast_Bool'        => array( 1,  1),
-        'Expr_Cast_Unset'       => array( 1,  1),
-        'Expr_ErrorSuppress'    => array( 1,  1),
-        'Expr_Instanceof'       => array( 2,  0),
-        'Expr_BooleanNot'       => array( 3,  1),
-        'Expr_Mul'              => array( 4, -1),
-        'Expr_Div'              => array( 4, -1),
-        'Expr_Mod'              => array( 4, -1),
-        'Expr_Plus'             => array( 5, -1),
-        'Expr_Minus'            => array( 5, -1),
-        'Expr_Concat'           => array( 5, -1),
-        'Expr_ShiftLeft'        => array( 6, -1),
-        'Expr_ShiftRight'       => array( 6, -1),
-        'Expr_Smaller'          => array( 7,  0),
-        'Expr_SmallerOrEqual'   => array( 7,  0),
-        'Expr_Greater'          => array( 7,  0),
-        'Expr_GreaterOrEqual'   => array( 7,  0),
-        'Expr_Equal'            => array( 8,  0),
-        'Expr_NotEqual'         => array( 8,  0),
-        'Expr_Identical'        => array( 8,  0),
-        'Expr_NotIdentical'     => array( 8,  0),
-        'Expr_BitwiseAnd'       => array( 9, -1),
-        'Expr_BitwiseXor'       => array(10, -1),
-        'Expr_BitwiseOr'        => array(11, -1),
-        'Expr_BooleanAnd'       => array(12, -1),
-        'Expr_BooleanOr'        => array(13, -1),
-        'Expr_Ternary'          => array(14, -1),
-        // parser uses %left for assignments, but they really behave as %right
-        'Expr_Assign'           => array(15,  1),
-        'Expr_AssignRef'        => array(15,  1),
-        'Expr_AssignPlus'       => array(15,  1),
-        'Expr_AssignMinus'      => array(15,  1),
-        'Expr_AssignMul'        => array(15,  1),
-        'Expr_AssignDiv'        => array(15,  1),
-        'Expr_AssignConcat'     => array(15,  1),
-        'Expr_AssignMod'        => array(15,  1),
-        'Expr_AssignBitwiseAnd' => array(15,  1),
-        'Expr_AssignBitwiseOr'  => array(15,  1),
-        'Expr_AssignBitwiseXor' => array(15,  1),
-        'Expr_AssignShiftLeft'  => array(15,  1),
-        'Expr_AssignShiftRight' => array(15,  1),
-        'Expr_LogicalAnd'       => array(16, -1),
-        'Expr_LogicalXor'       => array(17, -1),
-        'Expr_LogicalOr'        => array(18, -1),
-        'Expr_Include'          => array(19, -1),
-    );
-
-    protected $noIndentToken;
-    protected $canUseSemicolonNamespaces;
-
-    public function __construct() {
-        $this->noIndentToken = '_NO_INDENT_' . mt_rand();
-    }
-
-    /**
-     * Pretty prints an array of statements.
-     *
-     * @param PHPParser_Node[] $stmts Array of statements
-     *
-     * @return string Pretty printed statements
-     */
-    public function prettyPrint(array $stmts) {
-        $this->preprocessNodes($stmts);
-
-        return str_replace("\n" . $this->noIndentToken, "\n", $this->pStmts($stmts, false));
-    }
-
-    /**
-     * Pretty prints an expression.
-     *
-     * @param PHPParser_Node_Expr $node Expression node
-     *
-     * @return string Pretty printed node
-     */
-    public function prettyPrintExpr(PHPParser_Node_Expr $node) {
-        return str_replace("\n" . $this->noIndentToken, "\n", $this->p($node));
-    }
-
-    /**
-     * Pretty prints a file of statements (includes the opening prettyPrint($stmts));
-
-        $p = preg_replace('/^\?>\n?/', '', $p, -1, $count);
-        $p = preg_replace('/<\?php$/', '', $p);
-
-        if (!$count) {
-            $p = "canUseSemicolonNamespaces = true;
-        foreach ($nodes as $node) {
-            if ($node instanceof PHPParser_Node_Stmt_Namespace && null === $node->name) {
-                $this->canUseSemicolonNamespaces = false;
-            }
-        }
-    }
-
-    /**
-     * Pretty prints an array of nodes (statements) and indents them optionally.
-     *
-     * @param PHPParser_Node[] $nodes  Array of nodes
-     * @param bool             $indent Whether to indent the printed nodes
-     *
-     * @return string Pretty printed statements
-     */
-    protected function pStmts(array $nodes, $indent = true) {
-        $pNodes = array();
-        foreach ($nodes as $node) {
-            $pNodes[] = $this->pComments($node->getAttribute('comments', array()))
-                      . $this->p($node)
-                      . ($node instanceof PHPParser_Node_Expr ? ';' : '');
-        }
-
-        if ($indent) {
-            return '    ' . preg_replace(
-                '~\n(?!$|' . $this->noIndentToken . ')~',
-                "\n" . '    ',
-                implode("\n", $pNodes)
-            );
-        } else {
-            return implode("\n", $pNodes);
-        }
-    }
-
-    /**
-     * Pretty prints a node.
-     *
-     * @param PHPParser_Node $node Node to be pretty printed
-     *
-     * @return string Pretty printed node
-     */
-    protected function p(PHPParser_Node $node) {
-        return $this->{'p' . $node->getType()}($node);
-    }
-
-    protected function pInfixOp($type, PHPParser_Node $leftNode, $operatorString, PHPParser_Node $rightNode) {
-        list($precedence, $associativity) = $this->precedenceMap[$type];
-
-        return $this->pPrec($leftNode, $precedence, $associativity, -1)
-             . $operatorString
-             . $this->pPrec($rightNode, $precedence, $associativity, 1);
-    }
-
-    protected function pPrefixOp($type, $operatorString, PHPParser_Node $node) {
-        list($precedence, $associativity) = $this->precedenceMap[$type];
-        return $operatorString . $this->pPrec($node, $precedence, $associativity, 1);
-    }
-
-    protected function pPostfixOp($type, PHPParser_Node $node, $operatorString) {
-        list($precedence, $associativity) = $this->precedenceMap[$type];
-        return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString;
-    }
-
-    /**
-     * Prints an expression node with the least amount of parentheses necessary to preserve the meaning.
-     *
-     * @param PHPParser_Node $node                Node to pretty print
-     * @param int            $parentPrecedence    Precedence of the parent operator
-     * @param int            $parentAssociativity Associativity of parent operator
-     *                                            (-1 is left, 0 is nonassoc, 1 is right)
-     * @param int            $childPosition       Position of the node relative to the operator
-     *                                            (-1 is left, 1 is right)
-     *
-     * @return string The pretty printed node
-     */
-    protected function pPrec(PHPParser_Node $node, $parentPrecedence, $parentAssociativity, $childPosition) {
-        $type = $node->getType();
-        if (isset($this->precedenceMap[$type])) {
-            $childPrecedence = $this->precedenceMap[$type][0];
-            if ($childPrecedence > $parentPrecedence
-                || ($parentPrecedence == $childPrecedence && $parentAssociativity != $childPosition)
-            ) {
-                return '(' . $this->{'p' . $type}($node) . ')';
-            }
-        }
-
-        return $this->{'p' . $type}($node);
-    }
-
-    /**
-     * Pretty prints an array of nodes and implodes the printed values.
-     *
-     * @param PHPParser_Node[] $nodes Array of Nodes to be printed
-     * @param string           $glue  Character to implode with
-     *
-     * @return string Imploded pretty printed nodes
-     */
-    protected function pImplode(array $nodes, $glue = '') {
-        $pNodes = array();
-        foreach ($nodes as $node) {
-            $pNodes[] = $this->p($node);
-        }
-
-        return implode($glue, $pNodes);
-    }
-
-    /**
-     * Pretty prints an array of nodes and implodes the printed values with commas.
-     *
-     * @param PHPParser_Node[] $nodes Array of Nodes to be printed
-     *
-     * @return string Comma separated pretty printed nodes
-     */
-    protected function pCommaSeparated(array $nodes) {
-        return $this->pImplode($nodes, ', ');
-    }
-
-    /**
-     * Signals the pretty printer that a string shall not be indented.
-     *
-     * @param string $string Not to be indented string
-     *
-     * @return mixed String marked with $this->noIndentToken's.
-     */
-    protected function pNoIndent($string) {
-        return str_replace("\n", "\n" . $this->noIndentToken, $string);
-    }
-
-    protected function pComments(array $comments) {
-        $result = '';
-
-        foreach ($comments as $comment) {
-            $result .= $comment->getReformattedText() . "\n";
-        }
-
-        return $result;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Serializer.php b/vendor/nikic/php-parser/lib/PHPParser/Serializer.php
deleted file mode 100644
index e63decc..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Serializer.php
+++ /dev/null
@@ -1,13 +0,0 @@
-writer = new XMLWriter;
-        $this->writer->openMemory();
-        $this->writer->setIndent(true);
-    }
-
-    public function serialize(array $nodes) {
-        $this->writer->flush();
-        $this->writer->startDocument('1.0', 'UTF-8');
-
-        $this->writer->startElement('AST');
-        $this->writer->writeAttribute('xmlns:node',      'http://nikic.github.com/PHPParser/XML/node');
-        $this->writer->writeAttribute('xmlns:subNode',   'http://nikic.github.com/PHPParser/XML/subNode');
-        $this->writer->writeAttribute('xmlns:attribute', 'http://nikic.github.com/PHPParser/XML/attribute');
-        $this->writer->writeAttribute('xmlns:scalar',    'http://nikic.github.com/PHPParser/XML/scalar');
-
-        $this->_serialize($nodes);
-
-        $this->writer->endElement();
-
-        return $this->writer->outputMemory();
-    }
-
-    protected function _serialize($node) {
-        if ($node instanceof PHPParser_Node) {
-            $this->writer->startElement('node:' . $node->getType());
-
-            foreach ($node->getAttributes() as $name => $value) {
-                $this->writer->startElement('attribute:' . $name);
-                $this->_serialize($value);
-                $this->writer->endElement();
-            }
-
-            foreach ($node as $name => $subNode) {
-                $this->writer->startElement('subNode:' . $name);
-                $this->_serialize($subNode);
-                $this->writer->endElement();
-            }
-
-            $this->writer->endElement();
-        } elseif ($node instanceof PHPParser_Comment) {
-            $this->writer->startElement('comment');
-            $this->writer->writeAttribute('isDocComment', $node instanceof PHPParser_Comment_Doc ? 'true' : 'false');
-            $this->writer->writeAttribute('line', $node->getLine());
-            $this->writer->text($node->getText());
-            $this->writer->endElement();
-        } elseif (is_array($node)) {
-            $this->writer->startElement('scalar:array');
-            foreach ($node as $subNode) {
-                $this->_serialize($subNode);
-            }
-            $this->writer->endElement();
-        } elseif (is_string($node)) {
-            $this->writer->writeElement('scalar:string', $node);
-        } elseif (is_int($node)) {
-            $this->writer->writeElement('scalar:int', $node);
-        } elseif (is_float($node)) {
-            $this->writer->writeElement('scalar:float', $node);
-        } elseif (true === $node) {
-            $this->writer->writeElement('scalar:true');
-        } elseif (false === $node) {
-            $this->writer->writeElement('scalar:false');
-        } elseif (null === $node) {
-            $this->writer->writeElement('scalar:null');
-        } else {
-            throw new InvalidArgumentException('Unexpected node type');
-        }
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Template.php b/vendor/nikic/php-parser/lib/PHPParser/Template.php
deleted file mode 100644
index 506b0d5..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Template.php
+++ /dev/null
@@ -1,72 +0,0 @@
-parser   = $parser;
-        $this->template = $template;
-    }
-
-    /**
-     * Get the statements of the template with the passed in placeholders
-     * replaced.
-     *
-     * @param array $placeholders Placeholders
-     *
-     * @return PHPParser_Node[] Statements
-     */
-    public function getStmts(array $placeholders) {
-        return $this->parser->parse(
-            $this->getTemplateWithPlaceholdersReplaced($placeholders)
-        );
-    }
-
-    protected function getTemplateWithPlaceholdersReplaced(array $placeholders) {
-        if (empty($placeholders)) {
-            return $this->template;
-        }
-
-        return strtr($this->template, $this->preparePlaceholders($placeholders));
-    }
-
-    /*
-     * Prepare the placeholders for replacement. This means that
-     * a) all placeholders will be surrounded with __.
-     * b) ucfirst/lcfirst variations of the placeholders are generated.
-     *
-     * E.g. for an input array of ['foo' => 'bar'] the result will be
-     * ['__foo__' => 'bar', '__Foo__' => 'Bar'].
-     */
-    protected function preparePlaceholders(array $placeholders) {
-        $preparedPlaceholders = array();
-
-        foreach ($placeholders as $name => $value) {
-            $preparedPlaceholders['__' . $name . '__'] = $value;
-
-            if (ctype_lower($name[0])) {
-                $ucfirstName = ucfirst($name);
-                if (!isset($placeholders[$ucfirstName])) {
-                    $preparedPlaceholders['__' . $ucfirstName . '__'] = ucfirst($value);
-                }
-            }
-
-            if (ctype_upper($name[0])) {
-                $lcfirstName = lcfirst($name);
-                if (!isset($placeholders[$lcfirstName])) {
-                    $preparedPlaceholders['__' . $lcfirstName . '__'] = lcfirst($value);
-                }
-            }
-        }
-
-        return $preparedPlaceholders;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/TemplateLoader.php b/vendor/nikic/php-parser/lib/PHPParser/TemplateLoader.php
deleted file mode 100644
index dc9d26d..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/TemplateLoader.php
+++ /dev/null
@@ -1,48 +0,0 @@
-parser  = $parser;
-        $this->baseDir = $baseDir;
-        $this->suffix  = $suffix;
-    }
-
-    /**
-     * Loads the template with the specified name.
-     *
-     * @param string $name The name of template
-     *
-     * @return PHPParser_Template The loaded template
-     */
-    public function load($name) {
-        $file = $this->baseDir . '/' . $name . $this->suffix;
-
-        if (!is_file($file)) {
-            throw new InvalidArgumentException(
-                sprintf('The file "%s" does not exist', $file)
-            );
-        }
-
-        return new PHPParser_Template($this->parser, file_get_contents($file));
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PHPParser/Unserializer.php b/vendor/nikic/php-parser/lib/PHPParser/Unserializer.php
deleted file mode 100644
index 34808c8..0000000
--- a/vendor/nikic/php-parser/lib/PHPParser/Unserializer.php
+++ /dev/null
@@ -1,13 +0,0 @@
-reader = new XMLReader;
-    }
-
-    public function unserialize($string) {
-        $this->reader->XML($string);
-
-        $this->reader->read();
-        if ('AST' !== $this->reader->name) {
-            throw new DomainException('AST root element not found');
-        }
-
-        return $this->read($this->reader->depth);
-    }
-
-    protected function read($depthLimit, $throw = true, &$nodeFound = null) {
-        $nodeFound = true;
-        while ($this->reader->read() && $depthLimit < $this->reader->depth) {
-            if (XMLReader::ELEMENT !== $this->reader->nodeType) {
-                continue;
-            }
-
-            if ('node' === $this->reader->prefix) {
-                return $this->readNode();
-            } elseif ('scalar' === $this->reader->prefix) {
-                return $this->readScalar();
-            } elseif ('comment' === $this->reader->name) {
-                return $this->readComment();
-            } else {
-                throw new DomainException(sprintf('Unexpected node of type "%s"', $this->reader->name));
-            }
-        }
-
-        $nodeFound = false;
-        if ($throw) {
-            throw new DomainException('Expected node or scalar');
-        }
-    }
-
-    protected function readNode()
-    {
-        $className = 'PHPParser_Node_' . $this->reader->localName;
-
-        // create the node without calling it's constructor
-        $node = unserialize(
-            sprintf(
-                "O:%d:\"%s\":2:{s:11:\"\0*\0subNodes\";a:0:{}s:13:\"\0*\0attributes\";a:0:{}}",
-                strlen($className), $className
-            )
-        );
-
-        $depthLimit = $this->reader->depth;
-        while ($this->reader->read() && $depthLimit < $this->reader->depth) {
-            if (XMLReader::ELEMENT !== $this->reader->nodeType) {
-                continue;
-            }
-
-            $type = $this->reader->prefix;
-            if ('subNode' !== $type && 'attribute' !== $type) {
-                throw new DomainException(
-                    sprintf('Expected sub node or attribute, got node of type "%s"', $this->reader->name)
-                );
-            }
-
-            $name = $this->reader->localName;
-            $value = $this->read($this->reader->depth);
-
-            if ('subNode' === $type) {
-                $node->$name = $value;
-            } else {
-                $node->setAttribute($name, $value);
-            }
-        }
-
-        return $node;
-    }
-
-    protected function readScalar() {
-        switch ($name = $this->reader->localName) {
-            case 'array':
-                $depth = $this->reader->depth;
-                $array = array();
-                while (true) {
-                    $node = $this->read($depth, false, $nodeFound);
-                    if (!$nodeFound) {
-                        break;
-                    }
-                    $array[] = $node;
-                }
-                return $array;
-            case 'string':
-                return $this->reader->readString();
-            case 'int':
-                $text = $this->reader->readString();
-                if (false === $int = filter_var($text, FILTER_VALIDATE_INT)) {
-                    throw new DomainException(sprintf('"%s" is not a valid integer', $text));
-                }
-                return $int;
-            case 'float':
-                $text = $this->reader->readString();
-                if (false === $float = filter_var($text, FILTER_VALIDATE_FLOAT)) {
-                    throw new DomainException(sprintf('"%s" is not a valid float', $text));
-                }
-                return $float;
-            case 'true':
-            case 'false':
-            case 'null':
-                if (!$this->reader->isEmptyElement) {
-                    throw new DomainException(sprintf('"%s" scalar must be empty', $name));
-                }
-                return constant($name);
-            default:
-                throw new DomainException(sprintf('Unknown scalar type "%s"', $name));
-        }
-    }
-
-    protected function readComment() {
-        $className = $this->reader->getAttribute('isDocComment') === 'true'
-            ? 'PHPParser_Comment_Doc'
-            : 'PHPParser_Comment'
-        ;
-        return new $className(
-            $this->reader->readString(),
-            $this->reader->getAttribute('line')
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/lib/bootstrap.php b/vendor/nikic/php-parser/lib/bootstrap.php
deleted file mode 100644
index 5b812b4..0000000
--- a/vendor/nikic/php-parser/lib/bootstrap.php
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-    
-        
-            ./test/
-        
-    
-
-    
-        
-            ./lib/PHPParser/
-        
-    
-
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ClassTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ClassTest.php
deleted file mode 100644
index 6591ca7..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ClassTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-createClassBuilder('SomeLogger')
-            ->extend('BaseLogger')
-            ->implement('Namespaced\Logger', new PHPParser_Node_Name('SomeInterface'))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Class('SomeLogger', array(
-                'extends' => new PHPParser_Node_Name('BaseLogger'),
-                'implements' => array(
-                    new PHPParser_Node_Name('Namespaced\Logger'),
-                    new PHPParser_Node_Name('SomeInterface')
-                ),
-            )),
-            $node
-        );
-    }
-
-    public function testAbstract() {
-        $node = $this->createClassBuilder('Test')
-            ->makeAbstract()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Class('Test', array(
-                'type' => PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT
-            )),
-            $node
-        );
-    }
-
-    public function testFinal() {
-        $node = $this->createClassBuilder('Test')
-            ->makeFinal()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Class('Test', array(
-                'type' => PHPParser_Node_Stmt_Class::MODIFIER_FINAL
-            )),
-            $node
-        );
-    }
-
-    public function testStatementOrder() {
-        $method = new PHPParser_Node_Stmt_ClassMethod('testMethod');
-        $property = new PHPParser_Node_Stmt_Property(
-            PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC,
-            array(new PHPParser_Node_Stmt_PropertyProperty('testProperty'))
-        );
-        $const = new PHPParser_Node_Stmt_ClassConst(array(
-            new PHPParser_Node_Const('TEST_CONST', new PHPParser_Node_Scalar_String('ABC'))
-        ));
-        $use = new PHPParser_Node_Stmt_TraitUse(array(new PHPParser_Node_Name('SomeTrait')));
-
-        $node = $this->createClassBuilder('Test')
-            ->addStmt($method)
-            ->addStmt($property)
-            ->addStmts(array($const, $use))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Class('Test', array(
-                'stmts' => array($use, $const, $property, $method)
-            )),
-            $node
-        );
-    }
-
-    /**
-     * @expectedException LogicException
-     * @expectedExceptionMessage Unexpected node of type "Stmt_Echo"
-     */
-    public function testInvalidStmtError() {
-        $this->createClassBuilder('Test')
-            ->addStmt(new PHPParser_Node_Stmt_Echo(array()))
-        ;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/FunctionTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/FunctionTest.php
deleted file mode 100644
index 2992f82..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/FunctionTest.php
+++ /dev/null
@@ -1,70 +0,0 @@
-createFunctionBuilder('test')
-            ->makeReturnByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Function('test', array(
-                'byRef' => true
-            )),
-            $node
-        );
-    }
-
-    public function testParams() {
-        $param1 = new PHPParser_Node_Param('test1');
-        $param2 = new PHPParser_Node_Param('test2');
-        $param3 = new PHPParser_Node_Param('test3');
-
-        $node = $this->createFunctionBuilder('test')
-            ->addParam($param1)
-            ->addParams(array($param2, $param3))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Function('test', array(
-                'params' => array($param1, $param2, $param3)
-            )),
-            $node
-        );
-    }
-
-    public function testStmts() {
-        $stmt1 = new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test1'));
-        $stmt2 = new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test2'));
-        $stmt3 = new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test3'));
-
-        $node = $this->createFunctionBuilder('test')
-            ->addStmt($stmt1)
-            ->addStmts(array($stmt2, $stmt3))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Function('test', array(
-                'stmts' => array($stmt1, $stmt2, $stmt3)
-            )),
-            $node
-        );
-    }
-
-    /**
-     * @expectedException LogicException
-     * @expectedExceptionMessage Expected parameter node, got "Name"
-     */
-    public function testInvalidParamError() {
-        $this->createFunctionBuilder('test')
-            ->addParam(new PHPParser_Node_Name('foo'))
-        ;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/InterfaceTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/InterfaceTest.php
deleted file mode 100644
index fb36338..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/InterfaceTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-builder = new PHPParser_Builder_Interface('Contract');
-    }
-
-    private function dump($node) {
-        $pp = new PHPParser_PrettyPrinter_Default();
-        return $pp->prettyPrint(array($node));
-    }
-
-    public function testEmpty() {
-        $contract = $this->builder->getNode();
-        $this->assertInstanceOf('PHPParser_Node_Stmt_Interface', $contract);
-        $this->assertEquals('Contract', $contract->name);
-    }
-
-    public function testExtending() {
-        $contract = $this->builder->extend('Space\Root1', 'Root2')->getNode();
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Interface('Contract', array(
-                'extends' => array(
-                    new PHPParser_Node_Name('Space\Root1'),
-                    new PHPParser_Node_Name('Root2')
-                ),
-            )), $contract
-        );
-    }
-
-    public function testAddMethod() {
-        $method = new PHPParser_Node_Stmt_ClassMethod('doSomething');
-        $contract = $this->builder->addStmt($method)->getNode();
-        $this->assertEquals(array($method), $contract->stmts);
-    }
-
-    public function testAddConst() {
-        $const = new PHPParser_Node_Stmt_ClassConst(array(
-            new PHPParser_Node_Const('SPEED_OF_LIGHT', new PHPParser_Node_Scalar_DNumber(299792458))
-        ));
-        $contract = $this->builder->addStmt($const)->getNode();
-        $this->assertEquals(299792458, $contract->stmts[0]->consts[0]->value->value);
-    }
-
-    public function testOrder() {
-        $const = new PHPParser_Node_Stmt_ClassConst(array(
-            new PHPParser_Node_Const('SPEED_OF_LIGHT', new PHPParser_Node_Scalar_DNumber(299792458))
-        ));
-        $method = new PHPParser_Node_Stmt_ClassMethod('doSomething');
-        $contract = $this->builder
-            ->addStmt($method)
-            ->addStmt($const)
-            ->getNode()
-        ;
-
-        $this->assertInstanceOf('PHPParser_Node_Stmt_ClassConst', $contract->stmts[0]);
-        $this->assertInstanceOf('PHPParser_Node_Stmt_ClassMethod', $contract->stmts[1]);
-    }
-
-    /**
-     * @expectedException LogicException
-     * @expectedExceptionMessage Unexpected node of type "Stmt_PropertyProperty"
-     */
-    public function testInvalidStmtError() {
-        $this->builder->addStmt(new PHPParser_Node_Stmt_PropertyProperty('invalid'));
-    }
-
-    public function testFullFunctional() {
-        $const = new PHPParser_Node_Stmt_ClassConst(array(
-            new PHPParser_Node_Const('SPEED_OF_LIGHT', new PHPParser_Node_Scalar_DNumber(299792458))
-        ));
-        $method = new PHPParser_Node_Stmt_ClassMethod('doSomething');
-        $contract = $this->builder
-            ->addStmt($method)
-            ->addStmt($const)
-            ->getNode()
-        ;
-
-        eval($this->dump($contract));
-
-        $this->assertTrue(interface_exists('Contract', false));
-    }
-}
-
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/MethodTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/MethodTest.php
deleted file mode 100644
index 6f4624a..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/MethodTest.php
+++ /dev/null
@@ -1,137 +0,0 @@
-createMethodBuilder('test')
-            ->makePublic()
-            ->makeAbstract()
-            ->makeStatic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_ClassMethod('test', array(
-                'type' => PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC
-                        | PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT
-                        | PHPParser_Node_Stmt_Class::MODIFIER_STATIC,
-                'stmts' => null,
-            )),
-            $node
-        );
-
-        $node = $this->createMethodBuilder('test')
-            ->makeProtected()
-            ->makeFinal()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_ClassMethod('test', array(
-                'type' => PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED
-                        | PHPParser_Node_Stmt_Class::MODIFIER_FINAL
-            )),
-            $node
-        );
-
-        $node = $this->createMethodBuilder('test')
-            ->makePrivate()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_ClassMethod('test', array(
-                'type' => PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE
-            )),
-            $node
-        );
-    }
-
-    public function testReturnByRef() {
-        $node = $this->createMethodBuilder('test')
-            ->makeReturnByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_ClassMethod('test', array(
-                'byRef' => true
-            )),
-            $node
-        );
-    }
-
-    public function testParams() {
-        $param1 = new PHPParser_Node_Param('test1');
-        $param2 = new PHPParser_Node_Param('test2');
-        $param3 = new PHPParser_Node_Param('test3');
-
-        $node = $this->createMethodBuilder('test')
-            ->addParam($param1)
-            ->addParams(array($param2, $param3))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_ClassMethod('test', array(
-                'params' => array($param1, $param2, $param3)
-            )),
-            $node
-        );
-    }
-
-    public function testStmts() {
-        $stmt1 = new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test1'));
-        $stmt2 = new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test2'));
-        $stmt3 = new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test3'));
-
-        $node = $this->createMethodBuilder('test')
-            ->addStmt($stmt1)
-            ->addStmts(array($stmt2, $stmt3))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_ClassMethod('test', array(
-                'stmts' => array($stmt1, $stmt2, $stmt3)
-            )),
-            $node
-        );
-    }
-
-    /**
-     * @expectedException LogicException
-     * @expectedExceptionMessage Cannot add statements to an abstract method
-     */
-    public function testAddStmtToAbstractMethodError() {
-        $this->createMethodBuilder('test')
-            ->makeAbstract()
-            ->addStmt(new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test')))
-        ;
-    }
-
-    /**
-     * @expectedException LogicException
-     * @expectedExceptionMessage Cannot make method with statements abstract
-     */
-    public function testMakeMethodWithStmtsAbstractError() {
-        $this->createMethodBuilder('test')
-            ->addStmt(new PHPParser_Node_Expr_Print(new PHPParser_Node_Scalar_String('test')))
-            ->makeAbstract()
-        ;
-    }
-
-    /**
-     * @expectedException LogicException
-     * @expectedExceptionMessage Expected parameter node, got "Name"
-     */
-    public function testInvalidParamError() {
-        $this->createMethodBuilder('test')
-            ->addParam(new PHPParser_Node_Name('foo'))
-        ;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ParamTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ParamTest.php
deleted file mode 100644
index 4010ea8..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/ParamTest.php
+++ /dev/null
@@ -1,118 +0,0 @@
-createParamBuilder('test')
-            ->setDefault($value)
-            ->getNode()
-        ;
-
-        $this->assertEquals($expectedValueNode, $node->default);
-    }
-
-    public function provideTestDefaultValues() {
-        return array(
-            array(
-                null,
-                new PHPParser_Node_Expr_ConstFetch(new PHPParser_Node_Name('null'))
-            ),
-            array(
-                true,
-                new PHPParser_Node_Expr_ConstFetch(new PHPParser_Node_Name('true'))
-            ),
-            array(
-                false,
-                new PHPParser_Node_Expr_ConstFetch(new PHPParser_Node_Name('false'))
-            ),
-            array(
-                31415,
-                new PHPParser_Node_Scalar_LNumber(31415)
-            ),
-            array(
-                3.1415,
-                new PHPParser_Node_Scalar_DNumber(3.1415)
-            ),
-            array(
-                'Hallo World',
-                new PHPParser_Node_Scalar_String('Hallo World')
-            ),
-            array(
-                array(1, 2, 3),
-                new PHPParser_Node_Expr_Array(array(
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_LNumber(1)),
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_LNumber(2)),
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_LNumber(3)),
-                ))
-            ),
-            array(
-                array('foo' => 'bar', 'bar' => 'foo'),
-                new PHPParser_Node_Expr_Array(array(
-                    new PHPParser_Node_Expr_ArrayItem(
-                        new PHPParser_Node_Scalar_String('bar'),
-                        new PHPParser_Node_Scalar_String('foo')
-                    ),
-                    new PHPParser_Node_Expr_ArrayItem(
-                        new PHPParser_Node_Scalar_String('foo'),
-                        new PHPParser_Node_Scalar_String('bar')
-                    ),
-                ))
-            ),
-            array(
-                new PHPParser_Node_Scalar_DirConst,
-                new PHPParser_Node_Scalar_DirConst
-            )
-        );
-    }
-
-    public function testTypeHints() {
-        $node = $this->createParamBuilder('test')
-            ->setTypeHint('array')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Param('test', null, 'array'),
-            $node
-        );
-
-        $node = $this->createParamBuilder('test')
-            ->setTypeHint('callable')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Param('test', null, 'callable'),
-            $node
-        );
-
-        $node = $this->createParamBuilder('test')
-            ->setTypeHint('Some\Class')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Param('test', null, new PHPParser_Node_Name('Some\Class')),
-            $node
-        );
-    }
-
-    public function testByRef() {
-        $node = $this->createParamBuilder('test')
-            ->makeByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Param('test', null, null, true),
-            $node
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/PropertyTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/PropertyTest.php
deleted file mode 100644
index fa880b2..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Builder/PropertyTest.php
+++ /dev/null
@@ -1,123 +0,0 @@
-createPropertyBuilder('test')
-            ->makePrivate()
-            ->makeStatic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Property(
-                PHPParser_Node_Stmt_Class::MODIFIER_PRIVATE
-              | PHPParser_Node_Stmt_Class::MODIFIER_STATIC,
-                array(
-                    new PHPParser_Node_Stmt_PropertyProperty('test')
-                )
-            ),
-            $node
-        );
-
-        $node = $this->createPropertyBuilder('test')
-            ->makeProtected()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Property(
-                PHPParser_Node_Stmt_Class::MODIFIER_PROTECTED,
-                array(
-                    new PHPParser_Node_Stmt_PropertyProperty('test')
-                )
-            ),
-            $node
-        );
-
-        $node = $this->createPropertyBuilder('test')
-            ->makePublic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new PHPParser_Node_Stmt_Property(
-                PHPParser_Node_Stmt_Class::MODIFIER_PUBLIC,
-                array(
-                    new PHPParser_Node_Stmt_PropertyProperty('test')
-                )
-            ),
-            $node
-        );
-    }
-
-    /**
-     * @dataProvider provideTestDefaultValues
-     */
-    public function testDefaultValues($value, $expectedValueNode) {
-        $node = $this->createPropertyBuilder('test')
-            ->setDefault($value)
-            ->getNode()
-        ;
-
-        $this->assertEquals($expectedValueNode, $node->props[0]->default);
-    }
-
-    public function provideTestDefaultValues() {
-        return array(
-            array(
-                null,
-                new PHPParser_Node_Expr_ConstFetch(new PHPParser_Node_Name('null'))
-            ),
-            array(
-                true,
-                new PHPParser_Node_Expr_ConstFetch(new PHPParser_Node_Name('true'))
-            ),
-            array(
-                false,
-                new PHPParser_Node_Expr_ConstFetch(new PHPParser_Node_Name('false'))
-            ),
-            array(
-                31415,
-                new PHPParser_Node_Scalar_LNumber(31415)
-            ),
-            array(
-                3.1415,
-                new PHPParser_Node_Scalar_DNumber(3.1415)
-            ),
-            array(
-                'Hallo World',
-                new PHPParser_Node_Scalar_String('Hallo World')
-            ),
-            array(
-                array(1, 2, 3),
-                new PHPParser_Node_Expr_Array(array(
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_LNumber(1)),
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_LNumber(2)),
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_LNumber(3)),
-                ))
-            ),
-            array(
-                array('foo' => 'bar', 'bar' => 'foo'),
-                new PHPParser_Node_Expr_Array(array(
-                    new PHPParser_Node_Expr_ArrayItem(
-                        new PHPParser_Node_Scalar_String('bar'),
-                        new PHPParser_Node_Scalar_String('foo')
-                    ),
-                    new PHPParser_Node_Expr_ArrayItem(
-                        new PHPParser_Node_Scalar_String('foo'),
-                        new PHPParser_Node_Scalar_String('bar')
-                    ),
-                ))
-            ),
-            array(
-                new PHPParser_Node_Scalar_DirConst,
-                new PHPParser_Node_Scalar_DirConst
-            )
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/BuilderFactoryTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/BuilderFactoryTest.php
deleted file mode 100644
index 0eaf8a9..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/BuilderFactoryTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-assertInstanceOf($className, $factory->$methodName('test'));
-    }
-
-    public function provideTestFactory() {
-        return array(
-            array('class',     'PHPParser_Builder_Class'),
-            array('interface', 'PHPParser_Builder_Interface'),
-            array('method',    'PHPParser_Builder_Method'),
-            array('function',  'PHPParser_Builder_Function'),
-            array('property',  'PHPParser_Builder_Property'),
-            array('param',     'PHPParser_Builder_Param'),
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/CodeTestAbstract.php b/vendor/nikic/php-parser/test/PHPParser/Tests/CodeTestAbstract.php
deleted file mode 100644
index d315385..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/CodeTestAbstract.php
+++ /dev/null
@@ -1,51 +0,0 @@
-assertEquals('/* Some comment */', $comment->getText());
-        $this->assertEquals('/* Some comment */', (string) $comment);
-        $this->assertEquals(1, $comment->getLine());
-
-        $comment->setText('/* Some other comment */');
-        $comment->setLine(10);
-
-        $this->assertEquals('/* Some other comment */', $comment->getText());
-        $this->assertEquals('/* Some other comment */', (string) $comment);
-        $this->assertEquals(10, $comment->getLine());
-    }
-
-    /**
-     * @dataProvider provideTestReformatting
-     */
-    public function testReformatting($commentText, $reformattedText) {
-        $comment = new PHPParser_Comment($commentText);
-        $this->assertEquals($reformattedText, $comment->getReformattedText());
-    }
-
-    public function provideTestReformatting() {
-        return array(
-            array('// Some text' . "\n", '// Some text'),
-            array('/* Some text */', '/* Some text */'),
-            array(
-                '/**
-     * Some text.
-     * Some more text.
-     */',
-                '/**
- * Some text.
- * Some more text.
- */'
-            ),
-            array(
-                '/*
-        Some text.
-        Some more text.
-    */',
-                '/*
-    Some text.
-    Some more text.
-*/'
-            ),
-            array(
-                '/* Some text.
-       More text.
-       Even more text. */',
-                '/* Some text.
-   More text.
-   Even more text. */'
-            ),
-            // invalid comment -> no reformatting
-            array(
-                'hallo
-    world',
-                'hallo
-    world',
-            ),
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/ErrorTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/ErrorTest.php
deleted file mode 100644
index de21cdd..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/ErrorTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-assertEquals('Some error', $error->getRawMessage());
-        $this->assertEquals(10, $error->getRawLine());
-        $this->assertEquals('Some error on line 10', $error->getMessage());
-
-        return $error;
-    }
-
-    /**
-     * @depends testConstruct
-     */
-    public function testSetMessageAndLine(PHPParser_Error $error) {
-        $error->setRawMessage('Some other error');
-        $error->setRawLine(15);
-
-        $this->assertEquals('Some other error', $error->getRawMessage());
-        $this->assertEquals(15, $error->getRawLine());
-        $this->assertEquals('Some other error on line 15', $error->getMessage());
-    }
-
-    public function testUnknownLine() {
-        $error = new PHPParser_Error('Some error');
-
-        $this->assertEquals(-1, $error->getRawLine());
-        $this->assertEquals('Some error on unknown line', $error->getMessage());
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Lexer/EmulativeTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Lexer/EmulativeTest.php
deleted file mode 100644
index 80468bc..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Lexer/EmulativeTest.php
+++ /dev/null
@@ -1,103 +0,0 @@
-lexer = new PHPParser_Lexer_Emulative;
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testReplaceKeywords($keyword, $expectedToken) {
-        $this->lexer->startLexing('assertEquals($expectedToken, $this->lexer->getNextToken());
-        $this->assertEquals(0, $this->lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
-        $this->lexer->startLexing('' . $keyword);
-
-        $this->assertEquals(PHPParser_Parser::T_OBJECT_OPERATOR, $this->lexer->getNextToken());
-        $this->assertEquals(PHPParser_Parser::T_STRING, $this->lexer->getNextToken());
-        $this->assertEquals(0, $this->lexer->getNextToken());
-    }
-
-    public function provideTestReplaceKeywords() {
-        return array(
-            // PHP 5.5
-            array('finally',       PHPParser_Parser::T_FINALLY),
-            array('yield',         PHPParser_Parser::T_YIELD),
-
-            // PHP 5.4
-            array('callable',      PHPParser_Parser::T_CALLABLE),
-            array('insteadof',     PHPParser_Parser::T_INSTEADOF),
-            array('trait',         PHPParser_Parser::T_TRAIT),
-            array('__TRAIT__',     PHPParser_Parser::T_TRAIT_C),
-
-            // PHP 5.3
-            array('__DIR__',       PHPParser_Parser::T_DIR),
-            array('goto',          PHPParser_Parser::T_GOTO),
-            array('namespace',     PHPParser_Parser::T_NAMESPACE),
-            array('__NAMESPACE__', PHPParser_Parser::T_NS_C),
-        );
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testLexNewFeatures($code, array $expectedTokens) {
-        $this->lexer->startLexing('assertEquals($expectedTokenType, $this->lexer->getNextToken($text));
-            $this->assertEquals($expectedTokenText, $text);
-        }
-        $this->assertEquals(0, $this->lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testLeaveStuffAloneInStrings($code) {
-        $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
-        $this->lexer->startLexing('assertEquals(PHPParser_Parser::T_CONSTANT_ENCAPSED_STRING, $this->lexer->getNextToken($text));
-        $this->assertEquals($stringifiedToken, $text);
-        $this->assertEquals(0, $this->lexer->getNextToken());
-    }
-
-    public function provideTestLexNewFeatures() {
-        return array(
-            array('0b1010110', array(
-                array(PHPParser_Parser::T_LNUMBER, '0b1010110'),
-            )),
-            array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
-                array(PHPParser_Parser::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
-            )),
-            array('\\', array(
-                array(PHPParser_Parser::T_NS_SEPARATOR, '\\'),
-            )),
-            array("<<<'NOWDOC'\nNOWDOC;\n", array(
-                array(PHPParser_Parser::T_START_HEREDOC, "<<<'NOWDOC'\n"),
-                array(PHPParser_Parser::T_END_HEREDOC, 'NOWDOC'),
-                array(ord(';'), ';'),
-            )),
-            array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array(
-                array(PHPParser_Parser::T_START_HEREDOC, "<<<'NOWDOC'\n"),
-                array(PHPParser_Parser::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"),
-                array(PHPParser_Parser::T_END_HEREDOC, 'NOWDOC'),
-                array(ord(';'), ';'),
-            )),
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/LexerTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/LexerTest.php
deleted file mode 100644
index 9a983eb..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/LexerTest.php
+++ /dev/null
@@ -1,145 +0,0 @@
-lexer = new PHPParser_Lexer;
-    }
-
-    /**
-     * @dataProvider provideTestError
-     */
-    public function testError($code, $message) {
-        try {
-            $this->lexer->startLexing($code);
-        } catch (PHPParser_Error $e) {
-            $this->assertEquals($message, $e->getMessage());
-
-            return;
-        }
-
-        $this->fail('Expected PHPParser_Error');
-    }
-
-    public function provideTestError() {
-        return array(
-            array('lexer->startLexing($code);
-        while ($id = $this->lexer->getNextToken($value, $startAttributes, $endAttributes)) {
-            $token = array_shift($tokens);
-
-            $this->assertEquals($token[0], $id);
-            $this->assertEquals($token[1], $value);
-            $this->assertEquals($token[2], $startAttributes);
-            $this->assertEquals($token[3], $endAttributes);
-        }
-    }
-
-    public function provideTestLex() {
-        return array(
-            // tests conversion of closing PHP tag and drop of whitespace and opening tags
-            array(
-                'plaintext',
-                array(
-                    array(
-                        PHPParser_Parser::T_STRING, 'tokens',
-                        array('startLine' => 1), array('endLine' => 1)
-                    ),
-                    array(
-                        ord(';'), '?>',
-                        array('startLine' => 1), array('endLine' => 1)
-                    ),
-                    array(
-                        PHPParser_Parser::T_INLINE_HTML, 'plaintext',
-                        array('startLine' => 1), array('endLine' => 1)
-                    ),
-                )
-            ),
-            // tests line numbers
-            array(
-                ' 2), array('endLine' => 2)
-                    ),
-                    array(
-                        PHPParser_Parser::T_STRING, 'token',
-                        array('startLine' => 2), array('endLine' => 2)
-                    ),
-                    array(
-                        ord('$'), '$',
-                        array(
-                            'startLine' => 3,
-                            'comments' => array(new PHPParser_Comment_Doc('/** doc' . "\n" . 'comment */', 2))
-                        ),
-                        array('endLine' => 3)
-                    ),
-                )
-            ),
-            // tests comment extraction
-            array(
-                ' 2,
-                            'comments' => array(
-                                new PHPParser_Comment('/* comment */', 1),
-                                new PHPParser_Comment('// comment' . "\n", 1),
-                                new PHPParser_Comment_Doc('/** docComment 1 */', 2),
-                                new PHPParser_Comment_Doc('/** docComment 2 */', 2),
-                            ),
-                        ),
-                        array('endLine' => 2)
-                    ),
-                )
-            ),
-            // tests differing start and end line
-            array(
-                ' 1), array('endLine' => 2)
-                    ),
-                )
-            ),
-        );
-    }
-
-    /**
-     * @dataProvider provideTestHaltCompiler
-     */
-    public function testHandleHaltCompiler($code, $remaining) {
-        $this->lexer->startLexing($code);
-
-        while (PHPParser_Parser::T_HALT_COMPILER !== $this->lexer->getNextToken());
-
-        $this->assertEquals($this->lexer->handleHaltCompiler(), $remaining);
-        $this->assertEquals(0, $this->lexer->getNextToken());
-    }
-
-    public function provideTestHaltCompiler() {
-        return array(
-            array('Remaining Text', 'Remaining Text'),
-            //array('assertEquals(array('foo', 'bar'), $name->parts);
-
-        $name = new PHPParser_Node_Name('foo\bar');
-        $this->assertEquals(array('foo', 'bar'), $name->parts);
-    }
-
-    public function testGet() {
-        $name = new PHPParser_Node_Name('foo');
-        $this->assertEquals('foo', $name->getFirst());
-        $this->assertEquals('foo', $name->getLast());
-
-        $name = new PHPParser_Node_Name('foo\bar');
-        $this->assertEquals('foo', $name->getFirst());
-        $this->assertEquals('bar', $name->getLast());
-    }
-
-    public function testToString() {
-        $name = new PHPParser_Node_Name('foo\bar');
-
-        $this->assertEquals('foo\bar', (string) $name);
-        $this->assertEquals('foo\bar', $name->toString());
-        $this->assertEquals('foo_bar', $name->toString('_'));
-    }
-
-    public function testSet() {
-        $name = new PHPParser_Node_Name('foo');
-
-        $name->set('foo\bar');
-        $this->assertEquals('foo\bar', $name->toString());
-
-        $name->set(array('foo', 'bar'));
-        $this->assertEquals('foo\bar', $name->toString());
-
-        $name->set(new PHPParser_Node_Name('foo\bar'));
-        $this->assertEquals('foo\bar', $name->toString());
-    }
-
-    public function testSetFirst() {
-        $name = new PHPParser_Node_Name('foo');
-
-        $name->setFirst('bar');
-        $this->assertEquals('bar', $name->toString());
-
-        $name->setFirst('A\B');
-        $this->assertEquals('A\B', $name->toString());
-
-        $name->setFirst('C');
-        $this->assertEquals('C\B', $name->toString());
-
-        $name->setFirst('D\E');
-        $this->assertEquals('D\E\B', $name->toString());
-    }
-
-    public function testSetLast() {
-        $name = new PHPParser_Node_Name('foo');
-
-        $name->setLast('bar');
-        $this->assertEquals('bar', $name->toString());
-
-        $name->setLast('A\B');
-        $this->assertEquals('A\B', $name->toString());
-
-        $name->setLast('C');
-        $this->assertEquals('A\C', $name->toString());
-
-        $name->setLast('D\E');
-        $this->assertEquals('A\D\E', $name->toString());
-    }
-
-    public function testAppend() {
-        $name = new PHPParser_Node_Name('foo');
-
-        $name->append('bar');
-        $this->assertEquals('foo\bar', $name->toString());
-
-        $name->append('bar\foo');
-        $this->assertEquals('foo\bar\bar\foo', $name->toString());
-    }
-
-    public function testPrepend() {
-        $name = new PHPParser_Node_Name('foo');
-
-        $name->prepend('bar');
-        $this->assertEquals('bar\foo', $name->toString());
-
-        $name->prepend('foo\bar');
-        $this->assertEquals('foo\bar\bar\foo', $name->toString());
-    }
-
-    public function testIs() {
-        $name = new PHPParser_Node_Name('foo');
-        $this->assertTrue ($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-
-        $name = new PHPParser_Node_Name('foo\bar');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertTrue ($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-
-        $name = new PHPParser_Node_Name_FullyQualified('foo');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertTrue ($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-
-        $name = new PHPParser_Node_Name_Relative('foo');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertTrue ($name->isRelative());
-    }
-
-    /**
-     * @expectedException        InvalidArgumentException
-     * @expectedExceptionMessage When changing a name you need to pass either a string, an array or a Name node
-     */
-    public function testInvalidArg() {
-        $name = new PHPParser_Node_Name('foo');
-        $name->set(new stdClass);
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Scalar/StringTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Scalar/StringTest.php
deleted file mode 100644
index 04dd35b..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Scalar/StringTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-assertEquals(
-            $expected,
-            PHPParser_Node_Scalar_String::parseEscapeSequences($string, $quote)
-        );
-    }
-
-    /**
-     * @dataProvider provideTestParse
-     */
-    public function testCreate($expected, $string) {
-        $this->assertEquals(
-            $expected,
-            PHPParser_Node_Scalar_String::parse($string)
-        );
-    }
-
-    public function provideTestParseEscapeSequences() {
-        return array(
-            array('"',              '\\"',              '"'),
-            array('\\"',            '\\"',              '`'),
-            array('\\"\\`',         '\\"\\`',           null),
-            array("\\\$\n\r\t\f\v", '\\\\\$\n\r\t\f\v', null),
-            array("\x1B",           '\e',               null),
-            array(chr(255),         '\xFF',             null),
-            array(chr(255),         '\377',             null),
-            array(chr(0),           '\400',             null),
-            array("\0",             '\0',               null),
-            array('\xFF',           '\\\\xFF',          null),
-        );
-    }
-
-    public function provideTestParse() {
-        $tests = array(
-            array('A', '\'A\''),
-            array('A', 'b\'A\''),
-            array('A', '"A"'),
-            array('A', 'b"A"'),
-            array('\\', '\'\\\\\''),
-            array('\'', '\'\\\'\''),
-        );
-
-        foreach ($this->provideTestParseEscapeSequences() as $i => $test) {
-            // skip second and third tests, they aren't for double quotes
-            if ($i != 1 && $i != 2) {
-                $tests[] = array($test[0], '"' . $test[1] . '"');
-            }
-        }
-
-        return $tests;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassMethodTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassMethodTest.php
deleted file mode 100644
index ddabe86..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassMethodTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
- constant('PHPParser_Node_Stmt_Class::MODIFIER_' . strtoupper($modifier))
-        ));
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testNoModifiers($modifier) {
-        $node = new PHPParser_Node_Stmt_ClassMethod('foo', array('type' => 0));
-
-        $this->assertFalse($node->{'is' . $modifier}());
-    }
-
-    public function provideModifiers() {
-        return array(
-            array('public'),
-            array('protected'),
-            array('private'),
-            array('abstract'),
-            array('final'),
-            array('static'),
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassTest.php
deleted file mode 100644
index 3904815..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/ClassTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
- PHPParser_Node_Stmt_Class::MODIFIER_ABSTRACT));
-        $this->assertTrue($class->isAbstract());
-
-        $class = new PHPParser_Node_Stmt_Class('Foo');
-        $this->assertFalse($class->isAbstract());
-    }
-
-    public function testIsFinal() {
-        $class = new PHPParser_Node_Stmt_Class('Foo', array('type' => PHPParser_Node_Stmt_Class::MODIFIER_FINAL));
-        $this->assertTrue($class->isFinal());
-
-        $class = new PHPParser_Node_Stmt_Class('Foo');
-        $this->assertFalse($class->isFinal());
-    }
-
-    public function testGetMethods() {
-        $methods = array(
-            new PHPParser_Node_Stmt_ClassMethod('foo'),
-            new PHPParser_Node_Stmt_ClassMethod('bar'),
-            new PHPParser_Node_Stmt_ClassMethod('fooBar'),
-        );
-        $class = new PHPParser_Node_Stmt_Class('Foo', array(
-            'stmts' => array(
-                new PHPParser_Node_Stmt_TraitUse(array()),
-                $methods[0],
-                new PHPParser_Node_Stmt_Const(array()),
-                $methods[1],
-                new PHPParser_Node_Stmt_Property(0, array()),
-                $methods[2],
-            )
-        ));
-
-        $this->assertEquals($methods, $class->getMethods());
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/PropertyTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/PropertyTest.php
deleted file mode 100644
index 6c3f38b..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Node/Stmt/PropertyTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-assertTrue($node->{'is' . $modifier}());
-    }
-
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testNoModifiers($modifier) {
-        $node = new PHPParser_Node_Stmt_Property(0, array());
-
-        $this->assertFalse($node->{'is' . $modifier}());
-    }
-
-    public function provideModifiers() {
-        return array(
-            array('public'),
-            array('protected'),
-            array('private'),
-            array('static'),
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeAbstractTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/NodeAbstractTest.php
deleted file mode 100644
index 767340e..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeAbstractTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
- 10,
-            'comments'  => array(
-                new PHPParser_Comment('// Comment' . "\n"),
-                new PHPParser_Comment_Doc('/** doc comment */'),
-            ),
-        );
-
-        $node = $this->getMockForAbstractClass(
-            'PHPParser_NodeAbstract',
-            array(
-                array(
-                    'subNode' => 'value'
-                ),
-                $attributes
-            ),
-            'PHPParser_Node_Dummy'
-        );
-
-        $this->assertEquals('Dummy', $node->getType());
-        $this->assertEquals(array('subNode'), $node->getSubNodeNames());
-        $this->assertEquals(10, $node->getLine());
-        $this->assertEquals('/** doc comment */', $node->getDocComment());
-        $this->assertEquals('value', $node->subNode);
-        $this->assertTrue(isset($node->subNode));
-        $this->assertEquals($attributes, $node->getAttributes());
-
-        return $node;
-    }
-
-    /**
-     * @depends testConstruct
-     */
-    public function testGetDocComment(PHPParser_Node $node) {
-        $this->assertEquals('/** doc comment */', $node->getDocComment());
-        array_pop($node->getAttribute('comments')); // remove doc comment
-        $this->assertNull($node->getDocComment());
-        array_pop($node->getAttribute('comments')); // remove comment
-        $this->assertNull($node->getDocComment());
-    }
-
-    /**
-     * @depends testConstruct
-     */
-    public function testChange(PHPParser_Node $node) {
-        // change of line
-        $node->setLine(15);
-        $this->assertEquals(15, $node->getLine());
-
-        // direct modification
-        $node->subNode = 'newValue';
-        $this->assertEquals('newValue', $node->subNode);
-
-        // indirect modification
-        $subNode =& $node->subNode;
-        $subNode = 'newNewValue';
-        $this->assertEquals('newNewValue', $node->subNode);
-
-        // removal
-        unset($node->subNode);
-        $this->assertFalse(isset($node->subNode));
-    }
-
-    public function testAttributes() {
-        /** @var $node PHPParser_Node */
-        $node = $this->getMockForAbstractClass('PHPParser_NodeAbstract');
-
-        $this->assertEmpty($node->getAttributes());
-
-        $node->setAttribute('key', 'value');
-        $this->assertTrue($node->hasAttribute('key'));
-        $this->assertEquals('value', $node->getAttribute('key'));
-
-        $this->assertFalse($node->hasAttribute('doesNotExist'));
-        $this->assertNull($node->getAttribute('doesNotExist'));
-        $this->assertEquals('default', $node->getAttribute('doesNotExist', 'default'));
-
-        $node->setAttribute('null', null);
-        $this->assertTrue($node->hasAttribute('null'));
-        $this->assertNull($node->getAttribute('null'));
-        $this->assertNull($node->getAttribute('null', 'default'));
-
-        $this->assertEquals(
-            array(
-                'key'  => 'value',
-                'null' => null,
-            ),
-            $node->getAttributes()
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeDumperTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/NodeDumperTest.php
deleted file mode 100644
index 5ea29d5..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeDumperTest.php
+++ /dev/null
@@ -1,66 +0,0 @@
-assertEquals($dump, $dumper->dump($node));
-    }
-
-    public function provideTestDump() {
-        return array(
-            array(
-                array(),
-'array(
-)'
-            ),
-            array(
-                array('Foo', 'Bar', 'Key' => 'FooBar'),
-'array(
-    0: Foo
-    1: Bar
-    Key: FooBar
-)'
-            ),
-            array(
-                new PHPParser_Node_Name(array('Hallo', 'World')),
-'Name(
-    parts: array(
-        0: Hallo
-        1: World
-    )
-)'
-            ),
-            array(
-                new PHPParser_Node_Expr_Array(array(
-                    new PHPParser_Node_Expr_ArrayItem(new PHPParser_Node_Scalar_String('Foo'))
-                )),
-'Expr_Array(
-    items: array(
-        0: Expr_ArrayItem(
-            key: null
-            value: Scalar_String(
-                value: Foo
-            )
-            byRef: false
-        )
-    )
-)'
-            ),
-        );
-    }
-
-    /**
-     * @expectedException        InvalidArgumentException
-     * @expectedExceptionMessage Can only dump nodes and arrays.
-     */
-    public function testError() {
-        $dumper = new PHPParser_NodeDumper;
-        $dumper->dump(new stdClass);
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeTraverserTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/NodeTraverserTest.php
deleted file mode 100644
index aaaa2ef..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeTraverserTest.php
+++ /dev/null
@@ -1,144 +0,0 @@
-getMock('PHPParser_NodeVisitor');
-
-        $visitor->expects($this->at(0))->method('beforeTraverse')->with($stmts);
-        $visitor->expects($this->at(1))->method('enterNode')->with($echoNode);
-        $visitor->expects($this->at(2))->method('enterNode')->with($str1Node);
-        $visitor->expects($this->at(3))->method('leaveNode')->with($str1Node);
-        $visitor->expects($this->at(4))->method('enterNode')->with($str2Node);
-        $visitor->expects($this->at(5))->method('leaveNode')->with($str2Node);
-        $visitor->expects($this->at(6))->method('leaveNode')->with($echoNode);
-        $visitor->expects($this->at(7))->method('afterTraverse')->with($stmts);
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testModifying() {
-        $str1Node  = new PHPParser_Node_Scalar_String('Foo');
-        $str2Node  = new PHPParser_Node_Scalar_String('Bar');
-        $printNode = new PHPParser_Node_Expr_Print($str1Node);
-
-        // first visitor changes the node, second verifies the change
-        $visitor1 = $this->getMock('PHPParser_NodeVisitor');
-        $visitor2 = $this->getMock('PHPParser_NodeVisitor');
-
-        // replace empty statements with string1 node
-        $visitor1->expects($this->at(0))->method('beforeTraverse')->with(array())
-                 ->will($this->returnValue(array($str1Node)));
-        $visitor2->expects($this->at(0))->method('beforeTraverse')->with(array($str1Node));
-
-        // replace string1 node with print node
-        $visitor1->expects($this->at(1))->method('enterNode')->with($str1Node)
-                 ->will($this->returnValue($printNode));
-        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
-
-        // replace string1 node with string2 node
-        $visitor1->expects($this->at(2))->method('enterNode')->with($str1Node)
-                 ->will($this->returnValue($str2Node));
-        $visitor2->expects($this->at(2))->method('enterNode')->with($str2Node);
-
-        // replace string2 node with string1 node again
-        $visitor1->expects($this->at(3))->method('leaveNode')->with($str2Node)
-                 ->will($this->returnValue($str1Node));
-        $visitor2->expects($this->at(3))->method('leaveNode')->with($str1Node);
-
-        // replace print node with string1 node again
-        $visitor1->expects($this->at(4))->method('leaveNode')->with($printNode)
-                 ->will($this->returnValue($str1Node));
-        $visitor2->expects($this->at(4))->method('leaveNode')->with($str1Node);
-
-        // replace string1 node with empty statements again
-        $visitor1->expects($this->at(5))->method('afterTraverse')->with(array($str1Node))
-                 ->will($this->returnValue(array()));
-        $visitor2->expects($this->at(5))->method('afterTraverse')->with(array());
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        // as all operations are reversed we end where we start
-        $this->assertEquals(array(), $traverser->traverse(array()));
-    }
-
-    public function testRemove() {
-        $str1Node = new PHPParser_Node_Scalar_String('Foo');
-        $str2Node = new PHPParser_Node_Scalar_String('Bar');
-
-        $visitor = $this->getMock('PHPParser_NodeVisitor');
-
-        // remove the string1 node, leave the string2 node
-        $visitor->expects($this->at(2))->method('leaveNode')->with($str1Node)
-                ->will($this->returnValue(false));
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals(array($str2Node), $traverser->traverse(array($str1Node, $str2Node)));
-    }
-
-    public function testMerge() {
-        $strStart  = new PHPParser_Node_Scalar_String('Start');
-        $strMiddle = new PHPParser_Node_Scalar_String('End');
-        $strEnd    = new PHPParser_Node_Scalar_String('Middle');
-        $strR1     = new PHPParser_Node_Scalar_String('Replacement 1');
-        $strR2     = new PHPParser_Node_Scalar_String('Replacement 2');
-
-        $visitor = $this->getMock('PHPParser_NodeVisitor');
-
-        // replace strMiddle with strR1 and strR2 by merge
-        $visitor->expects($this->at(4))->method('leaveNode')->with($strMiddle)
-                ->will($this->returnValue(array($strR1, $strR2)));
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals(
-            array($strStart, $strR1, $strR2, $strEnd),
-            $traverser->traverse(array($strStart, $strMiddle, $strEnd))
-        );
-    }
-
-    public function testDeepArray() {
-        $strNode = new PHPParser_Node_Scalar_String('Foo');
-        $stmts = array(array(array($strNode)));
-
-        $visitor = $this->getMock('PHPParser_NodeVisitor');
-        $visitor->expects($this->at(1))->method('enterNode')->with($strNode);
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testRemovingVisitor() {
-        $visitor1 = $this->getMock('PHPParser_NodeVisitor');
-        $visitor2 = $this->getMock('PHPParser_NodeVisitor');
-        $visitor3 = $this->getMock('PHPParser_NodeVisitor');
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-        $traverser->addVisitor($visitor3);
-
-        $preExpected = array($visitor1, $visitor2, $visitor3);
-        $this->assertAttributeSame($preExpected, 'visitors', $traverser, 'The appropriate visitors have not been added');
-
-        $traverser->removeVisitor($visitor2);
-
-        $postExpected = array(0 => $visitor1, 2 => $visitor3);
-        $this->assertAttributeSame($postExpected, 'visitors', $traverser, 'The appropriate visitors are not present after removal');
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeVisitor/NameResolverTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/NodeVisitor/NameResolverTest.php
deleted file mode 100644
index 49eaf69..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/NodeVisitor/NameResolverTest.php
+++ /dev/null
@@ -1,225 +0,0 @@
-addVisitor(new PHPParser_NodeVisitor_NameResolver);
-
-        $stmts = $parser->parse($code);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertEquals($expectedCode, $prettyPrinter->prettyPrint($stmts));
-    }
-
-    /**
-     * @covers PHPParser_NodeVisitor_NameResolver
-     */
-    public function testResolveLocations() {
-        $code = <<addVisitor(new PHPParser_NodeVisitor_NameResolver);
-
-        $stmts = $parser->parse($code);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertEquals($expectedCode, $prettyPrinter->prettyPrint($stmts));
-    }
-
-    public function testNoResolveSpecialName() {
-        $stmts = array(new PHPParser_Node_Expr_New(new PHPParser_Node_Name('self')));
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor(new PHPParser_NodeVisitor_NameResolver);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    protected function createNamespacedAndNonNamespaced(array $stmts) {
-        return array(
-            new PHPParser_Node_Stmt_Namespace(new PHPParser_Node_Name('NS'), $stmts),
-            new PHPParser_Node_Stmt_Namespace(null,                          $stmts),
-        );
-    }
-
-    public function testAddNamespacedName() {
-        $stmts = $this->createNamespacedAndNonNamespaced(array(
-            new PHPParser_Node_Stmt_Class('A'),
-            new PHPParser_Node_Stmt_Interface('B'),
-            new PHPParser_Node_Stmt_Function('C'),
-            new PHPParser_Node_Stmt_Const(array(
-                new PHPParser_Node_Const('D', new PHPParser_Node_Scalar_String('E'))
-            )),
-        ));
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor(new PHPParser_NodeVisitor_NameResolver);
-
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertEquals('NS\\A', (string) $stmts[0]->stmts[0]->namespacedName);
-        $this->assertEquals('NS\\B', (string) $stmts[0]->stmts[1]->namespacedName);
-        $this->assertEquals('NS\\C', (string) $stmts[0]->stmts[2]->namespacedName);
-        $this->assertEquals('NS\\D', (string) $stmts[0]->stmts[3]->consts[0]->namespacedName);
-        $this->assertEquals('A',     (string) $stmts[1]->stmts[0]->namespacedName);
-        $this->assertEquals('B',     (string) $stmts[1]->stmts[1]->namespacedName);
-        $this->assertEquals('C',     (string) $stmts[1]->stmts[2]->namespacedName);
-        $this->assertEquals('D',     (string) $stmts[1]->stmts[3]->consts[0]->namespacedName);
-    }
-
-    public function testAddTraitNamespacedName() {
-        $stmts = $this->createNamespacedAndNonNamespaced(array(
-            new PHPParser_Node_Stmt_Trait('A')
-        ));
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor(new PHPParser_NodeVisitor_NameResolver);
-
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertEquals('NS\\A', (string) $stmts[0]->stmts[0]->namespacedName);
-        $this->assertEquals('A',     (string) $stmts[1]->stmts[0]->namespacedName);
-    }
-
-    /**
-     * @expectedException        PHPParser_Error
-     * @expectedExceptionMessage Cannot use "C" as "B" because the name is already in use on line 2
-     */
-    public function testAlreadyInUseError() {
-        $stmts = array(
-            new PHPParser_Node_Stmt_Use(array(
-                new PHPParser_Node_Stmt_UseUse(new PHPParser_Node_Name('A\B'), 'B', array('startLine' => 1)),
-                new PHPParser_Node_Stmt_UseUse(new PHPParser_Node_Name('C'),   'B', array('startLine' => 2)),
-            ))
-        );
-
-        $traverser = new PHPParser_NodeTraverser;
-        $traverser->addVisitor(new PHPParser_NodeVisitor_NameResolver);
-        $traverser->traverse($stmts);
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/ParserTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/ParserTest.php
deleted file mode 100644
index cf45066..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/ParserTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-parse($code);
-        $this->assertEquals(
-            $this->canonicalize($dump),
-            $this->canonicalize($dumper->dump($stmts)),
-            $name
-        );
-    }
-
-    public function provideTestParse() {
-        return $this->getTests(dirname(__FILE__) . '/../../code/parser', 'test');
-    }
-
-    /**
-     * @dataProvider provideTestParseFail
-     */
-    public function testParseFail($name, $code, $msg) {
-        $parser = new PHPParser_Parser(new PHPParser_Lexer_Emulative);
-
-        try {
-            $parser->parse($code);
-
-            $this->fail(sprintf('"%s": Expected PHPParser_Error', $name));
-        } catch (PHPParser_Error $e) {
-            $this->assertEquals($msg, $e->getMessage(), $name);
-        }
-    }
-
-    public function provideTestParseFail() {
-        return $this->getTests(dirname(__FILE__) . '/../../code/parser', 'test-fail');
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/PrettyPrinterTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/PrettyPrinterTest.php
deleted file mode 100644
index 11933e6..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/PrettyPrinterTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-parse($code);
-        $this->assertEquals(
-            $this->canonicalize($dump),
-            $this->canonicalize($prettyPrinter->$method($stmts)),
-            $name
-        );
-    }
-
-    /**
-     * @dataProvider provideTestPrettyPrint
-     * @covers PHPParser_PrettyPrinter_Default
-     */
-    public function testPrettyPrint($name, $code, $dump) {
-        $this->doTestPrettyPrintMethod('prettyPrint', $name, $code, $dump);
-    }
-
-    /**
-     * @dataProvider provideTestPrettyPrintFile
-     * @covers PHPParser_PrettyPrinter_Default
-     */
-    public function testPrettyPrintFile($name, $code, $dump) {
-        $this->doTestPrettyPrintMethod('prettyPrintFile', $name, $code, $dump);
-    }
-
-    public function provideTestPrettyPrint() {
-        return $this->getTests(dirname(__FILE__) . '/../../code/prettyPrinter', 'test');
-    }
-
-    public function provideTestPrettyPrintFile() {
-        return $this->getTests(dirname(__FILE__) . '/../../code/prettyPrinter', 'file-test');
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/Serializer/XMLTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/Serializer/XMLTest.php
deleted file mode 100644
index 9a0c191..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/Serializer/XMLTest.php
+++ /dev/null
@@ -1,152 +0,0 @@
-
-     */
-    public function testSerialize() {
-        $code = <<
-
- 
-  
-   
-    
-     // comment
-
-     /** doc comment */
-    
-   
-   
-    4
-   
-   
-    6
-   
-   
-    
-   
-   
-    
-     
-      
-       4
-      
-      
-       4
-      
-      
-       a
-      
-      
-       
-        
-         4
-        
-        
-         4
-        
-        
-         0
-        
-       
-      
-      
-       
-      
-      
-       
-      
-     
-     
-      
-       4
-      
-      
-       4
-      
-      
-       b
-      
-      
-       
-        
-         4
-        
-        
-         4
-        
-        
-         1
-        
-       
-      
-      
-       
-      
-      
-       
-      
-     
-    
-   
-   
-    
-     
-      
-       5
-      
-      
-       5
-      
-      
-       
-        
-         
-          5
-         
-         
-          5
-         
-         
-          Foo
-         
-        
-       
-      
-     
-    
-   
-   
-    functionName
-   
-  
- 
-
-XML;
-
-        $parser     = new PHPParser_Parser(new PHPParser_Lexer);
-        $serializer = new PHPParser_Serializer_XML;
-
-        $stmts = $parser->parse($code);
-        $this->assertXmlStringEqualsXmlString($xml, $serializer->serialize($stmts));
-    }
-
-    /**
-     * @expectedException        InvalidArgumentException
-     * @expectedExceptionMessage Unexpected node type
-     */
-    public function testError() {
-        $serializer = new PHPParser_Serializer_XML;
-        $serializer->serialize(array(new stdClass));
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/TemplateLoaderTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/TemplateLoaderTest.php
deleted file mode 100644
index baa5735..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/TemplateLoaderTest.php
+++ /dev/null
@@ -1,48 +0,0 @@
-load('TemplateLoaderTest.php');
-        $this->assertInstanceOf('PHPParser_Template', $template);
-    }
-
-    public function testLoadWithSuffix() {
-        $templateLoader = new PHPParser_TemplateLoader(
-            new PHPParser_Parser(new PHPParser_Lexer),
-            dirname(__FILE__), '.php'
-        );
-
-        // load this file as a template, as we don't really care about the contents
-        $template = $templateLoader->load('TemplateLoaderTest');
-        $this->assertInstanceOf('PHPParser_Template', $template);
-    }
-
-    /**
-     * @expectedException InvalidArgumentException
-     */
-    public function testNonexistentBaseDirectoryError() {
-        new PHPParser_TemplateLoader(
-            new PHPParser_Parser(new PHPParser_Lexer),
-            dirname(__FILE__) . '/someDirectoryThatDoesNotExist'
-        );
-    }
-
-    /**
-     * @expectedException InvalidArgumentException
-     */
-    public function testNonexistentFileError() {
-        $templateLoader = new PHPParser_TemplateLoader(
-            new PHPParser_Parser(new PHPParser_Lexer),
-            dirname(__FILE__)
-        );
-
-        $templateLoader->load('SomeTemplateThatDoesNotExist');
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PHPParser/Tests/TemplateTest.php b/vendor/nikic/php-parser/test/PHPParser/Tests/TemplateTest.php
deleted file mode 100644
index a926c5c..0000000
--- a/vendor/nikic/php-parser/test/PHPParser/Tests/TemplateTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-assertEquals(
-            $expectedPrettyPrint,
-            $prettyPrinter->prettyPrint($template->getStmts($placeholders))
-        );
-    }
-
-    public function provideTestPlaceholderReplacement() {
-        return array(
-            array(
-                ' 'foo'),
-                '$foo + $Foo;'
-            ),
-            array(
-                ' 'Foo'),
-                '$foo + $Foo;'
-            ),
-            array(
-                ' 'foo', 'Name' => 'Bar'),
-                '$foo + $Bar;'
-            ),
-            array(
-                ' 'Bar', 'name' => 'foo'),
-                '$foo + $Bar;'
-            ),
-            array(
-                ' 'infix'),
-                '$prefixInfixSuffix;'
-            ),
-            array(
-                ' 'foo'),
-                '$_foo_;'
-            ),
-            array(
-                '
-
- 
-  
-   1
-  
-  
-   
-    // comment
-
-    /** doc comment */
-   
-  
-  
-   Test
-  
- 
-
-XML;
-
-        $unserializer  = new PHPParser_Unserializer_XML;
-        $this->assertEquals(
-            new PHPParser_Node_Scalar_String('Test', array(
-                'startLine' => 1,
-                'comments'  => array(
-                    new PHPParser_Comment('// comment' . "\n", 2),
-                    new PHPParser_Comment_Doc('/** doc comment */', 3),
-                ),
-            )),
-            $unserializer->unserialize($xml)
-        );
-    }
-
-    public function testEmptyNode() {
-        $xml = <<
-
- 
-
-XML;
-
-        $unserializer  = new PHPParser_Unserializer_XML;
-
-        $this->assertEquals(
-            new PHPParser_Node_Scalar_ClassConst,
-            $unserializer->unserialize($xml)
-        );
-    }
-
-    public function testScalars() {
-        $xml = <<
-
- 
-  
-  
-  test
-  
-  
-  1
-  1
-  1.5
-  
-  
-  
- 
-
-XML;
-        $result = array(
-            array(), array(),
-            'test', '', '',
-            1,
-            1, 1.5,
-            true, false, null
-        );
-
-        $unserializer  = new PHPParser_Unserializer_XML;
-        $this->assertEquals($result, $unserializer->unserialize($xml));
-    }
-
-    /**
-     * @expectedException        DomainException
-     * @expectedExceptionMessage AST root element not found
-     */
-    public function testWrongRootElementError() {
-        $xml = <<
-
-XML;
-
-        $unserializer = new PHPParser_Unserializer_XML;
-        $unserializer->unserialize($xml);
-    }
-
-    /**
-     * @dataProvider             provideTestErrors
-     */
-    public function testErrors($xml, $errorMsg) {
-        $this->setExpectedException('DomainException', $errorMsg);
-
-        $xml = <<
-
- $xml
-
-XML;
-
-        $unserializer = new PHPParser_Unserializer_XML;
-        $unserializer->unserialize($xml);
-    }
-
-    public function provideTestErrors() {
-        return array(
-            array('test',   '"true" scalar must be empty'),
-            array('test', '"false" scalar must be empty'),
-            array('test',   '"null" scalar must be empty'),
-            array('bar',      'Unknown scalar type "foo"'),
-            array('x',        '"x" is not a valid int'),
-            array('x',    '"x" is not a valid float'),
-            array('',                                  'Expected node or scalar'),
-            array('test',           'Unexpected node of type "foo:bar"'),
-            array(
-                'test',
-                'Expected sub node or attribute, got node of type "foo:bar"'
-            ),
-            array(
-                '',
-                'Expected node or scalar'
-            ),
-        );
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test b/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
deleted file mode 100644
index 7ea11c7..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
+++ /dev/null
@@ -1,139 +0,0 @@
-Array definitions
------
- 'd', 'e' => &$f);
-
-// short array syntax
-[];
-[1, 2, 3];
-['a' => 'b'];
------
-array(
-    0: Expr_Array(
-        items: array(
-        )
-    )
-    1: Expr_Array(
-        items: array(
-            0: Expr_ArrayItem(
-                key: null
-                value: Scalar_String(
-                    value: a
-                )
-                byRef: false
-            )
-        )
-    )
-    2: Expr_Array(
-        items: array(
-            0: Expr_ArrayItem(
-                key: null
-                value: Scalar_String(
-                    value: a
-                )
-                byRef: false
-            )
-        )
-    )
-    3: Expr_Array(
-        items: array(
-            0: Expr_ArrayItem(
-                key: null
-                value: Scalar_String(
-                    value: a
-                )
-                byRef: false
-            )
-            1: Expr_ArrayItem(
-                key: null
-                value: Scalar_String(
-                    value: b
-                )
-                byRef: false
-            )
-        )
-    )
-    4: Expr_Array(
-        items: array(
-            0: Expr_ArrayItem(
-                key: null
-                value: Scalar_String(
-                    value: a
-                )
-                byRef: false
-            )
-            1: Expr_ArrayItem(
-                key: null
-                value: Expr_Variable(
-                    name: b
-                )
-                byRef: true
-            )
-            2: Expr_ArrayItem(
-                key: Scalar_String(
-                    value: c
-                )
-                value: Scalar_String(
-                    value: d
-                )
-                byRef: false
-            )
-            3: Expr_ArrayItem(
-                key: Scalar_String(
-                    value: e
-                )
-                value: Expr_Variable(
-                    name: f
-                )
-                byRef: true
-            )
-        )
-    )
-    5: Expr_Array(
-        items: array(
-        )
-    )
-    6: Expr_Array(
-        items: array(
-            0: Expr_ArrayItem(
-                key: null
-                value: Scalar_LNumber(
-                    value: 1
-                )
-                byRef: false
-            )
-            1: Expr_ArrayItem(
-                key: null
-                value: Scalar_LNumber(
-                    value: 2
-                )
-                byRef: false
-            )
-            2: Expr_ArrayItem(
-                key: null
-                value: Scalar_LNumber(
-                    value: 3
-                )
-                byRef: false
-            )
-        )
-    )
-    7: Expr_Array(
-        items: array(
-            0: Expr_ArrayItem(
-                key: Scalar_String(
-                    value: a
-                )
-                value: Scalar_String(
-                    value: b
-                )
-                byRef: false
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/assign.test b/vendor/nikic/php-parser/test/code/parser/expr/assign.test
deleted file mode 100644
index e6916ad..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/assign.test
+++ /dev/null
@@ -1,225 +0,0 @@
-Assignments
------
->= $b;
-
-// by ref assign
-$a =& $b;
-$a =& new B;
-
-// list() assign
-list($a) = $b;
-list($a, , $b) = $c;
-list($a, list(, $c), $d) = $e;
-
-// inc/dec
-++$a;
-$a++;
---$a;
-$a--;
------
-array(
-    0: Expr_Assign(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    1: Expr_AssignBitwiseAnd(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    2: Expr_AssignBitwiseOr(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    3: Expr_AssignBitwiseXor(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    4: Expr_AssignConcat(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    5: Expr_AssignDiv(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    6: Expr_AssignMinus(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    7: Expr_AssignMod(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    8: Expr_AssignMul(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    9: Expr_AssignPlus(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    10: Expr_AssignShiftLeft(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    11: Expr_AssignShiftRight(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    12: Expr_AssignRef(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    13: Expr_AssignRef(
-        var: Expr_Variable(
-            name: a
-        )
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: B
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    14: Expr_Assign(
-        var: Expr_List(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-        expr: Expr_Variable(
-            name: b
-        )
-    )
-    15: Expr_Assign(
-        var: Expr_List(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: null
-                2: Expr_Variable(
-                    name: b
-                )
-            )
-        )
-        expr: Expr_Variable(
-            name: c
-        )
-    )
-    16: Expr_Assign(
-        var: Expr_List(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: Expr_List(
-                    vars: array(
-                        0: null
-                        1: Expr_Variable(
-                            name: c
-                        )
-                    )
-                )
-                2: Expr_Variable(
-                    name: d
-                )
-            )
-        )
-        expr: Expr_Variable(
-            name: e
-        )
-    )
-    17: Expr_PreInc(
-        var: Expr_Variable(
-            name: a
-        )
-    )
-    18: Expr_PostInc(
-        var: Expr_Variable(
-            name: a
-        )
-    )
-    19: Expr_PreDec(
-        var: Expr_Variable(
-            name: a
-        )
-    )
-    20: Expr_PostDec(
-        var: Expr_Variable(
-            name: a
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/cast.test b/vendor/nikic/php-parser/test/code/parser/expr/cast.test
deleted file mode 100644
index 3c54ba7..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/cast.test
+++ /dev/null
@@ -1,72 +0,0 @@
-Casts
------
- $b;
-$a >= $b;
-$a == $b;
-$a === $b;
-$a != $b;
-$a !== $b;
-$a instanceof B;
-$a instanceof $b;
------
-array(
-    0: Expr_Smaller(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    1: Expr_SmallerOrEqual(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    2: Expr_Greater(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    3: Expr_GreaterOrEqual(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    4: Expr_Equal(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    5: Expr_Identical(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    6: Expr_NotEqual(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    7: Expr_NotIdentical(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    8: Expr_Instanceof(
-        expr: Expr_Variable(
-            name: a
-        )
-        class: Name(
-            parts: array(
-                0: B
-            )
-        )
-    )
-    9: Expr_Instanceof(
-        expr: Expr_Variable(
-            name: a
-        )
-        class: Expr_Variable(
-            name: b
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test b/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
deleted file mode 100644
index ce3fce9..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
+++ /dev/null
@@ -1,12 +0,0 @@
-Error suppression
------
-b['c']();
-
-// array dereferencing
-a()['b'];
------
-array(
-    0: Expr_FuncCall(
-        name: Name(
-            parts: array(
-                0: a
-            )
-        )
-        args: array(
-        )
-    )
-    1: Expr_FuncCall(
-        name: Expr_Variable(
-            name: a
-        )
-        args: array(
-        )
-    )
-    2: Expr_FuncCall(
-        name: Expr_Variable(
-            name: Scalar_String(
-                value: a
-            )
-        )
-        args: array(
-        )
-    )
-    3: Expr_FuncCall(
-        name: Expr_Variable(
-            name: Expr_Variable(
-                name: a
-            )
-        )
-        args: array(
-        )
-    )
-    4: Expr_FuncCall(
-        name: Expr_Variable(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-        args: array(
-        )
-    )
-    5: Expr_FuncCall(
-        name: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-        args: array(
-        )
-    )
-    6: Expr_FuncCall(
-        name: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-        args: array(
-        )
-    )
-    7: Expr_FuncCall(
-        name: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: b
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-        args: array(
-        )
-    )
-    8: Expr_ArrayDimFetch(
-        var: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: a
-                )
-            )
-            args: array(
-            )
-        )
-        dim: Scalar_String(
-            value: b
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
deleted file mode 100644
index 5e36ff8..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
+++ /dev/null
@@ -1,70 +0,0 @@
-New expression dereferencing
------
-b;
-(new A)->b();
-(new A)['b'];
-(new A)['b']['c'];
------
-array(
-    0: Expr_PropertyFetch(
-        var: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-        name: b
-    )
-    1: Expr_MethodCall(
-        var: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-        name: b
-        args: array(
-        )
-    )
-    2: Expr_ArrayDimFetch(
-        var: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-        dim: Scalar_String(
-            value: b
-        )
-    )
-    3: Expr_ArrayDimFetch(
-        var: Expr_ArrayDimFetch(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-        dim: Scalar_String(
-            value: c
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
deleted file mode 100644
index 9dd1858..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
+++ /dev/null
@@ -1,118 +0,0 @@
-Object access
------
-b;
-$a->b['c'];
-$a->b{'c'};
-
-// method call variations
-$a->b();
-$a->{'b'}();
-$a->$b();
-$a->$b['c']();
-
-// array dereferencing
-$a->b()['c'];
-$a->b(){'c'}; // invalid PHP: drop Support?
------
-array(
-    0: Expr_PropertyFetch(
-        var: Expr_Variable(
-            name: a
-        )
-        name: b
-    )
-    1: Expr_ArrayDimFetch(
-        var: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            name: b
-        )
-        dim: Scalar_String(
-            value: c
-        )
-    )
-    2: Expr_ArrayDimFetch(
-        var: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            name: b
-        )
-        dim: Scalar_String(
-            value: c
-        )
-    )
-    3: Expr_MethodCall(
-        var: Expr_Variable(
-            name: a
-        )
-        name: b
-        args: array(
-        )
-    )
-    4: Expr_MethodCall(
-        var: Expr_Variable(
-            name: a
-        )
-        name: Scalar_String(
-            value: b
-        )
-        args: array(
-        )
-    )
-    5: Expr_MethodCall(
-        var: Expr_Variable(
-            name: a
-        )
-        name: Expr_Variable(
-            name: b
-        )
-        args: array(
-        )
-    )
-    6: Expr_MethodCall(
-        var: Expr_Variable(
-            name: a
-        )
-        name: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: b
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-        args: array(
-        )
-    )
-    7: Expr_ArrayDimFetch(
-        var: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: b
-            args: array(
-            )
-        )
-        dim: Scalar_String(
-            value: c
-        )
-    )
-    8: Expr_ArrayDimFetch(
-        var: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: b
-            args: array(
-            )
-        )
-        dim: Scalar_String(
-            value: c
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
deleted file mode 100644
index ea3f9ef..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
+++ /dev/null
@@ -1,62 +0,0 @@
-Simple array access
------
-> $b;
-
-// associativity
-$a * $b * $c;
-$a * ($b * $c);
-
-// precedence
-$a + $b * $c;
-($a + $b) * $c;
------
-array(
-    0: Expr_BitwiseNot(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Expr_UnaryPlus(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    2: Expr_UnaryMinus(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    3: Expr_BitwiseAnd(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    4: Expr_BitwiseOr(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    5: Expr_BitwiseXor(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    6: Expr_Concat(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    7: Expr_Div(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    8: Expr_Minus(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    9: Expr_Mod(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    10: Expr_Mul(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    11: Expr_Plus(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    12: Expr_ShiftLeft(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    13: Expr_ShiftRight(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Variable(
-            name: b
-        )
-    )
-    14: Expr_Mul(
-        left: Expr_Mul(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-        right: Expr_Variable(
-            name: c
-        )
-    )
-    15: Expr_Mul(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Mul(
-            left: Expr_Variable(
-                name: b
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    16: Expr_Plus(
-        left: Expr_Variable(
-            name: a
-        )
-        right: Expr_Mul(
-            left: Expr_Variable(
-                name: b
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    17: Expr_Mul(
-        left: Expr_Plus(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-        right: Expr_Variable(
-            name: c
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/new.test b/vendor/nikic/php-parser/test/code/parser/expr/new.test
deleted file mode 100644
index daca29c..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/new.test
+++ /dev/null
@@ -1,139 +0,0 @@
-New
------
-b();
-new $a->b->c();
-new $a->b['c']();
-new $a->b{'c'}();
-
-// test regression introduces by new dereferencing syntax
-(new A);
------
-array(
-    0: Expr_New(
-        class: Name(
-            parts: array(
-                0: A
-            )
-        )
-        args: array(
-        )
-    )
-    1: Expr_New(
-        class: Name(
-            parts: array(
-                0: A
-            )
-        )
-        args: array(
-            0: Arg(
-                value: Expr_Variable(
-                    name: b
-                )
-                byRef: false
-            )
-        )
-    )
-    2: Expr_New(
-        class: Expr_Variable(
-            name: a
-        )
-        args: array(
-        )
-    )
-    3: Expr_New(
-        class: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-        args: array(
-        )
-    )
-    4: Expr_New(
-        class: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: b
-        )
-        args: array(
-        )
-    )
-    5: Expr_New(
-        class: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            name: b
-        )
-        args: array(
-        )
-    )
-    6: Expr_New(
-        class: Expr_PropertyFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: b
-            )
-            name: c
-        )
-        args: array(
-        )
-    )
-    7: Expr_New(
-        class: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: b
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-        args: array(
-        )
-    )
-    8: Expr_New(
-        class: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: b
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-        args: array(
-        )
-    )
-    9: Expr_New(
-        class: Name(
-            parts: array(
-                0: A
-            )
-        )
-        args: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/print.test b/vendor/nikic/php-parser/test/code/parser/expr/print.test
deleted file mode 100644
index d07afda..0000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/print.test
+++ /dev/null
@@ -1,12 +0,0 @@
-Print
------
-c test
-EOS;
-
-// comment to force line break before EOF
------
-array(
-    0: Scalar_String(
-        value:
-    )
-    1: Scalar_String(
-        value:
-    )
-    2: Scalar_String(
-        value: Test '" $a \n
-    )
-    3: Scalar_String(
-        value: Test '" $a
-
-    )
-    4: Scalar_Encapsed(
-        parts: array(
-            0: Test
-            1: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    5: Scalar_Encapsed(
-        parts: array(
-            0: Test
-            1: Expr_Variable(
-                name: a
-            )
-            2:  and
-            3: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: b
-                )
-                name: c
-            )
-            4:  test
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test b/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
deleted file mode 100644
index 717f844..0000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
+++ /dev/null
@@ -1,148 +0,0 @@
-Encapsed strings
------
-B";
-"$A[B]";
-"$A[0]";
-"$A[0x0]";
-"$A[$B]";
-"{$A}";
-"{$A['B']}";
-"${A}";
-"${A['B']}";
-"${$A}";
-"A $B C";
-b"$A";
------
-array(
-    0: Scalar_Encapsed(
-        parts: array(
-            0: Expr_Variable(
-                name: A
-            )
-        )
-    )
-    1: Scalar_Encapsed(
-        parts: array(
-            0: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                name: B
-            )
-        )
-    )
-    2: Scalar_Encapsed(
-        parts: array(
-            0: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                dim: Scalar_String(
-                    value: B
-                )
-            )
-        )
-    )
-    3: Scalar_Encapsed(
-        parts: array(
-            0: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                dim: Scalar_String(
-                    value: 0
-                )
-            )
-        )
-    )
-    4: Scalar_Encapsed(
-        parts: array(
-            0: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                dim: Scalar_String(
-                    value: 0x0
-                )
-            )
-        )
-    )
-    5: Scalar_Encapsed(
-        parts: array(
-            0: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                dim: Expr_Variable(
-                    name: B
-                )
-            )
-        )
-    )
-    6: Scalar_Encapsed(
-        parts: array(
-            0: Expr_Variable(
-                name: A
-            )
-        )
-    )
-    7: Scalar_Encapsed(
-        parts: array(
-            0: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                dim: Scalar_String(
-                    value: B
-                )
-            )
-        )
-    )
-    8: Scalar_Encapsed(
-        parts: array(
-            0: Expr_Variable(
-                name: A
-            )
-        )
-    )
-    9: Scalar_Encapsed(
-        parts: array(
-            0: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: A
-                )
-                dim: Scalar_String(
-                    value: B
-                )
-            )
-        )
-    )
-    10: Scalar_Encapsed(
-        parts: array(
-            0: Expr_Variable(
-                name: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    11: Scalar_Encapsed(
-        parts: array(
-            0: A
-            1: Expr_Variable(
-                name: B
-            )
-            2:  C
-        )
-    )
-    12: Scalar_Encapsed(
-        parts: array(
-            0: Expr_Variable(
-                name: A
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/float.test b/vendor/nikic/php-parser/test/code/parser/scalar/float.test
deleted file mode 100644
index c91b7ac..0000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/float.test
+++ /dev/null
@@ -1,70 +0,0 @@
-Different float syntaxes
------
- float overflows
-// (all are actually the same number, just in different representations)
-18446744073709551615;
-0xFFFFFFFFFFFFFFFF;
-01777777777777777777777;
-0177777777777777777777787;
-0b1111111111111111111111111111111111111111111111111111111111111111;
------
-array(
-    0: Scalar_DNumber(
-        value: 0
-    )
-    1: Scalar_DNumber(
-        value: 0
-    )
-    2: Scalar_DNumber(
-        value: 0
-    )
-    3: Scalar_DNumber(
-        value: 0
-    )
-    4: Scalar_DNumber(
-        value: 0
-    )
-    5: Scalar_DNumber(
-        value: 0
-    )
-    6: Scalar_DNumber(
-        value: 0
-    )
-    7: Scalar_DNumber(
-        value: 302000000000
-    )
-    8: Scalar_DNumber(
-        value: 3.002E+102
-    )
-    9: Scalar_DNumber(
-        value: INF
-    )
-    10: Scalar_DNumber(
-        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
-    )
-    11: Scalar_DNumber(
-        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
-    )
-    12: Scalar_DNumber(
-        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
-    )
-    13: Scalar_DNumber(
-        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
-    )
-    14: Scalar_DNumber(
-        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/int.test b/vendor/nikic/php-parser/test/code/parser/scalar/int.test
deleted file mode 100644
index 17a5785..0000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/int.test
+++ /dev/null
@@ -1,47 +0,0 @@
-Different integer syntaxes
------
- 'baz']
-) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        params: array(
-            0: Param(
-                name: b
-                default: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: null
-                        )
-                    )
-                )
-                type: null
-                byRef: false
-            )
-            1: Param(
-                name: c
-                default: Scalar_String(
-                    value: foo
-                )
-                type: null
-                byRef: false
-            )
-            2: Param(
-                name: d
-                default: Expr_ClassConstFetch(
-                    class: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    name: B
-                )
-                type: null
-                byRef: false
-            )
-            3: Param(
-                name: f
-                default: Expr_UnaryPlus(
-                    expr: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-                type: null
-                byRef: false
-            )
-            4: Param(
-                name: g
-                default: Expr_UnaryMinus(
-                    expr: Scalar_DNumber(
-                        value: 1
-                    )
-                )
-                type: null
-                byRef: false
-            )
-            5: Param(
-                name: h
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-                type: null
-                byRef: false
-            )
-            6: Param(
-                name: i
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-                type: null
-                byRef: false
-            )
-            7: Param(
-                name: j
-                default: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_String(
-                                value: foo
-                            )
-                            byRef: false
-                        )
-                    )
-                )
-                type: null
-                byRef: false
-            )
-            8: Param(
-                name: k
-                default: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_String(
-                                value: foo
-                            )
-                            byRef: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: Scalar_String(
-                                value: bar
-                            )
-                            value: Scalar_String(
-                                value: baz
-                            )
-                            byRef: false
-                        )
-                    )
-                )
-                type: null
-                byRef: false
-            )
-        )
-        stmts: array(
-        )
-        name: a
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test
deleted file mode 100644
index e5a5716..0000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test
+++ /dev/null
@@ -1,227 +0,0 @@
-Generators (yield expression
------
- $value;
-
-    // expressions
-    $data = yield;
-    $data = (yield $value);
-    $data = (yield $key => $value);
-
-    // yield in language constructs with their own parentheses
-    if (yield $foo); elseif (yield $foo);
-    if (yield $foo): elseif (yield $foo): endif;
-    while (yield $foo);
-    do {} while (yield $foo);
-    switch (yield $foo) {}
-    die(yield $foo);
-
-    // yield in function calls
-    func(yield $foo);
-    $foo->func(yield $foo);
-    new Foo(yield $foo);
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        params: array(
-        )
-        stmts: array(
-            0: Expr_Yield(
-                key: null
-                value: null
-            )
-            1: Expr_Yield(
-                key: null
-                value: Expr_Variable(
-                    name: value
-                )
-            )
-            2: Expr_Yield(
-                key: Expr_Variable(
-                    name: key
-                )
-                value: Expr_Variable(
-                    name: value
-                )
-            )
-            3: Expr_Assign(
-                var: Expr_Variable(
-                    name: data
-                )
-                expr: Expr_Yield(
-                    key: null
-                    value: null
-                )
-            )
-            4: Expr_Assign(
-                var: Expr_Variable(
-                    name: data
-                )
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: value
-                    )
-                )
-            )
-            5: Expr_Assign(
-                var: Expr_Variable(
-                    name: data
-                )
-                expr: Expr_Yield(
-                    key: Expr_Variable(
-                        name: key
-                    )
-                    value: Expr_Variable(
-                        name: value
-                    )
-                )
-            )
-            6: Stmt_If(
-                stmts: array(
-                )
-                elseifs: array(
-                    0: Stmt_ElseIf(
-                        cond: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        stmts: array(
-                        )
-                    )
-                )
-                else: null
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            7: Stmt_If(
-                stmts: array(
-                )
-                elseifs: array(
-                    0: Stmt_ElseIf(
-                        cond: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        stmts: array(
-                        )
-                    )
-                )
-                else: null
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            8: Stmt_While(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-            )
-            9: Stmt_Do(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-            )
-            10: Stmt_Switch(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                cases: array(
-                )
-            )
-            11: Expr_Exit(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            12: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: func
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        byRef: false
-                    )
-                )
-            )
-            13: Expr_MethodCall(
-                var: Expr_Variable(
-                    name: foo
-                )
-                name: func
-                args: array(
-                    0: Arg(
-                        value: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        byRef: false
-                    )
-                )
-            )
-            14: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        byRef: false
-                    )
-                )
-            )
-        )
-        name: gen
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
deleted file mode 100644
index 3670e55..0000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Special function variables
------
-
-Hallo World!
------
-array(
-    0: Expr_Variable(
-        name: a
-    )
-    1: Stmt_HaltCompiler(
-        remaining: Hallo World!
-    )
-)
------
-
-B
-
- $c) {}
-foreach ($a as $b => &$c) {}
-foreach ($a as list($a, $b)) {}
-foreach ($a as $a => list($b, , $c)) {}
-
-// foreach on expression
-foreach (array() as $b) {}
-
-// alternative syntax
-foreach ($a as $b):
-endforeach;
------
-array(
-    0: Stmt_Foreach(
-        keyVar: null
-        byRef: false
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_Variable(
-            name: b
-        )
-    )
-    1: Stmt_Foreach(
-        keyVar: null
-        byRef: true
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_Variable(
-            name: b
-        )
-    )
-    2: Stmt_Foreach(
-        keyVar: Expr_Variable(
-            name: b
-        )
-        byRef: false
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_Variable(
-            name: c
-        )
-    )
-    3: Stmt_Foreach(
-        keyVar: Expr_Variable(
-            name: b
-        )
-        byRef: true
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_Variable(
-            name: c
-        )
-    )
-    4: Stmt_Foreach(
-        keyVar: null
-        byRef: false
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_List(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: Expr_Variable(
-                    name: b
-                )
-            )
-        )
-    )
-    5: Stmt_Foreach(
-        keyVar: Expr_Variable(
-            name: a
-        )
-        byRef: false
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_List(
-            vars: array(
-                0: Expr_Variable(
-                    name: b
-                )
-                1: null
-                2: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    6: Stmt_Foreach(
-        keyVar: null
-        byRef: false
-        stmts: array(
-        )
-        expr: Expr_Array(
-            items: array(
-            )
-        )
-        valueVar: Expr_Variable(
-            name: b
-        )
-    )
-    7: Stmt_Foreach(
-        keyVar: null
-        byRef: false
-        stmts: array(
-        )
-        expr: Expr_Variable(
-            name: a
-        )
-        valueVar: Expr_Variable(
-            name: b
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
deleted file mode 100644
index 65f6b23..0000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
+++ /dev/null
@@ -1,25 +0,0 @@
-While loop
------
-
-Hi!
------
-array(
-    0: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: A
-                value: Scalar_String(
-                    value: B
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_HaltCompiler(
-        remaining: Hi!
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test-fail b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test-fail
deleted file mode 100644
index 98c0460..0000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test-fail
+++ /dev/null
@@ -1,13 +0,0 @@
-There (mostly) can't be statements outside of namespaces
------
-
-HTML
------
-
-HTML
------
-HTML
-
-HTML
------
-HTML
-
-HTML
------
-HTML
-
-HTML
-
-HTML
------
-HTML
-
-HTML
-
-HTML
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/namespaces.test b/vendor/nikic/php-parser/test/code/prettyPrinter/namespaces.test
deleted file mode 100644
index 82bbf6d..0000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/namespaces.test
+++ /dev/null
@@ -1,58 +0,0 @@
-Namespaces
------
- 0) > (1 < 0);
-
-// this will currently unnecessarily print !($a = $b). This is correct as far as operator precedence is concerned, but
-// the parentheses are not really necessary, because = takes only variables as the left hand side operator.
-!$a = $b;
------
-echo 'abc' . 'cde' . 'fgh';
-echo 'abc' . ('cde' . 'fgh');
-echo 'abc' . 1 + 2 . 'fgh';
-echo 'abc' . (1 + 2) . 'fgh';
-echo 1 * 2 + 3 / 4 % 5 . 6;
-echo 1 * (2 + 3) / (4 % (5 . 6));
-$a = $b = $c = $d = $f && true;
-($a = $b = $c = $d = $f) && true;
-$a = $b = $c = $d = $f and true;
-$a = $b = $c = $d = ($f and true);
-$a ? $b : $c ? $d : $e ? $f : $g;
-$a ? $b : ($c ? $d : ($e ? $f : $g));
-$a ? $b ? $c : $d : $f;
-(1 > 0) > (1 < 0);
-// this will currently unnecessarily print !($a = $b). This is correct as far as operator precedence is concerned, but
-// the parentheses are not really necessary, because = takes only variables as the left hand side operator.
-!($a = $b);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/switch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/switch.test
deleted file mode 100644
index 0733a48..0000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/switch.test
+++ /dev/null
@@ -1,35 +0,0 @@
-switch/case/default
------
- 0) {
-    if (count($options) === 1 && $options[0] === '--no-progress') {
-        $SHOW_PROGRESS = false;
-    } else {
-        showHelp('Invalid option passed!');
-    }
-}
-
-$TEST_TYPE = $arguments[0];
-$DIR       = $arguments[1];
-
-if ('Symfony' === $TEST_TYPE) {
-    function filter_func($path) {
-        return preg_match('~\.php(?:\.cache)?$~', $path) && false === strpos($path, 'skeleton');
-    };
-} elseif ('PHP' === $TEST_TYPE) {
-    function filter_func($path) {
-        return preg_match('~\.phpt$~', $path);
-    };
-} else {
-    showHelp('Test type must be either "Symfony" or "PHP"!');
-}
-
-require_once dirname(__FILE__) . '/../lib/PHPParser/Autoloader.php';
-PHPParser_Autoloader::register();
-
-$parser        = new PHPParser_Parser(new PHPParser_Lexer_Emulative);
-$prettyPrinter = new PHPParser_PrettyPrinter_Default;
-$nodeDumper    = new PHPParser_NodeDumper;
-
-$parseFail = $ppFail = $compareFail = $count = 0;
-
-$readTime = $parseTime = $ppTime = $reparseTime = $compareTime = 0;
-$totalStartTime = microtime(true);
-
-foreach (new RecursiveIteratorIterator(
-             new RecursiveDirectoryIterator($DIR),
-             RecursiveIteratorIterator::LEAVES_ONLY)
-         as $file) {
-    if (!filter_func($file)) {
-        continue;
-    }
-
-    $startTime = microtime(true);
-    $code = file_get_contents($file);
-    $readTime += microtime(true) - $startTime;
-
-    if ('PHP' === $TEST_TYPE) {
-        if (preg_match('~(?:
-# skeleton files
-  ext.gmp.tests.001
-| ext.skeleton.tests.001
-# multibyte encoded files
-| ext.mbstring.tests.zend_multibyte-01
-| Zend.tests.multibyte.multibyte_encoding_001
-| Zend.tests.multibyte.multibyte_encoding_004
-| Zend.tests.multibyte.multibyte_encoding_005
-# token_get_all bug (https://bugs.php.net/bug.php?id=60097)
-| Zend.tests.bug47516
-# pretty print difference due to INF vs 1e1000
-| ext.standard.tests.general_functions.bug27678
-| tests.lang.bug24640
-)\.phpt$~x', $file)) {
-            continue;
-        }
-
-        if (!preg_match('~--FILE--\s*(.*?)--[A-Z]+--~s', $code, $matches)) {
-            continue;
-        }
-        if (preg_match('~--EXPECT(?:F|REGEX)?--\s*(?:Parse|Fatal) error~', $code)) {
-            continue;
-        }
-
-        $code = $matches[1];
-    }
-
-    set_time_limit(10);
-
-    ++$count;
-
-    if ($SHOW_PROGRESS) {
-        echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($DIR)), 79), 0, 79), "\r";
-    }
-
-    try {
-        $startTime = microtime(true);
-        $stmts = $parser->parse($code);
-        $parseTime += microtime(true) - $startTime;
-
-        $startTime = microtime(true);
-        $code = 'prettyPrint($stmts);
-        $ppTime += microtime(true) - $startTime;
-
-        try {
-            $startTime = microtime(true);
-            $ppStmts = $parser->parse($code);
-            $reparseTime += microtime(true) - $startTime;
-
-            $startTime = microtime(true);
-            $same = $nodeDumper->dump($stmts) == $nodeDumper->dump($ppStmts);
-            $compareTime += microtime(true) - $startTime;
-
-            if (!$same) {
-                echo $file, ":\n    Result of initial parse and parse after pretty print differ\n";
-
-                ++$compareFail;
-            }
-        } catch (PHPParser_Error $e) {
-            echo $file, ":\n    Parse of pretty print failed with message: {$e->getMessage()}\n";
-
-            ++$ppFail;
-        }
-    } catch (PHPParser_Error $e) {
-        echo $file, ":\n    Parse failed with message: {$e->getMessage()}\n";
-
-        ++$parseFail;
-    }
-}
-
-if (0 === $parseFail && 0 === $ppFail && 0 === $compareFail) {
-    echo "\n\n", 'All tests passed.', "\n";
-} else {
-    echo "\n\n", '==========', "\n\n", 'There were: ', "\n";
-    if (0 !== $parseFail) {
-        echo '    ', $parseFail,   ' parse failures.',        "\n";
-    }
-    if (0 !== $ppFail) {
-        echo '    ', $ppFail,      ' pretty print failures.', "\n";
-    }
-    if (0 !== $compareFail) {
-        echo '    ', $compareFail, ' compare failures.',      "\n";
-    }
-}
-
-echo "\n",
-     'Tested files:         ', $count,        "\n",
-     "\n",
-     'Reading files took:   ', $readTime,    "\n",
-     'Parsing took:         ', $parseTime,   "\n",
-     'Pretty printing took: ', $ppTime,      "\n",
-     'Reparsing took:       ', $reparseTime, "\n",
-     'Comparing took:       ', $compareTime, "\n",
-     "\n",
-     'Total time:           ', microtime(true) - $totalStartTime, "\n",
-     'Maximum memory usage: ', memory_get_peak_usage(true), "\n";
\ No newline at end of file