From 64cd796605509181bbd871073fbf9f1f202b0d39 Mon Sep 17 00:00:00 2001 From: Nick Liu Date: Sat, 4 Sep 2021 15:08:15 +0200 Subject: [PATCH 1/2] Update test dependencies Fixes: #4551 --- e107_tests/composer.lock | 636 ++++++++++++++++++++++----------------- 1 file changed, 353 insertions(+), 283 deletions(-) diff --git a/e107_tests/composer.lock b/e107_tests/composer.lock index ec4dac1c6..40f3a48a5 100644 --- a/e107_tests/composer.lock +++ b/e107_tests/composer.lock @@ -9,25 +9,26 @@ "packages-dev": [ { "name": "behat/gherkin", - "version": "v4.6.2", + "version": "v4.8.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" + "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", - "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", + "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", "shasum": "" }, "require": { - "php": ">=5.3.1" + "php": "~7.2|~8.0" }, "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" + "cucumber/cucumber": "dev-gherkin-16.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/phpunit-bridge": "~3|~4|~5", + "symfony/yaml": "~3|~4|~5" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -54,7 +55,7 @@ "homepage": "http://everzet.com" } ], - "description": "Gherkin DSL parser for PHP 5.3", + "description": "Gherkin DSL parser for PHP", "homepage": "http://behat.org/", "keywords": [ "BDD", @@ -66,22 +67,22 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/master" + "source": "https://github.com/Behat/Gherkin/tree/v4.8.0" }, - "time": "2020-03-17T14:03:26+00:00" + "time": "2021-02-04T12:44:21+00:00" }, { "name": "codeception/codeception", - "version": "4.1.13", + "version": "4.1.22", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "e817f83fe019ed3f9c280254b88f90cc70c3d7cf" + "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/e817f83fe019ed3f9c280254b88f90cc70c3d7cf", - "reference": "e817f83fe019ed3f9c280254b88f90cc70c3d7cf", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/9777ec3690ceedc4bce2ed13af7af4ca4ee3088f", + "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f", "shasum": "" }, "require": { @@ -92,7 +93,7 @@ "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/psr7": "~1.4", + "guzzlehttp/psr7": "^1.4 | ^2.0", "php": ">=5.6.0 <9.0", "symfony/console": ">=2.7 <6.0", "symfony/css-selector": ">=2.7 <6.0", @@ -101,11 +102,11 @@ "symfony/yaml": ">=2.7 <6.0" }, "require-dev": { - "codeception/module-asserts": "*@dev", - "codeception/module-cli": "*@dev", - "codeception/module-db": "*@dev", - "codeception/module-filesystem": "*@dev", - "codeception/module-phpbrowser": "*@dev", + "codeception/module-asserts": "1.*@dev", + "codeception/module-cli": "1.*@dev", + "codeception/module-db": "1.*@dev", + "codeception/module-filesystem": "1.*@dev", + "codeception/module-phpbrowser": "1.*@dev", "codeception/specify": "~0.3", "codeception/util-universalframework": "*@dev", "monolog/monolog": "~1.8", @@ -155,7 +156,7 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/4.1.13" + "source": "https://github.com/Codeception/Codeception/tree/4.1.22" }, "funding": [ { @@ -163,7 +164,7 @@ "type": "open_collective" } ], - "time": "2020-12-20T13:35:09+00:00" + "time": "2021-08-06T17:15:34+00:00" }, { "name": "codeception/lib-asserts", @@ -221,20 +222,20 @@ }, { "name": "codeception/lib-innerbrowser", - "version": "1.3.4", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-innerbrowser.git", - "reference": "fd921e089147057b456ca3660de72112167e40a4" + "reference": "31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/fd921e089147057b456ca3660de72112167e40a4", - "reference": "fd921e089147057b456ca3660de72112167e40a4", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2", + "reference": "31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2", "shasum": "" }, "require": { - "codeception/codeception": "*@dev", + "codeception/codeception": "4.*@dev", "ext-dom": "*", "ext-json": "*", "ext-mbstring": "*", @@ -275,9 +276,9 @@ ], "support": { "issues": "https://github.com/Codeception/lib-innerbrowser/issues", - "source": "https://github.com/Codeception/lib-innerbrowser/tree/1.3.4" + "source": "https://github.com/Codeception/lib-innerbrowser/tree/1.5.1" }, - "time": "2020-10-22T05:45:03+00:00" + "time": "2021-08-30T15:21:42+00:00" }, { "name": "codeception/module-asserts", @@ -450,16 +451,16 @@ }, { "name": "codeception/phpunit-wrapper", - "version": "9.0.5", + "version": "9.0.6", "source": { "type": "git", "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "72bac7770866799e23a7dda1ac6bec2f8baccf45" + "reference": "b0c06abb3181eedca690170f7ed0fd26a70bfacc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/72bac7770866799e23a7dda1ac6bec2f8baccf45", - "reference": "72bac7770866799e23a7dda1ac6bec2f8baccf45", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/b0c06abb3181eedca690170f7ed0fd26a70bfacc", + "reference": "b0c06abb3181eedca690170f7ed0fd26a70bfacc", "shasum": "" }, "require": { @@ -468,6 +469,7 @@ }, "require-dev": { "codeception/specify": "*", + "consolidation/robo": "^3.0.0-alpha3", "vlucas/phpdotenv": "^3.0" }, "type": "library", @@ -492,9 +494,9 @@ "description": "PHPUnit classes used by Codeception", "support": { "issues": "https://github.com/Codeception/phpunit-wrapper/issues", - "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.5" + "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.6" }, - "time": "2020-10-11T18:14:42+00:00" + "time": "2020-12-28T13:59:47+00:00" }, { "name": "codeception/stub", @@ -601,22 +603,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.2.0", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" + "reference": "7008573787b430c1c1f650e3722d9bba59967628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7", + "guzzlehttp/psr7": "^1.7 || ^2.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0" }, @@ -624,6 +626,7 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.5 || ^9.3.5", @@ -637,7 +640,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.1-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -679,7 +682,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.2.0" + "source": "https://github.com/guzzle/guzzle/tree/7.3.0" }, "funding": [ { @@ -699,20 +702,20 @@ "type": "github" } ], - "time": "2020-10-10T11:47:56+00:00" + "time": "2021-03-23T11:33:13+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -752,35 +755,38 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.7.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -788,16 +794,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.0-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -812,6 +815,11 @@ { "name": "Tobias Schultze", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -827,9 +835,9 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.0.0" }, - "time": "2020-09-30T07:37:11+00:00" + "time": "2021-06-30T20:03:07+00:00" }, { "name": "myclabs/deep-copy", @@ -891,16 +899,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.4", + "version": "v4.12.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + "reference": "6608f01670c3cc5079e18c1dab1104e002579143" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143", "shasum": "" }, "require": { @@ -941,22 +949,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" }, - "time": "2020-12-20T10:01:03+00:00" + "time": "2021-07-21T10:44:31+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -1001,22 +1009,22 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -1052,9 +1060,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.4" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1216,16 +1224,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.2", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { @@ -1277,22 +1285,22 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" }, - "time": "2020-12-19T10:15:11+00:00" + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -1348,7 +1356,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" }, "funding": [ { @@ -1356,7 +1364,7 @@ "type": "github" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1601,16 +1609,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.0", + "version": "9.5.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" + "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", + "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", "shasum": "" }, "require": { @@ -1622,7 +1630,7 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", @@ -1640,7 +1648,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", + "sebastian/type": "^2.3.4", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -1688,7 +1696,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.9" }, "funding": [ { @@ -1700,31 +1708,26 @@ "type": "github" } ], - "time": "2020-12-04T05:05:53+00:00" + "time": "2021-08-31T06:47:40+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1737,7 +1740,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1751,9 +1754,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/event-dispatcher", @@ -1857,6 +1860,61 @@ }, "time": "2020-06-29T06:28:15+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -2460,16 +2518,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { @@ -2512,7 +2570,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" }, "funding": [ { @@ -2520,7 +2578,7 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { "name": "sebastian/lines-of-code", @@ -2807,20 +2865,21 @@ "type": "github" } ], + "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", "shasum": "" }, "require": { @@ -2855,7 +2914,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" }, "funding": [ { @@ -2863,7 +2922,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2021-06-15T12:49:02+00:00" }, { "name": "sebastian/version", @@ -2920,21 +2979,22 @@ }, { "name": "symfony/browser-kit", - "version": "v5.2.1", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a" + "reference": "c1e3f64fcc631c96e2c5843b666db66679ced11c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a", - "reference": "87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c1e3f64fcc631c96e2c5843b666db66679ced11c", + "reference": "c1e3f64fcc631c96e2c5843b666db66679ced11c", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/dom-crawler": "^4.4|^5.0" + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "symfony/css-selector": "^4.4|^5.0", @@ -2968,10 +3028,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony BrowserKit Component", + "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.2.1" + "source": "https://github.com/symfony/browser-kit/tree/v5.3.4" }, "funding": [ { @@ -2987,31 +3047,33 @@ "type": "tidelift" } ], - "time": "2020-12-18T08:03:05+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/console", - "version": "v5.2.1", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "47c02526c532fb381374dab26df05e7313978976" + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/47c02526c532fb381374dab26df05e7313978976", - "reference": "47c02526c532fb381374dab26df05e7313978976", + "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2", "symfony/string": "^5.1" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -3019,10 +3081,10 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/event-dispatcher": "^4.4|^5.0", @@ -3059,7 +3121,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ "cli", @@ -3068,7 +3130,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.1" + "source": "https://github.com/symfony/console/tree/v5.3.7" }, "funding": [ { @@ -3084,24 +3146,25 @@ "type": "tidelift" } ], - "time": "2020-12-18T08:03:05+00:00" + "time": "2021-08-25T20:02:16+00:00" }, { "name": "symfony/css-selector", - "version": "v5.2.1", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054" + "reference": "7fb120adc7f600a59027775b224c13a33530dd90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/f789e7ead4c79e04ca9a6d6162fc629c89bd8054", - "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3130,10 +3193,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.2.1" + "source": "https://github.com/symfony/css-selector/tree/v5.3.4" }, "funding": [ { @@ -3149,20 +3212,20 @@ "type": "tidelift" } ], - "time": "2020-12-08T17:02:38+00:00" + "time": "2021-07-21T12:38:00+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { @@ -3171,7 +3234,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3200,7 +3263,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" }, "funding": [ { @@ -3216,27 +3279,28 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.2.1", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "ee7cf316fb0de786cfe5ae32ee79502b290c81ea" + "reference": "c7eef3a60ccfdd8eafe07f81652e769ac9c7146c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ee7cf316fb0de786cfe5ae32ee79502b290c81ea", - "reference": "ee7cf316fb0de786cfe5ae32ee79502b290c81ea", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c7eef3a60ccfdd8eafe07f81652e769ac9c7146c", + "reference": "c7eef3a60ccfdd8eafe07f81652e769ac9c7146c", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "masterminds/html5": "<2.6" @@ -3271,10 +3335,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.2.1" + "source": "https://github.com/symfony/dom-crawler/tree/v5.3.7" }, "funding": [ { @@ -3290,27 +3354,27 @@ "type": "tidelift" } ], - "time": "2020-12-18T08:02:46+00:00" + "time": "2021-08-29T19:32:13+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.2.1", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1c93f7a1dff592c252574c79a8635a8a80856042" + "reference": "ce7b20d69c66a20939d8952b617506a44d102130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1c93f7a1dff592c252574c79a8635a8a80856042", - "reference": "1c93f7a1dff592c252574c79a8635a8a80856042", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", + "reference": "ce7b20d69c66a20939d8952b617506a44d102130", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -3320,7 +3384,7 @@ "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/error-handler": "^4.4|^5.0", @@ -3356,10 +3420,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7" }, "funding": [ { @@ -3375,20 +3439,20 @@ "type": "tidelift" } ], - "time": "2020-12-18T08:03:05+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", "shasum": "" }, "require": { @@ -3401,7 +3465,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3438,7 +3502,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" }, "funding": [ { @@ -3454,24 +3518,25 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/finder", - "version": "v5.2.1", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba" + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0b9231a5922fd7287ba5b411893c0ecd2733e5ba", - "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3496,10 +3561,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.1" + "source": "https://github.com/symfony/finder/tree/v5.3.7" }, "funding": [ { @@ -3515,20 +3580,20 @@ "type": "tidelift" } ], - "time": "2020-12-08T17:02:38+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { @@ -3540,7 +3605,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3578,7 +3643,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { @@ -3594,20 +3659,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { @@ -3619,7 +3684,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3659,7 +3724,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, "funding": [ { @@ -3675,20 +3740,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { @@ -3700,7 +3765,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3743,7 +3808,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" }, "funding": [ { @@ -3759,20 +3824,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { @@ -3784,7 +3849,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3823,7 +3888,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -3839,20 +3904,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { @@ -3861,7 +3926,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3902,7 +3967,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" }, "funding": [ { @@ -3918,20 +3983,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { @@ -3940,7 +4005,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3985,7 +4050,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, "funding": [ { @@ -4001,25 +4066,25 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-07-28T13:41:28+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1" }, "suggest": { "symfony/service-implementation": "" @@ -4027,7 +4092,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4064,7 +4129,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" }, "funding": [ { @@ -4080,20 +4145,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-04-01T10:43:52+00:00" }, { "name": "symfony/string", - "version": "v5.2.1", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", - "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", "shasum": "" }, "require": { @@ -4136,7 +4201,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony String component", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ "grapheme", @@ -4147,7 +4212,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.1" + "source": "https://github.com/symfony/string/tree/v5.3.7" }, "funding": [ { @@ -4163,20 +4228,20 @@ "type": "tidelift" } ], - "time": "2020-12-05T07:33:16+00:00" + "time": "2021-08-26T08:00:08+00:00" }, { "name": "symfony/yaml", - "version": "v5.2.1", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "290ea5e03b8cf9b42c783163123f54441fb06939" + "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/290ea5e03b8cf9b42c783163123f54441fb06939", - "reference": "290ea5e03b8cf9b42c783163123f54441fb06939", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", + "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", "shasum": "" }, "require": { @@ -4219,10 +4284,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.1" + "source": "https://github.com/symfony/yaml/tree/v5.3.6" }, "funding": [ { @@ -4238,20 +4303,20 @@ "type": "tidelift" } ], - "time": "2020-12-08T17:02:38+00:00" + "time": "2021-07-29T06:20:01+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -4280,7 +4345,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -4288,20 +4353,20 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "twig/twig", - "version": "v3.1.1", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "b02fa41f3783a2616eccef7b92fbc2343ffed737" + "reference": "21578f00e83d4a82ecfa3d50752b609f13de6790" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/b02fa41f3783a2616eccef7b92fbc2343ffed737", - "reference": "b02fa41f3783a2616eccef7b92fbc2343ffed737", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/21578f00e83d4a82ecfa3d50752b609f13de6790", + "reference": "21578f00e83d4a82ecfa3d50752b609f13de6790", "shasum": "" }, "require": { @@ -4316,7 +4381,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -4352,7 +4417,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.1.1" + "source": "https://github.com/twigphp/Twig/tree/v3.3.2" }, "funding": [ { @@ -4364,34 +4429,39 @@ "type": "tidelift" } ], - "time": "2020-10-27T19:28:23+00:00" + "time": "2021-05-16T12:14:13+00:00" }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -4414,10 +4484,10 @@ "validate" ], "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], @@ -4427,5 +4497,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } From 20882920a0b68937570264949512acc0c4841dbd Mon Sep 17 00:00:00 2001 From: Nick Liu Date: Sat, 4 Sep 2021 15:06:19 +0200 Subject: [PATCH 2/2] Fix all PHP 8.1 test failures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * `strftime()` has been replaced with a polyfill based on `DateTime`. * Explicit type casts/assertions added where required by PHP 8.1 * `filter_var(…, FILTER_SANITIZE_STRING)` replaced with `strip_tags()` or HTML entity encoding of quotation marks, depending on a guess of what the intended "sanitization" was * `http_build_query()` usage type mismatches fixed * Removed usages of the `FILE_TEXT` constant * To avoid breaking PHP 5.6 compatibility (function return types), `e_session_db` no longer implements `SessionHandlerInterface`. Instead, the alternative non-OOP invocation of `session_set_save_handler()` is used instead to apply the session handler. * The shim for `strptime()` still calls the native function if available but now suppresses the deprecation warning. * `e_db_pdo` explicitly asks for `PDO::ATTR_STRINGIFY_FETCHES` to maintain consistent behavior with past versions of PHP. * `e_db_mysql` explicitly sets `mysqli_report(MYSQLI_REPORT_OFF)` to maintain consistent behavior with past versions of PHP. * Removed pointless random number generator seed from `banner` plugin * Workaround for `COUNT(*)` SQL query in `validatorClass::dbValidateArray()` without a proper API for avoiding SQL injection --- class2.php | 2 +- comment.php | 2 +- e107_admin/admin_log.php | 2 +- e107_admin/banlist_export.php | 4 +- e107_admin/cpage.php | 2 +- e107_admin/cron.php | 8 +- e107_admin/image.php | 2 +- e107_admin/prefs.php | 44 +++--- e107_admin/users.php | 2 +- e107_core/bbcodes/link.bb | 1 + .../shortcodes/batch/admin_shortcodes.php | 17 +-- .../shortcodes/batch/news_shortcodes.php | 2 +- .../shortcodes/batch/signup_shortcodes.php | 6 +- .../batch/usersettings_shortcodes.php | 2 +- .../Shims/Internal/StrptimeTrait.php | 16 ++- e107_handlers/admin_log_class.php | 2 +- e107_handlers/admin_ui.php | 15 +- e107_handlers/bbcode_handler.php | 6 +- e107_handlers/cache_handler.php | 5 +- e107_handlers/cron_class.php | 4 +- e107_handlers/date_handler.php | 129 ++++++++++++++---- e107_handlers/db_table_admin_class.php | 1 + e107_handlers/e_db_pdo_class.php | 9 +- e107_handlers/e_parse_class.php | 24 +++- e107_handlers/e_render_class.php | 1 + e107_handlers/e_thumbnail_class.php | 2 +- e107_handlers/form_handler.php | 28 ++-- e107_handlers/iphandler_class.php | 4 +- e107_handlers/media_class.php | 3 +- e107_handlers/menumanager_class.php | 2 +- e107_handlers/mysql_class.php | 9 +- e107_handlers/news_class.php | 2 +- e107_handlers/plugin_class.php | 4 +- e107_handlers/search_class.php | 2 +- e107_handlers/session_handler.php | 17 ++- e107_handlers/shortcode_handler.php | 5 +- e107_handlers/sitelinks_class.php | 3 +- e107_handlers/traffic_class.php | 4 +- e107_handlers/upload_handler.php | 2 +- e107_handlers/userclass_class.php | 1 + e107_handlers/validator_class.php | 15 +- e107_plugins/banner/banner.php | 4 +- e107_plugins/banner/e_shortcode.php | 4 +- .../blogcalendar_menu/blogcalendar_menu.php | 2 +- e107_plugins/download/download_shortcodes.php | 2 +- .../download/handlers/category_class.php | 2 +- e107_plugins/faqs/faqs.php | 2 +- e107_plugins/featurebox/e_shortcode.php | 2 +- e107_plugins/forum/forum_stats.php | 1 + e107_plugins/list_new/list_class.php | 4 +- e107_plugins/news/news.php | 4 +- e107_plugins/page/e_shortcode.php | 2 +- e107_plugins/pm/pm_func.php | 3 + install.php | 9 -- 54 files changed, 295 insertions(+), 157 deletions(-) diff --git a/class2.php b/class2.php index 665091551..1b9d8a36f 100755 --- a/class2.php +++ b/class2.php @@ -1233,7 +1233,7 @@ function check_class($var, $userclass = null, $uid = 0) $class_array = !is_array($userclass) ? explode(',', $userclass) : $userclass; - $varList = !is_array($var) ? explode(',', $var) : $var; + $varList = !is_array($var) ? explode(',', (string) $var) : $var; $latchedAccess = false; foreach ($varList as $v) diff --git a/comment.php b/comment.php index 63ccf8d65..30de4c920 100644 --- a/comment.php +++ b/comment.php @@ -107,7 +107,7 @@ if(e_AJAX_REQUEST) // TODO improve security { $pid = intval(varset($_POST['pid'], 0)); // ID of the specific comment being edited (nested comments - replies) $row = array(); - $authName = filter_var($_POST['author_name'],FILTER_SANITIZE_STRING); + $authName = e107::getParser()->filter($_POST['author_name'], 'str'); $clean_authorname = vartrue($authName,USERNAME); $clean_comment = e107::getParser()->toText($_POST['comment']); $clean_subject = e107::getParser()->filter($_POST['subject'],'str'); diff --git a/e107_admin/admin_log.php b/e107_admin/admin_log.php index 05de1d5cc..74eaf4d8c 100644 --- a/e107_admin/admin_log.php +++ b/e107_admin/admin_log.php @@ -371,7 +371,7 @@ class admin_log_ui extends e_admin_ui if(($action == "backdel") && isset($_POST['backdeltype'])) { // $old_date = intval($qs[1]); - $old_string = strftime("%d %B %Y", $old_date); + $old_string = e_date::strftime("%d %B %Y", $old_date); $qry = "dblog_datestamp < ".$old_date; // Same field for both logs switch($_POST['backdeltype']) diff --git a/e107_admin/banlist_export.php b/e107_admin/banlist_export.php index bdaf00fdb..e1b66598d 100644 --- a/e107_admin/banlist_export.php +++ b/e107_admin/banlist_export.php @@ -65,7 +65,7 @@ if (!empty($_POST['ban_types'])) } } -$filename = 'banlist_'.strftime("%Y%m%d_%H%M%S").'.csv'; +$filename = 'banlist_'.e_date::strftime("%Y%m%d_%H%M%S").'.csv'; if ($error_string = do_export($filename, $type_list, $format_array, $use_separator, $use_quote)) { @@ -98,7 +98,7 @@ function do_export($filename, $type_list='',$format_array=array(), $sep = ',', $ break; case 'banlist_datestamp' : case 'banlist_banexpires' : - if ($row[$f]) $line .= $spacer.$quot.strftime($v,$row[$f]).$quot; else $line .= $spacer.$quot.'0'.$quot; + if ($row[$f]) $line .= $spacer.$quot.e_date::strftime($v,$row[$f]).$quot; else $line .= $spacer.$quot.'0'.$quot; break; } $spacer = $sep; diff --git a/e107_admin/cpage.php b/e107_admin/cpage.php index b7ac42473..6434d08c0 100644 --- a/e107_admin/cpage.php +++ b/e107_admin/cpage.php @@ -141,7 +141,7 @@ class page_admin_form_ui extends e_admin_form_ui parse_str(str_replace('&', '&', e_QUERY), $query); //FIXME - FIX THIS $query['action'] = 'edit'; $query['id'] = $id; - $query = http_build_query($query,null, '&'); + $query = http_build_query($query, '', '&'); $text = " ".ADMIN_EDIT_ICON.""; diff --git a/e107_admin/cron.php b/e107_admin/cron.php index c4939cba6..8b5461714 100644 --- a/e107_admin/cron.php +++ b/e107_admin/cron.php @@ -542,9 +542,9 @@ class cron_admin_form_ui extends e_admin_form_ui $text .= "
"; $text .= ($day != '*') ? LAN_CRON_52 ." ". $day : LAN_CRON_40; // Day(s) $text .= "
"; - $text .= ($month != '*') ? LAN_CRON_53 ." ". strftime("%B", mktime(00, 00, 00, $month, 1, 2000)) : LAN_CRON_41; // Month(s) + $text .= ($month != '*') ? LAN_CRON_53 ." ". e_date::strftime("%B", mktime(00, 00, 00, (int) $month, 1, 2000)) : LAN_CRON_41; // Month(s) $text .= "
"; - $text .= ($weekday != '*') ? LAN_CRON_54 ." ". strftime("%A", mktime(00, 00, 00, 5, $weekday, 2000)) : LAN_CRON_42; // Weekday(s) + $text .= ($weekday != '*') ? LAN_CRON_54 ." ". e_date::strftime("%A", mktime(00, 00, 00, 5, (int) $weekday, 2000)) : LAN_CRON_42; // Weekday(s) return "".ADMIN_INFO_ICON." @@ -711,7 +711,7 @@ class cron_admin_form_ui extends e_admin_form_ui { $sel = (in_array($i, $month)) ? "selected='selected'" : ""; $diz = mktime(00, 00, 00, $i, 1, 2000); - $text .= "\n"; + $text .= "\n"; } $text .= " @@ -724,7 +724,7 @@ class cron_admin_form_ui extends e_admin_form_ui for ($i = 0; $i <= 6; $i++) { $sel = (in_array(strval($i), $weekday)) ? "selected='selected'" : ""; - $text .= "\n"; + $text .= "\n"; } $text .= " "; diff --git a/e107_admin/image.php b/e107_admin/image.php index 4a6b55500..cb9e9b907 100644 --- a/e107_admin/image.php +++ b/e107_admin/image.php @@ -672,7 +672,7 @@ class media_form_ui extends e_admin_form_ui // $save = ($_GET['bbcode']!='file') ? "e-dialog-save" : ""; // e-dialog-close - $for = $this->getController()->getQuery('for'); + $for = (string) $this->getController()->getQuery('for'); diff --git a/e107_admin/prefs.php b/e107_admin/prefs.php index 57f7d4fac..d7b8f59c3 100644 --- a/e107_admin/prefs.php +++ b/e107_admin/prefs.php @@ -787,26 +787,26 @@ $text .= " $def = strtotime('December 21, 2012 3:45pm'); $inputdate = array( // TODO add more formats - "%A, %d %B, %Y" => strftime("%A, %d %B, %Y",$def), - "%A, %d %b, %Y" => strftime("%A, %d %b, %Y",$def), - "%a, %d %B, %Y" => strftime("%a, %d %B, %Y",$def), - "%a, %d %b, %Y" => strftime("%a, %d %b, %Y",$def), + "%A, %d %B, %Y" => e_date::strftime("%A, %d %B, %Y",$def), + "%A, %d %b, %Y" => e_date::strftime("%A, %d %b, %Y",$def), + "%a, %d %B, %Y" => e_date::strftime("%a, %d %B, %Y",$def), + "%a, %d %b, %Y" => e_date::strftime("%a, %d %b, %Y",$def), - "%A, %B %d, %Y" => strftime("%A, %B %d, %Y",$def), - "%A, %b %d, %Y" => strftime("%A, %b %d, %Y",$def), - "%A, %b %d, %y" => strftime("%A, %b %d, %y",$def), + "%A, %B %d, %Y" => e_date::strftime("%A, %B %d, %Y",$def), + "%A, %b %d, %Y" => e_date::strftime("%A, %b %d, %Y",$def), + "%A, %b %d, %y" => e_date::strftime("%A, %b %d, %y",$def), - "%B %d, %Y" => strftime("%B %d, %Y",$def), - "%b %d, %Y" => strftime("%b %d, %Y",$def), - "%b %d, %y" => strftime("%b %d, %y",$def), + "%B %d, %Y" => e_date::strftime("%B %d, %Y",$def), + "%b %d, %Y" => e_date::strftime("%b %d, %Y",$def), + "%b %d, %y" => e_date::strftime("%b %d, %y",$def), - "%d %B, %Y" => strftime("%d %B, %Y",$def), - "%d %b, %Y" => strftime("%d %b, %Y",$def), - "%d %b, %y" => strftime("%d %b, %y",$def), + "%d %B, %Y" => e_date::strftime("%d %B, %Y",$def), + "%d %b, %Y" => e_date::strftime("%d %b, %Y",$def), + "%d %b, %y" => e_date::strftime("%d %b, %y",$def), - "%Y-%m-%d" => strftime("%Y-%m-%d",$def), - "%d-%m-%Y" => strftime("%d-%m-%Y",$def), - "%m/%d/%Y" => strftime("%m/%d/%Y",$def) + "%Y-%m-%d" => e_date::strftime("%Y-%m-%d",$def), + "%d-%m-%Y" => e_date::strftime("%d-%m-%Y",$def), + "%m/%d/%Y" => e_date::strftime("%m/%d/%Y",$def) ); @@ -815,19 +815,19 @@ $text .= " - $inputtime["%I:%M %p"] = strftime("%I:%M %p",$def); + $inputtime["%I:%M %p"] = e_date::strftime("%I:%M %p",$def); if(e107::getDate()->supported('P')) { - $inputtime["%I:%M %P"] = strftime("%I:%M %P",$def); + $inputtime["%I:%M %P"] = e_date::strftime("%I:%M %P",$def); } if(e107::getDate()->supported('l')) { - $inputtime["%l:%M %p"] = strftime("%l:%M %p",$def); - $inputtime["%l:%M %P"] = strftime("%l:%M %P",$def); + $inputtime["%l:%M %p"] = e_date::strftime("%l:%M %p",$def); + $inputtime["%l:%M %P"] = e_date::strftime("%l:%M %P",$def); } - $inputtime["%H:%M"] = strftime("%H:%M",$def); - $inputtime["%H:%M:%S"] = strftime("%H:%M:%S",$def); + $inputtime["%H:%M"] = e_date::strftime("%H:%M",$def); + $inputtime["%H:%M:%S"] = e_date::strftime("%H:%M:%S",$def); diff --git a/e107_admin/users.php b/e107_admin/users.php index a041c9a23..092d57226 100644 --- a/e107_admin/users.php +++ b/e107_admin/users.php @@ -2400,7 +2400,7 @@ class users_admin_form_ui extends e_admin_form_ui $att['type'] = 'boolean'; // $uid = $this->getController()->getModel()->get('user_id'); - $perms = $this->getController()->getModel()->get('user_perms'); + $perms = (string) $this->getController()->getModel()->get('user_perms'); if($mode == 'filter' && getperms('3')) { diff --git a/e107_core/bbcodes/link.bb b/e107_core/bbcodes/link.bb index cba18249e..683481288 100644 --- a/e107_core/bbcodes/link.bb +++ b/e107_core/bbcodes/link.bb @@ -62,6 +62,7 @@ global $pref, $parm; $extras = "rel=external"; } + $extras = (string) $extras; if($extras == "external" || strpos($extras,"rel=external")!==FALSE) { $insert = "rel='external' "; diff --git a/e107_core/shortcodes/batch/admin_shortcodes.php b/e107_core/shortcodes/batch/admin_shortcodes.php index 8d8be21eb..4d81af63b 100644 --- a/e107_core/shortcodes/batch/admin_shortcodes.php +++ b/e107_core/shortcodes/batch/admin_shortcodes.php @@ -136,7 +136,7 @@ class admin_shortcodes extends e_shortcode if (!ADMIN) { return ''; } return "
- +
"; } @@ -495,6 +495,7 @@ class admin_shortcodes extends e_shortcode } if (ADMIN) { + e107::coreLan('', true); if (!function_exists('admin_latest')) //XXX Is this still necessary? { function admin_latest($parm='') @@ -515,14 +516,14 @@ class admin_shortcodes extends e_shortcode // $text .= "
".E_16_UPLOADS." ".ADLAN_LAT_7.": $active_uploads
"; $oldconfigs = array(); - $oldconfigs['e-news'][0] = array('icon' =>E_16_NEWS, 'title' =>ADLAN_LAT_2, 'url' => e_ADMIN. 'newspost.php?mode=sub&action=list', 'total' =>$submitted_news); + $oldconfigs['e-news'][0] = array('icon' =>defset('E_16_NEWS'), 'title' =>defset('ADLAN_LAT_2'), 'url' => e_ADMIN. 'newspost.php?mode=sub&action=list', 'total' =>$submitted_news); if(empty($pref['comments_disabled']) && varset($pref['comments_engine'],'e107') === 'e107') { - $oldconfigs['e-comment'][0] = array('icon' =>E_16_COMMENT, 'title' =>ADLAN_LAT_9, 'url' => e_ADMIN_ABS. 'comment.php?searchquery=&filter_options=comment_blocked__2', 'total' =>$comments_pending); + $oldconfigs['e-comment'][0] = array('icon' =>defset('E_16_COMMENT'), 'title' =>defset('ADLAN_LAT_9'), 'url' => e_ADMIN_ABS. 'comment.php?searchquery=&filter_options=comment_blocked__2', 'total' =>$comments_pending); } - $oldconfigs['e-upload'][0] = array('icon' =>E_16_UPLOADS, 'title' =>ADLAN_LAT_7, 'url' => e_ADMIN. 'upload.php', 'total' =>$active_uploads); + $oldconfigs['e-upload'][0] = array('icon' =>defset('E_16_UPLOADS'), 'title' =>defset('ADLAN_LAT_7'), 'url' => e_ADMIN. 'upload.php', 'total' =>$active_uploads); $messageTypes = array(/*'Broken Download',*/ 'Dev Team Message'); $queryString = ''; @@ -536,7 +537,7 @@ class admin_shortcodes extends e_shortcode { // $text .= "
".ADLAN_LAT_8." [".$amount."]"; - $oldconfigs['e-generic'][0] = array('icon' =>E_16_NOTIFY, 'title' =>ADLAN_LAT_8, 'url' => e_ADMIN_ABS. 'message.php', 'total' =>$amount); + $oldconfigs['e-generic'][0] = array('icon' =>defset('E_16_NOTIFY'), 'title' =>defset('ADLAN_LAT_8'), 'url' => e_ADMIN_ABS. 'message.php', 'total' =>$amount); } @@ -1304,7 +1305,7 @@ class admin_shortcodes extends e_shortcode

' .FOOTLAN_19. '
- ' .strftime('%A %d %B %Y - %H:%M'). + ' .e_date::strftime('%A %d %B %Y - %H:%M'). '
'; return e107::getRender()->tablerender(FOOTLAN_13, $text, '', TRUE); @@ -2146,7 +2147,7 @@ Inverse 10 10 continue; } - $catid = $admin_cat['id'][$subitem[4]]; + $catid = isset($admin_cat['id'][$subitem[4]]) ? $admin_cat['id'][$subitem[4]] : null; $tmp = array(); $tmp['text'] = $subitem[1]; $tmp['description'] = $subitem[2]; @@ -2415,7 +2416,7 @@ Inverse 10 10 $languages = $slng->installed();//array('English','French'); $multiDoms = array(); - if($langSubs = explode("\n", e107::getPref('multilanguage_subdomain'))) + if($langSubs = explode("\n", (string) e107::getPref('multilanguage_subdomain'))) { foreach($langSubs as $v) diff --git a/e107_core/shortcodes/batch/news_shortcodes.php b/e107_core/shortcodes/batch/news_shortcodes.php index 1a2322d5a..cb6a86726 100644 --- a/e107_core/shortcodes/batch/news_shortcodes.php +++ b/e107_core/shortcodes/batch/news_shortcodes.php @@ -1209,7 +1209,7 @@ class news_shortcodes extends e_shortcode /** New in v2.3 {NEWS_PAGINATION} */ function sc_news_pagination($parm=null) { - $params = e107::getRegistry('core/news/pagination'); + $params = (string) e107::getRegistry('core/news/pagination'); parse_str($params,$opts); diff --git a/e107_core/shortcodes/batch/signup_shortcodes.php b/e107_core/shortcodes/batch/signup_shortcodes.php index 7bf7a34c2..dbe4548bf 100755 --- a/e107_core/shortcodes/batch/signup_shortcodes.php +++ b/e107_core/shortcodes/batch/signup_shortcodes.php @@ -199,7 +199,7 @@ class signup_shortcodes extends e_shortcode if (check_class($pref['displayname_class'])) { $dis_name_len = varset($pref['displayname_maxlength'],15); - $val = !empty($_POST['username']) ? filter_var($_POST['username'], FILTER_SANITIZE_STRING) : ''; + $val = !empty($_POST['username']) ? e107::getParser()->filter($_POST['username'], 'str') : ''; return e107::getForm()->text('username', $val, $dis_name_len); } @@ -230,7 +230,7 @@ class signup_shortcodes extends e_shortcode $options['class'] = vartrue($parm['class'],''); $options['placeholder'] = vartrue($parm['placeholder']) ? $parm['placeholder'] : ''; - $val = !empty($_POST['loginname']) ? filter_var($_POST['loginname'], FILTER_SANITIZE_STRING) : ''; + $val = !empty($_POST['loginname']) ? e107::getParser()->filter($_POST['loginname'], 'str') : ''; return e107::getForm()->text('loginname', $val, $log_name_length, $options); } @@ -252,7 +252,7 @@ class signup_shortcodes extends e_shortcode $options['class'] = vartrue($parm['class'],''); $options['placeholder'] = vartrue($parm['placeholder'],''); - $val = ($_POST['realname']) ? filter_var($_POST['realname'], FILTER_SANITIZE_STRING) : ''; + $val = ($_POST['realname']) ? e107::getParser()->filter($_POST['realname'], 'str') : ''; return e107::getForm()->text('realname', $val, 100, $options); diff --git a/e107_core/shortcodes/batch/usersettings_shortcodes.php b/e107_core/shortcodes/batch/usersettings_shortcodes.php index 8ac966b69..232ce49b8 100755 --- a/e107_core/shortcodes/batch/usersettings_shortcodes.php +++ b/e107_core/shortcodes/batch/usersettings_shortcodes.php @@ -642,7 +642,7 @@ class usersettings_shortcodes extends e_shortcode } $uVal = str_replace(chr(1), "", varset($this->var['user_' . $parm])); - $fval = $ue->user_extended_edit($fInfo, $uVal); + $fval = (string) $ue->user_extended_edit($fInfo, $uVal); $rVal = !empty($fInfo['user_extended_struct_required']); diff --git a/e107_handlers/Shims/Internal/StrptimeTrait.php b/e107_handlers/Shims/Internal/StrptimeTrait.php index cda1c74a5..af66b1edf 100644 --- a/e107_handlers/Shims/Internal/StrptimeTrait.php +++ b/e107_handlers/Shims/Internal/StrptimeTrait.php @@ -12,6 +12,9 @@ namespace e107\Shims\Internal; +use DateTimeZone; +use e_date; + trait StrptimeTrait { /** @@ -38,7 +41,8 @@ trait StrptimeTrait { $result = false; if (function_exists('strptime') && (new \ReflectionFunction('strptime'))->isInternal()) - $result = strptime($date, $format); + // @ to suppress PHP 8.1 deprecation warning + $result = @strptime($date, $format); if (!is_array($result)) $result = self::strptime_alt($date, $format); return $result; @@ -76,10 +80,10 @@ trait StrptimeTrait for ($i = 1; $i <= 12; $i++) { - $k = strftime('%B', mktime(0, 0, 0, $i)); + $k = e_date::strftime('%B', mktime(0, 0, 0, $i)); $fullmonth[$k] = $i; - $j = strftime('%b', mktime(0, 0, 0, $i)); + $j = e_date::strftime('%b', mktime(0, 0, 0, $i)); $abrevmonth[$j] = $i; } @@ -153,8 +157,10 @@ trait StrptimeTrait $unxTimestamp = mktime($vals['tm_hour'], $vals['tm_min'], $vals['tm_sec'], ($vals['tm_mon'] + 1), $vals['tm_mday'], ($vals['tm_year'] + 1900)); - $vals['tm_wday'] = (int)strftime('%w', $unxTimestamp); // Days since Sunday (0-6) - $vals['tm_yday'] = (strftime('%j', $unxTimestamp) - 1); // Days since January 1 (0-365) + $datetime = date_create("@$unxTimestamp"); + $datetime->setTimezone(new DateTimeZone(date_default_timezone_get())); + $vals['tm_wday'] = date_format($datetime, 'w'); // Days since Sunday (0-6) + $vals['tm_yday'] = date_format($datetime, 'z'); // Days since January 1 (0-365) } return !empty($vals) ? $vals : false; diff --git a/e107_handlers/admin_log_class.php b/e107_handlers/admin_log_class.php index 69586092b..1828223e3 100644 --- a/e107_handlers/admin_log_class.php +++ b/e107_handlers/admin_log_class.php @@ -966,7 +966,7 @@ class e_admin_log } else { - $app = null; + $app = 0; $text = $head . $text; } diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php index 3c7259963..9cd61784a 100755 --- a/e107_handlers/admin_ui.php +++ b/e107_handlers/admin_ui.php @@ -6686,9 +6686,10 @@ class e_admin_ui extends e_admin_controller_ui protected function parseAliases() { // parse table - if(strpos($this->table, '.') !== false) + $tableName = $this->getTableName(); + if(strpos($tableName, '.') !== false) { - $tmp = explode('.', $this->table, 2); + $tmp = explode('.', $tableName, 2); $this->table = $tmp[1]; $this->tableAlias = $tmp[0]; unset($tmp); @@ -7443,7 +7444,7 @@ class e_admin_form_ui extends e_form $vars = $this->getController()->getQuery(); $vars['from'] = '[FROM]'; - $paginate = http_build_query($vars, null, '&'); + $paginate = http_build_query($vars, '', '&'); e107::js('footer-inline', " \$('#admin-ui-list-filter a.nextprev-item').on('click', function() { @@ -7517,7 +7518,7 @@ class e_admin_form_ui extends e_form $gridAction = $this->getController()->getAction() === 'grid' ? 'list' : 'grid'; $gridQuery = (array) $_GET; $gridQuery['action'] = $gridAction; - $toggleUrl = e_REQUEST_SELF. '?' .http_build_query($gridQuery, null, '&'); + $toggleUrl = e_REQUEST_SELF. '?' .http_build_query($gridQuery, '', '&'); $gridIcon = ($gridAction === 'grid') ? ADMIN_GRID_ICON : ADMIN_LIST_ICON; $gridTitle = ($gridAction === 'grid') ? LAN_UI_VIEW_GRID_LABEL : LAN_UI_VIEW_LIST_LABEL; $gridToggle = "' .$gridIcon. ''; @@ -8082,10 +8083,10 @@ class e_admin_form_ui extends e_form $parms['__options'] = $fopts; } - - if(!is_array(varset($parms['__options']))) + if (!isset($parms['__options'])) $parms['__options'] = null; + if(!is_array($parms['__options'])) { - parse_str($parms['__options'], $parms['__options']); + parse_str((string) $parms['__options'], $parms['__options']); } $opts = $parms['__options']; if(!empty($opts['multiple']) && $type === 'batch') diff --git a/e107_handlers/bbcode_handler.php b/e107_handlers/bbcode_handler.php index 023332556..5a90ecc6e 100644 --- a/e107_handlers/bbcode_handler.php +++ b/e107_handlers/bbcode_handler.php @@ -389,6 +389,7 @@ class e_bbcode ob_start(); try { + $bbcode = isset($bbcode) && is_string($bbcode) ? $bbcode : ''; $bbcode_return = eval($bbcode); //FIXME notice removal } catch (ParseError $e) @@ -403,6 +404,7 @@ class e_bbcode trigger_error($error, E_USER_NOTICE); } + $bbcode_return = isset($bbcode_return) ? $bbcode_return : ''; /* added to remove possibility of nested bbcode exploits ... */ if(strpos($bbcode_return, "[") !== FALSE) { @@ -548,7 +550,7 @@ class e_bbcode */ function renderButtons($template='', $id='', $options=array()) { - + $template = (string) $template; $tp = e107::getParser(); // Notice Removal @@ -804,7 +806,7 @@ class e_bbcode $code_text = (strpos($img['src'],'http') === 0) ? $img['src'] : str_replace($tp->getUrlConstants('raw'), $tp->getUrlConstants('sc'), $qr['src']); unset($img['src'],$img['srcset'],$img['@value'], $img['caption'], $img['alt']); - $parms = !empty($img) ? ' '.str_replace('+', ' ', http_build_query($img,null, '&')) : ""; + $parms = !empty($img) ? ' '.str_replace('+', ' ', http_build_query($img)) : ""; $replacement = '[img'.$parms.']'.$code_text.'[/img]'; diff --git a/e107_handlers/cache_handler.php b/e107_handlers/cache_handler.php index 580fda319..2d642deb7 100644 --- a/e107_handlers/cache_handler.php +++ b/e107_handlers/cache_handler.php @@ -320,7 +320,6 @@ class ecache { * @scope private */ function delete($dir, $pattern = "*.*", $syscache = false) { - $deleted = false; $pattern = ($syscache ? "S_" : "C_").$pattern; $pattern = str_replace(array("\*", "\?"), array(".*", "."), preg_quote($pattern)); if (substr($dir, -1) != "/") { @@ -331,9 +330,7 @@ class ecache { $d = opendir($dir); while ($file = readdir($d)) { if (is_file($dir.$file) && preg_match("/^{$pattern}$/", $file)) { - if (unlink($dir.$file)) { - $deleted[] = $file; - } + unlink($dir.$file); } } closedir($d); diff --git a/e107_handlers/cron_class.php b/e107_handlers/cron_class.php index 26d4c3297..9ba0cccfd 100644 --- a/e107_handlers/cron_class.php +++ b/e107_handlers/cron_class.php @@ -391,7 +391,7 @@ class CronParser function getLastRan() { - return explode(",", strftime("%M,%H,%d,%m,%w,%Y", $this->lastRan)); //Get the values for now in a format we can use + return explode(",", e_date::strftime("%M,%H,%d,%m,%w,%Y", $this->lastRan)); //Get the values for now in a format we can use } function getLastRanUnix() @@ -505,7 +505,7 @@ class CronParser } //put the current time into an array - $t = strftime("%M,%H,%d,%m,%w,%Y", time()); + $t = e_date::strftime("%M,%H,%d,%m,%w,%Y", time()); $this->now = explode(",", $t); $this->year = $this->now[5]; diff --git a/e107_handlers/date_handler.php b/e107_handlers/date_handler.php index eacc7415c..dbf549b9d 100644 --- a/e107_handlers/date_handler.php +++ b/e107_handlers/date_handler.php @@ -37,17 +37,17 @@ class e_date for ($i=1; $i < 8; $i++) { - $day = strftime('%A', mktime(1,1,1, 1, $i, 2012)); - $dates['days'][] = $day; - $dates['daysShort'][] = strftime('%a', mktime(1,1,1, 1, $i, 2012)); - $dates['daysMin'][] = substr($day,0,2); + $day = e_date::strftime('%A', mktime(1, 1, 1, 1, $i, 2012)); + $dates['days'][] = $day; + $dates['daysShort'][] = e_date::strftime('%a', mktime(1, 1, 1, 1, $i, 2012)); + $dates['daysMin'][] = substr($day, 0, 2); } for ($i=1; $i < 13; $i++) { - $dates['months'][] = strftime('%B', mktime(1,1,1, $i, 2, 2013)); - $dates['monthsShort'][] = strftime('%h', mktime(1,1,1, $i, 2, 2013)); + $dates['months'][] = e_date::strftime('%B', mktime(1, 1, 1, $i, 2, 2013)); + $dates['monthsShort'][] = e_date::strftime('%h', mktime(1, 1, 1, $i, 2, 2013)); } @@ -86,11 +86,11 @@ class e_date { $val = ($type == 'month-short') ? '%b' : '%B'; //eg. 'Aug' / 'August' $marray = array(); - for ($i=1; $i < 13; $i++) - { - $marray[$i] = strftime($val,mktime(1,1,1,$i,1,2000)); + for ($i = 1; $i < 13; $i++) + { + $marray[$i] = e_date::strftime($val, mktime(1, 1, 1, $i, 1, 2000)); } - + return $marray; } @@ -102,15 +102,15 @@ class e_date switch ($type) { case 'day-shortest': // eg. 'Tu' - $days[] = substr(strftime('%a',mktime(1,1,1,6,$i,2014)),0,2); + $days[] = substr(e_date::strftime('%a', mktime(1, 1, 1, 6, $i, 2014)), 0, 2); break; case 'day-short': // eg. 'Tue' - $days[] = strftime('%a',mktime(1,1,1,6,$i,2014)); + $days[] = e_date::strftime('%a', mktime(1, 1, 1, 6, $i, 2014)); break; default: // eg. 'Tuesday' - $days[] = strftime('%A',mktime(1,1,1,6,$i,2014)); + $days[] = e_date::strftime('%A', mktime(1, 1, 1, 6, $i, 2014)); break; } } @@ -196,7 +196,7 @@ class e_date break; } - $dateString = strftime($mask, $datestamp); + $dateString = e_date::strftime($mask, $datestamp); if (!e107::getParser()->isUTF8($dateString)) { @@ -206,8 +206,95 @@ class e_date return $dateString; } + /** + * Polyfill for {@see strftime()}, which was deprecated in PHP 8.1 + * + * The implementation is an approximation that may be wrong for some obscure formatting characters. + * + * @param string $format The old {@see strftime()} format string + * @param int|null $timestamp A Unix epoch timestamp. If null, defaults to the value of {@see time()}. + * @return string Datetime formatted according to the provided arguments + */ + public static function strftime($format, $timestamp = null) + { + if ($timestamp === null) $timestamp = time(); + $datetime = date_create("@$timestamp"); + $datetime->setTimezone(new DateTimeZone(date_default_timezone_get())); + $formatMap = [ + '%a' => 'D', + '%A' => 'l', + '%d' => 'd', + '%e' => function($datetime) + { + return str_pad(date_format($datetime, 'n'), 2, " ", STR_PAD_LEFT); + }, + '%j' => function($datetime) + { + return str_pad(date_format($datetime, 'z'), 3, "0", STR_PAD_LEFT); + }, + '%u' => 'N', + '%w' => 'w', + '%U' => 'W', + '%V' => 'W', + '%W' => 'W', + '%b' => 'M', + '%B' => 'F', + '%h' => 'M', + '%m' => 'm', + '%C' => function($datetime) + { + return (string) ((int) date_format($datetime, 'Y') / 100); + }, + '%g' => 'y', + '%G' => 'Y', + '%y' => 'y', + '%Y' => 'Y', + '%H' => 'H', + '%k' => function($datetime) + { + return str_pad(date_format($datetime, 'G'), 2, " ", STR_PAD_LEFT); + }, + '%I' => 'h', + '%l' => function($datetime) + { + return str_pad(date_format($datetime, 'g'), 2, " ", STR_PAD_LEFT); + }, + '%M' => 'i', + '%p' => 'A', + '%P' => 'a', + '%r' => 'h:i:s A', + '%R' => 'H:i', + '%S' => 's', + '%T' => 'H:i:s', + '%X' => 'H:i:s', + '%z' => 'O', + '%Z' => 'T', + '%c' => 'r', + '%D' => 'm/d/y', + '%F' => 'Y-m-d', + '%s' => 'U', + '%x' => 'Y-m-d', + '%n' => "\n", + '%t' => "\t", + '%%' => '\%', + ]; + foreach ($formatMap as $strftime_key => $date_format_key) + { + if (is_callable($date_format_key)) + { + $replacement = chunk_split($date_format_key($datetime), 1, "\\"); + } + else + { + $replacement = $date_format_key; + } + $format = str_replace($strftime_key, $replacement, $format); + } + + return date_format($datetime, $format); + } /** * @deprecated - for internal use only. @@ -787,11 +874,12 @@ class e_date */ public function strptime($str, $format) { - trigger_error(''.__METHOD__.' is deprecated. Use eShims::strptime() instead', E_USER_DEPRECATED); // NO LAN + trigger_error('' . __METHOD__ . ' is deprecated. Use eShims::strptime() instead', E_USER_DEPRECATED); // NO LAN $vals = eShims::strptime($str, $format); // PHP5 is more accurate than below. - $vals['tm_amon'] = strftime('%b', mktime(0, 0, 0, $vals['tm_mon'] + 1)); - $vals['tm_fmon'] = strftime('%B', mktime(0, 0, 0, $vals['tm_mon'] + 1)); + $vals['tm_amon'] = e_date::strftime('%b', mktime(0, 0, 0, $vals['tm_mon'] + 1)); + $vals['tm_fmon'] = e_date::strftime('%B', mktime(0, 0, 0, $vals['tm_mon'] + 1)); + return $vals; } @@ -870,12 +958,7 @@ class e_date // Evaluate the formats whilst suppressing any errors. foreach($strftimeFormats as $format => $description) { - //if (False !== ($value = @strftime("%{$format}"))) - $value = @strftime("%{$format}"); - if (False !== $value) - { - $strftimeValues[$format] = $value; - } + $strftimeValues[$format] = e_date::strftime("%{$format}"); } // Find the longest value. diff --git a/e107_handlers/db_table_admin_class.php b/e107_handlers/db_table_admin_class.php index b47e14439..1cce540f6 100644 --- a/e107_handlers/db_table_admin_class.php +++ b/e107_handlers/db_table_admin_class.php @@ -128,6 +128,7 @@ class db_table_admin // Returns an array where each entry is the definitions of a field or index function parse_field_defs($text) { + $text = (string) $text; $ans = array( ); $text = str_replace("\r", "\n", $text); diff --git a/e107_handlers/e_db_pdo_class.php b/e107_handlers/e_db_pdo_class.php index 3ce59f149..0d8233c9a 100644 --- a/e107_handlers/e_db_pdo_class.php +++ b/e107_handlers/e_db_pdo_class.php @@ -426,7 +426,7 @@ class e_db_pdo implements e_db if ($this->debugMode === true) { $aTrace = debug_backtrace(); - $pTable = $this->mySQLcurTable; + $pTable = (string) $this->mySQLcurTable; if(!strlen($pTable)) { @@ -2558,6 +2558,11 @@ class e_db_pdo implements e_db private function setSQLMode() { $this->db_Query("SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION';"); + /** + * Disable PHP 8.1 PDO result set typing casting for consistency with PHP 5.6 through 8.0 + * @link https://github.com/php/php-src/blob/4025cf2875f895e9f7193cebb1c8efa4290d052e/UPGRADING#L130-L134 + */ + $this->mySQLaccess->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); } @@ -2623,7 +2628,7 @@ class e_db_pdo implements e_db { if (is_readable(e_CACHE_DB.$tableName.'.php')) { - $temp = file_get_contents(e_CACHE_DB.$tableName.'.php', FILE_TEXT); + $temp = file_get_contents(e_CACHE_DB.$tableName.'.php'); if ($temp !== false) { $typeDefs = e107::unserialize($temp); diff --git a/e107_handlers/e_parse_class.php b/e107_handlers/e_parse_class.php index 7f67c4651..4ce21ae04 100644 --- a/e107_handlers/e_parse_class.php +++ b/e107_handlers/e_parse_class.php @@ -508,7 +508,7 @@ class e_parse foreach($data as $key => $var) { //Fix - sanitize keys as well - $key = filter_var($key, FILTER_SANITIZE_STRING); + $key = str_replace(['"', "'"], ['"', '''], $key); $ret[$key] = $this->toDB($var, $nostrip, $no_encode, $mod, $parm); } @@ -787,6 +787,8 @@ class e_parse return $arr; } + $text = (string) $text; + if(MAGIC_QUOTES_GPC == true) { $text = stripslashes($text); @@ -2003,6 +2005,7 @@ class e_parse */ public function toText($text) { + $text = (string) $text; if($this->isBBcode($text) === true) // convert any bbcodes to html { @@ -2338,6 +2341,7 @@ class e_parse */ public function thumbUrl($url = null, $options = array(), $raw = false, $full = false) { + $url = (string) $url; $this->staticCount++; // increment counter. @@ -3717,7 +3721,7 @@ class e_parse $parm = $options; $options = varset($parm['space'], ''); } - elseif(strpos($options, '=')) + elseif (is_string($options) && strpos($options, '=')) { parse_str($options, $parm); $options = varset($parm['space'], ''); @@ -4618,7 +4622,7 @@ class e_parse $ytpref['cc_lang_pref'] = e_LAN; // switch captions with chosen user language. } - $ytqry = http_build_query($ytpref, null, '&'); + $ytqry = http_build_query($ytpref, '', '&'); $defClass = !empty($this->bootstrap) ? 'embed-responsive embed-responsive-16by9 ratio ratio-16x9' : 'video-responsive'; // levacy backup. @@ -4848,7 +4852,7 @@ class e_parse { $filterTypes = array( 'int' => FILTER_SANITIZE_NUMBER_INT, - 'str' => FILTER_SANITIZE_STRING, // no html. + 'str' => function($input) { return strip_tags($input); }, 'email' => FILTER_SANITIZE_EMAIL, 'url' => FILTER_SANITIZE_URL, 'enc' => FILTER_SANITIZE_ENCODED @@ -4870,13 +4874,19 @@ class e_parse trigger_error("Unsupported type '".$type."' used in e107::getParser()->filter().", E_USER_WARNING); } - if(is_array($text)) + $filter = $filterTypes[$type]; + $filter = function($element) use ($filter) { - $ret = filter_var_array($text, $filterTypes[$type]); + $element = (string) $element; + return is_callable($filter) ? $filter($element) : filter_var($element, $filter); + }; + if (is_array($text)) + { + $ret = filter_var($text, FILTER_CALLBACK, ['options' => $filter]); } else { - $ret = filter_var($text, $filterTypes[$type]); + $ret = $filter($text); } } diff --git a/e107_handlers/e_render_class.php b/e107_handlers/e_render_class.php index 39ca1caa4..f0a76e89a 100644 --- a/e107_handlers/e_render_class.php +++ b/e107_handlers/e_render_class.php @@ -370,6 +370,7 @@ */ private function tablestyle($caption, $text, $mode) { + $text = (string) $text; // Automatic list detection . $isList = (strncmp(ltrim($text), '_request['h']) ? intval($this->_request['h']) : $ret['w']; $ret['aw'] = isset($this->_request['aw']) ? intval($this->_request['aw']) : false; $ret['ah'] = isset($this->_request['ah']) ? intval($this->_request['ah']) : $ret['aw']; - $ret['c'] = isset($this->_request['c']) ? strtoupper(substr(filter_var($this->_request['c'],FILTER_SANITIZE_STRING),0,1)) : false; + $ret['c'] = isset($this->_request['c']) ? strtoupper(substr(e107::getParser()->filter($this->_request['c'], 'str'),0,1)) : false; // $ret['wm'] = isset($this->_request['wm']) ? intval($this->_request['wm']) : $ret['wm']; if($ret['c'] == 'A') // auto diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php index 02f6ee070..7413e0743 100644 --- a/e107_handlers/form_handler.php +++ b/e107_handlers/form_handler.php @@ -2745,7 +2745,7 @@ class e_form if(!is_array($options)) { - parse_str($options, $options); + parse_str((string) $options, $options); } if(is_array($value)) @@ -2979,7 +2979,7 @@ class e_form } if(!is_array($options)) { - parse_str($options, $options); + parse_str((string) $options, $options); } if(!empty($options['help'])) @@ -3052,7 +3052,7 @@ class e_form if(!is_array($options)) { - parse_str($options, $options); + parse_str((string) $options, $options); } @@ -3109,7 +3109,7 @@ class e_form { if(!is_array($options)) { - parse_str($options, $options); + parse_str((string) $options, $options); } if($option_array === 'yesno') @@ -3712,6 +3712,7 @@ var_dump($select_options);*/ */ public function admin_button($name, $value, $action = 'submit', $label = '', $options = array()) { + $action = (string) $action; $btype = 'submit'; if(strpos($action, 'action') === 0 || $action === 'button') { @@ -3909,7 +3910,8 @@ var_dump($select_options);*/ // foreach ($options as $option => $optval) { - $optval = trim($optval); + $optval = trim((string) $optval); + $optval = htmlspecialchars($optval, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); switch ($option) { @@ -4384,14 +4386,15 @@ var_dump($select_options);*/ public function thead($fieldarray, $columnPref = array(), $querypattern = '', $requeststr = '') { + $tp = e107::getParser(); $text = ''; - $querypattern = filter_var($querypattern, FILTER_SANITIZE_STRING); + $querypattern = $tp->filter($querypattern, 'str'); if(!$requeststr) { $requeststr = rawurldecode(e_QUERY); } - $requeststr = filter_var($requeststr, FILTER_SANITIZE_STRING); + $requeststr = $tp->filter($requeststr, 'str'); // Recommended pattern: mode=list&field=[FIELD]&asc=[ASC]&from=[FROM] if(strpos($querypattern,'&')!==FALSE) @@ -4787,7 +4790,7 @@ var_dump($select_options);*/ { foreach($array as $k=>$v) { - $jsonArray[$k] = str_replace("'", '`', $v); + $jsonArray[$k] = str_replace("'", '`', (string) $v); } } @@ -4978,7 +4981,7 @@ var_dump($select_options);*/ $eModalCap .= " data-modal-submit='true'"; } - $query = http_build_query($query, null, '&'); + $query = http_build_query($query, '', '&'); $text .= " ".$editIconDefault. ''; } @@ -5226,10 +5229,11 @@ var_dump($select_options);*/ parse_str($attributes['writeParms'], $attributes['writeParms']); } $wparms = $attributes['writeParms']; - - if(!is_array(varset($wparms['__options']))) + + if (!isset($wparms['__options'])) $wparms['__options'] = null; + if(!is_array($wparms['__options'])) { - parse_str($wparms['__options'], $wparms['__options']); + parse_str((string) $wparms['__options'], $wparms['__options']); } if(!empty($wparms['optArray'])) diff --git a/e107_handlers/iphandler_class.php b/e107_handlers/iphandler_class.php index 56fc6820a..e0beb5bef 100644 --- a/e107_handlers/iphandler_class.php +++ b/e107_handlers/iphandler_class.php @@ -157,7 +157,7 @@ class eIPHandler */ public function __construct($configDir = '') { - $configDir = trim($configDir); + $configDir = trim((string) $configDir); if ($configDir) { @@ -1452,7 +1452,7 @@ class banlistManager private function dateFormat($date) { if ($date == 0) return '0'; - return strftime('%Y%m%d_%H%M%S',$date); + return e_date::strftime('%Y%m%d_%H%M%S',$date); } diff --git a/e107_handlers/media_class.php b/e107_handlers/media_class.php index d93824d2d..a4b2a19e9 100644 --- a/e107_handlers/media_class.php +++ b/e107_handlers/media_class.php @@ -1177,6 +1177,7 @@ class e_media */ public function detectType($mediaURL) { + $mediaURL = (string) $mediaURL; $type = pathinfo($mediaURL,PATHINFO_EXTENSION); if($type == 'glyph') @@ -1456,7 +1457,7 @@ class e_media return $path; } - $ext = e107::getFile()->getFileExtension($mime); + $ext = (string) e107::getFile()->getFileExtension($mime); $len = strlen($ext); diff --git a/e107_handlers/menumanager_class.php b/e107_handlers/menumanager_class.php index 4aaa37d1a..7bb1354c2 100644 --- a/e107_handlers/menumanager_class.php +++ b/e107_handlers/menumanager_class.php @@ -601,7 +601,7 @@ class e_menuManager function menuPresetPerms($val) { - $link_class = strtolower(trim($val)); + $link_class = strtolower(trim((string) $val)); $menu_perm['everyone'] = e_UC_PUBLIC; $menu_perm['guest'] = e_UC_GUEST; $menu_perm['member'] = e_UC_MEMBER; diff --git a/e107_handlers/mysql_class.php b/e107_handlers/mysql_class.php index fbfd40a58..5ce16e72d 100644 --- a/e107_handlers/mysql_class.php +++ b/e107_handlers/mysql_class.php @@ -133,6 +133,11 @@ class e_db_mysql implements e_db $this->dbg = e107::getDebug(); + /** + * Revert PHP 8.1 mysqli default error mode + * @link https://github.com/php/php-src/blob/4025cf2875f895e9f7193cebb1c8efa4290d052e/UPGRADING#L101-L105 + */ + mysqli_report(MYSQLI_REPORT_OFF); } function getPDO() @@ -430,7 +435,7 @@ class e_db_mysql implements e_db /** @var $db_debug e107_db_debug */ global $db_debug; $aTrace = debug_backtrace(); - $pTable = $this->mySQLcurTable; + $pTable = (string) $this->mySQLcurTable; if (!strlen($pTable)) { $pTable = '(complex query)'; } else { @@ -2464,7 +2469,7 @@ class e_db_mysql implements e_db { if (is_readable(e_CACHE_DB.$tableName.'.php')) { - $temp = file_get_contents(e_CACHE_DB.$tableName.'.php', FILE_TEXT); + $temp = file_get_contents(e_CACHE_DB.$tableName.'.php'); if ($temp !== FALSE) { $typeDefs = e107::unserialize($temp); diff --git a/e107_handlers/news_class.php b/e107_handlers/news_class.php index 435e59947..071ad9a9d 100644 --- a/e107_handlers/news_class.php +++ b/e107_handlers/news_class.php @@ -632,7 +632,7 @@ class e_news_item extends e_front_model $params = array($val); //value is always the first callback argument $params = array_merge($params, explode(',', $parm['arg'])); //should be done with date handler (awaiting for modifications) - return strftime(varset($parm['arg'], e107::getPref('shortdate')), $val); + return e_date::strftime(varset($parm['arg'], e107::getPref('shortdate')), $val); break; default: diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php index 4b17e004e..24b9f3c1f 100644 --- a/e107_handlers/plugin_class.php +++ b/e107_handlers/plugin_class.php @@ -1046,7 +1046,7 @@ class e_plugin if(empty($ver)) { - return null; + return ''; } $ver = str_replace('e107','',$ver); @@ -1079,7 +1079,7 @@ class e_plugin ); - return str_replace($pathFilter,'', $path); + return str_replace($pathFilter,'', (string) $path); } diff --git a/e107_handlers/search_class.php b/e107_handlers/search_class.php index 28a237c80..f995e14c9 100644 --- a/e107_handlers/search_class.php +++ b/e107_handlers/search_class.php @@ -32,7 +32,7 @@ class e_search function __construct($query = '') { $tp = e107::getParser(); - $this->query = $query; + $this->query = (string) $query; $this->bullet = ''; if(defined('GLYPH')) diff --git a/e107_handlers/session_handler.php b/e107_handlers/session_handler.php index ab82667a0..c6afbe9b0 100644 --- a/e107_handlers/session_handler.php +++ b/e107_handlers/session_handler.php @@ -397,6 +397,7 @@ class e_session if($key == null) // clear all under this namespace. { $this->_data = array(); // must be set to array() not unset. + return $this; } if(strpos($key,'/') !== false) // multi-dimensional @@ -538,7 +539,14 @@ class e_session // ini_set('session.save_handler', 'user'); $session = new e_session_db; - session_set_save_handler($session, true); + session_set_save_handler( + [$session, 'open'], + [$session, 'close'], + [$session, 'read'], + [$session, 'write'], + [$session, 'destroy'], + [$session, 'gc'] + ); $session->setSaveHandler(); break; @@ -1112,7 +1120,12 @@ class e_core_session extends e_session } -class e_session_db implements SessionHandlerInterface +/** + * Database session handler + * + * @todo PHP 8.1 support with {@see SessionHandlerInterface} + */ +class e_session_db #implements SessionHandlerInterface { /** * @var e_db diff --git a/e107_handlers/shortcode_handler.php b/e107_handlers/shortcode_handler.php index 5a89316ad..4e6594765 100644 --- a/e107_handlers/shortcode_handler.php +++ b/e107_handlers/shortcode_handler.php @@ -992,8 +992,7 @@ class e_parse_shortcode // print_a($this); } - - $ret = preg_replace_callback('#\{([A-Z][^\x02]*?\S)\}#', array(&$this, 'doCode'), $text); // must always start with uppercase letter + $ret = preg_replace_callback('#\{([A-Z][^\x02]*?\S)\}#', array(&$this, 'doCode'), (string) $text); // must always start with uppercase letter // $ret = preg_replace_callback('#\{(\S[^\x02]*?\S)\}#', array(&$this, 'doCode'), $text); $this->parseSCFiles = $saveParseSCFiles; // Restore previous value $this->addedCodes = $saveCodes; @@ -1270,7 +1269,7 @@ class e_parse_shortcode include_once($_path); - if (class_exists($_class, false)) // prevent __autoload - performance + if (is_string($_class) && class_exists($_class, false)) // prevent __autoload - performance { // SecretR - fix array(parm, sc_mode) causing parm to become an array, see issue 424 if(!method_exists($_class, $_function)) diff --git a/e107_handlers/sitelinks_class.php b/e107_handlers/sitelinks_class.php index 1fc156811..7069bcdc7 100644 --- a/e107_handlers/sitelinks_class.php +++ b/e107_handlers/sitelinks_class.php @@ -1457,7 +1457,8 @@ i.e-cat_users-32{ background-position: -555px 0; width: 32px; height: 32px; } $srch = array('{ICON}', '{CAPTION}'); $repl = array(varset($extraParms['icon']), $title); - $title = str_replace($srch,$repl, varset($tmpl['caption'])); + $caption = isset($tmpl['caption']) ? (string) $tmpl['caption'] : ''; + $title = str_replace($srch,$repl, $caption); $ret = $ns->tablerender($title, $text, 'default', true); $ns->setUniqueId(null); diff --git a/e107_handlers/traffic_class.php b/e107_handlers/traffic_class.php index 1fd720550..363d9bf51 100644 --- a/e107_handlers/traffic_class.php +++ b/e107_handlers/traffic_class.php @@ -51,8 +51,8 @@ class e107_traffic */ function TimeDelta($tStart, $tFinish) { - $tFrom = explode(' ', $tStart); - $tTo = explode(' ', $tFinish); + $tFrom = explode(' ', (string) $tStart); + $tTo = explode(' ', (string) $tFinish); if(!isset($tFrom[1])) { diff --git a/e107_handlers/upload_handler.php b/e107_handlers/upload_handler.php index 71c238631..b4878c52c 100644 --- a/e107_handlers/upload_handler.php +++ b/e107_handlers/upload_handler.php @@ -195,7 +195,7 @@ function process_uploaded_files($uploaddir, $fileinfo = FALSE, $options = NULL) foreach ($files['name'] as $key=>$name) { - $name = filter_var($name, FILTER_SANITIZE_STRING); + $name = $tp->filter($name, 'str'); $first_error = FALSE; // Clear error flag if (($name != '') || $files['size'][$key]) // Need this check for things like file manager which allow multiple possible uploads diff --git a/e107_handlers/userclass_class.php b/e107_handlers/userclass_class.php index ebc2a1025..97e7e3e2b 100644 --- a/e107_handlers/userclass_class.php +++ b/e107_handlers/userclass_class.php @@ -451,6 +451,7 @@ class user_class */ public function uc_dropdown($fieldname, $curval = 0, $optlist = '', $extra_js = '') { + $optlist = (string) $optlist; $show_classes = self::uc_required_class_list($optlist); // Get list of classes which meet criteria $text = ''; diff --git a/e107_handlers/validator_class.php b/e107_handlers/validator_class.php index 22c383146..59a29b171 100644 --- a/e107_handlers/validator_class.php +++ b/e107_handlers/validator_class.php @@ -1386,7 +1386,20 @@ class validatorClass break; } $field = varset($options['dbFieldName'], $f); - if ($temp = $u_sql->count($targetTable, "(*)", "WHERE `{$f}`='" . filter_var($v, FILTER_SANITIZE_STRING) . "' AND `user_id` != " . $userID)) + // XXX: Different implementations due to missing API for preventing SQL injections + $count = 0; + if ($u_sql instanceof e_db_mysql) + { + $v = $u_sql->escape($v); + $count = $u_sql->count($targetTable, "(*)", "WHERE `{$f}`='$v' AND `user_id` != " . $userID); + } + else + { + $u_sql->select($targetTable, "COUNT(*)", "`{$f}`=:value", ['value' => $v]); + $row = $u_sql->fetch('num'); + $count = $row[0]; + } + if ($count) { $errMsg = ERR_DUPLICATE; } diff --git a/e107_plugins/banner/banner.php b/e107_plugins/banner/banner.php index 1a57a832d..fdfc41153 100644 --- a/e107_plugins/banner/banner.php +++ b/e107_plugins/banner/banner.php @@ -96,8 +96,8 @@ if (isset($_POST['clientsubmit'])) { while ($row = $sql->fetch()) { - $start_date = ($row['banner_startdate'] ? strftime("%d %B %Y", $row['banner_startdate']) : BANNERLAN_31); - $end_date = ($row['banner_enddate'] ? strftime("%d %B %Y", $row['banner_enddate']) : BANNERLAN_31); + $start_date = ($row['banner_startdate'] ? e_date::strftime("%d %B %Y", $row['banner_startdate']) : BANNERLAN_31); + $end_date = ($row['banner_enddate'] ? e_date::strftime("%d %B %Y", $row['banner_enddate']) : BANNERLAN_31); $scArray = array(); $scArray['BANNER_TABLE_CLICKPERCENTAGE'] = ($row['banner_clicks'] && $row['banner_impressions'] ? round(($row['banner_clicks'] / $row['banner_impressions']) * 100)."%" : "-"); diff --git a/e107_plugins/banner/e_shortcode.php b/e107_plugins/banner/e_shortcode.php index 881f1cebe..50825d66e 100644 --- a/e107_plugins/banner/e_shortcode.php +++ b/e107_plugins/banner/e_shortcode.php @@ -26,8 +26,6 @@ class banner_shortcodes extends e_shortcode $sql = e107::getDb(); $tp = e107::getParser(); - mt_srand((double) microtime() * 1000000); - $seed = mt_rand(1, 2000000000); $time = time(); $campaign = (isset($parm['campaign']) ? $parm['campaign'] : $parm); @@ -40,7 +38,7 @@ class banner_shortcodes extends e_shortcode $query .= " AND banner_keywords REGEXP " . $tags_regexp; } - $query .= " ORDER BY RAND($seed) LIMIT 1"; + $query .= " ORDER BY RAND() LIMIT 1"; if($sql->select('banner', 'banner_id, banner_image, banner_clickurl, banner_description', $query)) { diff --git a/e107_plugins/blogcalendar_menu/blogcalendar_menu.php b/e107_plugins/blogcalendar_menu/blogcalendar_menu.php index dbcf2b1a9..d9d8bf033 100644 --- a/e107_plugins/blogcalendar_menu/blogcalendar_menu.php +++ b/e107_plugins/blogcalendar_menu/blogcalendar_menu.php @@ -19,7 +19,7 @@ */ if (!defined('e107_INIT')) { exit; } - +$parm = isset($parm) && is_string($parm) ? $parm : ''; $cString = 'nq_news_blogacalendar_menu_'.preg_replace('#[^\w]#', '', $parm); $cached = e107::getCache()->retrieve($cString); diff --git a/e107_plugins/download/download_shortcodes.php b/e107_plugins/download/download_shortcodes.php index 3387b1dd3..0818d5fa2 100644 --- a/e107_plugins/download/download_shortcodes.php +++ b/e107_plugins/download/download_shortcodes.php @@ -357,7 +357,7 @@ class download_shortcodes extends e_shortcode } - return "".$text."" ; + return "".$text."" ; } diff --git a/e107_plugins/download/handlers/category_class.php b/e107_plugins/download/handlers/category_class.php index 638add31a..dcfba5d3a 100644 --- a/e107_plugins/download/handlers/category_class.php +++ b/e107_plugins/download/handlers/category_class.php @@ -140,7 +140,7 @@ class downloadCategory { $text = "".$cat['download_category_id']."".$cat['download_category_parent'].""; $text .= $prefix.htmlspecialchars($cat['download_category_name']).$postfix."".$cat['d_size'].""; - $text .= "".$cat['d_count']."".$cat['d_requests']."".strftime('%H:%M %d-%m-%Y',$cat['d_last']).""; + $text .= "".$cat['d_count']."".$cat['d_requests']."".e_date::strftime('%H:%M %d-%m-%Y',$cat['d_last']).""; $text .= ""; return $text; } diff --git a/e107_plugins/faqs/faqs.php b/e107_plugins/faqs/faqs.php index 5543e884a..f2e1396d9 100644 --- a/e107_plugins/faqs/faqs.php +++ b/e107_plugins/faqs/faqs.php @@ -81,7 +81,7 @@ if (isset($_POST['faq_submit'])) $data = $tp->toDB($_POST['data']); $count = ($sql->count("faqs", "(*)", "WHERE faq_parent='".intval($_POST['faq_parent'])."' ") + 1); - $sql->insert("faqs", " 0, '".$_POST['faq_parent']."', '$faq_question', '$data', '".filter_var($_POST['faq_comment'], FILTER_SANITIZE_STRING)."', '".time()."', '".USERID."', '".$count."' "); + $sql->insert("faqs", " 0, '".$_POST['faq_parent']."', '$faq_question', '$data', '".e107::getParser()->filter($_POST['faq_comment'], 'str')."', '".time()."', '".USERID."', '".$count."' "); $message = FAQ_ADLAN_32; diff --git a/e107_plugins/featurebox/e_shortcode.php b/e107_plugins/featurebox/e_shortcode.php index 4b089792f..be4ce7820 100644 --- a/e107_plugins/featurebox/e_shortcode.php +++ b/e107_plugins/featurebox/e_shortcode.php @@ -151,7 +151,7 @@ class featurebox_shortcodes// must match the plugin's folder name. ie. [PLUGIN_F { $ctemplate = $mod; } - parse_str($parm, $parm); + parse_str((string) $parm, $parm); $category = $this->getCategoryModel($ctemplate); diff --git a/e107_plugins/forum/forum_stats.php b/e107_plugins/forum/forum_stats.php index 5b2401dbb..ef7daffad 100644 --- a/e107_plugins/forum/forum_stats.php +++ b/e107_plugins/forum/forum_stats.php @@ -65,6 +65,7 @@ class forumStats $firstpost = $sql->select('forum_post', 'post_datestamp', 'post_datestamp > 0 ORDER BY post_datestamp ASC LIMIT 0,1', 'default'); $fp = $sql->fetch(); + $fp = is_array($fp) ? $fp : array(); $open_ds = (int) varset($fp['post_datestamp']); $open_date = $gen->convert_date($open_ds, 'long'); diff --git a/e107_plugins/list_new/list_class.php b/e107_plugins/list_new/list_class.php index f3d2263e6..1e4ee513a 100644 --- a/e107_plugins/list_new/list_class.php +++ b/e107_plugins/list_new/list_class.php @@ -727,14 +727,14 @@ class listclass if($thisday == $current_day) { $datepreftoday = $this->list_pref[$this->mode."_datestyletoday"]; - return strftime($datepreftoday, $datestamp); + return e_date::strftime($datepreftoday, $datestamp); } } } //else use default date style $datepref = $this->list_pref[$this->mode."_datestyle"]; - return strftime($datepref, $datestamp); + return e_date::strftime($datepref, $datestamp); } /** diff --git a/e107_plugins/news/news.php b/e107_plugins/news/news.php index c9258ae63..9051405ba 100644 --- a/e107_plugins/news/news.php +++ b/e107_plugins/news/news.php @@ -1864,10 +1864,10 @@ class news_front // render new date header if pref selected ... - $thispostday = strftime("%j", $news['news_datestamp']); + $thispostday = e_date::strftime("%j", $news['news_datestamp']); if ($newpostday != $thispostday && (isset($this->pref['news_newdateheader']) && $this->pref['news_newdateheader'])) { - echo "
".strftime("%A %d %B %Y", $news['news_datestamp'])."
"; + echo "
".e_date::strftime("%A %d %B %Y", $news['news_datestamp'])."
"; } $newpostday = $thispostday; $news['category_id'] = $news['news_category']; diff --git a/e107_plugins/page/e_shortcode.php b/e107_plugins/page/e_shortcode.php index 42dd72ebe..464f88e7d 100644 --- a/e107_plugins/page/e_shortcode.php +++ b/e107_plugins/page/e_shortcode.php @@ -85,7 +85,7 @@ class page_shortcodes extends e_shortcode if($parm) { - $parm = http_build_query($parm, null, '&'); + $parm = http_build_query($parm); } else { diff --git a/e107_plugins/pm/pm_func.php b/e107_plugins/pm/pm_func.php index 9e5620ad4..c871af258 100755 --- a/e107_plugins/pm/pm_func.php +++ b/e107_plugins/pm/pm_func.php @@ -118,6 +118,9 @@ class pmbox_manager } else { + if (!isset($pm_info['inbox']) || !is_array($pm_info['inbox'])) $pm_info['inbox'] = []; + if (!isset($pm_info['outbox']) || !is_array($pm_info['outbox'])) $pm_info['outbox'] = []; + $pm_info['inbox']['limit'] = ''; $pm_info['outbox']['limit'] = ''; $pm_info['inbox']['filled'] = ''; diff --git a/install.php b/install.php index 28839d6fb..12d909187 100644 --- a/install.php +++ b/install.php @@ -261,15 +261,6 @@ $override = array(); if(isset($_POST['previous_steps'])) { $tmp = unserialize(base64_decode($_POST['previous_steps'])); - - // Save unfiltered admin password (#4004) - " are transformed into " - $tmpadminpass1 = (isset($tmp['admin']) && !empty($tmp['admin']['password'])) ? $tmp['admin']['password'] : ''; - - $tmp = filter_var_array($tmp, FILTER_SANITIZE_STRING); - - // Restore unfiltered admin password - $tmp['admin']['password'] = $tmpadminpass1; - $override = (isset($tmp['paths']) && isset($tmp['paths']['hash'])) ? array('site_path'=>$tmp['paths']['hash']) : array(); unset($tmp); unset($tmpadminpass1);