diff --git a/composer.lock b/composer.lock index e7a0a1be..2a912448 100644 --- a/composer.lock +++ b/composer.lock @@ -342,16 +342,16 @@ }, { "name": "microsoft/tolerant-php-parser", - "version": "v0.1.1", + "version": "v0.1.2", "source": { "type": "git", "url": "https://github.com/microsoft/tolerant-php-parser.git", - "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16" + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16", - "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/3eccfd273323aaf69513e2f1c888393f5947804b", + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b", "shasum": "" }, "require": { @@ -381,22 +381,22 @@ "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", "support": { "issues": "https://github.com/microsoft/tolerant-php-parser/issues", - "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1" + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.2" }, - "time": "2021-07-16T21:28:12+00:00" + "time": "2022-10-05T17:30:19+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -434,7 +434,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -442,7 +442,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", @@ -497,16 +497,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -547,22 +547,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "phan/phan", - "version": "5.4.1", + "version": "5.4.2", "source": { "type": "git", "url": "https://github.com/phan/phan.git", - "reference": "fef40178a952bcfcc3f69b76989dd613c3d5c759" + "reference": "4f2870ed6fea320f62f3c3c63f3274d357a7980e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/fef40178a952bcfcc3f69b76989dd613c3d5c759", - "reference": "fef40178a952bcfcc3f69b76989dd613c3d5c759", + "url": "https://api.github.com/repos/phan/phan/zipball/4f2870ed6fea320f62f3c3c63f3274d357a7980e", + "reference": "4f2870ed6fea320f62f3c3c63f3274d357a7980e", "shasum": "" }, "require": { @@ -572,7 +572,7 @@ "ext-json": "*", "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.0.4", - "microsoft/tolerant-php-parser": "0.1.1", + "microsoft/tolerant-php-parser": "0.1.2", "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", "php": "^7.2.0|^8.0.0", "sabre/event": "^5.1.3", @@ -626,9 +626,9 @@ ], "support": { "issues": "https://github.com/phan/phan/issues", - "source": "https://github.com/phan/phan/tree/5.4.1" + "source": "https://github.com/phan/phan/tree/5.4.2" }, - "time": "2022-08-26T00:49:07+00:00" + "time": "2023-03-03T17:20:24+00:00" }, { "name": "phar-io/manifest", @@ -908,16 +908,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.9.17", + "version": "1.10.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2" + "reference": "50d089a3e0904b0fe7e2cf2d4fd37d427d64235a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/204e459e7822f2c586463029f5ecec31bb45a1f2", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/50d089a3e0904b0fe7e2cf2d4fd37d427d64235a", + "reference": "50d089a3e0904b0fe7e2cf2d4fd37d427d64235a", "shasum": "" }, "require": { @@ -947,7 +947,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.9.17" + "source": "https://github.com/phpstan/phpstan/tree/1.10.6" }, "funding": [ { @@ -963,27 +963,27 @@ "type": "tidelift" } ], - "time": "2023-02-08T12:25:00+00:00" + "time": "2023-03-09T16:55:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.24", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -998,8 +998,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -1032,7 +1032,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -1040,7 +1040,7 @@ "type": "github" } ], - "time": "2023-01-26T08:26:55+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1285,16 +1285,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.3", + "version": "9.6.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" + "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86e761949019ae83f49240b2f2123fb5ab3b2fc5", + "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5", "shasum": "" }, "require": { @@ -1327,8 +1327,8 @@ "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -1367,7 +1367,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.5" }, "funding": [ { @@ -1383,7 +1383,7 @@ "type": "tidelift" } ], - "time": "2023-02-04T13:37:15+00:00" + "time": "2023-03-09T06:34:10+00:00" }, { "name": "psr/container", @@ -2520,16 +2520,16 @@ }, { "name": "symfony/console", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3e294254f2191762c1d137aed4b94e966965e985" + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", - "reference": "3e294254f2191762c1d137aed4b94e966965e985", + "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", "shasum": "" }, "require": { @@ -2596,7 +2596,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.5" + "source": "https://github.com/symfony/console/tree/v6.2.7" }, "funding": [ { @@ -2612,20 +2612,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-25T17:00:03+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", "shasum": "" }, "require": { @@ -2663,7 +2663,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -2679,7 +2679,7 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-03-01T10:25:55+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3096,16 +3096,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", "shasum": "" }, "require": { @@ -3161,7 +3161,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -3177,20 +3177,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/string", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", "shasum": "" }, "require": { @@ -3247,7 +3247,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.5" + "source": "https://github.com/symfony/string/tree/v6.2.7" }, "funding": [ { @@ -3263,7 +3263,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "theseer/tokenizer", diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 47846235..7c46a5f6 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -350,17 +350,17 @@ }, { "name": "microsoft/tolerant-php-parser", - "version": "v0.1.1", - "version_normalized": "0.1.1.0", + "version": "v0.1.2", + "version_normalized": "0.1.2.0", "source": { "type": "git", "url": "https://github.com/microsoft/tolerant-php-parser.git", - "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16" + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16", - "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/3eccfd273323aaf69513e2f1c888393f5947804b", + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b", "shasum": "" }, "require": { @@ -369,7 +369,7 @@ "require-dev": { "phpunit/phpunit": "^8.5.15" }, - "time": "2021-07-16T21:28:12+00:00", + "time": "2022-10-05T17:30:19+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -392,23 +392,23 @@ "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", "support": { "issues": "https://github.com/microsoft/tolerant-php-parser/issues", - "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1" + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.2" }, "install-path": "../microsoft/tolerant-php-parser" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", - "version_normalized": "1.11.0.0", + "version": "1.11.1", + "version_normalized": "1.11.1.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -423,7 +423,7 @@ "doctrine/common": "^2.13.3 || ^3.2.2", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, - "time": "2022-03-03T13:19:32+00:00", + "time": "2023-03-08T13:26:56+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -448,7 +448,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -514,17 +514,17 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.3", - "version_normalized": "4.15.3.0", + "version": "v4.15.4", + "version_normalized": "4.15.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -535,7 +535,7 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, - "time": "2023-01-16T22:05:37+00:00", + "time": "2023-03-05T19:49:14+00:00", "bin": [ "bin/php-parse" ], @@ -567,23 +567,23 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, "install-path": "../nikic/php-parser" }, { "name": "phan/phan", - "version": "5.4.1", - "version_normalized": "5.4.1.0", + "version": "5.4.2", + "version_normalized": "5.4.2.0", "source": { "type": "git", "url": "https://github.com/phan/phan.git", - "reference": "fef40178a952bcfcc3f69b76989dd613c3d5c759" + "reference": "4f2870ed6fea320f62f3c3c63f3274d357a7980e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/fef40178a952bcfcc3f69b76989dd613c3d5c759", - "reference": "fef40178a952bcfcc3f69b76989dd613c3d5c759", + "url": "https://api.github.com/repos/phan/phan/zipball/4f2870ed6fea320f62f3c3c63f3274d357a7980e", + "reference": "4f2870ed6fea320f62f3c3c63f3274d357a7980e", "shasum": "" }, "require": { @@ -593,7 +593,7 @@ "ext-json": "*", "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.0.4", - "microsoft/tolerant-php-parser": "0.1.1", + "microsoft/tolerant-php-parser": "0.1.2", "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", "php": "^7.2.0|^8.0.0", "sabre/event": "^5.1.3", @@ -613,7 +613,7 @@ "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", "ext-var_representation": "Suggested for converting values to strings in issue messages" }, - "time": "2022-08-26T00:49:07+00:00", + "time": "2023-03-03T17:20:24+00:00", "bin": [ "phan", "phan_client", @@ -649,7 +649,7 @@ ], "support": { "issues": "https://github.com/phan/phan/issues", - "source": "https://github.com/phan/phan/tree/5.4.1" + "source": "https://github.com/phan/phan/tree/5.4.2" }, "install-path": "../phan/phan" }, @@ -946,17 +946,17 @@ }, { "name": "phpstan/phpstan", - "version": "1.9.17", - "version_normalized": "1.9.17.0", + "version": "1.10.6", + "version_normalized": "1.10.6.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2" + "reference": "50d089a3e0904b0fe7e2cf2d4fd37d427d64235a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/204e459e7822f2c586463029f5ecec31bb45a1f2", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/50d089a3e0904b0fe7e2cf2d4fd37d427d64235a", + "reference": "50d089a3e0904b0fe7e2cf2d4fd37d427d64235a", "shasum": "" }, "require": { @@ -965,7 +965,7 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "time": "2023-02-08T12:25:00+00:00", + "time": "2023-03-09T16:55:12+00:00", "bin": [ "phpstan", "phpstan.phar" @@ -988,7 +988,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.9.17" + "source": "https://github.com/phpstan/phpstan/tree/1.10.6" }, "funding": [ { @@ -1008,24 +1008,24 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.24", - "version_normalized": "9.2.24.0", + "version": "9.2.26", + "version_normalized": "9.2.26.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1040,10 +1040,10 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, - "time": "2023-01-26T08:26:55+00:00", + "time": "2023-03-06T12:58:08+00:00", "type": "library", "extra": { "branch-alias": { @@ -1076,7 +1076,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -1341,17 +1341,17 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.3", - "version_normalized": "9.6.3.0", + "version": "9.6.5", + "version_normalized": "9.6.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" + "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86e761949019ae83f49240b2f2123fb5ab3b2fc5", + "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5", "shasum": "" }, "require": { @@ -1384,10 +1384,10 @@ "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, - "time": "2023-02-04T13:37:15+00:00", + "time": "2023-03-09T06:34:10+00:00", "bin": [ "phpunit" ], @@ -1426,7 +1426,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.5" }, "funding": [ { @@ -2636,17 +2636,17 @@ }, { "name": "symfony/console", - "version": "v6.2.5", - "version_normalized": "6.2.5.0", + "version": "v6.2.7", + "version_normalized": "6.2.7.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3e294254f2191762c1d137aed4b94e966965e985" + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", - "reference": "3e294254f2191762c1d137aed4b94e966965e985", + "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", "shasum": "" }, "require": { @@ -2681,7 +2681,7 @@ "symfony/lock": "", "symfony/process": "" }, - "time": "2023-01-01T08:38:09+00:00", + "time": "2023-02-25T17:00:03+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2715,7 +2715,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.5" + "source": "https://github.com/symfony/console/tree/v6.2.7" }, "funding": [ { @@ -2735,23 +2735,23 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.0", - "version_normalized": "3.2.0.0", + "version": "v3.2.1", + "version_normalized": "3.2.1.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2022-11-25T10:21:52+00:00", + "time": "2023-03-01T10:25:55+00:00", "type": "library", "extra": { "branch-alias": { @@ -2785,7 +2785,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -3233,17 +3233,17 @@ }, { "name": "symfony/service-contracts", - "version": "v3.2.0", - "version_normalized": "3.2.0.0", + "version": "v3.2.1", + "version_normalized": "3.2.1.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", "shasum": "" }, "require": { @@ -3256,7 +3256,7 @@ "suggest": { "symfony/service-implementation": "" }, - "time": "2022-11-25T10:21:52+00:00", + "time": "2023-03-01T10:32:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -3301,7 +3301,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -3321,17 +3321,17 @@ }, { "name": "symfony/string", - "version": "v6.2.5", - "version_normalized": "6.2.5.0", + "version": "v6.2.7", + "version_normalized": "6.2.7.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", "shasum": "" }, "require": { @@ -3351,7 +3351,7 @@ "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, - "time": "2023-01-01T08:38:09+00:00", + "time": "2023-02-24T10:42:00+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3390,7 +3390,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.5" + "source": "https://github.com/symfony/string/tree/v6.2.7" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index e3ca46a5..51d778c6 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'b696338324ee48918a63d6347fd72343fc63f3ce', + 'reference' => '1cbe4e5c06aec83ca037690cb9621e39312b9247', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'b696338324ee48918a63d6347fd72343fc63f3ce', + 'reference' => '1cbe4e5c06aec83ca037690cb9621e39312b9247', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -65,18 +65,18 @@ 'dev_requirement' => true, ), 'microsoft/tolerant-php-parser' => array( - 'pretty_version' => 'v0.1.1', - 'version' => '0.1.1.0', - 'reference' => '6a965617cf484355048ac6d2d3de7b6ec93abb16', + 'pretty_version' => 'v0.1.2', + 'version' => '0.1.2.0', + 'reference' => '3eccfd273323aaf69513e2f1c888393f5947804b', 'type' => 'library', 'install_path' => __DIR__ . '/../microsoft/tolerant-php-parser', 'aliases' => array(), 'dev_requirement' => true, ), 'myclabs/deep-copy' => array( - 'pretty_version' => '1.11.0', - 'version' => '1.11.0.0', - 'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614', + 'pretty_version' => '1.11.1', + 'version' => '1.11.1.0', + 'reference' => '7284c22080590fb39f2ffa3e9057f10a4ddd0e0c', 'type' => 'library', 'install_path' => __DIR__ . '/../myclabs/deep-copy', 'aliases' => array(), @@ -92,18 +92,18 @@ 'dev_requirement' => true, ), 'nikic/php-parser' => array( - 'pretty_version' => 'v4.15.3', - 'version' => '4.15.3.0', - 'reference' => '570e980a201d8ed0236b0a62ddf2c9cbb2034039', + 'pretty_version' => 'v4.15.4', + 'version' => '4.15.4.0', + 'reference' => '6bb5176bc4af8bcb7d926f88718db9b96a2d4290', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/php-parser', 'aliases' => array(), 'dev_requirement' => true, ), 'phan/phan' => array( - 'pretty_version' => '5.4.1', - 'version' => '5.4.1.0', - 'reference' => 'fef40178a952bcfcc3f69b76989dd613c3d5c759', + 'pretty_version' => '5.4.2', + 'version' => '5.4.2.0', + 'reference' => '4f2870ed6fea320f62f3c3c63f3274d357a7980e', 'type' => 'project', 'install_path' => __DIR__ . '/../phan/phan', 'aliases' => array(), @@ -155,18 +155,18 @@ 'dev_requirement' => true, ), 'phpstan/phpstan' => array( - 'pretty_version' => '1.9.17', - 'version' => '1.9.17.0', - 'reference' => '204e459e7822f2c586463029f5ecec31bb45a1f2', + 'pretty_version' => '1.10.6', + 'version' => '1.10.6.0', + 'reference' => '50d089a3e0904b0fe7e2cf2d4fd37d427d64235a', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpstan', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/php-code-coverage' => array( - 'pretty_version' => '9.2.24', - 'version' => '9.2.24.0', - 'reference' => '2cf940ebc6355a9d430462811b5aaa308b174bed', + 'pretty_version' => '9.2.26', + 'version' => '9.2.26.0', + 'reference' => '443bc6912c9bd5b409254a40f4b0f4ced7c80ea1', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/php-code-coverage', 'aliases' => array(), @@ -209,9 +209,9 @@ 'dev_requirement' => true, ), 'phpunit/phpunit' => array( - 'pretty_version' => '9.6.3', - 'version' => '9.6.3.0', - 'reference' => 'e7b1615e3e887d6c719121c6d4a44b0ab9645555', + 'pretty_version' => '9.6.5', + 'version' => '9.6.5.0', + 'reference' => '86e761949019ae83f49240b2f2123fb5ab3b2fc5', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/phpunit', 'aliases' => array(), @@ -395,18 +395,18 @@ 'dev_requirement' => true, ), 'symfony/console' => array( - 'pretty_version' => 'v6.2.5', - 'version' => '6.2.5.0', - 'reference' => '3e294254f2191762c1d137aed4b94e966965e985', + 'pretty_version' => 'v6.2.7', + 'version' => '6.2.7.0', + 'reference' => 'cbad09eb8925b6ad4fb721c7a179344dc4a19d45', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v3.2.0', - 'version' => '3.2.0.0', - 'reference' => '1ee04c65529dea5d8744774d474e7cbd2f1206d3', + 'pretty_version' => 'v3.2.1', + 'version' => '3.2.1.0', + 'reference' => 'e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), @@ -458,18 +458,18 @@ 'dev_requirement' => true, ), 'symfony/service-contracts' => array( - 'pretty_version' => 'v3.2.0', - 'version' => '3.2.0.0', - 'reference' => 'aac98028c69df04ee77eb69b96b86ee51fbf4b75', + 'pretty_version' => 'v3.2.1', + 'version' => '3.2.1.0', + 'reference' => 'a8c9cedf55f314f3a186041d19537303766df09a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/string' => array( - 'pretty_version' => 'v6.2.5', - 'version' => '6.2.5.0', - 'reference' => 'b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0', + 'pretty_version' => 'v6.2.7', + 'version' => '6.2.7.0', + 'reference' => '67b8c1eec78296b85dc1c7d9743830160218993d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), diff --git a/vendor/microsoft/tolerant-php-parser/phpstan.neon b/vendor/microsoft/tolerant-php-parser/phpstan.neon deleted file mode 100644 index 3d24b87a..00000000 --- a/vendor/microsoft/tolerant-php-parser/phpstan.neon +++ /dev/null @@ -1,7 +0,0 @@ -parameters: - level: 2 - paths: - - src/ - ignoreErrors: - # phpstan issue, see: https://github.com/phpstan/phpstan/issues/1306 - - "/Variable .unaryExpression might not be defined./" diff --git a/vendor/microsoft/tolerant-php-parser/src/NamespacedNameTrait.php b/vendor/microsoft/tolerant-php-parser/src/NamespacedNameTrait.php index 3fc292b5..a59e3dae 100644 --- a/vendor/microsoft/tolerant-php-parser/src/NamespacedNameTrait.php +++ b/vendor/microsoft/tolerant-php-parser/src/NamespacedNameTrait.php @@ -31,7 +31,7 @@ trait NamespacedNameTrait { return ResolvedName::buildName($this->getNameParts(), $content); } - if ($namespaceDefinition->name !== null) { + if ($namespaceDefinition->name instanceof QualifiedName) { $resolvedName = ResolvedName::buildName($namespaceDefinition->name->nameParts, $content); } else { $resolvedName = ResolvedName::buildName([], $content); @@ -47,4 +47,4 @@ trait NamespacedNameTrait { } return $resolvedName; } -} \ No newline at end of file +} diff --git a/vendor/microsoft/tolerant-php-parser/src/Node.php b/vendor/microsoft/tolerant-php-parser/src/Node.php index d1288876..bcc88731 100644 --- a/vendor/microsoft/tolerant-php-parser/src/Node.php +++ b/vendor/microsoft/tolerant-php-parser/src/Node.php @@ -91,7 +91,7 @@ abstract class Node implements \JsonSerializable { * Gets first child that is an instance of one of the provided classes. * Returns null if there is no match. * - * @param array ...$classNames + * @param string ...$classNames * @return Node|null */ public function getFirstChildNode(...$classNames) { @@ -117,7 +117,7 @@ abstract class Node implements \JsonSerializable { * Gets first descendant node that is an instance of one of the provided classes. * Returns null if there is no match. * - * @param array ...$classNames + * @param string ...$classNames * @return Node|null */ public function getFirstDescendantNode(...$classNames) { @@ -417,7 +417,7 @@ abstract class Node implements \JsonSerializable { return $this->getRoot()->fileContents; } - public function getUri() : string { + public function getUri() : ?string { return $this->getRoot()->uri; } diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/CallExpression.php b/vendor/microsoft/tolerant-php-parser/src/Node/Expression/CallExpression.php index 0654fb34..c783ddea 100644 --- a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/CallExpression.php +++ b/vendor/microsoft/tolerant-php-parser/src/Node/Expression/CallExpression.php @@ -8,10 +8,11 @@ namespace Microsoft\PhpParser\Node\Expression; use Microsoft\PhpParser\Node\DelimitedList; use Microsoft\PhpParser\Node\Expression; +use Microsoft\PhpParser\Node\QualifiedName; use Microsoft\PhpParser\Token; class CallExpression extends Expression { - /** @var Expression */ + /** @var QualifiedName|Expression */ public $callableExpression; /** @var Token */ diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php b/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php index 63da2956..86bb8056 100644 --- a/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php +++ b/vendor/microsoft/tolerant-php-parser/src/Node/Expression/YieldExpression.php @@ -14,7 +14,7 @@ class YieldExpression extends Expression { /** @var Token */ public $yieldOrYieldFromKeyword; - /** @var ArrayElement */ + /** @var ArrayElement|null */ public $arrayElement; const CHILD_NAMES = ['yieldOrYieldFromKeyword', 'arrayElement']; diff --git a/vendor/microsoft/tolerant-php-parser/src/Node/ParenthesizedIntersectionType.php b/vendor/microsoft/tolerant-php-parser/src/Node/ParenthesizedIntersectionType.php new file mode 100644 index 00000000..a7afcd50 --- /dev/null +++ b/vendor/microsoft/tolerant-php-parser/src/Node/ParenthesizedIntersectionType.php @@ -0,0 +1,29 @@ +`)) */ + public $semicolonOrCloseTag; + + /** @var Token|null TokenKind::InlineHtml data unless there are no bytes (This is optional if there is nothing after the semicolon) */ + public $data; + + const CHILD_NAMES = [ + 'haltCompilerKeyword', + 'openParen', + 'closeParen', + 'semicolonOrCloseTag', + 'data', + ]; + + /** + * @return int + */ + public function getHaltCompilerOffset() { + // This accounts for the fact that PHP close tags may include a single newline, + // and that $this->data may be null. + return $this->semicolonOrCloseTag->getEndPosition(); + } +} diff --git a/vendor/microsoft/tolerant-php-parser/src/Parser.php b/vendor/microsoft/tolerant-php-parser/src/Parser.php index 4290dc89..d618633b 100644 --- a/vendor/microsoft/tolerant-php-parser/src/Parser.php +++ b/vendor/microsoft/tolerant-php-parser/src/Parser.php @@ -6,6 +6,7 @@ namespace Microsoft\PhpParser; +use Closure; use Microsoft\PhpParser\Node\AnonymousFunctionUseClause; use Microsoft\PhpParser\Node\ArrayElement; use Microsoft\PhpParser\Node\Attribute; @@ -70,6 +71,7 @@ use Microsoft\PhpParser\Node\MissingMemberDeclaration; use Microsoft\PhpParser\Node\NamespaceAliasingClause; use Microsoft\PhpParser\Node\NamespaceUseGroupClause; use Microsoft\PhpParser\Node\NumericLiteral; +use Microsoft\PhpParser\Node\ParenthesizedIntersectionType; use Microsoft\PhpParser\Node\PropertyDeclaration; use Microsoft\PhpParser\Node\ReservedWord; use Microsoft\PhpParser\Node\StringLiteral; @@ -95,6 +97,7 @@ use Microsoft\PhpParser\Node\Statement\{ ForStatement, FunctionDeclaration, GotoStatement, + HaltCompilerStatement, IfStatementNode, InlineHtml, InterfaceDeclaration, @@ -144,8 +147,9 @@ class Parser { [TokenKind::ArrayKeyword, TokenKind::CallableKeyword, TokenKind::BoolReservedWord, TokenKind::FloatReservedWord, TokenKind::IntReservedWord, TokenKind::StringReservedWord, TokenKind::ObjectReservedWord, TokenKind::NullReservedWord, TokenKind::FalseReservedWord, - TokenKind::IterableReservedWord, TokenKind::MixedReservedWord]; // TODO update spec - $this->returnTypeDeclarationTokens = \array_merge([TokenKind::VoidReservedWord, TokenKind::NullReservedWord, TokenKind::FalseReservedWord, TokenKind::StaticKeyword], $this->parameterTypeDeclarationTokens); + TokenKind::TrueReservedWord, TokenKind::IterableReservedWord, TokenKind::MixedReservedWord, + TokenKind::VoidReservedWord, TokenKind::NeverReservedWord]; // TODO update spec + $this->returnTypeDeclarationTokens = \array_merge([TokenKind::StaticKeyword], $this->parameterTypeDeclarationTokens); } /** @@ -557,10 +561,8 @@ class Parser { // class-declaration case TokenKind::FinalKeyword: case TokenKind::AbstractKeyword: - if (!$this->lookahead(TokenKind::ClassKeyword)) { - $this->advanceToken(); - return new SkippedToken($token); - } + case TokenKind::ReadonlyKeyword: + // fallthrough case TokenKind::ClassKeyword: return $this->parseClassDeclaration($parentNode); @@ -614,6 +616,15 @@ class Parser { case TokenKind::UnsetKeyword: return $this->parseUnsetStatement($parentNode); + + case TokenKind::HaltCompilerKeyword: + if ($parentNode instanceof SourceFileNode) { + return $this->parseHaltCompilerStatement($parentNode); + } + // __halt_compiler is a fatal compile error anywhere other than the top level. + // It won't be seen elsewhere in other programs - warn about the token being unexpected. + $this->advanceToken(); + return new SkippedToken($token); } $expressionStatement = new ExpressionStatement(); @@ -657,10 +668,20 @@ class Parser { }; } + /** @return Token[] */ + private function parseClassModifiers(): array { + $modifiers = []; + while ($token = $this->eatOptional(TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::ReadonlyKeyword)) { + $modifiers[] = $token; + } + return $modifiers; + } + private function parseClassDeclaration($parentNode) : Node { $classNode = new ClassDeclaration(); // TODO verify not nested $classNode->parent = $parentNode; - $classNode->abstractOrFinalModifier = $this->eatOptional(TokenKind::AbstractKeyword, TokenKind::FinalKeyword); + $classNode->abstractOrFinalModifier = $this->eatOptional(TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::ReadonlyKeyword); + $classNode->modifiers = $this->parseClassModifiers(); $classNode->classKeyword = $this->eat1(TokenKind::ClassKeyword); $classNode->name = $this->eat($this->nameOrReservedWordTokens); // TODO should be any $classNode->name->kind = TokenKind::Name; @@ -838,9 +859,6 @@ class Parser { if (end($children) instanceof MissingToken && ($children[\count($children) - 2]->kind ?? null) === TokenKind::AmpersandToken) { array_pop($parameter->typeDeclarationList->children); $parameter->byRefToken = array_pop($parameter->typeDeclarationList->children); - if (!$parameter->typeDeclarationList->children) { - unset($parameter->typeDeclarationList); - } } } elseif ($parameter->questionToken) { // TODO ParameterType? @@ -882,27 +900,22 @@ class Parser { /** * Attempt to parse the return type after the `:` and optional `?` token. * + * TODO: Consider changing the return type to a new class TypeList in a future major release? + * ParenthesizedIntersectionType is not a qualified name. * @return DelimitedList\QualifiedNameList|null */ private function parseReturnTypeDeclarationList($parentNode) { - $result = $this->parseDelimitedList( - DelimitedList\QualifiedNameList::class, - self::TYPE_DELIMITER_TOKENS, - function ($token) { - return \in_array($token->kind, $this->returnTypeDeclarationTokens, true) || $this->isQualifiedNameStart($token); + return $this->parseUnionTypeDeclarationList( + $parentNode, + function ($token): bool { + return \in_array($token->kind, $this->returnTypeDeclarationTokens, true) || + $this->isQualifiedNameStart($token); }, function ($parentNode) { return $this->parseReturnTypeDeclaration($parentNode); }, - $parentNode, - false); - - // Add a MissingToken so that this will warn about `function () : T| {}` - // TODO: Make this a reusable abstraction? - if ($result && in_array(end($result->children)->kind ?? null, self::TYPE_DELIMITER_TOKENS)) { - $result->children[] = new MissingToken(TokenKind::ReturnType, $this->token->fullStart); - } - return $result; + TokenKind::ReturnType + ); } private function parseReturnTypeDeclaration($parentNode) { @@ -917,28 +930,109 @@ class Parser { } /** + * Parse a union type such as A, A|B, A&B, A|(B&C), rejecting invalid syntax combinations. + * * @param Node $parentNode + * @param Closure(Token):bool $isTypeStart + * @param Closure(Node):(Node|Token|null) $parseType + * @param int $expectedTypeKind expected kind for token type + * @return DelimitedList\QualifiedNameList|null + */ + private function parseUnionTypeDeclarationList($parentNode, Closure $isTypeStart, Closure $parseType, int $expectedTypeKind) { + $result = new DelimitedList\QualifiedNameList(); + $token = $this->getCurrentToken(); + $delimiter = self::TYPE_DELIMITER_TOKENS; + do { + if ($token->kind === TokenKind::OpenParenToken || $isTypeStart($token)) { + // Forbid mixing A&(B&C) if '&' was already seen + $openParen = in_array(TokenKind::BarToken, $delimiter, true) + ? $this->eatOptional(TokenKind::OpenParenToken) + : null; + if ($openParen) { + $element = $this->parseParenthesizedIntersectionType($result, $openParen, $isTypeStart, $parseType); + // Forbid mixing (A&B)&C by forbidding `&` separator after a parenthesized intersection type. + $delimiter = [TokenKind::BarToken]; + } else { + $element = $parseType($result); + } + $result->addElement($element); + } else { + break; + } + + $delimiterToken = $this->eatOptional($delimiter); + if ($delimiterToken !== null) { + $result->addElement($delimiterToken); + $delimiter = [$delimiterToken->kind]; + } + $token = $this->getCurrentToken(); + } while ($delimiterToken !== null); + + $result->parent = $parentNode; + if ($result->children === null) { + return null; + } + + if (in_array(end($result->children)->kind ?? null, $delimiter, true)) { + // Add a MissingToken so that this will warn about `function () : T| {}` + $result->children[] = new MissingToken($expectedTypeKind, $this->token->fullStart); + } elseif (count($result->children) === 1 && $result->children[0] instanceof ParenthesizedIntersectionType) { + // dnf types with parenthesized intersection types are a union type of at least 2 types. + $result->children[] = new MissingToken(TokenKind::BarToken, $this->token->fullStart); + } + return $result; + } + + /** + * @param Node $parentNode + * @param Token $openParen + * @param Closure(Token):bool $isTypeStart + * @param Closure(Node):(Node|Token|null) $parseType + */ + private function parseParenthesizedIntersectionType($parentNode, Token $openParen, Closure $isTypeStart, Closure $parseType): ParenthesizedIntersectionType { + $node = new ParenthesizedIntersectionType(); + $node->parent = $parentNode; + $node->openParen = $openParen; + $node->children = $this->parseDelimitedList( + DelimitedList\QualifiedNameList::class, + TokenKind::AmpersandToken, + $isTypeStart, + $parseType, + $node, + true); + if ($node->children) { + // https://wiki.php.net/rfc/dnf_types + if ((end($node->children->children)->kind ?? null) === TokenKind::OpenParenToken) { + // Add a MissingToken so that this will Warn about `function (A|(B&) $x) {}` + $node->children->children[] = new MissingToken(TokenKind::Name, $this->token->fullStart); + } elseif (count($node->children->children) === 1) { + // Must have at least 2 parts for A|(B&C) + $node->children->children[] = new MissingToken(TokenKind::AmpersandToken, $this->token->fullStart); + } + } else { + // Having less than 2 types (no types) in A|() is a parse error + $node->children = new MissingToken(TokenKind::Name, $this->token->fullStart); + } + $node->closeParen = $this->eat(TokenKind::CloseParenToken); + return $node; + } + + /** + * @param Node|null $parentNode * @return DelimitedList\QualifiedNameList|null */ private function tryParseParameterTypeDeclarationList($parentNode) { - $result = $this->parseDelimitedList( - DelimitedList\QualifiedNameList::class, - self::TYPE_DELIMITER_TOKENS, + return $this->parseUnionTypeDeclarationList( + $parentNode, function ($token) { - return \in_array($token->kind, $this->parameterTypeDeclarationTokens, true) || $this->isQualifiedNameStart($token); + return \in_array($token->kind, $this->parameterTypeDeclarationTokens, true) || + $this->isQualifiedNameStart($token); }, function ($parentNode) { return $this->tryParseParameterTypeDeclaration($parentNode); }, - $parentNode, - true); - - // Add a MissingToken so that this will Warn about `function (T| $x) {}` - // TODO: Make this a reusable abstraction? - if ($result && in_array(end($result->children)->kind ?? null, self::TYPE_DELIMITER_TOKENS)) { - $result->children[] = new MissingToken(TokenKind::Name, $this->token->fullStart); - } - return $result; + TokenKind::Name + ); } private function parseCompoundStatement($parentNode) { @@ -950,12 +1044,6 @@ class Parser { return $compoundStatement; } - private function array_push_list(& $array, $list) { - foreach ($list as $item) { - $array[] = $item; - } - } - private function isClassMemberDeclarationStart(Token $token) { switch ($token->kind) { // const-modifier @@ -1036,6 +1124,7 @@ class Parser { case TokenKind::ClassKeyword: case TokenKind::AbstractKeyword: case TokenKind::FinalKeyword: + case TokenKind::ReadonlyKeyword: // interface-declaration case TokenKind::InterfaceKeyword: @@ -1062,6 +1151,9 @@ class Parser { // attributes case TokenKind::AttributeToken: + + // __halt_compiler + case TokenKind::HaltCompilerKeyword: return true; default: @@ -1324,8 +1416,6 @@ class Parser { case TokenKind::DollarOpenBraceToken: case TokenKind::OpenBraceDollarToken: $expression->children[] = $this->eat(TokenKind::DollarOpenBraceToken, TokenKind::OpenBraceDollarToken); - // TODO: Reject ${var->prop} and ${(var->prop)} without rejecting ${var+otherVar} - // Currently, this fails to reject ${var->prop} (because `var` has TokenKind::Name instead of StringVarname) if ($this->getCurrentToken()->kind === TokenKind::StringVarname) { $expression->children[] = $this->parseComplexDollarTemplateStringExpression($expression); } else { @@ -1536,6 +1626,9 @@ class Parser { case TokenKind::ProtectedKeyword: case TokenKind::PrivateKeyword: case TokenKind::AttributeToken: + + // dnf types (A&B)|C + case TokenKind::OpenParenToken: return true; } @@ -1546,7 +1639,7 @@ class Parser { /** * @param string $className (name of subclass of DelimitedList) - * @param int $delimiter + * @param int|int[] $delimiter * @param callable $isElementStartFn * @param callable $parseElementFn * @param Node $parentNode @@ -1560,7 +1653,7 @@ class Parser { do { if ($isElementStartFn($token)) { $node->addElement($parseElementFn($node)); - } elseif (!$allowEmptyElements || ($allowEmptyElements && !$this->checkToken($delimiter))) { + } elseif (!$allowEmptyElements || ($allowEmptyElements && !$this->checkAnyToken($delimiter))) { break; } @@ -1572,7 +1665,6 @@ class Parser { // TODO ERROR CASE - no delimiter, but a param follows } while ($delimiterToken !== null); - $node->parent = $parentNode; if ($node->children === null) { return null; @@ -1772,10 +1864,17 @@ class Parser { return $succeeded; } + /** @param int $expectedKind */ private function checkToken($expectedKind) : bool { return $this->getCurrentToken()->kind === $expectedKind; } + /** @param int|int[] $expectedKind */ + private function checkAnyToken($expectedKind) : bool { + $kind = $this->getCurrentToken()->kind; + return \is_array($expectedKind) ? \in_array($kind, $expectedKind, true) : $kind === $expectedKind; + } + private function parseIfStatement($parentNode) { $ifStatement = new IfStatementNode(); $ifStatement->parent = $parentNode; @@ -2114,7 +2213,7 @@ class Parser { } break; case TokenKind::QuestionToken: - if ($parentNode instanceof TernaryExpression) { + if ($parentNode instanceof TernaryExpression && !isset($parentNode->questionToken)) { // Workaround to parse "a ? b : c ? d : e" as "(a ? b : c) ? d : e" break 2; } @@ -2122,6 +2221,7 @@ class Parser { } if ($shouldOperatorTakePrecedenceOverUnary) { + /** @var UnaryOpExpression $unaryExpression */ $unaryExpression = $leftOperand; $leftOperand = $unaryExpression->operand; } @@ -2143,6 +2243,7 @@ class Parser { // Rebuild the unary expression if we deconstructed it earlier. if ($shouldOperatorTakePrecedenceOverUnary) { + /** @var UnaryOpExpression $unaryExpression */ $leftOperand->parent = $unaryExpression; $unaryExpression->operand = $leftOperand; $leftOperand = $unaryExpression; @@ -2269,6 +2370,14 @@ class Parser { // InstanceOf has other remaining issues, but this heuristic is an improvement for many common cases such as `$x && $y = $z` ]; + /** + * @param Token|Node $leftOperand + * @param Token $operatorToken + * @param Token|null $byRefToken + * @param Token|Node $rightOperand + * @param Node $parentNode + * @return BinaryExpression|AssignmentExpression + */ private function makeBinaryExpression($leftOperand, $operatorToken, $byRefToken, $rightOperand, $parentNode) { $assignmentExpression = $operatorToken->kind === TokenKind::EqualsToken; if ($assignmentExpression || \array_key_exists($operatorToken->kind, self::KNOWN_ASSIGNMENT_TOKEN_SET)) { @@ -2283,8 +2392,12 @@ class Parser { } $binaryExpression = $assignmentExpression ? new AssignmentExpression() : new BinaryExpression(); $binaryExpression->parent = $parentNode; - $leftOperand->parent = $binaryExpression; - $rightOperand->parent = $binaryExpression; + if ($leftOperand instanceof Node) { + $leftOperand->parent = $binaryExpression; + } + if ($rightOperand instanceof Node) { + $rightOperand->parent = $binaryExpression; + } $binaryExpression->leftOperand = $leftOperand; $binaryExpression->operator = $operatorToken; if ($binaryExpression instanceof AssignmentExpression && isset($byRefToken)) { @@ -2744,6 +2857,30 @@ class Parser { return $unsetStatement; } + private function parseHaltCompilerStatement($parentNode) { + $haltCompilerStatement = new HaltCompilerStatement(); + $haltCompilerStatement->parent = $parentNode; + + $haltCompilerStatement->haltCompilerKeyword = $this->eat1(TokenKind::HaltCompilerKeyword); + $haltCompilerStatement->openParen = $this->eat1(TokenKind::OpenParenToken); + $haltCompilerStatement->closeParen = $this->eat1(TokenKind::CloseParenToken); + // There is an implicit ';' before the closing php tag. + $haltCompilerStatement->semicolonOrCloseTag = $this->eat(TokenKind::SemicolonToken, TokenKind::ScriptSectionEndTag); + // token_get_all() will return up to 3 tokens after __halt_compiler regardless of whether they're the right ones. + // For invalid php snippets, combine the remaining tokens into InlineHtml + $remainingTokens = []; + while ($this->token->kind !== TokenKind::EndOfFileToken) { + $remainingTokens[] = $this->token; + $this->advanceToken(); + } + if ($remainingTokens) { + $firstToken = $remainingTokens[0]; + $lastToken = end($remainingTokens); + $haltCompilerStatement->data = new Token(TokenKind::InlineHtml, $firstToken->fullStart, $firstToken->fullStart, $lastToken->fullStart + $lastToken->length - $firstToken->fullStart); + } + return $haltCompilerStatement; + } + private function parseArrayCreationExpression($parentNode) { $arrayExpression = new ArrayCreationExpression(); $arrayExpression->parent = $parentNode; @@ -3207,7 +3344,7 @@ class Parser { if ($classBaseClause->extendsKeyword === null) { return null; } - $classBaseClause->baseClass = $this->parseQualifiedName($classBaseClause); + $classBaseClause->baseClass = $this->parseQualifiedName($classBaseClause) ?? new MissingToken(TokenKind::QualifiedName, $this->token->fullStart); return $classBaseClause; } @@ -3278,6 +3415,8 @@ class Parser { } /** + * Parse a comma separated qualified name list (e.g. interfaces implemented by a class) + * * @param Node $parentNode * @return DelimitedList\QualifiedNameList */ @@ -3291,6 +3430,7 @@ class Parser { } private function parseQualifiedNameCatchList($parentNode) { + // catch blocks don't support intersection types. $result = $this->parseDelimitedList( DelimitedList\QualifiedNameList::class, TokenKind::BarToken, @@ -3397,12 +3537,18 @@ class Parser { $namespaceDefinition->namespaceKeyword = $this->eat1(TokenKind::NamespaceKeyword); if (!$this->checkToken(TokenKind::NamespaceKeyword)) { - $namespaceDefinition->name = $this->parseQualifiedName($namespaceDefinition); // TODO only optional with compound statement block + $namespaceDefinition->name = $this->parseQualifiedName($namespaceDefinition); } - $namespaceDefinition->compoundStatementOrSemicolon = - $this->checkToken(TokenKind::OpenBraceToken) ? - $this->parseCompoundStatement($namespaceDefinition) : $this->eatSemicolonOrAbortStatement(); + if ($this->checkToken(TokenKind::OpenBraceToken)) { + $namespaceDefinition->compoundStatementOrSemicolon = $this->parseCompoundStatement($namespaceDefinition); + } else { + if (!$namespaceDefinition->name) { + // only optional with compound statement block + $namespaceDefinition->name = new MissingToken(TokenKind::QualifiedName, $this->token->fullStart); + } + $namespaceDefinition->compoundStatementOrSemicolon = $this->eatSemicolonOrAbortStatement(); + } return $namespaceDefinition; } @@ -3428,13 +3574,17 @@ class Parser { $namespaceUseClause = new NamespaceUseClause(); $namespaceUseClause->parent = $parentNode; $namespaceUseClause->namespaceName = $this->parseQualifiedName($namespaceUseClause); - if ($this->checkToken(TokenKind::AsKeyword)) { - $namespaceUseClause->namespaceAliasingClause = $this->parseNamespaceAliasingClause($namespaceUseClause); - } - elseif ($this->checkToken(TokenKind::OpenBraceToken)) { + if ($this->checkToken(TokenKind::OpenBraceToken)) { $namespaceUseClause->openBrace = $this->eat1(TokenKind::OpenBraceToken); $namespaceUseClause->groupClauses = $this->parseNamespaceUseGroupClauseList($namespaceUseClause); $namespaceUseClause->closeBrace = $this->eat1(TokenKind::CloseBraceToken); + } else { + if (!$namespaceUseClause->namespaceName) { + $namespaceUseClause->namespaceName = new MissingToken(TokenKind::QualifiedName, $this->token->fullStart); + } + if ($this->checkToken(TokenKind::AsKeyword)) { + $namespaceUseClause->namespaceAliasingClause = $this->parseNamespaceAliasingClause($namespaceUseClause); + } } return $namespaceUseClause; @@ -3455,7 +3605,7 @@ class Parser { $namespaceUseGroupClause->parent = $parentNode; $namespaceUseGroupClause->functionOrConst = $this->eatOptional(TokenKind::FunctionKeyword, TokenKind::ConstKeyword); - $namespaceUseGroupClause->namespaceName = $this->parseQualifiedName($namespaceUseGroupClause); + $namespaceUseGroupClause->namespaceName = $this->parseQualifiedName($namespaceUseGroupClause) ?? new MissingToken(TokenKind::QualifiedName, $this->token->fullStart); if ($this->checkToken(TokenKind::AsKeyword)) { $namespaceUseGroupClause->namespaceAliasingClause = $this->parseNamespaceAliasingClause($namespaceUseGroupClause); } @@ -3513,6 +3663,7 @@ class Parser { case TokenKind::AbstractKeyword: case TokenKind::FinalKeyword: case TokenKind::ReadonlyKeyword: + case TokenKind::ConstKeyword: // method-declaration case TokenKind::FunctionKeyword: @@ -3533,6 +3684,9 @@ class Parser { $token = $this->getCurrentToken(); switch ($token->kind) { + case TokenKind::ConstKeyword: + return $this->parseClassConstDeclaration($parentNode, $modifiers); + case TokenKind::FunctionKeyword: return $this->parseMethodDeclaration($parentNode, $modifiers); diff --git a/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php b/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php index be8cd711..08c57884 100644 --- a/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php +++ b/vendor/microsoft/tolerant-php-parser/src/PhpTokenizer.php @@ -228,7 +228,6 @@ class PhpTokenizer implements TokenStreamProviderInterface { T_DIR => TokenKind::Name, T_FILE => TokenKind::Name, T_FUNC_C => TokenKind::Name, - T_HALT_COMPILER => TokenKind::Name, T_METHOD_C => TokenKind::Name, T_NS_C => TokenKind::Name, T_TRAIT_C => TokenKind::Name, @@ -274,6 +273,7 @@ class PhpTokenizer implements TokenStreamProviderInterface { T_FUNCTION => TokenKind::FunctionKeyword, T_GLOBAL => TokenKind::GlobalKeyword, T_GOTO => TokenKind::GotoKeyword, + T_HALT_COMPILER => TokenKind::HaltCompilerKeyword, T_IF => TokenKind::IfKeyword, T_IMPLEMENTS => TokenKind::ImplementsKeyword, T_INCLUDE => TokenKind::IncludeKeyword, diff --git a/vendor/microsoft/tolerant-php-parser/src/Token.php b/vendor/microsoft/tolerant-php-parser/src/Token.php index 6c9daf74..5fa1595d 100644 --- a/vendor/microsoft/tolerant-php-parser/src/Token.php +++ b/vendor/microsoft/tolerant-php-parser/src/Token.php @@ -18,7 +18,7 @@ class Token implements \JsonSerializable { public $fullStart; /** @var int */ public $start; - /** @var int */ + /** @var int the length is equal to $this->getEndPosition() - $this->fullStart. */ public $length; /** diff --git a/vendor/microsoft/tolerant-php-parser/src/TokenKind.php b/vendor/microsoft/tolerant-php-parser/src/TokenKind.php index 29058057..b4d59c2d 100644 --- a/vendor/microsoft/tolerant-php-parser/src/TokenKind.php +++ b/vendor/microsoft/tolerant-php-parser/src/TokenKind.php @@ -91,6 +91,7 @@ class TokenKind { const IterableKeyword = self::IterableReservedWord; const EnumKeyword = 171; const ReadonlyKeyword = 172; + const HaltCompilerKeyword = 173; const OpenBracketToken = 201; const CloseBracketToken = 202; @@ -175,6 +176,7 @@ class TokenKind { const NullReservedWord = 322; const MixedReservedWord = 340; const IterableReservedWord = 170; + const NeverReservedWord = 341; const ScriptSectionStartTag = 323; const ScriptSectionEndTag = 324; diff --git a/vendor/microsoft/tolerant-php-parser/src/TokenStringMaps.php b/vendor/microsoft/tolerant-php-parser/src/TokenStringMaps.php index 9798bdd9..15249ed1 100644 --- a/vendor/microsoft/tolerant-php-parser/src/TokenStringMaps.php +++ b/vendor/microsoft/tolerant-php-parser/src/TokenStringMaps.php @@ -57,6 +57,7 @@ class TokenStringMaps { "interface" => TokenKind::InterfaceKeyword, "isset" => TokenKind::IsSetKeyword, "list" => TokenKind::ListKeyword, + "match" => TokenKind::MatchKeyword, "namespace" => TokenKind::NamespaceKeyword, "new" => TokenKind::NewKeyword, "or" => TokenKind::OrKeyword, @@ -108,6 +109,7 @@ class TokenStringMaps { "void" => TokenKind::VoidReservedWord, "iterable" => TokenKind::IterableReservedWord, "mixed" => TokenKind::MixedReservedWord, + "never" => TokenKind::NeverReservedWord, ]; const OPERATORS_AND_PUNCTUATORS = [ diff --git a/vendor/myclabs/deep-copy/README.md b/vendor/myclabs/deep-copy/README.md index 503e93df..94aaa06d 100644 --- a/vendor/myclabs/deep-copy/README.md +++ b/vendor/myclabs/deep-copy/README.md @@ -186,6 +186,9 @@ $matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); - `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` - `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` +By design, matching a filter will stop the chain of filters (i.e. the next ones will not be applied). +Using the ([`ChainableFilter`](#chainablefilter-filter)) won't stop the chain of filters. + #### `SetNullFilter` (filter) @@ -226,6 +229,34 @@ $copy = $copier->copy($object); ``` +#### `ChainableFilter` (filter) + +If you use cloning on proxy classes, you might want to apply two filters for: +1. loading the data +2. applying a transformation + +You can use the `ChainableFilter` as a decorator of the proxy loader filter, which won't stop the chain of filters (i.e. +the next ones may be applied). + + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\ChainableFilter; +use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; +use DeepCopy\Filter\SetNullFilter; +use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; +use DeepCopy\Matcher\PropertyNameMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher()); +$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); + +$copy = $copier->copy($object); + +echo $copy->id; // null +``` + + #### `DoctrineCollectionFilter` (filter) If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: @@ -268,6 +299,8 @@ Doctrine proxy class (...\\\_\_CG\_\_\Proxy). You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. **Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded before other filters are applied!** +We recommend to decorate the `DoctrineProxyFilter` with the `ChainableFilter` to allow applying other filters to the +cloned lazy loaded entities. ```php use DeepCopy\DeepCopy; @@ -275,7 +308,7 @@ use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; $copier = new DeepCopy(); -$copier->addFilter(new DoctrineProxyFilter(), new DoctrineProxyMatcher()); +$copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher()); $copy = $copier->copy($object); diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php b/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php index 5e68c64e..6e766d80 100644 --- a/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php +++ b/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php @@ -7,6 +7,7 @@ use DateInterval; use DateTimeInterface; use DateTimeZone; use DeepCopy\Exception\CloneException; +use DeepCopy\Filter\ChainableFilter; use DeepCopy\Filter\Filter; use DeepCopy\Matcher\Matcher; use DeepCopy\Reflection\ReflectionHelper; @@ -239,6 +240,10 @@ class DeepCopy } ); + if ($filter instanceof ChainableFilter) { + continue; + } + // If a filter matches, we stop processing this property return; } diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php new file mode 100644 index 00000000..4e3f7bbc --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php @@ -0,0 +1,24 @@ +filter = $filter; + } + + public function apply($object, $property, $objectCopier) + { + $this->filter->apply($object, $property, $objectCopier); + } +} diff --git a/vendor/nikic/php-parser/grammar/php7.y b/vendor/nikic/php-parser/grammar/php7.y index 1f9b4bdd..fc7862c3 100644 --- a/vendor/nikic/php-parser/grammar/php7.y +++ b/vendor/nikic/php-parser/grammar/php7.y @@ -518,7 +518,8 @@ new_elseif_list: ; new_elseif: - T_ELSEIF '(' expr ')' ':' inner_statement_list { $$ = Stmt\ElseIf_[$3, $6]; } + T_ELSEIF '(' expr ')' ':' inner_statement_list + { $$ = Stmt\ElseIf_[$3, $6]; $this->fixupAlternativeElse($$); } ; else_single: @@ -528,7 +529,8 @@ else_single: new_else_single: /* empty */ { $$ = null; } - | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; } + | T_ELSE ':' inner_statement_list + { $$ = Stmt\Else_[$3]; $this->fixupAlternativeElse($$); } ; foreach_variable: diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php index 48deff23..c6b9abd0 100644 --- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php @@ -1826,7 +1826,7 @@ class Php7 extends \PhpParser\ParserAbstract $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 266 => function ($stackPos) { - $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue); }, 267 => function ($stackPos) { $this->semValue = null; @@ -1838,7 +1838,7 @@ class Php7 extends \PhpParser\ParserAbstract $this->semValue = null; }, 270 => function ($stackPos) { - $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue); }, 271 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos-(1-1)], false); diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php index 301d3c6a..9f9d00c7 100644 --- a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +++ b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php @@ -16,9 +16,12 @@ use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassConst; use PhpParser\Node\Stmt\ClassMethod; +use PhpParser\Node\Stmt\Else_; +use PhpParser\Node\Stmt\ElseIf_; use PhpParser\Node\Stmt\Enum_; use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Namespace_; +use PhpParser\Node\Stmt\Nop; use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\TryCatch; use PhpParser\Node\Stmt\UseUse; @@ -876,6 +879,24 @@ abstract class ParserAbstract implements Parser return $attributes; } + /** @param ElseIf_|Else_ $node */ + protected function fixupAlternativeElse($node) { + // Make sure a trailing nop statement carrying comments is part of the node. + $numStmts = \count($node->stmts); + if ($numStmts !== 0 && $node->stmts[$numStmts - 1] instanceof Nop) { + $nopAttrs = $node->stmts[$numStmts - 1]->getAttributes(); + if (isset($nopAttrs['endLine'])) { + $node->setAttribute('endLine', $nopAttrs['endLine']); + } + if (isset($nopAttrs['endFilePos'])) { + $node->setAttribute('endFilePos', $nopAttrs['endFilePos']); + } + if (isset($nopAttrs['endTokenPos'])) { + $node->setAttribute('endTokenPos', $nopAttrs['endTokenPos']); + } + } + } + protected function checkClassModifier($a, $b, $modifierPos) { try { Class_::verifyClassModifier($a, $b); diff --git a/vendor/phan/phan/.phan/internal_stubs/zip.phan_php b/vendor/phan/phan/.phan/internal_stubs/zip.phan_php new file mode 100644 index 00000000..7985aeff --- /dev/null +++ b/vendor/phan/phan/.phan/internal_stubs/zip.phan_php @@ -0,0 +1,163 @@ +code_base, (clone $this->context)->withLineNumberStart($last_if_elem->children['stmts']->lineno ?? $last_if_elem->lineno), 'PhanPluginEmptyStatementIf', - 'Empty statement list statement detected for the last if/elseif statement', + 'Empty statement list detected for the last if/elseif statement', [] ); } @@ -191,7 +191,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->code_base, (clone $this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), 'PhanPluginEmptyStatementForLoop', - 'Empty statement list statement detected for the for loop', + 'Empty statement list detected for the for loop', [] ); } @@ -219,7 +219,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->code_base, (clone $this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), 'PhanPluginEmptyStatementWhileLoop', - 'Empty statement list statement detected for the while loop', + 'Empty statement list detected for the while loop', [] ); } @@ -247,7 +247,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->code_base, (clone $this->context)->withLineNumberStart($stmts_node->lineno), 'PhanPluginEmptyStatementDoWhileLoop', - 'Empty statement list statement detected for the do-while loop', + 'Empty statement list detected for the do-while loop', [] ); } @@ -276,7 +276,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->code_base, (clone $this->context)->withLineNumberStart($stmts_node->lineno), 'PhanPluginEmptyStatementForeachLoop', - 'Empty statement list statement detected for the foreach loop', + 'Empty statement list detected for the foreach loop', [] ); } @@ -295,7 +295,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->code_base, (clone $this->context)->withLineNumberStart($try_node->lineno), 'PhanPluginEmptyStatementTryBody', - 'Empty statement list statement detected for the try statement\'s body', + 'Empty statement list detected for the try statement\'s body', [] ); } @@ -315,7 +315,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->code_base, (clone $this->context)->withLineNumberStart($finally_node->lineno), 'PhanPluginEmptyStatementTryFinally', - 'Empty statement list statement detected for the try\'s finally body', + 'Empty statement list detected for the try\'s finally body', [] ); } diff --git a/vendor/phan/phan/.phan/plugins/README.md b/vendor/phan/phan/.phan/plugins/README.md index e8dede46..feed3640 100644 --- a/vendor/phan/phan/.phan/plugins/README.md +++ b/vendor/phan/phan/.phan/plugins/README.md @@ -216,15 +216,15 @@ By default, this plugin won't warn if it can find a TODO/FIXME/"Deliberately emp (This may miss some TODOs due to `php-ast` not providing the end line numbers) The setting `'plugin_config' => ['empty_statement_list_ignore_todos' => true]` can be used to make it unconditionally warn about empty statement lists. -- **PhanPluginEmptyStatementDoWhileLoop** `Empty statement list statement detected for the do-while loop` -- **PhanPluginEmptyStatementForLoop** `Empty statement list statement detected for the for loop` -- **PhanPluginEmptyStatementForeachLoop** `Empty statement list statement detected for the foreach loop` -- **PhanPluginEmptyStatementIf**: `Empty statement list statement detected for the last if/elseif statement` +- **PhanPluginEmptyStatementDoWhileLoop** `Empty statement list detected for the do-while loop` +- **PhanPluginEmptyStatementForLoop** `Empty statement list detected for the for loop` +- **PhanPluginEmptyStatementForeachLoop** `Empty statement list detected for the foreach loop` +- **PhanPluginEmptyStatementIf**: `Empty statement list detected for the last if/elseif statement` - **PhanPluginEmptyStatementSwitch** `No side effects seen for any cases of this switch statement` -- **PhanPluginEmptyStatementTryBody** `Empty statement list statement detected for the try statement's body` +- **PhanPluginEmptyStatementTryBody** `Empty statement list detected for the try statement's body` - **PhanPluginEmptyStatementPossiblyNonThrowingTryBody**: `Found a try block that looks like it might not throw. Note that this check is a heuristic prone to false positives, especially because error handlers, signal handlers, destructors, and other things may all lead to throwing.` -- **PhanPluginEmptyStatementTryFinally** `Empty statement list statement detected for the try's finally body` -- **PhanPluginEmptyStatementWhileLoop** `Empty statement list statement detected for the while loop` +- **PhanPluginEmptyStatementTryFinally** `Empty statement list detected for the try's finally body` +- **PhanPluginEmptyStatementWhileLoop** `Empty statement list detected for the while loop` ### LoopVariableReusePlugin.php diff --git a/vendor/phan/phan/NEWS.md b/vendor/phan/phan/NEWS.md index 8d21080d..cea4591a 100644 --- a/vendor/phan/phan/NEWS.md +++ b/vendor/phan/phan/NEWS.md @@ -1,5 +1,20 @@ Phan NEWS +Mar 03 2023, Phan 5.4.2 +----------------------- + +Miscellaneous: +- Fix wording in EmptyStatementListPlugin issue messages. +- Add a few more functions where the return value should be used. +- Fix signature of exif_read_data() #4759 +- Make allow_missing_properties setting aware of AllowDynamicProperties attribute for PHP 8.2 + +Maintenance: +- Require php-ast 1.1.0 or newer in PHP 8.2+ if php-ast is installed. + This release of php-ast makes the parsing of `AST_ARROW_FUNC` in php 8.2 match older php versions. +- Support parsing of PHP 8.2 syntax such as disjunctive normal form types and `readonly` classes in the polyfill/fallback parser. +- Fix bugs parsing `__halt_compiler()` in the polyfill/fallback parser. + Aug 25 2022, Phan 5.4.1 ----------------------- @@ -14,6 +29,11 @@ New Features(Analysis): Miscellaneous: - Allow `array_filter` `$callback` to be null (#4715) +Bug fixes: +- Fix false positive warning in PHP < 8.0 for inferring the method signature of `new SoapFault`. (#4724) + (The constructor was internally declared in reflection as `SoapFault::SoapFault` until php 8.0) + Adjust the method signature of `SoapFault::__construct` to match the documentation/implementation. + Aug 08 2022, Phan 5.4.0 ----------------------- diff --git a/vendor/phan/phan/composer.json b/vendor/phan/phan/composer.json index a22ad45a..f9210ec2 100644 --- a/vendor/phan/phan/composer.json +++ b/vendor/phan/phan/composer.json @@ -29,7 +29,7 @@ "composer/semver": "^1.4|^2.0|^3.0", "composer/xdebug-handler": "^2.0|^3.0", "felixfbecker/advanced-json-rpc": "^3.0.4", - "microsoft/tolerant-php-parser": "0.1.1", + "microsoft/tolerant-php-parser": "0.1.2", "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", "sabre/event": "^5.1.3", "symfony/console": "^3.2|^4.0|^5.0|^6.0", diff --git a/vendor/phan/phan/composer.lock b/vendor/phan/phan/composer.lock index b308a8f8..5cd7db38 100644 --- a/vendor/phan/phan/composer.lock +++ b/vendor/phan/phan/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "62f4c0f1a6e50535b7c03182832d5c4e", + "content-hash": "301a32dbdfef414765074fc7e60effbb", "packages": [ { "name": "composer/pcre", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "c8e9d27cfc5ed22643c19c160455b473ffd8aabe" + "reference": "3fdb2807b31a78a40ad89570e30ec77466c98717" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/c8e9d27cfc5ed22643c19c160455b473ffd8aabe", - "reference": "c8e9d27cfc5ed22643c19c160455b473ffd8aabe", + "url": "https://api.github.com/repos/composer/pcre/zipball/3fdb2807b31a78a40ad89570e30ec77466c98717", + "reference": "3fdb2807b31a78a40ad89570e30ec77466c98717", "shasum": "" }, "require": { @@ -59,7 +59,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/2.0.0" + "source": "https://github.com/composer/pcre/tree/2.1.0" }, "funding": [ { @@ -75,7 +75,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:05:29+00:00" + "time": "2022-11-16T18:32:04+00:00" }, { "name": "composer/semver", @@ -271,16 +271,16 @@ }, { "name": "microsoft/tolerant-php-parser", - "version": "v0.1.1", + "version": "v0.1.2", "source": { "type": "git", "url": "https://github.com/microsoft/tolerant-php-parser.git", - "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16" + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16", - "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/3eccfd273323aaf69513e2f1c888393f5947804b", + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b", "shasum": "" }, "require": { @@ -310,22 +310,22 @@ "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", "support": { "issues": "https://github.com/microsoft/tolerant-php-parser/issues", - "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1" + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.2" }, - "time": "2021-07-16T21:28:12+00:00" + "time": "2022-10-05T17:30:19+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", + "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", "shasum": "" }, "require": { @@ -361,9 +361,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.1.0" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2022-12-08T20:46:14+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -691,16 +691,16 @@ }, { "name": "symfony/console", - "version": "v5.4.11", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "535846c7ee6bc4dd027ca0d93220601456734b10" + "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/535846c7ee6bc4dd027ca0d93220601456734b10", - "reference": "535846c7ee6bc4dd027ca0d93220601456734b10", + "url": "https://api.github.com/repos/symfony/console/zipball/c77433ddc6cdc689caf48065d9ea22ca0853fbd9", + "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9", "shasum": "" }, "require": { @@ -770,7 +770,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.11" + "source": "https://github.com/symfony/console/tree/v5.4.21" }, "funding": [ { @@ -786,7 +786,7 @@ "type": "tidelift" } ], - "time": "2022-07-22T10:42:43+00:00" + "time": "2023-02-25T16:59:41+00:00" }, { "name": "symfony/deprecation-contracts", @@ -857,16 +857,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -881,7 +881,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -919,7 +919,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -935,20 +935,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -960,7 +960,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1000,7 +1000,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -1016,20 +1016,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -1041,7 +1041,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1084,7 +1084,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -1100,20 +1100,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -1128,7 +1128,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1167,7 +1167,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -1183,20 +1183,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { @@ -1205,7 +1205,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1246,7 +1246,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -1262,20 +1262,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -1284,7 +1284,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1329,7 +1329,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -1345,7 +1345,7 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/service-contracts", @@ -1432,16 +1432,16 @@ }, { "name": "symfony/string", - "version": "v5.4.11", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "5eb661e49ad389e4ae2b6e4df8d783a8a6548322" + "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/5eb661e49ad389e4ae2b6e4df8d783a8a6548322", - "reference": "5eb661e49ad389e4ae2b6e4df8d783a8a6548322", + "url": "https://api.github.com/repos/symfony/string/zipball/edac10d167b78b1d90f46a80320d632de0bd9f2f", + "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f", "shasum": "" }, "require": { @@ -1498,7 +1498,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.11" + "source": "https://github.com/symfony/string/tree/v5.4.21" }, "funding": [ { @@ -1514,34 +1514,42 @@ "type": "tidelift" } ], - "time": "2022-07-24T16:15:25+00:00" + "time": "2023-02-22T08:00:55+00:00" }, { "name": "tysonandre/var_representation_polyfill", - "version": "0.1.2", + "version": "0.1.3", "source": { "type": "git", "url": "https://github.com/TysonAndre/var_representation_polyfill.git", - "reference": "e925b7b0806b39f26aa899202ee065decbabafdb" + "reference": "e9116c2c352bb0835ca428b442dde7767c11ad32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/e925b7b0806b39f26aa899202ee065decbabafdb", - "reference": "e925b7b0806b39f26aa899202ee065decbabafdb", + "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/e9116c2c352bb0835ca428b442dde7767c11ad32", + "reference": "e9116c2c352bb0835ca428b442dde7767c11ad32", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": "^7.2.0|^8.0.0" }, + "provide": { + "ext-var_representation": "*" + }, "require-dev": { - "phan/phan": "^5.1", + "phan/phan": "^5.4.1", "phpunit/phpunit": "^8.5.0" }, "suggest": { - "ext-var_representation": "*" + "ext-var_representation": "For best performance" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.3-dev" + } + }, "autoload": { "files": [ "src/var_representation.php" @@ -1566,9 +1574,9 @@ ], "support": { "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", - "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.1.2" + "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.1.3" }, - "time": "2022-08-11T12:33:19+00:00" + "time": "2022-08-31T12:59:22+00:00" }, { "name": "webmozart/assert", @@ -1632,30 +1640,30 @@ "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -1682,7 +1690,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -1698,7 +1706,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "myclabs/deep-copy", @@ -2169,16 +2177,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.29", + "version": "8.5.33", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e8c563c47a9a303662955518ca532b022b337f4d" + "reference": "7d1ff0e8c6b35db78ff13e3e05517d7cbf7aa32e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e8c563c47a9a303662955518ca532b022b337f4d", - "reference": "e8c563c47a9a303662955518ca532b022b337f4d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7d1ff0e8c6b35db78ff13e3e05517d7cbf7aa32e", + "reference": "7d1ff0e8c6b35db78ff13e3e05517d7cbf7aa32e", "shasum": "" }, "require": { @@ -2197,10 +2205,10 @@ "phpunit/php-file-iterator": "^2.0.4", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", + "sebastian/comparator": "^3.0.5", "sebastian/diff": "^3.0.2", "sebastian/environment": "^4.2.3", - "sebastian/exporter": "^3.1.2", + "sebastian/exporter": "^3.1.5", "sebastian/global-state": "^3.0.0", "sebastian/object-enumerator": "^3.0.3", "sebastian/resource-operations": "^2.0.1", @@ -2246,7 +2254,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.29" + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.33" }, "funding": [ { @@ -2256,9 +2264,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-22T13:59:39+00:00" + "time": "2023-02-27T13:04:50+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -2317,16 +2329,16 @@ }, { "name": "sebastian/comparator", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { @@ -2379,7 +2391,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, "funding": [ { @@ -2387,7 +2399,7 @@ "type": "github" } ], - "time": "2020-11-30T08:04:30+00:00" + "time": "2022-09-14T12:31:48+00:00" }, { "name": "sebastian/diff", @@ -2520,16 +2532,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.4", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", "shasum": "" }, "require": { @@ -2585,7 +2597,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" }, "funding": [ { @@ -2593,7 +2605,7 @@ "type": "github" } ], - "time": "2021-11-11T13:51:24+00:00" + "time": "2022-09-14T06:00:17+00:00" }, { "name": "sebastian/global-state", @@ -3055,5 +3067,5 @@ "platform-overrides": { "php": "7.2.24" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.0.0" } diff --git a/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php b/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php index 34dfb6e7..819727a2 100644 --- a/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php +++ b/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php @@ -1269,6 +1269,9 @@ class TolerantASTConverter $variableName !== null ? self::getStartLine($variableName) : $start_line ); }, + 'Microsoft\PhpParser\Node\Statement\HaltCompilerStatement' => static function (PhpParser\Node\Statement\HaltCompilerStatement $n, int $start_line): ast\Node { + return new ast\Node(ast\AST_HALT_COMPILER, 0, ['offset' => $n->getHaltCompilerOffset()], $start_line); + }, 'Microsoft\PhpParser\Node\Statement\InterfaceDeclaration' => static function (PhpParser\Node\Statement\InterfaceDeclaration $n, int $start_line): ast\Node { if ($n->interfaceKeyword) { $start_line = self::getStartLine($n->interfaceKeyword); @@ -1294,7 +1297,7 @@ class TolerantASTConverter $end_line = static::getEndLine($n); $base_class = $n->classBaseClause->baseClass ?? null; return static::astStmtClass( - static::phpParserClassModifierToAstClassFlags($n->abstractOrFinalModifier), + static::phpParserClassModifiersToAstClassFlags($n->abstractOrFinalModifier, $n->modifiers), static::tokenToString($n->name), static::phpParserAttributeGroupsToAstAttributeList($n->attributes), $base_class !== null ? static::phpParserNonValueNodeToAstNode($base_class) : null, @@ -1940,6 +1943,23 @@ class TolerantASTConverter return new ast\Node($is_intersection ? ast\AST_TYPE_INTERSECTION : ast\AST_TYPE_UNION, 0, $types, $types[0]->lineno); } + protected static function phpParserParenthesizedIntersectionTypeToAstNode(PhpParser\Node\ParenthesizedIntersectionType $n, int $start_line): ?ast\Node { + $children = []; + foreach ($n->children->children ?? [] as $c) { + if ($c instanceof Token && $c->kind === TokenKind::AmpersandToken) { + continue; + } + $result = self::phpParserTypeToAstNode($c, $start_line); + if ($result) { + $children[] = $result; + } + } + if (count($children) <= 1) { + return $children[0] ?? null; + } + return new ast\Node(ast\AST_TYPE_INTERSECTION, 0, $children, $start_line); + } + /** * @param PhpParser\Node\QualifiedName|Token|null $type */ @@ -1951,7 +1971,12 @@ class TolerantASTConverter $original_type = $type; if ($type instanceof PhpParser\Node\QualifiedName) { $type = static::phpParserNameToString($type); + } elseif ($type instanceof PhpParser\Node\ParenthesizedIntersectionType) { + return static::phpParserParenthesizedIntersectionTypeToAstNode($type, $line); } elseif ($type instanceof Token) { + if (get_class($type) !== Token::class) { + return null; + } $type = static::tokenToString($type); } if (\is_string($type)) { @@ -2283,24 +2308,35 @@ class TolerantASTConverter ); } - /** - * @param ?Token $flags - * @throws InvalidArgumentException if the class flags were unexpected - */ - private static function phpParserClassModifierToAstClassFlags(?Token $flags): int + private static function phpParserClassModifierToAstClassFlags(?Token $modifier): int { - if ($flags === null) { + if ($modifier === null) { return 0; } - switch ($flags->kind) { + switch ($modifier->kind) { case TokenKind::AbstractKeyword: return flags\CLASS_ABSTRACT; case TokenKind::FinalKeyword: return flags\CLASS_FINAL; + case TokenKind::ReadonlyKeyword: + return flags\CLASS_READONLY; default: - throw new InvalidArgumentException("Unexpected kind '" . Token::getTokenKindNameFromValue($flags->kind) . "'"); + throw new InvalidArgumentException("Unexpected kind '" . Token::getTokenKindNameFromValue($modifier->kind) . "'"); } } + /** + * @param ?Token $modifier + * @param list $modifiers + * @throws InvalidArgumentException if the class flags were unexpected + */ + private static function phpParserClassModifiersToAstClassFlags(?Token $modifier, array $modifiers): int + { + $flags = self::phpParserClassModifierToAstClassFlags($modifier); + foreach ($modifiers as $extra_modifier) { + $flags |= self::phpParserClassModifierToAstClassFlags($extra_modifier); + } + return $flags; + } private static function interfaceBaseClauseToNode(?\Microsoft\PhpParser\Node\InterfaceBaseClause $node): ?\ast\Node { diff --git a/vendor/phan/phan/src/Phan/Bootstrap.php b/vendor/phan/phan/src/Phan/Bootstrap.php index 697a1843..9702f96a 100644 --- a/vendor/phan/phan/src/Phan/Bootstrap.php +++ b/vendor/phan/phan/src/Phan/Bootstrap.php @@ -146,8 +146,8 @@ if (extension_loaded('ast')) { exit(1); }; - if (PHP_VERSION_ID >= 80200 && version_compare($ast_version, '1.0.15') < 0) { - $phan_output_ast_too_old_and_exit('1.0.15', '8.2'); + if (PHP_VERSION_ID >= 80200 && version_compare($ast_version, '1.1.0') < 0) { + $phan_output_ast_too_old_and_exit('1.1.0', '8.2'); } elseif (PHP_VERSION_ID >= 80100 && version_compare($ast_version, '1.0.14') < 0) { $phan_output_ast_too_old_and_exit('1.0.14', '8.1'); } elseif (PHP_VERSION_ID >= 80000 && version_compare($ast_version, '1.0.11') < 0) { @@ -360,6 +360,7 @@ function phan_error_handler(int $errno, string $errstr, string $errfile, int $er } if ($errno === E_DEPRECATED) { // Because php 7.2 is used in CI we're stuck on an unmaintained paratest version. + // NOTE: Known issues with dynamic properties in tolerant-php-parser are fixed in `main` (but not 0.1.1) but there may be remaining unknown ones. if (preg_match('/^Creation of dynamic property (ParaTest\\\\Runners|Microsoft\\\\PhpParser|Phan\\\\LanguageServer\\\\LanguageServer::)/', $errstr)) { return true; } diff --git a/vendor/phan/phan/src/Phan/CLI.php b/vendor/phan/phan/src/Phan/CLI.php index 830ed8b6..9e65f72a 100644 --- a/vendor/phan/phan/src/Phan/CLI.php +++ b/vendor/phan/phan/src/Phan/CLI.php @@ -84,7 +84,7 @@ class CLI /** * This should be updated to x.y.z-dev after every release, and x.y.z before a release. */ - public const PHAN_VERSION = '5.4.1'; + public const PHAN_VERSION = '5.4.2'; /** * List of short flags passed to getopt diff --git a/vendor/phan/phan/src/Phan/Language/Element/Clazz.php b/vendor/phan/phan/src/Phan/Language/Element/Clazz.php index a5c63176..a4513d7a 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Clazz.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Clazz.php @@ -488,6 +488,10 @@ class Clazz extends AddressableElement foreach ($method_list as $method) { $clazz->addMethod($code_base, $method, None::instance()); } + if (\PHP_VERSION_ID < 80000 && $reflection_method->isConstructor() && \strcasecmp($reflection_method->name, '__construct') !== 0) { + // E.g. SoapFault::SoapFault and other soap classes before PHP 8.0 + $clazz->addMethod($code_base, Method::defaultConstructorForClass($clazz, $code_base), None::instance()); + } } return $clazz; @@ -2298,6 +2302,11 @@ class Clazz extends AddressableElement */ public function hasDynamicProperties(CodeBase $code_base): bool { + foreach($this->attribute_list as $attr) { + if ((string)$attr === '\AllowDynamicProperties') { + return true; + } + } return $this->hasFlagsRecursive($code_base, Flags::CLASS_HAS_DYNAMIC_PROPERTIES); } @@ -2979,6 +2988,16 @@ class Clazz extends AddressableElement $this->warnAboutAmbiguousInheritance($code_base, $class, $next_class_fqsen); } + if ($attribute_list = $class->getAttributeList()) { + foreach($attribute_list as $attr) { + if ((string)$attr === "\AllowDynamicProperties") { + $new_attribute_list = $this->getAttributeList(); + $new_attribute_list[] = $attr; + $this->setAttributeList($new_attribute_list); + break; + } + } + } // Constants should have been imported earlier, but call it again just in case $this->importConstantsFromAncestorClass($code_base, $class); diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php index e15ed6f7..a0023057 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php @@ -3074,7 +3074,7 @@ return [ 'Exception::getTraceAsString' => ['string'], 'exec' => ['string', 'command'=>'string', '&w_output='=>'array', '&w_result_code='=>'int'], 'exif_imagetype' => ['int|false', 'filename'=>'string'], -'exif_read_data' => ['array|false', 'file'=>'string', 'required_sections='=>'string', 'as_arrays='=>'bool', 'read_thumbnail='=>'bool'], +'exif_read_data' => ['array|false', 'file'=>'resource|string', 'required_sections='=>'string', 'as_arrays='=>'bool', 'read_thumbnail='=>'bool'], 'exif_tagname' => ['string|false', 'index'=>'int'], 'exif_thumbnail' => ['string|false', 'file'=>'string', '&w_width='=>'int', '&w_height='=>'int', '&w_image_type='=>'int'], 'exit' => ['', 'status'=>'string|int'], @@ -13136,7 +13136,7 @@ return [ 'SoapClient::__soapCall' => ['', 'name'=>'string', 'args'=>'array', 'options='=>'array', 'inputHeaders='=>'SoapHeader|array', '&w_outputHeaders='=>'array'], 'SoapClient::SoapClient' => ['object', 'wsdl'=>'mixed', 'options='=>'array'], 'SoapFault::__clone' => ['void'], -'SoapFault::__construct' => ['void', 'code'=>'string', 'string'=>'string', 'actor='=>'string', 'details='=>'string', 'name='=>'string', 'headerFault='=>'string'], +'SoapFault::__construct' => ['void', 'code'=>'?string|?array{0:string,1:string}', 'string'=>'string', 'actor='=>'string', 'details='=>'mixed', 'name='=>'string', 'headerFault='=>'string'], 'SoapFault::__toString' => ['string'], 'SoapFault::__wakeup' => ['void'], 'SoapFault::getCode' => ['int'], @@ -13146,7 +13146,7 @@ return [ 'SoapFault::getPrevious' => ['?Exception|?Throwable'], 'SoapFault::getTrace' => ['array'], 'SoapFault::getTraceAsString' => ['string'], -'SoapFault::SoapFault' => ['object', 'faultcode'=>'string', 'faultstring'=>'string', 'faultactor='=>'string', 'detail='=>'string', 'faultname='=>'string', 'headerfault='=>'string'], +'SoapFault::SoapFault' => ['void', 'code'=>'?string|?array{0:string,1:string}', 'string'=>'string', 'actor='=>'string', 'details='=>'mixed', 'name='=>'string', 'headerFault='=>'string'], 'SoapHeader::__construct' => ['void', 'namespace'=>'string', 'name'=>'string', 'data='=>'mixed', 'mustUnderstand='=>'bool', 'actor='=>'string'], 'SoapHeader::SoapHeader' => ['object', 'namespace'=>'string', 'name'=>'string', 'data='=>'mixed', 'mustunderstand='=>'bool', 'actor='=>'string'], 'SoapParam::__construct' => ['void', 'data'=>'mixed', 'name'=>'string'], diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php index bcd65f52..eccdb651 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php @@ -131,6 +131,10 @@ return [ 'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'], ], 'changed' => [ + 'exif_read_data' => [ + 'old' => ['array|false', 'file'=>'string', 'required_sections='=>'string', 'as_arrays='=>'bool', 'read_thumbnail='=>'bool'], + 'new' => ['array|false', 'file'=>'resource|string', 'required_sections='=>'string', 'as_arrays='=>'bool', 'read_thumbnail='=>'bool'], + ], 'hash_copy' => [ 'old' => ['resource', 'context'=>'resource'], 'new' => ['HashContext', 'context'=>'HashContext'], diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php index 13e46466..2ad8dd21 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php @@ -417,6 +417,7 @@ class UseReturnValuePlugin extends PluginV3 implements PostAnalyzeNodeCapability 'gethostname' => true, 'getimagesize' => true, 'get_include_path' => true, + 'get_mangled_object_vars' => true, 'get_magic_quotes_gpc' => true, 'get_magic_quotes_gpc_runtime' => true, 'getmypid' => true, @@ -457,7 +458,9 @@ class UseReturnValuePlugin extends PluginV3 implements PostAnalyzeNodeCapability 'hypot' => true, 'iconv_strlen' => true, 'iconv' => true, + 'imagecreate' => self::MUST_USE_WITH_SIDE_EFFECTS, 'imagecreatetruecolor' => self::MUST_USE_WITH_SIDE_EFFECTS, + 'imagecreatefromtga' => self::MUST_USE_WITH_SIDE_EFFECTS, 'imagetypes' => true, 'implode' => true, 'in_array' => true, @@ -624,10 +627,12 @@ class UseReturnValuePlugin extends PluginV3 implements PostAnalyzeNodeCapability 'openssl_encrypt' => true, 'openssl_error_string' => true, 'openssl_random_pseudo_bytes' => true, + 'openssl_x509_verify' => true, 'ord' => true, 'pack' => true, 'parse_ini_file' => true, 'parse_url' => true, + 'password_algos' => true, 'pathinfo' => true, 'pdo::getattribute' => true, 'pdo::prepare' => true, @@ -742,6 +747,8 @@ class UseReturnValuePlugin extends PluginV3 implements PostAnalyzeNodeCapability 'reflectionproperty::getvalue' => true, 'reflectionproperty::ispublic' => true, 'reflectionproperty::isstatic' => true, + 'reflectionreference::fromarrayelement' => true, + 'reflectionreference::getid' => true, 'reflectiontype::__tostring' => true, 'resourcebundle::geterrorcode' => true, 'round' => true, diff --git a/vendor/phan/phan/tool/make_ctags_for_phan_project b/vendor/phan/phan/tool/make_ctags_for_phan_project index c11d0035..7da3977b 100755 --- a/vendor/phan/phan/tool/make_ctags_for_phan_project +++ b/vendor/phan/phan/tool/make_ctags_for_phan_project @@ -15,6 +15,7 @@ # The resulting tags file may be combined with tags for JS, CSS, etc. function usage() { echo "Usage: $0 [options for phpctags]" 1>&2 + echo "You may wish to run ./phan --dump-ctags=basic instead" 1>&2 } if ! type phpctags ; then diff --git a/vendor/phpstan/phpstan/README.md b/vendor/phpstan/phpstan/README.md index 70f12d89..790f234c 100644 --- a/vendor/phpstan/phpstan/README.md +++ b/vendor/phpstan/phpstan/README.md @@ -86,7 +86,6 @@ PHPStan Pro is a paid add-on on top of open-source PHPStan Static Analysis Tool * Web UI for browsing found errors, you can click and open your editor of choice on the offending line. * Continuous analysis (watch mode): scans changed files in the background, refreshes the UI automatically. -* Interactive fixer: lets you choose the right fix for found errors :blush: Try it on PHPStan 0.12.45 or later by running it with the `--pro` option. You can create an account either by following the on-screen instructions, or by visiting [account.phpstan.com](https://account.phpstan.com/). diff --git a/vendor/phpstan/phpstan/phpstan.phar b/vendor/phpstan/phpstan/phpstan.phar index ce60c910..74360dd9 100755 Binary files a/vendor/phpstan/phpstan/phpstan.phar and b/vendor/phpstan/phpstan/phpstan.phar differ diff --git a/vendor/phpstan/phpstan/phpstan.phar.asc b/vendor/phpstan/phpstan/phpstan.phar.asc index 6da5bd6a..cdc7a12d 100644 --- a/vendor/phpstan/phpstan/phpstan.phar.asc +++ b/vendor/phpstan/phpstan/phpstan.phar.asc @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmPjlIQACgkQzxoQjQ56 -5yB1xQ/+Kz+VRo1rx8OsL3lOZhbmGalg8QC1+r9SfoBI2jxi/IqG4olCH1b9yXiE -xaJU9xC5H+258a1JtfeUszm0zXgt/CHIHSVq3VAMlEajMbOHDSy7i9GrRA9OmG0H -5AbwB9tql4qZ0cj1SriS2j8VolUjb1C1aSJNAwMbBWbd1QlZqGLJLgo0rvVnN71h -kK5aYSZzV6XcbrJpNwWNjI9KNhbSlwHfWvsl2oW7Pl/ydyaWY+ZmL+i9MOT+TAuu -jJFzKY98HQk3ESOpRn2wg0tKU9qzzl5d5/3P03iY/o0VCHnj8aNSdXy+6aBS81n4 -KPvBRclcwsncmBB4HNZxOpExVR2flaUM21ebSnmVv7Zofjcl/W+h49lrEAWFBjgy -PkdAjlKSPOUYgqSSftKitDHFXtNOYi+qNot0gPEcDezWVOwWY/UorqL0V/PQp4bI -SCKnkgw4SWDFGFY3R/m7qet0oomOvp6sTJZb/B37GZ6l9KKu4lXLsS8XRXmCGzTW -Wu/taFkP35LYDQ9Y+HNzYXzNKFalCbJNj1Qdx31OvthBfK3/Jk0gG1YRrE3+0sAa -J3qJX4nC/Zm7oK9wj5CvKMTS9tewbOBLgYNF1JuI2dlrhnc0VZXCdvg3M8SjI1zH -5752T9NuxK5ot1i7TPcPHj8ln4t35aUT8c0f9S7ruFS0icobdyE= -=SwMZ +iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmQKD1cACgkQzxoQjQ56 +5yDePQ//ZtI/AKKhBlTvj6I6mw69TBuVi/7y+uU0CyrgKodCJlBCvprybXS2GItU +rh2rMrX75IGOx8tEBs/6Ec5BuPF5rIQZdPndsYzT+sH8hBCLCQ/SlgtE/bZ7CIjr +/WBkTjXd+T2lGmIe1e57rxNUiy+tgWlEa/mf963lY5Oy5zfuui6HEVzEofGtdq3c +l9FSx+9pVX4rCHKZzCy1lNuh3xdHEYS52mMCsYuuOo0GZ9e1cqFBj4VwF9WkLlr5 +oEvJanpJx32YcYOkhD1tE5N/3Gxtw1AZMSq4onJvts8YyqGA2q7uTDdRmW2yyiB7 +DgPFrfE2rNGCymU6n04hPhKyMIBk8nJB89qYtInIzbpm7+xPRrt6pKWFGIvAXeNx +qDHM3H+efvDadXl47z3aJLsgXxnefI6VJjXJF28mxEmwtm9Jt6tNvzEz+FHDgM11 +xat1m+oREXArPNA7cDTu5IIQY0BomKKc6H8X/X5OtKoVj0xoXbu/tfLVIJ8XYech +oAc+F0eA1k3vNxd5owM3ZaNqAFsGCA0dAgUWm2sNliZZZcnx0pWDvl/CG/Qetktz +15DvlfokTtCXPihy4tk1rYh/+EZfrwTJAMg4Xn3t9XlBapLUVH09EoRRi/0cVs9J +7x1FBChPFcvMSwrPo+mPzmjTfJ59QCt0BqYk7q/84KtcX85KQlg= +=3/5f -----END PGP SIGNATURE----- diff --git a/vendor/phpunit/php-code-coverage/ChangeLog.md b/vendor/phpunit/php-code-coverage/ChangeLog-9.2.md similarity index 98% rename from vendor/phpunit/php-code-coverage/ChangeLog.md rename to vendor/phpunit/php-code-coverage/ChangeLog-9.2.md index cdf28e0a..34587c05 100644 --- a/vendor/phpunit/php-code-coverage/ChangeLog.md +++ b/vendor/phpunit/php-code-coverage/ChangeLog-9.2.md @@ -2,6 +2,18 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. +## [9.2.26] - 2023-03-06 + +### Changed + +* Improved the legend on the file pages of the HTML code coverage report + +## [9.2.25] - 2023-02-25 + +### Fixed + +* [#981](https://github.com/sebastianbergmann/php-code-coverage/issues/981): `CodeUnitFindingVisitor` does not support DNF types + ## [9.2.24] - 2023-01-26 ### Changed @@ -464,6 +476,8 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt * This component is no longer supported on PHP 7.1 +[9.2.26]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.25...9.2.26 +[9.2.25]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.24...9.2.25 [9.2.24]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.23...9.2.24 [9.2.23]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.22...9.2.23 [9.2.22]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.21...9.2.22 diff --git a/vendor/phpunit/php-code-coverage/composer.json b/vendor/phpunit/php-code-coverage/composer.json index b09bd647..d6f10795 100644 --- a/vendor/phpunit/php-code-coverage/composer.json +++ b/vendor/phpunit/php-code-coverage/composer.json @@ -32,7 +32,7 @@ "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", "sebastian/code-unit-reverse-lookup": "^2.0.2", @@ -46,8 +46,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "autoload": { "classmap": [ diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php index 6672a6ea..b44870b5 100644 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php +++ b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php @@ -117,7 +117,7 @@ final class Dashboard extends Renderer private function coverageDistribution(array $classes): array { $result = [ - 'class' => [ + 'class' => [ '0%' => 0, '0-10%' => 0, '10-20%' => 0, diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php index 69fd8b1d..b59dc89d 100644 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php +++ b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php @@ -134,7 +134,7 @@ final class File extends Renderer [ 'items' => $this->renderItems($node), 'lines' => $this->renderSourceWithLineCoverage($node), - 'legend' => '

ExecutedNot ExecutedDead Code

', + 'legend' => '

Covered by small (and larger) testsCovered by medium (and large) testsCovered by large tests (and tests of unknown size)Not coveredNot coverable

', 'structure' => '', ] ); @@ -284,19 +284,19 @@ final class File extends Renderer $buffer .= $this->renderItemTemplate( $template, [ - 'name' => $this->abbreviateClassName($name), - 'numClasses' => $numClasses, - 'numTestedClasses' => $numTestedClasses, - 'numMethods' => $numMethods, - 'numTestedMethods' => $numTestedMethods, - 'linesExecutedPercent' => Percentage::fromFractionAndTotal( + 'name' => $this->abbreviateClassName($name), + 'numClasses' => $numClasses, + 'numTestedClasses' => $numTestedClasses, + 'numMethods' => $numMethods, + 'numTestedMethods' => $numTestedMethods, + 'linesExecutedPercent' => Percentage::fromFractionAndTotal( $item['executedLines'], $item['executableLines'], )->asFloat(), - 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, - 'numExecutedLines' => $item['executedLines'], - 'numExecutableLines' => $item['executableLines'], - 'branchesExecutedPercent' => Percentage::fromFractionAndTotal( + 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, + 'numExecutedLines' => $item['executedLines'], + 'numExecutableLines' => $item['executableLines'], + 'branchesExecutedPercent' => Percentage::fromFractionAndTotal( $item['executedBranches'], $item['executableBranches'], )->asFloat(), @@ -307,14 +307,14 @@ final class File extends Renderer $item['executedPaths'], $item['executablePaths'] )->asFloat(), - 'pathsExecutedPercentAsString' => $pathsExecutedPercentAsString, - 'numExecutedPaths' => $item['executedPaths'], - 'numExecutablePaths' => $item['executablePaths'], - 'testedMethodsPercent' => $testedMethodsPercentage->asFloat(), - 'testedMethodsPercentAsString' => $testedMethodsPercentage->asString(), - 'testedClassesPercent' => $testedClassesPercentage->asFloat(), - 'testedClassesPercentAsString' => $testedClassesPercentage->asString(), - 'crap' => $item['crap'], + 'pathsExecutedPercentAsString' => $pathsExecutedPercentAsString, + 'numExecutedPaths' => $item['executedPaths'], + 'numExecutablePaths' => $item['executablePaths'], + 'testedMethodsPercent' => $testedMethodsPercentage->asFloat(), + 'testedMethodsPercentAsString' => $testedMethodsPercentage->asString(), + 'testedClassesPercent' => $testedClassesPercentage->asFloat(), + 'testedClassesPercentAsString' => $testedClassesPercentage->asString(), + 'crap' => $item['crap'], ] ); @@ -384,7 +384,7 @@ final class File extends Renderer return $this->renderItemTemplate( $template, [ - 'name' => sprintf( + 'name' => sprintf( '%s%s', $indent, $item['startLine'], diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.css b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.css index 5dc62ccf..526cac0d 100644 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.css +++ b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.css @@ -128,3 +128,31 @@ table + .structure-heading { border-top: 1px solid lightgrey; padding-top: 0.5em; } + +.legend { + font-weight: bold; + margin-right: 2px; + padding-left: 10px; + padding-right: 10px; + text-align: center; +} + +.covered-by-small-tests { + background-color: #99cb84; +} + +.covered-by-medium-tests { + background-color: #c3e3b5; +} + +.covered-by-large-tests { + background-color: #dff0d8; +} + +.not-covered { + background-color: #f2dede; +} + +.not-coverable { + background-color: #fcf8e3; +} diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php index 8a2003fa..cb85cd61 100644 --- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php +++ b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php @@ -26,6 +26,7 @@ use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Trait_; use PhpParser\Node\UnionType; +use PhpParser\NodeAbstract; use PhpParser\NodeTraverser; use PhpParser\NodeVisitorAbstract; use SebastianBergmann\Complexity\CyclomaticComplexityCalculatingVisitor; @@ -180,8 +181,12 @@ final class CodeUnitFindingVisitor extends NodeVisitorAbstract return '?' . $type->type; } - if ($type instanceof UnionType || $type instanceof IntersectionType) { - return $this->unionOrIntersectionAsString($type); + if ($type instanceof UnionType) { + return $this->unionTypeAsString($type); + } + + if ($type instanceof IntersectionType) { + return $this->intersectionTypeAsString($type); } return $type->toString(); @@ -298,29 +303,43 @@ final class CodeUnitFindingVisitor extends NodeVisitorAbstract return trim(rtrim($namespacedName, $name), '\\'); } - /** - * @psalm-param UnionType|IntersectionType $type - */ - private function unionOrIntersectionAsString(ComplexType $type): string + private function unionTypeAsString(UnionType $node): string { - if ($type instanceof UnionType) { - $separator = '|'; - } else { - $separator = '&'; - } - $types = []; - foreach ($type->types as $_type) { - if ($_type instanceof Name) { - $types[] = $_type->toCodeString(); - } else { - assert($_type instanceof Identifier); + foreach ($node->types as $type) { + if ($type instanceof IntersectionType) { + $types[] = '(' . $this->intersectionTypeAsString($type) . ')'; - $types[] = $_type->toString(); + continue; } + + $types[] = $this->typeAsString($type); } - return implode($separator, $types); + return implode('|', $types); + } + + private function intersectionTypeAsString(IntersectionType $node): string + { + $types = []; + + foreach ($node->types as $type) { + $types[] = $this->typeAsString($type); + } + + return implode('&', $types); + } + + /** + * @psalm-param Identifier|Name $node $node + */ + private function typeAsString(NodeAbstract $node): string + { + if ($node instanceof Name) { + return $node->toCodeString(); + } + + return $node->toString(); } } diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php index 506f2752..794084ff 100644 --- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php +++ b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php @@ -88,12 +88,19 @@ final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract return; } + if ($node instanceof Node\Stmt\Interface_) { + foreach (range($node->getStartLine(), $node->getEndLine()) as $line) { + $this->unsets[$line] = true; + } + + return; + } + if ($node instanceof Node\Stmt\Declare_ || $node instanceof Node\Stmt\DeclareDeclare || $node instanceof Node\Stmt\Else_ || $node instanceof Node\Stmt\EnumCase || $node instanceof Node\Stmt\Finally_ || - $node instanceof Node\Stmt\Interface_ || $node instanceof Node\Stmt\Label || $node instanceof Node\Stmt\Namespace_ || $node instanceof Node\Stmt\Nop || diff --git a/vendor/phpunit/php-code-coverage/src/Version.php b/vendor/phpunit/php-code-coverage/src/Version.php index 8d45b6c6..20e8e550 100644 --- a/vendor/phpunit/php-code-coverage/src/Version.php +++ b/vendor/phpunit/php-code-coverage/src/Version.php @@ -22,7 +22,7 @@ final class Version public static function id(): string { if (self::$version === null) { - self::$version = (new VersionId('9.2.24', dirname(__DIR__)))->getVersion(); + self::$version = (new VersionId('9.2.26', dirname(__DIR__)))->getVersion(); } return self::$version; diff --git a/vendor/phpunit/phpunit/ChangeLog-8.5.md b/vendor/phpunit/phpunit/ChangeLog-8.5.md index 6485b8e5..a65e6a61 100644 --- a/vendor/phpunit/phpunit/ChangeLog-8.5.md +++ b/vendor/phpunit/phpunit/ChangeLog-8.5.md @@ -2,6 +2,12 @@ All notable changes of the PHPUnit 8.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. +## [8.5.33] - 2023-02-27 + +### Fixed + +* [#5186](https://github.com/sebastianbergmann/phpunit/issues/5186): SBOM does not validate + ## [8.5.32] - 2023-01-26 ### Fixed @@ -262,6 +268,7 @@ All notable changes of the PHPUnit 8.5 release series are documented in this fil * [#3967](https://github.com/sebastianbergmann/phpunit/issues/3967): Cannot double interface that extends interface that extends `\Throwable` * [#3968](https://github.com/sebastianbergmann/phpunit/pull/3968): Test class run in a separate PHP process are passing when `exit` called inside +[8.5.33]: https://github.com/sebastianbergmann/phpunit/compare/8.5.32...8.5.33 [8.5.32]: https://github.com/sebastianbergmann/phpunit/compare/8.5.31...8.5.32 [8.5.31]: https://github.com/sebastianbergmann/phpunit/compare/8.5.30...8.5.31 [8.5.30]: https://github.com/sebastianbergmann/phpunit/compare/8.5.29...8.5.30 diff --git a/vendor/phpunit/phpunit/ChangeLog-9.6.md b/vendor/phpunit/phpunit/ChangeLog-9.6.md index 2491e303..30aa32ea 100644 --- a/vendor/phpunit/phpunit/ChangeLog-9.6.md +++ b/vendor/phpunit/phpunit/ChangeLog-9.6.md @@ -2,6 +2,22 @@ All notable changes of the PHPUnit 9.6 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. +## [9.6.5] - 2023-03-09 + +### Changed + +* Backported the HTML and CSS improvements made to the `--testdox-html` from PHPUnit 10 + +### Fixed + +* [#5205](https://github.com/sebastianbergmann/phpunit/issues/5205): Wrong default value for optional parameter of `PHPUnit\Util\Test::parseTestMethodAnnotations()` causes `ReflectionException` + +## [9.6.4] - 2023-02-27 + +### Fixed + +* [#5186](https://github.com/sebastianbergmann/phpunit/issues/5186): SBOM does not validate + ## [9.6.3] - 2023-02-04 ### Fixed @@ -19,7 +35,7 @@ All notable changes of the PHPUnit 9.6 release series are documented in this fil ### Fixed * [#5073](https://github.com/sebastianbergmann/phpunit/issues/5073): `--no-extensions` CLI option only prevents extension PHARs from being loaded -* [#5160](https://github.com/sebastianbergmann/phpunit/issues/5160): PHPUnit 9.6 misses deprecations for assertions and constraints removed in PHPUnit 10 +* [#5160](https://github.com/sebastianbergmann/phpunit/issues/5160): Deprecate `assertClassHasAttribute()`, `assertClassNotHasAttribute()`, `assertClassHasStaticAttribute()`, `assertClassNotHasStaticAttribute()`, `assertObjectHasAttribute()`, `assertObjectNotHasAttribute()`, `classHasAttribute()`, `classHasStaticAttribute()`, and `objectHasAttribute()` ## [9.6.0] - 2023-02-03 @@ -30,6 +46,8 @@ All notable changes of the PHPUnit 9.6 release series are documented in this fil * [#5064](https://github.com/sebastianbergmann/phpunit/issues/5064): Deprecate `PHPUnit\Framework\TestCase::getMockClass()` * [#5132](https://github.com/sebastianbergmann/phpunit/issues/5132): Deprecate `Test` suffix for abstract test case classes +[9.6.5]: https://github.com/sebastianbergmann/phpunit/compare/9.6.4...9.6.5 +[9.6.4]: https://github.com/sebastianbergmann/phpunit/compare/9.6.3...9.6.4 [9.6.3]: https://github.com/sebastianbergmann/phpunit/compare/9.6.2...9.6.3 [9.6.2]: https://github.com/sebastianbergmann/phpunit/compare/9.6.1...9.6.2 [9.6.1]: https://github.com/sebastianbergmann/phpunit/compare/9.6.0...9.6.1 diff --git a/vendor/phpunit/phpunit/SECURITY.md b/vendor/phpunit/phpunit/SECURITY.md index dcc15385..965e5ed2 100644 --- a/vendor/phpunit/phpunit/SECURITY.md +++ b/vendor/phpunit/phpunit/SECURITY.md @@ -1,11 +1,33 @@ # Security Policy -PHPUnit is a framework for writing as well as a commandline tool for running tests. Writing and running tests is a development-time activity. There is no reason why PHPUnit should be installed on a webserver. +If you believe you have found a security vulnerability in PHPUnit, please report it to us through coordinated disclosure. + +**Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.** + +Instead, please email `sebastian@phpunit.de`. + +Please include as much of the information listed below as you can to help us better understand and resolve the issue: + +* The type of issue +* Full paths of source file(s) related to the manifestation of the issue +* The location of the affected source code (tag/branch/commit or direct URL) +* Any special configuration required to reproduce the issue +* Step-by-step instructions to reproduce the issue +* Proof-of-concept or exploit code (if possible) +* Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +## Web Context + +PHPUnit is a framework for writing as well as a command-line tool for running tests. Writing and running tests is a development-time activity. There is no reason why PHPUnit should be installed on a webserver and/or in a production environment. **If you upload PHPUnit to a webserver then your deployment process is broken. On a more general note, if your `vendor` directory is publicly accessible on your webserver then your deployment process is also broken.** Please note that if you upload PHPUnit to a webserver "bad things" may happen. [You have been warned.](https://thephp.cc/articles/phpunit-a-security-risk) -## Security Contact Information +PHPUnit is developed with a focus on development environments and the command-line. No specific testing or hardening with regard to using PHPUnit in an HTTP or web context or with untrusted input data is performed. PHPUnit might also contain functionality that intentionally exposes internal application data for debugging purposes. -After the above, if you still would like to report a security vulnerability, please email `sebastian@phpunit.de`. +If PHPUnit is used in a web application, the application developer is responsible for filtering inputs or escaping outputs as necessary and for verifying that the used functionality is safe for use within the intended context. + +Vulnerabilities specific to the use outside a development context will be fixed as applicable, provided that the fix does not have an averse effect on the primary use case for development purposes. diff --git a/vendor/phpunit/phpunit/composer.json b/vendor/phpunit/phpunit/composer.json index 38117ea1..c9c8b467 100644 --- a/vendor/phpunit/phpunit/composer.json +++ b/vendor/phpunit/phpunit/composer.json @@ -57,8 +57,8 @@ "sort-packages": true }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" diff --git a/vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php b/vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php index 0370b511..4f106b1e 100644 --- a/vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php +++ b/vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php @@ -92,7 +92,7 @@ final class IsEqualWithDelta extends Constraint public function toString(): string { return sprintf( - 'is equal to %s with delta <%F>>', + 'is equal to %s with delta <%F>', $this->exporter()->export($this->value), $this->delta ); diff --git a/vendor/phpunit/phpunit/src/Runner/Version.php b/vendor/phpunit/phpunit/src/Runner/Version.php index 70de3024..5cfff352 100644 --- a/vendor/phpunit/phpunit/src/Runner/Version.php +++ b/vendor/phpunit/phpunit/src/Runner/Version.php @@ -41,7 +41,7 @@ final class Version } if (self::$version === '') { - self::$version = (new VersionId('9.6.3', dirname(__DIR__, 2)))->getVersion(); + self::$version = (new VersionId('9.6.5', dirname(__DIR__, 2)))->getVersion(); } return self::$version; diff --git a/vendor/phpunit/phpunit/src/Util/Test.php b/vendor/phpunit/phpunit/src/Util/Test.php index f089f6d4..d04a7683 100644 --- a/vendor/phpunit/phpunit/src/Util/Test.php +++ b/vendor/phpunit/phpunit/src/Util/Test.php @@ -331,7 +331,7 @@ final class Test /** * @psalm-param class-string $className */ - public static function parseTestMethodAnnotations(string $className, ?string $methodName = ''): array + public static function parseTestMethodAnnotations(string $className, ?string $methodName = null): array { $registry = Registry::getInstance(); diff --git a/vendor/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php b/vendor/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php index 013d1de8..776a83bd 100644 --- a/vendor/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php +++ b/vendor/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php @@ -29,26 +29,47 @@ final class HtmlResultPrinter extends ResultPrinter @@ -60,7 +81,7 @@ EOT; */ private const CLASS_HEADER = <<<'EOT' -

%s

+

%s

    EOT; @@ -101,7 +122,6 @@ EOT; $this->write( sprintf( self::CLASS_HEADER, - $name, $this->currentTestClassPrettified ) ); @@ -114,9 +134,8 @@ EOT; { $this->write( sprintf( - "
  • %s %s
  • \n", - $success ? '#555753' : '#ef2929', - $success ? '✓' : '❌', + "
  • %s
  • \n", + $success ? 'success' : 'defect', $name ) ); diff --git a/vendor/symfony/console/Application.php b/vendor/symfony/console/Application.php index d4ec1be0..41548a3e 100644 --- a/vendor/symfony/console/Application.php +++ b/vendor/symfony/console/Application.php @@ -87,7 +87,7 @@ class Application implements ResetInterface private string $defaultCommand; private bool $singleCommand = false; private bool $initialized = false; - private SignalRegistry $signalRegistry; + private ?SignalRegistry $signalRegistry = null; private array $signalsToDispatchEvent = []; public function __construct(string $name = 'UNKNOWN', string $version = 'UNKNOWN') diff --git a/vendor/symfony/console/Helper/ProgressIndicator.php b/vendor/symfony/console/Helper/ProgressIndicator.php index 17203646..b5fa24c4 100644 --- a/vendor/symfony/console/Helper/ProgressIndicator.php +++ b/vendor/symfony/console/Helper/ProgressIndicator.php @@ -123,8 +123,6 @@ class ProgressIndicator /** * Finish the indicator with message. - * - * @param $message */ public function finish(string $message) { diff --git a/vendor/symfony/console/Input/InputArgument.php b/vendor/symfony/console/Input/InputArgument.php index f0867193..a130c412 100644 --- a/vendor/symfony/console/Input/InputArgument.php +++ b/vendor/symfony/console/Input/InputArgument.php @@ -36,10 +36,10 @@ class InputArgument private string $description; /** - * @param string $name The argument name - * @param int|null $mode The argument mode: self::REQUIRED or self::OPTIONAL - * @param string $description A description text - * @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only) + * @param string $name The argument name + * @param int|null $mode The argument mode: self::REQUIRED or self::OPTIONAL + * @param string $description A description text + * @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only) * @param array|\Closure(CompletionInput,CompletionSuggestions):list $suggestedValues The values used for input completion * * @throws InvalidArgumentException When argument mode is not valid diff --git a/vendor/symfony/console/Input/InputOption.php b/vendor/symfony/console/Input/InputOption.php index 452c9f7f..9a7032a0 100644 --- a/vendor/symfony/console/Input/InputOption.php +++ b/vendor/symfony/console/Input/InputOption.php @@ -58,9 +58,9 @@ class InputOption private string $description; /** - * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts - * @param int|null $mode The option mode: One of the VALUE_* constants - * @param string|bool|int|float|array|null $default The default value (must be null for self::VALUE_NONE) + * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts + * @param int|null $mode The option mode: One of the VALUE_* constants + * @param string|bool|int|float|array|null $default The default value (must be null for self::VALUE_NONE) * @param array|\Closure(CompletionInput,CompletionSuggestions):list $suggestedValues The values used for input completion * * @throws InvalidArgumentException If option mode is invalid or incompatible diff --git a/vendor/symfony/console/LICENSE b/vendor/symfony/console/LICENSE index 00837045..0138f8f0 100644 --- a/vendor/symfony/console/LICENSE +++ b/vendor/symfony/console/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2023 Fabien Potencier +Copyright (c) 2004-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/console/Output/ConsoleSectionOutput.php b/vendor/symfony/console/Output/ConsoleSectionOutput.php index 7978a922..c813c811 100644 --- a/vendor/symfony/console/Output/ConsoleSectionOutput.php +++ b/vendor/symfony/console/Output/ConsoleSectionOutput.php @@ -115,7 +115,8 @@ class ConsoleSectionOutput extends StreamOutput // re-add the line break (that has been removed in the above `explode()` for // - every line that is not the last line // - if $newline is required, also add it to the last line - if ($i < $count || $newline) { + // - if it's not new line, but input ending with `\PHP_EOL` + if ($i < $count || $newline || str_ends_with($input, \PHP_EOL)) { $lineContent .= \PHP_EOL; } @@ -149,6 +150,15 @@ class ConsoleSectionOutput extends StreamOutput return $linesAdded; } + /** + * @internal + */ + public function addNewLineOfInputSubmit() + { + $this->content[] = \PHP_EOL; + ++$this->lines; + } + protected function doWrite(string $message, bool $newline) { if (!$this->isDecorated()) { diff --git a/vendor/symfony/console/Style/SymfonyStyle.php b/vendor/symfony/console/Style/SymfonyStyle.php index 997f8627..8fd6f849 100644 --- a/vendor/symfony/console/Style/SymfonyStyle.php +++ b/vendor/symfony/console/Style/SymfonyStyle.php @@ -23,6 +23,7 @@ use Symfony\Component\Console\Helper\TableCell; use Symfony\Component\Console\Helper\TableSeparator; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\ConsoleOutputInterface; +use Symfony\Component\Console\Output\ConsoleSectionOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\TrimmedBufferOutput; use Symfony\Component\Console\Question\ChoiceQuestion; @@ -298,6 +299,11 @@ class SymfonyStyle extends OutputStyle $answer = $this->questionHelper->ask($this->input, $this, $question); if ($this->input->isInteractive()) { + if ($this->output instanceof ConsoleSectionOutput) { + // add the new line of the `return` to submit the input to ConsoleSectionOutput, because ConsoleSectionOutput is holding all it's lines. + // this is relevant when a `ConsoleSectionOutput::clear` is called. + $this->output->addNewLineOfInputSubmit(); + } $this->newLine(); $this->bufferedOutput->write("\n"); } diff --git a/vendor/symfony/deprecation-contracts/LICENSE b/vendor/symfony/deprecation-contracts/LICENSE index 406242ff..0ed3a246 100644 --- a/vendor/symfony/deprecation-contracts/LICENSE +++ b/vendor/symfony/deprecation-contracts/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2020-2022 Fabien Potencier +Copyright (c) 2020-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/deprecation-contracts/README.md b/vendor/symfony/deprecation-contracts/README.md index 4957933a..9814864c 100644 --- a/vendor/symfony/deprecation-contracts/README.md +++ b/vendor/symfony/deprecation-contracts/README.md @@ -22,5 +22,5 @@ trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use This will generate the following message: `Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.` -While not necessarily recommended, the deprecation notices can be completely ignored by declaring an empty +While not recommended, the deprecation notices can be completely ignored by declaring an empty `function trigger_deprecation() {}` in your application. diff --git a/vendor/symfony/service-contracts/LICENSE b/vendor/symfony/service-contracts/LICENSE index 74cdc2db..7536caea 100644 --- a/vendor/symfony/service-contracts/LICENSE +++ b/vendor/symfony/service-contracts/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2022 Fabien Potencier +Copyright (c) 2018-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/service-contracts/README.md b/vendor/symfony/service-contracts/README.md index 41e054a1..42841a57 100644 --- a/vendor/symfony/service-contracts/README.md +++ b/vendor/symfony/service-contracts/README.md @@ -3,7 +3,7 @@ Symfony Service Contracts A set of abstractions extracted out of the Symfony components. -Can be used to build on semantics that the Symfony components proved useful - and +Can be used to build on semantics that the Symfony components proved useful and that already have battle tested implementations. See https://github.com/symfony/contracts/blob/main/README.md for more information. diff --git a/vendor/symfony/service-contracts/ResetInterface.php b/vendor/symfony/service-contracts/ResetInterface.php index 1af1075e..a4f389b0 100644 --- a/vendor/symfony/service-contracts/ResetInterface.php +++ b/vendor/symfony/service-contracts/ResetInterface.php @@ -26,5 +26,8 @@ namespace Symfony\Contracts\Service; */ interface ResetInterface { + /** + * @return void + */ public function reset(); } diff --git a/vendor/symfony/service-contracts/ServiceProviderInterface.php b/vendor/symfony/service-contracts/ServiceProviderInterface.php index a28fd82e..c05e4bfe 100644 --- a/vendor/symfony/service-contracts/ServiceProviderInterface.php +++ b/vendor/symfony/service-contracts/ServiceProviderInterface.php @@ -19,7 +19,7 @@ use Psr\Container\ContainerInterface; * @author Nicolas Grekas * @author Mateusz Sip * - * @template T of mixed + * @template-covariant T of mixed */ interface ServiceProviderInterface extends ContainerInterface { diff --git a/vendor/symfony/service-contracts/ServiceSubscriberTrait.php b/vendor/symfony/service-contracts/ServiceSubscriberTrait.php index f7cd3a94..f3b450cd 100644 --- a/vendor/symfony/service-contracts/ServiceSubscriberTrait.php +++ b/vendor/symfony/service-contracts/ServiceSubscriberTrait.php @@ -66,12 +66,13 @@ trait ServiceSubscriberTrait #[Required] public function setContainer(ContainerInterface $container): ?ContainerInterface { - $this->container = $container; - + $ret = null; if (method_exists(get_parent_class(self::class) ?: '', __FUNCTION__)) { - return parent::setContainer($container); + $ret = parent::setContainer($container); } - return null; + $this->container = $container; + + return $ret; } } diff --git a/vendor/symfony/string/AbstractUnicodeString.php b/vendor/symfony/string/AbstractUnicodeString.php index 52912276..2a2bed71 100644 --- a/vendor/symfony/string/AbstractUnicodeString.php +++ b/vendor/symfony/string/AbstractUnicodeString.php @@ -37,8 +37,8 @@ abstract class AbstractUnicodeString extends AbstractString private const ASCII = "\x20\x65\x69\x61\x73\x6E\x74\x72\x6F\x6C\x75\x64\x5D\x5B\x63\x6D\x70\x27\x0A\x67\x7C\x68\x76\x2E\x66\x62\x2C\x3A\x3D\x2D\x71\x31\x30\x43\x32\x2A\x79\x78\x29\x28\x4C\x39\x41\x53\x2F\x50\x22\x45\x6A\x4D\x49\x6B\x33\x3E\x35\x54\x3C\x44\x34\x7D\x42\x7B\x38\x46\x77\x52\x36\x37\x55\x47\x4E\x3B\x4A\x7A\x56\x23\x48\x4F\x57\x5F\x26\x21\x4B\x3F\x58\x51\x25\x59\x5C\x09\x5A\x2B\x7E\x5E\x24\x40\x60\x7F\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"; // the subset of folded case mappings that is not in lower case mappings - private const FOLD_FROM = ['İ', 'µ', 'ſ', "\xCD\x85", 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϵ', 'ẛ', "\xE1\xBE\xBE", 'ß', 'İ', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'և', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾘ', 'ᾙ', 'ᾚ', 'ᾛ', 'ᾜ', 'ᾝ', 'ᾞ', 'ᾟ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾨ', 'ᾩ', 'ᾪ', 'ᾫ', 'ᾬ', 'ᾭ', 'ᾮ', 'ᾯ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ᾼ', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῌ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'ῼ', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ']; - private const FOLD_TO = ['i̇', 'μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', 'ṡ', 'ι', 'ss', 'i̇', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'եւ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'aʾ', 'ss', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὰι', 'αι', 'άι', 'ᾶ', 'ᾶι', 'αι', 'ὴι', 'ηι', 'ήι', 'ῆ', 'ῆι', 'ηι', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ὼι', 'ωι', 'ώι', 'ῶ', 'ῶι', 'ωι', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', 'մն', 'մե', 'մի', 'վն', 'մխ']; + private const FOLD_FROM = ['İ', 'µ', 'ſ', "\xCD\x85", 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϵ', 'ẛ', "\xE1\xBE\xBE", 'ß', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'և', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾘ', 'ᾙ', 'ᾚ', 'ᾛ', 'ᾜ', 'ᾝ', 'ᾞ', 'ᾟ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾨ', 'ᾩ', 'ᾪ', 'ᾫ', 'ᾬ', 'ᾭ', 'ᾮ', 'ᾯ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ᾼ', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῌ', 'ῒ', 'ῖ', 'ῗ', 'ῢ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'ῼ', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ']; + private const FOLD_TO = ['i̇', 'μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', 'ṡ', 'ι', 'ss', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'եւ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'aʾ', 'ss', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὰι', 'αι', 'άι', 'ᾶ', 'ᾶι', 'αι', 'ὴι', 'ηι', 'ήι', 'ῆ', 'ῆι', 'ηι', 'ῒ', 'ῖ', 'ῗ', 'ῢ', 'ῤ', 'ῦ', 'ῧ', 'ὼι', 'ωι', 'ώι', 'ῶ', 'ῶι', 'ωι', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', 'մն', 'մե', 'մի', 'վն', 'մխ']; // the subset of upper case mappings that map one code point to many code points private const UPPER_FROM = ['ß', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'և', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ', 'ʼn', 'ΐ', 'ΰ', 'ǰ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾶ', 'ῆ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῶ']; diff --git a/vendor/symfony/string/LICENSE b/vendor/symfony/string/LICENSE index 5c7ba055..f37c76b5 100644 --- a/vendor/symfony/string/LICENSE +++ b/vendor/symfony/string/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2019-2023 Fabien Potencier +Copyright (c) 2019-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/www/admin/class_test.admin.backend.php b/www/admin/class_test.admin.backend.php index f3820459..a37fe5fe 100644 --- a/www/admin/class_test.admin.backend.php +++ b/www/admin/class_test.admin.backend.php @@ -11,9 +11,7 @@ $DEBUG_ALL = true; $PRINT_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -35,19 +33,26 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, - 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'debug_all' => $DEBUG_ALL, + 'echo_all' => $ECHO_ALL, + 'print_all' => $PRINT_ALL, ]); // db config with logger $db = new CoreLibs\DB\IO(DB_CONFIG, $log); -$locale = \CoreLibs\Language\GetLocale::setLocale(); $l10n = new \CoreLibs\Language\L10n( - $locale['locale'], - $locale['domain'], - $locale['path'], + SITE_LOCALE, + SITE_DOMAIN, + BASE . INCLUDES . LOCALE, + SITE_ENCODING ); -$backend = new CoreLibs\Admin\Backend($db, $log, $session, $l10n, $locale); +$backend = new CoreLibs\Admin\Backend( + $db, + $log, + $session, + $l10n, + DEFAULT_ACL_LEVEL +); +use CoreLibs\Debug\Support; $PAGE_NAME = 'TEST CLASS: ADMIN BACKEND'; print ""; @@ -57,11 +62,14 @@ print ''; print '

    ' . $PAGE_NAME . '

    '; // set acl, from eg login acl -print "SETACL[]: " . $backend->setACL(['EMPTY' => 'EMPTY']) . "
    "; -print "ADBEDITLOG: " . $backend->adbEditLog('CLASSTEST-ADMIN', 'Some info stirng') . "
    "; -print "ADBTOPMENU(0): " . \CoreLibs\Debug\Support::printAr($backend->adbTopMenu()) . "
    "; -print "ADBMSG: " . $backend->adbMsg('info', 'Message: %1$d', [1]) . "
    "; -print "Messaes: " . \CoreLibs\Debug\Support::printAr($backend->messages) . "
    "; +print "SETACL[]:
    "; +$backend->setACL(['EMPTY' => 'EMPTY']); +print "ADBEDITLOG:
    "; +$backend->adbEditLog('CLASSTEST-ADMIN', 'Some info string'); +print "ADBTOPMENU(0): " . Support::printAr($backend->adbTopMenu(CONTENT_PATH)) . "
    "; +print "ADBMSG:
    "; +$backend->adbMsg('info', 'Message: %1$d', [1]); +print "Messaes: " . Support::printAr($backend->messages) . "
    "; print "ADBPRINTDATETIME:
    " . $backend->adbPrintDateTime(2021, 6, 21, 6, 38, '_test') . "
    "; // error message diff --git a/www/admin/class_test.array.php b/www/admin/class_test.array.php index 3f058470..faa3677b 100644 --- a/www/admin/class_test.array.php +++ b/www/admin/class_test.array.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -27,6 +25,7 @@ ob_end_flush(); use CoreLibs\Combined\ArrayHandler; use CoreLibs\Debug\Support as DgS; +use CoreLibs\Convert\SetVarType; $log = new CoreLibs\Debug\Logging([ 'log_folder' => BASE . LOG, @@ -34,9 +33,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); // $_array = new CoreLibs\Combined\ArrayHandler(); // $array_class = 'CoreLibs\Combination\ArrayHandler'; @@ -92,7 +91,9 @@ $array_3 = [ ] ]; // recusrice merge -print "ARRAYMERGERECURSIVE: " . DgS::printAr(ArrayHandler::arrayMergeRecursive($array_1, $array_2, $array_3)) . "
    "; +print "ARRAYMERGERECURSIVE: " . DgS::printAr(SetVarType::setArray( + ArrayHandler::arrayMergeRecursive($array_1, $array_2, $array_3) +)) . "
    "; // array difference $array_left = [ 'same' => 'data', @@ -104,7 +105,9 @@ $array_right = [ ]; print "ARRAYDIFF: " . DgS::printAr(ArrayHandler::arrayDiff($array_left, $array_right)) . "
    "; // in array check -print "INARRAYANY([1,3], [array]): " . DgS::printAr(ArrayHandler::inArrayAny([1, 3], $array_2)) . "
    "; +print "INARRAYANY([1,3], [array]): " . DgS::printAr(SetVarType::setArray( + ArrayHandler::inArrayAny([1, 3], $array_2) +)) . "
    "; // flatten array print "FLATTENARRAY: " . DgS::printAr(ArrayHandler::flattenArray($test_array)) . "
    "; print "FLATTENARRAYKEY: " . DgS::printAr(ArrayHandler::flattenArrayKey($test_array)) . "
    "; @@ -114,10 +117,10 @@ print "ARRAYFLATFORKEY: " . DgS::printAr(ArrayHandler::arrayFlatForKey($test_arr /** * attach key/value to an array so it becomes nested * - * @param string $pre Attach to new (empty for new root node) - * @param string $cur New node - * @param array $node Previous created array - * @return array Updated array + * @param string $pre Attach to new (empty for new root node) + * @param string $cur New node + * @param array $node Previous created array + * @return array Updated array */ function rec(string $pre, string $cur, array $node = []) { diff --git a/www/admin/class_test.autoloader.php b/www/admin/class_test.autoloader.php index 24d85cf7..97835ec1 100644 --- a/www/admin/class_test.autoloader.php +++ b/www/admin/class_test.autoloader.php @@ -11,9 +11,7 @@ $DEBUG_ALL = true; $PRINT_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); // basic class test file diff --git a/www/admin/class_test.byte.php b/www/admin/class_test.byte.php index 801ddd04..1e5e0340 100644 --- a/www/admin/class_test.byte.php +++ b/www/admin/class_test.byte.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $byte_class = 'CoreLibs\Convert\Byte'; diff --git a/www/admin/class_test.check.colors.php b/www/admin/class_test.check.colors.php index 9ca898ad..69b1195a 100644 --- a/www/admin/class_test.check.colors.php +++ b/www/admin/class_test.check.colors.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: CHECK COLORS'; diff --git a/www/admin/class_test.config.direct.php b/www/admin/class_test.config.direct.php index 41a91f51..9653d4df 100644 --- a/www/admin/class_test.config.direct.php +++ b/www/admin/class_test.config.direct.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: CONFIG DIRECT'; @@ -47,7 +45,7 @@ print "DIR: " . DIR . "
    "; print "BASE: " . BASE . "
    "; print "ROOT: " . ROOT . "
    "; print "BASE NAME: " . BASE_NAME . "
    "; -echo "Config path prefix: " . $CONFIG_PATH_PREFIX . "
    "; +echo "Config path prefix: " . ($CONFIG_PATH_PREFIX ?? '') . "
    "; print "DB Name: " . DB_CONFIG_NAME . "
    "; print "DB Config: " . \CoreLibs\Debug\Support::printAr(DB_CONFIG) . "
    "; diff --git a/www/admin/class_test.config.link.php b/www/admin/class_test.config.link.php index de977286..a1efad74 100644 --- a/www/admin/class_test.config.link.php +++ b/www/admin/class_test.config.link.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: CONFIG LINK'; @@ -47,7 +45,7 @@ print "DIR: " . DIR . "
    "; print "BASE: " . BASE . "
    "; print "ROOT: " . ROOT . "
    "; print "BASE NAME: " . BASE_NAME . "
    "; -echo "Config path prefix: " . $CONFIG_PATH_PREFIX . "
    "; +echo "Config path prefix: " . ($CONFIG_PATH_PREFIX ?? '') . "
    "; print "DB Name: " . DB_CONFIG_NAME . "
    "; print "DB Config: " . \CoreLibs\Debug\Support::printAr(DB_CONFIG) . "
    "; diff --git a/www/admin/class_test.convert.colors.php b/www/admin/class_test.convert.colors.php index 9c0312a4..e1b88241 100644 --- a/www/admin/class_test.convert.colors.php +++ b/www/admin/class_test.convert.colors.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -27,6 +25,7 @@ ob_end_flush(); use CoreLibs\Convert\Colors; use CoreLibs\Debug\Support as DgS; +use CoreLibs\Convert\SetVarType; $log = new CoreLibs\Debug\Logging([ 'log_folder' => BASE . LOG, @@ -34,9 +33,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $color_class = 'CoreLibs\Convert\Colors'; @@ -59,24 +58,40 @@ $hsb = [210, 67, 12]; $hsb_f = [210.5, 67.5, 12.5]; $hsl = [210, 50, 7.8]; print "S::COLOR rgb->hex: $rgb[0], $rgb[1], $rgb[2]: " . Colors::rgb2hex($rgb[0], $rgb[1], $rgb[2]) . "
    "; -print "S::COLOR hex->rgb: $hex: " . DgS::printAr(Colors::hex2rgb($hex)) . "
    "; -print "C::S/COLOR rgb->hext: $hex: " . DgS::printAr(CoreLibs\Convert\Colors::hex2rgb($hex)) . "
    "; +print "S::COLOR hex->rgb: $hex: " . DgS::printAr(SetVarType::setArray( + Colors::hex2rgb($hex) +)) . "
    "; +print "C::S/COLOR rgb->hext: $hex: " . DgS::printAr(SetVarType::setArray( + CoreLibs\Convert\Colors::hex2rgb($hex) +)) . "
    "; // C(to hsb/hsl) print "S::COLOR rgb->hsb: $rgb[0], $rgb[1], $rgb[2]: " - . DgS::printAr(Colors::rgb2hsb($rgb[0], $rgb[1], $rgb[2])) . "
    "; + . DgS::printAr(SetVarType::setArray( + Colors::rgb2hsb($rgb[0], $rgb[1], $rgb[2]) + )) . "
    "; print "S::COLOR rgb->hsl: $rgb[0], $rgb[1], $rgb[2]: " - . DgS::printAr(Colors::rgb2hsl($rgb[0], $rgb[1], $rgb[2])) . "
    "; + . DgS::printAr(SetVarType::setArray( + Colors::rgb2hsl($rgb[0], $rgb[1], $rgb[2]) + )) . "
    "; // D(from hsb/hsl) Note that param 2 + 3 is always 0-100 divided print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: " - . DgS::printAr(Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2])) . "
    "; - print "S::COLOR hsb_f->rgb: $hsb_f[0], $hsb_f[1], $hsb_f[2]: " - . DgS::printAr(Colors::hsb2rgb($hsb_f[0], $hsb_f[1], $hsb_f[2])) . "
    "; + . DgS::printAr(SetVarType::setArray( + Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2]) + )) . "
    "; +print "S::COLOR hsb_f->rgb: $hsb_f[0], $hsb_f[1], $hsb_f[2]: " + . DgS::printAr(SetVarType::setArray( + Colors::hsb2rgb($hsb_f[0], $hsb_f[1], $hsb_f[2]) + )) . "
    "; print "S::COLOR hsl->rgb: $hsl[0], $hsl[1], $hsl[2]: " - . DgS::printAr(Colors::hsl2rgb($hsl[0], $hsl[1], $hsl[2])) . "
    "; + . DgS::printAr(SetVarType::setArray( + Colors::hsl2rgb($hsl[0], $hsl[1], $hsl[2]) + )) . "
    "; $hsb = [0, 0, 5]; print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: " - . DgS::printAr(Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2])) . "
    "; + . DgS::printAr(SetVarType::setArray( + Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2]) + )) . "
    "; // Random text $h = rand(0, 359); @@ -84,8 +99,8 @@ $s = rand(15, 70); $b = 100; $l = 50; print "RANDOM IN: H: " . $h . ", S: " . $s . ", B/L: " . $b . "/" . $l . "
    "; -print "RANDOM hsb->rgb:
    " . DgS::printAr(Colors::hsb2rgb($h, $s, $b)) . "

    "; -print "RANDOM hsl->rgb:
    " . DgS::printAr(Colors::hsl2rgb($h, $s, $l)) . "

    "; +print "RANDOM hsb->rgb:
    " . DgS::printAr(SetVarType::setArray(Colors::hsb2rgb($h, $s, $b))) . "

    "; +print "RANDOM hsl->rgb:
    " . DgS::printAr(SetVarType::setArray(Colors::hsl2rgb($h, $s, $l))) . "

    "; // TODO: run compare check input must match output diff --git a/www/admin/class_test.create_email.php b/www/admin/class_test.create_email.php index ab55cd36..9ea99671 100644 --- a/www/admin/class_test.create_email.php +++ b/www/admin/class_test.create_email.php @@ -13,9 +13,7 @@ $PRINT_ALL = true; $ECHO_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); diff --git a/www/admin/class_test.datetime.php b/www/admin/class_test.datetime.php index 7a09af51..a723ca52 100644 --- a/www/admin/class_test.datetime.php +++ b/www/admin/class_test.datetime.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $datetime_class = 'CoreLibs\Combined\DateTime'; diff --git a/www/admin/class_test.db.dbReturn.php b/www/admin/class_test.db.dbReturn.php index d51cbb12..686e394b 100644 --- a/www/admin/class_test.db.dbReturn.php +++ b/www/admin/class_test.db.dbReturn.php @@ -23,6 +23,7 @@ ob_end_flush(); use CoreLibs\Debug\Support; use CoreLibs\Debug\RunningTime; +use CoreLibs\Convert\SetVarType; $log = new CoreLibs\Debug\Logging([ 'log_folder' => BASE . LOG, @@ -30,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, - 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'debug_all' => $DEBUG_ALL ?? true, + 'echo_all' => $ECHO_ALL, + 'print_all' => $PRINT_ALL ?? true, ]); // db connection and attach logger $db = new CoreLibs\DB\IO(DB_CONFIG, $log); @@ -78,7 +79,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
    " . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
    "; + . "cursor_ext:
    " . Support::printAr(
    +			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
    +		) . "
    "; print "Run time: " . RunningTime::hrRunningTime() . "
    "; } // reset all read data @@ -95,7 +98,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
    " . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
    "; + . "cursor_ext:
    " . Support::printAr(
    +			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
    +		) . "
    "; print "Run time: " . RunningTime::hrRunningTime() . "
    "; } // reset all read data @@ -112,7 +117,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
    " . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
    "; + . "cursor_ext:
    " . Support::printAr(
    +			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
    +		) . "
    "; print "Run time: " . RunningTime::hrRunningTime() . "
    "; } // reset all read data @@ -129,7 +136,9 @@ for ($i = 1; $i <= 6; $i++) { (is_array($res) ? "Array: " . $db->log->prBl(is_array($res)) : '{-}') ) . ", " - . "cursor_ext:
    " . Support::printAr($db->dbGetCursorExt($q_db_ret)) . "
    "; + . "cursor_ext:
    " . Support::printAr(
    +			SetVarType::setArray($db->dbGetCursorExt($q_db_ret))
    +		) . "
    "; print "Run time: " . RunningTime::hrRunningTime() . "
    "; } // reset all data diff --git a/www/admin/class_test.db.php b/www/admin/class_test.db.php index 6cb00098..3b459152 100644 --- a/www/admin/class_test.db.php +++ b/www/admin/class_test.db.php @@ -24,6 +24,7 @@ ob_end_flush(); use CoreLibs\Debug\Support as DgS; use CoreLibs\DB\IO as DbIo; use CoreLibs\Debug\Support; +use CoreLibs\Convert\SetVarType; $log = new CoreLibs\Debug\Logging([ 'log_folder' => BASE . LOG, @@ -31,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, - 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'debug_all' => $DEBUG_ALL ?? true, + 'echo_all' => $ECHO_ALL, + 'print_all' => $PRINT_ALL ?? true, ]); // db connection and attach logger $db = new CoreLibs\DB\IO(DB_CONFIG, $log); @@ -62,7 +63,11 @@ print "VERSION LONG DB: " . $db->dbVersionInfo('server', false) . "
    "; print "VERSION NUMERIC DB: " . $db->dbVersionNumeric() . "
    "; print "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "
    "; print "ALL PG VERSION PARAMETERS:
    " . print_r($db->dbVersionInfoParameters(), true) . "

    "; -print "ALL OUTPUT [TEST]:
    " . print_r(pg_version($db->dbGetDbh()), true) . "

    "; +if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) { + print "ALL OUTPUT [TEST]:
    " . print_r(pg_version($dbh), true) . "

    "; +} else { + print "NO DB HANDLER
    "; +} print "DB Version smaller $to_db_version: " . $db->dbCompareVersion('<' . $to_db_version) . "
    "; print "DB Version smaller than $to_db_version: " . $db->dbCompareVersion('<=' . $to_db_version) . "
    "; print "DB Version equal $to_db_version: " . $db->dbCompareVersion('=' . $to_db_version) . "
    "; @@ -108,7 +113,11 @@ print "
    "; print "
    ";
     
    -print "SOCKET: " . pg_socket($db->dbGetDbh()) . "
    "; +if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) { + print "SOCKET: " . pg_socket($dbh) . "
    "; +} else { + print "NO SOCKET
    "; +} // truncate test_foo table before testing print "TRUNCATE test_foo
    "; @@ -123,7 +132,7 @@ $status = $db->dbExec("INSERT INTO test_foo (test, number_a) VALUES " print "DIRECT INSERT STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetQuery() . " |
    " . "DB OBJECT:
    " . print_r($status, true) . "
    | " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
    "; @@ -144,7 +153,7 @@ $status = $db->dbExec($query); print "EOM STRING DIRECT INSERT STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetQuery() . " |
    " . "DB OBJECT:
    " . print_r($status, true) . "
    | " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
    "; @@ -156,12 +165,13 @@ var_dump($db->dbGetReturningExt()); $last_insert_pk = $db->dbGetInsertPK(); print "DIRECT INSERT PREVIOUS INSERTED: " . print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo " - . "WHERE test_foo_id = " . $last_insert_pk), true) . "
    "; + . "WHERE test_foo_id = " . (int)$last_insert_pk), true) . "
    "; +$__last_insert_pk = (int)$last_insert_pk; $q = <<dbReturnRow($q), true) . "
    "; print "LAST ERROR: " . $db->dbGetLastError() . "
    "; @@ -172,13 +182,13 @@ $db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNIN $status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]); print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetPrepareCursorValue('ins_test_foo', 'query') . " |
    " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "
    "; print "PREPARE INSERT PREVIOUS INSERTED: " . print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo " - . "WHERE test_foo_id = " . $db->dbGetInsertPK()), true) . "
    "; + . "WHERE test_foo_id = " . (int)$db->dbGetInsertPK()), true) . "
    "; print "PREPARE CURSOR RETURN:
    "; foreach (['pk_name', 'count', 'query', 'returning_id'] as $key) { @@ -197,7 +207,7 @@ $db->dbPrepare("ins_test_foo_eom", $query); $status = $db->dbExecute("ins_test_foo_eom", ['EOM BAR TEST ' . time()]); print "EOM STRING PREPARE INSERT[ins_test_foo_eom] STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetPrepareCursorValue('ins_test_foo_eom', 'query') . " |
    " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "
    "; @@ -247,21 +257,21 @@ print "EOM STRING DIRECT MULTIPLE INSERT WITH RETURN STATUS: " . Support::printT $status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO; TEST " . time() . "')"); print "DIRECT INSERT NO RETURN STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetQuery() . " |
    " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
    "; $last_insert_pk = $db->dbGetInsertPK(); // is_array read test -$q = "SELECT test_foo_id, test FROM test_foo WHERE test_foo_id = " . $last_insert_pk; +$q = "SELECT test_foo_id, test FROM test_foo WHERE test_foo_id = " . (int)$last_insert_pk; if (is_array($s_res = $db->dbReturnRow($q)) && !empty($s_res['test'])) { - print "WE HAVE DATA FOR: " . $last_insert_pk . " WITH: " . $s_res['test'] . "
    "; + print "WE HAVE DATA FOR: " . Support::printToString($last_insert_pk) . " WITH: " . $s_res['test'] . "
    "; } // UPDATE WITH RETURNING $status = $db->dbExec("UPDATE test_foo SET test = 'SOMETHING DIFFERENT' " - . "WHERE test_foo_id = " . $last_insert_pk . " RETURNING test"); -print "UPDATE WITH PK " . $last_insert_pk + . "WHERE test_foo_id = " . (int)$last_insert_pk . " RETURNING test"); +print "UPDATE WITH PK " . Support::printToString($last_insert_pk) . " RETURN STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetQuery() . " |
    " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " @@ -271,14 +281,14 @@ print "UPDATE WITH PK " . $last_insert_pk $status = $db->dbExec("INSERT INTO test_foobar (type, integer) VALUES ('WITHOUT DATA', 456)"); print "INSERT WITH NO PRIMARY KEY NO RETURNING STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetQuery() . " |
    " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
    "; $status = $db->dbExec("INSERT INTO test_foobar (type, integer) VALUES ('WITH DATA', 123) RETURNING type, integer"); print "INSERT WITH NO PRIMARY KEY WITH RETURNING STATUS: " . Support::printToString($status) . " |
    " . "QUERY: " . $db->dbGetQuery() . " |
    " - . "PRIMARY KEY: " . $db->dbGetInsertPK() . " | " + . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
    "; @@ -331,7 +341,7 @@ echo "
    "; // NOTE: try to replacate connection still exists if script is run a second time // open pg bouncer connection -$db_pgb = new CoreLibs\DB\IO($DB_CONFIG['test_pgbouncer'], $log); +$db_pgb = new CoreLibs\DB\IO($DB_CONFIG['test_pgbouncer'] ?? [], $log); print "[PGB] DBINFO: " . $db_pgb->dbInfo() . "
    "; if ($db->dbPrepare('pgb_sel_test_foo', $q_prep) === false) { print "[PGB] [1] Error in pgb_sel_test_foo prepare
    "; @@ -348,7 +358,9 @@ $db_pgb->dbClose(); # db write class test $table = 'test_foo'; -print "TABLE META DATA: " . DgS::printAr($db->dbShowTableMetaData($table)) . "
    "; +print "TABLE META DATA: " . DgS::printAr(SetVarType::setArray( + $db->dbShowTableMetaData($table) +)) . "
    "; // insert first, then use primary key to update $primary_key = ''; # unset $db_write_table = ['test', 'string_a', 'number_a', 'some_bool']; @@ -371,7 +383,7 @@ $data = [ ]; $primary_key = $db->dbWriteDataExt( $db_write_table, - $primary_key, + (int)$primary_key, $table, $object_fields_not_touch, $object_fields_not_update, @@ -383,7 +395,7 @@ $data = [ ]; $primary_key = $db->dbWriteDataExt( $db_write_table, - $primary_key, + (int)$primary_key, $table, $object_fields_not_touch, $object_fields_not_update, @@ -395,7 +407,7 @@ $data = [ ]; $primary_key = $db->dbWriteDataExt( $db_write_table, - $primary_key, + (int)$primary_key, $table, $object_fields_not_touch, $object_fields_not_update, @@ -500,24 +512,24 @@ while (($ret = $db->dbCheckAsync()) === true) // search path check $q = "SHOW search_path"; $cursor = $db->dbExec($q); -$data = $db->dbFetchArray($cursor)['search_path']; +$data = $db->dbFetchArray($cursor)['search_path'] ?? ''; print "RETURN DATA FOR search_path: " . $data . "
    "; // print "RETURN DATA FOR search_path: " . DgS::printAr($data) . "
    "; // insert something into test.schema_test and see if we get the PK back $status = $db->dbExec( "INSERT INTO test.schema_test (contents, id) VALUES " - . "('TIME: " . time() . "', " . rand(1, 10) . ")" + . "('TIME: " . (string)time() . "', " . (string)rand(1, 10) . ")" ); print "OTHER SCHEMA INSERT STATUS: " . Support::printToString($status) . " | PK NAME: " . $db->dbGetInsertPKName() - . ", PRIMARY KEY: " . $db->dbGetInsertPK() . "
    "; + . ", PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . "
    "; print "NULL TEST DB READ
    "; $q = "SELECT uid, null_varchar, null_int FROM test_null_data WHERE uid = 'A'"; $res = $db->dbReturnRow($q); var_dump($res); -print "RES: " . DgS::printAr($res) . "
    "; +print "RES: " . DgS::printAr(SetVarType::setArray($res)) . "
    "; print "ISSET: " . isset($res['null_varchar']) . "
    "; print "EMPTY: " . empty($res['null_varchar']) . "
    "; diff --git a/www/admin/class_test.debug.php b/www/admin/class_test.debug.php index c8b037e7..2ab7dd5b 100644 --- a/www/admin/class_test.debug.php +++ b/www/admin/class_test.debug.php @@ -13,9 +13,7 @@ $PRINT_ALL = false; $ECHO_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -51,12 +49,22 @@ print ""; print ''; print '

    ' . $PAGE_NAME . '

    '; -function test() +/** + * Undocumented function + * + * @return string|null + */ +function test(): ?string { return DebugSupport::getCallerMethod(1); } -function test2() +/** + * Undocumented function + * + * @return array + */ +function test2(): array { return DebugSupport::getCallerMethodList(1); } @@ -108,19 +116,28 @@ $new_log = new CoreLibs\Debug\Logging([ $new_log->debug('OPTIONS TYPE', 'New Type error'); print "OPTIONS LOGGER:
    " . $new_log->printErrorMsg(); $new_log->setLogLevel('debug', 'on', ['A', 'B', 'C' => false]); -print "LOG LEVEL: " . DebugSupport::printAr($new_log->getLogLevel('debug', 'on')) . "
    "; +print "LOG LEVEL: " . DebugSupport::printAr(\CoreLibs\Convert\SetVarType::setArray( + $new_log->getLogLevel('debug', 'on') +)) . "
    "; echo "CLASS DEBUG CALL
    "; // @codingStandardsIgnoreLine class TestL { + /** @var \CoreLibs\Debug\Logging */ public $log; public function __construct() { $this->log = new CoreLibs\Debug\Logging(); } - public function test(string $ts = null) + /** + * Undocumented function + * + * @param string|null $ts + * @return bool + */ + public function test(?string $ts = null): bool { print "* GETCALLERCLASS(INSIDE CLASS): " . \CoreLibs\Debug\Support::getCallerClass() . "
    "; $this->log->debug('TESTL', 'Logging in class testL' . ($ts !== null ? ': ' . $ts : '')); @@ -131,12 +148,18 @@ class TestL // @codingStandardsIgnoreLine class TestR extends TestL { + /** @var string */ public $foo; public function __construct() { parent::__construct(); } - public function subTest() + /** + * Undocumented function + * + * @return bool + */ + public function subTest(): bool { print "** GETCALLERCLASS(INSIDE EXTND CLASS): " . \CoreLibs\Debug\Support::getCallerClass() . "
    "; $this->log->debug('TESTR', 'Logging in class testR (extends testL)'); @@ -160,12 +183,18 @@ print "CLASS EXTEND: PRINTERRORMSG:
    " . $tr->log->printErrorMsg() . "
    "; // @codingStandardsIgnoreLine class AttachOutside { + /** @var \CoreLibs\Debug\Logging */ public $log; - public function __construct(object $logger_class) + public function __construct(\CoreLibs\Debug\Logging $logger_class) { $this->log = $logger_class; } - public function test() + /** + * Undocumented function + * + * @return string + */ + public function test(): string { $this->log->debug('ATTACHOUTSIDE', 'A test'); return get_class($this); diff --git a/www/admin/class_test.email.php b/www/admin/class_test.email.php index 9652ffe7..40d5c964 100644 --- a/www/admin/class_test.email.php +++ b/www/admin/class_test.email.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: HTML/ELEMENTS'; diff --git a/www/admin/class_test.encoding.php b/www/admin/class_test.encoding.php index 5cb34e16..56193bbb 100644 --- a/www/admin/class_test.encoding.php +++ b/www/admin/class_test.encoding.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -35,9 +33,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); // class type $_chk_enc = new CoreLibs\Check\Encoding(); @@ -102,7 +100,7 @@ foreach ($enc_strings as $_string) { // static use $_string = $enc_strings[1]; $string = $chk_enc::checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS'); -print "S::ENC CHECK: $_string: " . ($string === false ? '-OK-' : $string) . "
    "; +print "S::ENC CHECK: $_string: " . ($string === false ? '-OK-' : $log->prAr($string)) . "
    "; // error message print $log->printErrorMsg(); diff --git a/www/admin/class_test.file.php b/www/admin/class_test.file.php index 4cb0b0a8..fa002b09 100644 --- a/www/admin/class_test.file.php +++ b/www/admin/class_test.file.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: FILE'; diff --git a/www/admin/class_test.hash.php b/www/admin/class_test.hash.php index 5e26c130..78e47aa9 100644 --- a/www/admin/class_test.hash.php +++ b/www/admin/class_test.hash.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $hash_class = 'CoreLibs\Create\Hash'; diff --git a/www/admin/class_test.html.php b/www/admin/class_test.html.php index e009ce23..368498f9 100644 --- a/www/admin/class_test.html.php +++ b/www/admin/class_test.html.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_html = new CoreLibs\Convert\Html(); $_elements = new CoreLibs\Output\Form\Elements(); diff --git a/www/admin/class_test.image.php b/www/admin/class_test.image.php index 170105c6..43ca790d 100644 --- a/www/admin/class_test.image.php +++ b/www/admin/class_test.image.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_image = new CoreLibs\Output\Image(); $image_class = 'CoreLibs\Output\Image'; @@ -54,12 +52,15 @@ $thumb_width = 250; $thumb_height = 300; // class $image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture_square.jpg'; +// folders +$cache_folder = BASE . LAYOUT . CONTENT_PATH . CACHE . IMAGES; +$web_folder = LAYOUT . CACHE . IMAGES; // rotate image first $_image->correctImageOrientation($image); // thumbnail tests echo "
    CLASS->CREATETHUMBNAILSIMPLE: " . basename($image) . ": WIDTH: $thumb_width
    "; + . $_image->createThumbnailSimple($image, $thumb_width, 0, $cache_folder, $web_folder) . ">"; // static $image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture.jpg'; // rotate image first @@ -67,7 +68,7 @@ $image_class::correctImageOrientation($image); // thumbnail tests echo "
    S::CREATETHUMBNAILSIMPLE: " . basename($image) . ": WIDTH: $thumb_width
    "; + . $image_class::createThumbnailSimple($image, $thumb_width, 0, $cache_folder, $web_folder) . ">"; echo "U-STATIC VARIOUS:
    "; // image thumbnail @@ -92,21 +93,29 @@ $images = array( $finfo = new finfo(FILEINFO_MIME_TYPE); foreach ($images as $image) { $image = BASE . LAYOUT . CONTENT_PATH . IMAGES . $image; - list ($height, $width, $img_type) = getimagesize($image); + list ($height, $width, $img_type) = \CoreLibs\Convert\SetVarType::setArray(getimagesize($image)); echo "
    IMAGE INFO: " . $height . "x" . $width . ", TYPE: " - . $img_type . " [" . $finfo->file($image) . "]
    "; + . $log->prAr($img_type) . " [" . $finfo->file($image) . "]"; // rotate image first Image::correctImageOrientation($image); // thumbnail tests echo "
    " . basename($image) . ": WIDTH: $thumb_width
    "; + . Image::createThumbnailSimple($image, $thumb_width, 0, $cache_folder, $web_folder) . ">"; echo "
    " . basename($image) . ": HEIGHT: $thumb_height
    "; + . Image::createThumbnailSimple($image, 0, $thumb_height, $cache_folder, $web_folder) . ">"; echo "
    " . basename($image) . ": WIDTH/HEIGHT: $thumb_width x $thumb_height
    "; + . Image::createThumbnailSimple($image, $thumb_width, $thumb_height, $cache_folder, $web_folder) . ">"; // test with dummy echo "
    " . basename($image) . ": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)
    "; + . Image::createThumbnailSimple( + $image, + $thumb_width, + $thumb_height, + $cache_folder, + $web_folder, + true, + false + ) . ">"; echo "
    "; } diff --git a/www/admin/class_test.json.php b/www/admin/class_test.json.php index 10cb559a..6b6f46a3 100644 --- a/www/admin/class_test.json.php +++ b/www/admin/class_test.json.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $json_class = 'CoreLibs\Convert\Json'; diff --git a/www/admin/class_test.lang.php b/www/admin/class_test.lang.php index 3381d76b..622df97d 100644 --- a/www/admin/class_test.lang.php +++ b/www/admin/class_test.lang.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,31 +31,77 @@ print ''; print '

    ' . $PAGE_NAME . '

    '; use CoreLibs\Language\L10n; +use CoreLibs\Language; use CoreLibs\Debug\Support; echo "
    LIST LOCALES
    "; $locale = 'en_US.UTF-8'; -$locales = CoreLibs\Language\L10n::listLocales($locale); +$locales = L10n::listLocales($locale); print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "
    "; $locale = 'en.UTF-8'; -$locales = CoreLibs\Language\L10n::listLocales($locale); +$locales = L10n::listLocales($locale); print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "
    "; -echo "
    LOCALE INFO
    "; +echo "
    PARSE LOCAL
    "; $locale = 'en_US.UTF-8'; -$locale_info = CoreLibs\Language\L10n::parseLocale($locale); +$locale_info = L10n::parseLocale($locale); print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "
    "; $locale = 'en.UTF-8'; -$locale_info = CoreLibs\Language\L10n::parseLocale($locale); +$locale_info = L10n::parseLocale($locale); print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "
    "; echo "
    AUTO DETECT
    "; -$get_locale = \CoreLibs\Language\GetLocale::setLocale(); -print "[AUTO]: " . Support::printAr($get_locale) . "
    "; -$get_locale = \CoreLibs\Language\GetLocale::setLocale('en', 'foo', 'ISO-8895'); +// DEPRECATED +// $get_locale = Language\GetLocale::setLocale(); +// print "[AUTO, DEPRECATED]: " . Support::printAr($get_locale) . "
    "; +$get_locale = Language\GetLocale::setLocaleFromSession( + SITE_LOCALE, + str_replace('/', '', CONTENT_PATH), + '', + BASE . INCLUDES . LOCALE +); +print "[NAMED CONSTANTS OUTSIDE]: " . Support::printAr($get_locale) . "
    "; +$get_locale = Language\GetLocale::setLocaleFromSession( + 'en', + 'foo', + 'ISO-8895', + BASE . INCLUDES . LOCALE +); print "[OVERRIDE]: " . Support::printAr($get_locale) . "
    "; +// must set session vars for setLangFromSession +// DEFAULT_LOCALE +// DEFAULT_DOMAIN +// DEFAULT_CHARSET (should be set from DEFAULT_LOCALE) +// LOCALE_PATH +$_SESSION['DEFAULT_LOCALE'] = 'ja_JP.UTF-8'; +$_SESSION['DEFAULT_CHARSET'] = 'UTF-8'; +$_SESSION['DEFAULT_DOMAIN'] = 'admin'; +$_SESSION['LOCALE_PATH'] = BASE . INCLUDES . LOCALE; +$get_locale = Language\GetLocale::setLocaleFromSession( + SITE_LOCALE, + SITE_DOMAIN, + SITE_ENCODING, + BASE . INCLUDES . LOCALE +); +print "[SESSION SET]: " . Support::printAr($get_locale) . "
    "; +// must set session vars for setLangFromSession +// DEFAULT_LOCALE +// DEFAULT_DOMAIN +// DEFAULT_CHARSET (should be set from DEFAULT_LOCALE) +// LOCALE_PATH +$_SESSION['DEFAULT_LOCALE'] = '00000#####'; +$_SESSION['DEFAULT_CHARSET'] = ''; +$_SESSION['DEFAULT_DOMAIN'] = 'admin'; +$_SESSION['LOCALE_PATH'] = BASE . INCLUDES . LOCALE; +$get_locale = Language\GetLocale::setLocaleFromSession( + SITE_LOCALE, + SITE_DOMAIN, + SITE_ENCODING, + BASE . INCLUDES . LOCALE +); +print "[SESSION SET INVALID]: " . Support::printAr($get_locale) . "
    "; // try to load non existing echo "
    NEW TYPE
    "; @@ -69,8 +113,8 @@ $domain = 'admin'; $encoding = 'UTF-8'; $path = BASE . INCLUDES . LOCALE; // load direct -$l = new CoreLibs\Language\L10n($lang, $domain, $path); -echo "*
    "; +echo "* NEW CLASS SET
    "; +$l = new L10n($lang, $domain, $path, $encoding); echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "
    "; echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "
    "; echo "LANGUAGE FILE: " . $l->getMoFile() . "
    "; @@ -95,10 +139,11 @@ for ($n = 0; $n <= 3; $n++) { echo "CONTEXT MULTI TEST $n: " . $single_string . "/" . $multi_string . " => " . $l->__np($context, $single_string, $multi_string, $n) . "
    "; } +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; // change domain $domain = 'frontend'; +echo "* CHANGE DOMAIN $domain
    "; $l->getTranslator('', $domain, $path); -echo "*
    "; echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "
    "; echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "
    "; echo "LANGUAGE FILE: " . $l->getMoFile() . "
    "; @@ -108,11 +153,12 @@ echo "BASE PATH: " . $l->getBaseLocalePath() . "
    "; echo "LOAD ERROR: " . $l->getLoadError() . "
    "; echo "INPUT TEST: " . $string . " => " . $l->__($string) . "
    "; echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "
    "; +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; // change language short type $lang = 'en'; $domain = 'admin'; +echo "* CHANGE LANG $lang AND DOMAIN $domain
    "; $l->getTranslator($lang, $domain, $path); -echo "*
    "; echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "
    "; echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "
    "; echo "LANGUAGE FILE: " . $l->getMoFile() . "
    "; @@ -122,10 +168,24 @@ echo "BASE PATH: " . $l->getBaseLocalePath() . "
    "; echo "LOAD ERROR: " . $l->getLoadError() . "
    "; echo "INPUT TEST: " . $string . " => " . $l->__($string) . "
    "; echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "
    "; +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; +$encoding = 'SJIS'; +echo "* SET DIFFERENT CHARSET $encoding
    "; +$l->getTranslator($lang, $domain, $path, $encoding); +echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "
    "; +echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "
    "; +echo "LANGUAGE FILE: " . $l->getMoFile() . "
    "; +echo "CONTENT PATH: " . $l->getBaseContentPath() . "
    "; +echo "DOMAIN PATH: " . $l->getTextDomain($domain) . "
    "; +echo "BASE PATH: " . $l->getBaseLocalePath() . "
    "; +echo "LOAD ERROR: " . $l->getLoadError() . "
    "; +echo "INPUT TEST: " . $string . " => " . $l->__($string) . "
    "; +echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "
    "; +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; // chang to wrong language $lang = 'tr'; +echo "* CHANGE NOT FOUND LANG $lang
    "; $l->getTranslator($lang, $domain, $path); -echo "*
    "; echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "
    "; echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "
    "; echo "LANGUAGE FILE: " . $l->getMoFile() . "
    "; @@ -135,6 +195,25 @@ echo "BASE PATH: " . $l->getBaseLocalePath() . "
    "; echo "LOAD ERROR: " . $l->getLoadError() . "
    "; echo "INPUT TEST: " . $string . " => " . $l->__($string) . "
    "; echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "
    "; +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; +// set different encoding +$lang = 'ja'; +$domain = 'admin'; +$encoding = 'SJIS'; +echo "* CLASS NEW LAUNCH: $lang / $encoding
    "; +$path = BASE . INCLUDES . LOCALE; +// load direct +$l = new L10n($lang, $domain, $path, $encoding); +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; +// lang with full set +$lang = 'ja_JP.UTF-8'; +$domain = 'admin'; +$encoding = 'SJIS'; +echo "* CLASS NEW LAUNCH: $lang / $encoding
    "; +$path = BASE . INCLUDES . LOCALE; +// load direct +$l = new L10n($lang, $domain, $path, $encoding); +echo "LOCALE: " . Support::printAr($l->getLocaleAsArray()) . "
    "; $lang = 'en'; $domain = 'admin'; @@ -146,8 +225,10 @@ L10n::getInstance()->setDomain($domain); echo "SET DOMAIN: " . L10n::getInstance()->getDomain() . "
    "; L10n::getInstance()->setTextDomain($domain, $path); echo "SET TEXT DOMAIN: " . L10n::getInstance()->getTextDomain($domain) . "
    "; +// L10n::getInstance()->setOverrideEncoding('SJIS'); // null call __bind_textdomain_codeset echo "INPUT TEST: " . $string . " => " . L10n::getInstance()->getTranslator()->gettext($string) . "
    "; +echo "LOCALE: " . Support::printAr(L10n::getInstance()->getLocaleAsArray()) . "
    "; echo "
    FUNCTIONS
    "; // real statisc test diff --git a/www/admin/class_test.login.php b/www/admin/class_test.login.php index 9dae22ac..6525561d 100644 --- a/www/admin/class_test.login.php +++ b/www/admin/class_test.login.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -32,13 +30,27 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $db = new CoreLibs\DB\IO(DB_CONFIG, $log); -$login = new CoreLibs\ACL\Login($db, $log, $session); +$login = new CoreLibs\ACL\Login( + $db, + $log, + $session, + [ + 'auto_login' => false, + 'default_acl_level' => DEFAULT_ACL_LEVEL, + 'logout_target' => '', + 'site_locale' => SITE_LOCALE, + 'site_domain' => SITE_DOMAIN, + 'site_encoding' => SITE_ENCODING, + 'locale_path' => BASE . INCLUDES . LOCALE, + ] +); ob_end_flush(); +$login->loginMainCall(); $PAGE_NAME = 'TEST CLASS: LOGIN'; print ""; @@ -53,7 +65,8 @@ echo "MIN ACCESS BASE: " . ($login->loginCheckAccessBase('admin') ? 'OK' : 'BAD' echo "MIN ACCESS PAGE: " . ($login->loginCheckAccessPage('admin') ? 'OK' : 'BAD') . "
    "; echo "ACL: " . \CoreLibs\Debug\Support::printAr($login->loginGetAcl()) . "
    "; -echo "ACL (MIN): " . \CoreLibs\Debug\Support::printAr($login->loginGetAcl()['min']) . "
    "; +echo "ACL (MIN): " . \CoreLibs\Debug\Support::printAr($login->loginGetAcl()['min'] ?? []) . "
    "; +echo "LOCALE: " . \CoreLibs\Debug\Support::printAr($login->loginGetLocale()) . "
    "; // error message print $log->printErrorMsg(); diff --git a/www/admin/class_test.math.php b/www/admin/class_test.math.php index b84c504c..7175c596 100644 --- a/www/admin/class_test.math.php +++ b/www/admin/class_test.math.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_math = new CoreLibs\Convert\Math(); $math_class = 'CoreLibs\Convert\Math'; diff --git a/www/admin/class_test.memoryusage.php b/www/admin/class_test.memoryusage.php index f4971f76..f178fa11 100644 --- a/www/admin/class_test.memoryusage.php +++ b/www/admin/class_test.memoryusage.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: MEMORY USAGE'; diff --git a/www/admin/class_test.mime.php b/www/admin/class_test.mime.php index 4bd2598d..798ddca7 100644 --- a/www/admin/class_test.mime.php +++ b/www/admin/class_test.mime.php @@ -4,16 +4,14 @@ * @phan-file-suppress PhanTypeSuspiciousStringExpression */ - declare(strict_types=1); +declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_mime = new CoreLibs\Convert\MimeAppName(); diff --git a/www/admin/class_test.output.form.php b/www/admin/class_test.output.form.php index 14120714..0a6d5c9d 100644 --- a/www/admin/class_test.output.form.php +++ b/www/admin/class_test.output.form.php @@ -11,9 +11,7 @@ $DEBUG_ALL = true; $PRINT_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -63,11 +61,26 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, - 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'debug_all' => $DEBUG_ALL, + 'echo_all' => $ECHO_ALL, + 'print_all' => $PRINT_ALL, ]); -$form = new CoreLibs\Output\Form\Generate(DB_CONFIG, $log, table_arrays: $table_arrays); +$l10n = new CoreLibs\Language\L10n( + SITE_LOCALE, + SITE_DOMAIN, + BASE . INCLUDES . LOCALE, + SITE_ENCODING +); +$form = new CoreLibs\Output\Form\Generate( + DB_CONFIG, + $log, + $l10n, + [ + 'base' => 10, + 'admin' => 0 + ], + table_arrays: $table_arrays +); $PAGE_NAME = 'TEST CLASS: FORM GENERATE'; print ""; diff --git a/www/admin/class_test.password.php b/www/admin/class_test.password.php index 891a9838..73312bb2 100644 --- a/www/admin/class_test.password.php +++ b/www/admin/class_test.password.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_password = new CoreLibs\Check\Password(); $password_class = 'CoreLibs\Check\Password'; diff --git a/www/admin/class_test.php b/www/admin/class_test.php index 54ea5dd6..5fd5ec47 100644 --- a/www/admin/class_test.php +++ b/www/admin/class_test.php @@ -11,9 +11,7 @@ $DEBUG_ALL = true; $PRINT_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,19 +31,40 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $db = new CoreLibs\DB\IO(DB_CONFIG, $log); -$login = new CoreLibs\ACL\Login($db, $log, $session); -$locale = \CoreLibs\Language\GetLocale::setLocale(); +$login = new CoreLibs\ACL\Login( + $db, + $log, + $session, + [ + 'auto_login' => true, + 'default_acl_level' => DEFAULT_ACL_LEVEL, + 'logout_target' => '', + 'site_locale' => SITE_LOCALE, + 'site_domain' => SITE_DOMAIN, + 'site_encoding' => SITE_ENCODING, + 'locale_path' => BASE . INCLUDES . LOCALE, + ] +); +$locale = $login->loginGetLocale(); $l10n = new \CoreLibs\Language\L10n( $locale['locale'], $locale['domain'], $locale['path'], + $locale['encoding'], +); + +$backend = new CoreLibs\Admin\Backend( + $db, + $log, + $session, + $l10n, + DEFAULT_ACL_LEVEL ); -$backend = new CoreLibs\Admin\Backend($db, $log, $session, $l10n, $locale); $backend->db->dbInfo(true); ob_end_flush(); @@ -84,6 +103,7 @@ print ''; print ''; print ''; print ''; +print ''; print ''; print ''; print ''; @@ -125,7 +145,9 @@ foreach (['on', 'off'] as $flag) { foreach (['debug', 'echo', 'print'] as $type) { $prefix = $flag == 'off' ? 'NOT ' : ''; print $prefix . strtoupper($type) . ' OUT: ' - . \CoreLibs\Debug\Support::printAr($backend->log->getLogLevel($type, $flag)) . '
    '; + . \CoreLibs\Debug\Support::printAr(\CoreLibs\Convert\SetVarType::setArray( + $backend->log->getLogLevel($type, $flag) + )) . '
    '; } } foreach (['debug', 'echo', 'print'] as $type) { diff --git a/www/admin/class_test.phpv.php b/www/admin/class_test.phpv.php index 79027cdd..20014b61 100644 --- a/www/admin/class_test.phpv.php +++ b/www/admin/class_test.phpv.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_phpv = new CoreLibs\Check\PhpVersion(); $phpv_class = 'CoreLibs\Check\PhpVersion'; @@ -71,6 +69,8 @@ print "S::MAX $max_version_ss: " . (string)$phpv_class::checkPHPVersion(null, $m // use stats print "U-S::MIN: $min_version: " . (string)PhpVersion::checkPHPVersion($min_version) . "
    "; +print "PHP_VERSION_ID: " . PHP_VERSION_ID . "
    "; + // error message print $log->printErrorMsg(); diff --git a/www/admin/class_test.randomkey.php b/www/admin/class_test.randomkey.php index ceec4542..5193374d 100644 --- a/www/admin/class_test.randomkey.php +++ b/www/admin/class_test.randomkey.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $array_class = 'CoreLibs\Create\RandomKey'; diff --git a/www/admin/class_test.readenvfile.php b/www/admin/class_test.readenvfile.php index c60ed033..408576b1 100644 --- a/www/admin/class_test.readenvfile.php +++ b/www/admin/class_test.readenvfile.php @@ -24,9 +24,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL ?? true, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL ?? true, ]); $ref_class = 'CoreLibs\Get\ReadEnvFile'; diff --git a/www/admin/class_test.runningtime.php b/www/admin/class_test.runningtime.php index 93472f03..54220947 100644 --- a/www/admin/class_test.runningtime.php +++ b/www/admin/class_test.runningtime.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,9 +31,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: RUNNING TIME'; diff --git a/www/admin/class_test.session.php b/www/admin/class_test.session.php index 95a16cf2..116cc11c 100644 --- a/www/admin/class_test.session.php +++ b/www/admin/class_test.session.php @@ -2,14 +2,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); /** * Undocumented function @@ -53,9 +51,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); use CoreLibs\Create\Session; $session = new Session(); @@ -128,11 +126,11 @@ $session->unsetS('setwrap'); print "[READ WRAP] unset setwrap: " . $session->getS('setwrap') . "
    "; print "[READ WRAP] unset Isset: " . ($session->issetS('setwrap') ? 'Yes' : 'No') . "
    "; // test __get/__set -$session->setwrap = 'YES, magic set _SESSION var'; -print "[READ MAGIC] A setwrap: " . $session->setwrap . "
    "; +$session->setwrap = 'YES, magic set _SESSION var'; /** @phpstan-ignore-line GET/SETTER */ +print "[READ MAGIC] A setwrap: " . ($session->setwrap ?? '') . "
    "; print "[READ MAGIC] Isset: " . (isset($session->setwrap) ? 'Yes' : 'No') . "
    "; unset($session->setwrap); -print "[READ MAGIC] unset setwrap: " . $session->setwrap . "
    "; +print "[READ MAGIC] unset setwrap: " . ($session->setwrap ?? '') . "
    "; print "[READ MAGIC] unset Isset: " . (isset($session->setwrap) ? 'Yes' : 'No') . "
    "; // differnt session name diff --git a/www/admin/class_test.session.read.php b/www/admin/class_test.session.read.php index 7af08e61..6a8700b8 100644 --- a/www/admin/class_test.session.read.php +++ b/www/admin/class_test.session.read.php @@ -2,14 +2,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); /** * Undocumented function @@ -53,9 +51,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); use CoreLibs\Create\Session; $session = new Session(); diff --git a/www/admin/class_test.smarty.php b/www/admin/class_test.smarty.php index 6a115d5b..ba96eaa7 100644 --- a/www/admin/class_test.smarty.php +++ b/www/admin/class_test.smarty.php @@ -11,9 +11,7 @@ $DEBUG_ALL = true; $PRINT_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -33,17 +31,21 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, - 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'debug_all' => $DEBUG_ALL, + 'echo_all' => $ECHO_ALL, + 'print_all' => $PRINT_ALL, ]); -$locale = \CoreLibs\Language\GetLocale::setLocale(); $l10n = new \CoreLibs\Language\L10n( - $locale['locale'], - $locale['domain'], - $locale['path'], + SITE_LOCALE, + SITE_DOMAIN, + BASE . INCLUDES . LOCALE, + SITE_ENCODING +); +$smarty = new CoreLibs\Template\SmartyExtend( + $l10n, + CACHE_ID, + COMPILE_ID, ); -$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale); $PAGE_NAME = 'TEST CLASS: SMARTY'; print ""; @@ -59,7 +61,7 @@ $smarty->CSS_SPECIAL_TEMPLATE_NAME = 'smart_test.css'; $smarty->USE_PROTOTYPE = false; $smarty->USE_JQUERY = true; $smarty->JS_DATEPICKR = false; -if ($smarty->USE_PROTOTYPE) { +if ($smarty->USE_PROTOTYPE) { /** @phpstan-ignore-line for debug purpose */ $smarty->ADMIN_JAVASCRIPT = 'edit.pt.js'; $smarty->JS_SPECIAL_TEMPLATE_NAME = 'prototype.test.js'; } elseif ($smarty->USE_JQUERY) { @@ -67,7 +69,17 @@ if ($smarty->USE_PROTOTYPE) { $smarty->JS_SPECIAL_TEMPLATE_NAME = 'jquery.test.js'; } $smarty->PAGE_WIDTH = '100%'; -$smarty->setSmartyPaths(); +$smarty->setSmartyPaths( + BASE . INCLUDES, + BASE . INCLUDES . TEMPLATES . CONTENT_PATH, + LAYOUT . JS, + LAYOUT . CSS, + LAYOUT . FONT, + LAYOUT . IMAGES, + LAYOUT . CACHE, + ROOT . LAYOUT . CACHE, + null // master template name optional +); // smarty test $smarty->DATA['SMARTY_TEST'] = 'Test Data'; @@ -122,7 +134,19 @@ $smarty->DATA['checkbox_test_selected'] = ['1', '-1']; $smarty->DATA['checkbox_test_pos_selected'] = ['0', '-1']; -$smarty->setSmartyVarsAdmin(); +$smarty->setSmartyVarsAdmin( + BASE . TEMPLATES_C, + BASE . CACHE, + CSS, + FONT, + JS, + DEFAULT_ENCODING, + G_TITLE, + ADMIN_STYLESHEET, + ADMIN_JAVASCRIPT, + PAGE_WIDTH, + $_SESSION['USER_NAME'] ?? '' +); // error message print $log->printErrorMsg(); diff --git a/www/admin/class_test.strings.php b/www/admin/class_test.strings.php index ff3f6168..ae302fa5 100644 --- a/www/admin/class_test.strings.php +++ b/www/admin/class_test.strings.php @@ -2,14 +2,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -27,9 +25,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $byte_class = 'CoreLibs\Convert\Strings'; diff --git a/www/admin/class_test.system.php b/www/admin/class_test.system.php index c36687dc..fa92d68e 100644 --- a/www/admin/class_test.system.php +++ b/www/admin/class_test.system.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -34,9 +32,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: SYSTEM'; diff --git a/www/admin/class_test.token.php b/www/admin/class_test.token.php index 577450be..38c5f9da 100644 --- a/www/admin/class_test.token.php +++ b/www/admin/class_test.token.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_token = new CoreLibs\Output\Form\Token(); $token_class = 'CoreLibs\Output\Form\Token'; diff --git a/www/admin/class_test.uids.php b/www/admin/class_test.uids.php index ce9db01b..04162765 100644 --- a/www/admin/class_test.uids.php +++ b/www/admin/class_test.uids.php @@ -6,14 +6,12 @@ declare(strict_types=1); -$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations -$DEBUG_ALL = 1; -$PRINT_ALL = 1; -$DB_DEBUG = 1; +$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations +$DEBUG_ALL = true; +$PRINT_ALL = true; +$DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $_uids = new CoreLibs\Create\Uids(); use CoreLibs\Create\Uids; diff --git a/www/admin/subfolder/class_test.config.direct.php b/www/admin/subfolder/class_test.config.direct.php index d526f348..3b9bcbf8 100644 --- a/www/admin/subfolder/class_test.config.direct.php +++ b/www/admin/subfolder/class_test.config.direct.php @@ -11,9 +11,7 @@ $DEBUG_ALL = 1; $PRINT_ALL = 1; $DB_DEBUG = 1; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,9 +29,9 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $PAGE_NAME = 'TEST CLASS: CONFIG DIRECT SUB'; @@ -47,7 +45,7 @@ print "DIR: " . DIR . "
    "; print "BASE: " . BASE . "
    "; print "ROOT: " . ROOT . "
    "; print "BASE NAME: " . BASE_NAME . "
    "; -echo "Config path prefix: " . $CONFIG_PATH_PREFIX . "
    "; +echo "Config path prefix: " . ($CONFIG_PATH_PREFIX ?? '') . "
    "; print "DB Name: " . DB_CONFIG_NAME . "
    "; print "DB Config: " . \CoreLibs\Debug\Support::printAr(DB_CONFIG) . "
    "; diff --git a/www/admin/edit_groups_test.php b/www/admin/test_edit_base.php similarity index 72% rename from www/admin/edit_groups_test.php rename to www/admin/test_edit_base.php index d9465fe0..eb429e6d 100644 --- a/www/admin/edit_groups_test.php +++ b/www/admin/test_edit_base.php @@ -9,9 +9,7 @@ $DEBUG_ALL = true; $PRINT_ALL = true; $DB_DEBUG = true; -if ($DEBUG_ALL) { - error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); -} +error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); ob_start(); @@ -31,17 +29,31 @@ $log = new CoreLibs\Debug\Logging([ // add file date 'print_file_date' => true, // set debug and print flags - 'debug_all' => $DEBUG_ALL ?? false, + 'debug_all' => $DEBUG_ALL, 'echo_all' => $ECHO_ALL ?? false, - 'print_all' => $PRINT_ALL ?? false, + 'print_all' => $PRINT_ALL, ]); $db = new CoreLibs\DB\IO(DB_CONFIG, $log); -$login = new CoreLibs\ACL\Login($db, $log, $session); -$locale = \CoreLibs\Language\GetLocale::setLocale(); +$login = new CoreLibs\ACL\Login( + $db, + $log, + $session, + [ + 'auto_login' => true, + 'default_acl_level' => DEFAULT_ACL_LEVEL, + 'logout_target' => '', + 'site_locale' => SITE_LOCALE, + 'site_domain' => SITE_DOMAIN, + 'site_encoding' => SITE_ENCODING, + 'locale_path' => BASE . INCLUDES . LOCALE, + ] +); +$locale = $login->loginGetLocale(); $l10n = new \CoreLibs\Language\L10n( $locale['locale'], $locale['domain'], $locale['path'], + $locale['encoding'] ); print ""; diff --git a/www/composer.json b/www/composer.json index 4a77136a..57fd0c07 100644 --- a/www/composer.json +++ b/www/composer.json @@ -11,7 +11,8 @@ ], "require": { "egrajp/smarty-extended": "^4.3", - "egrajp/corelibs-composer-all": "@dev" + "egrajp/corelibs-composer-all": "@dev", + "gullevek/dotenv": "^2.0" }, "autoload": { "classmap": [ diff --git a/www/composer.lock b/www/composer.lock index 14df9448..c73b9743 100644 --- a/www/composer.lock +++ b/www/composer.lock @@ -4,15 +4,15 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a80d1d945e4d8202a444c05b501eaf21", + "content-hash": "9699de1d948a72e73dc2663bf7a951e5", "packages": [ { "name": "egrajp/corelibs-composer-all", - "version": "dev-master", + "version": "dev-development", "dist": { "type": "path", "url": "/storage/var/www/html/developers/clemens/core_data/composer-packages/CoreLibs-Composer-All", - "reference": "d9b71a64b390b6fc048cb6de00bfcfc6d9a6344f" + "reference": "cf196d56ddcc38567112c7d933340349036ee3fa" }, "require": { "php": ">=8.1" @@ -74,6 +74,60 @@ "templating" ], "time": "2023-02-17T14:14:10+09:00" + }, + { + "name": "gullevek/dotenv", + "version": "v2.0.8", + "source": { + "type": "git", + "url": "https://github.com/gullevek/dotEnv.git", + "reference": "e29f9fcd8853a09bb89b0eb8ee555b754ecee36e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gullevek/dotEnv/zipball/e29f9fcd8853a09bb89b0eb8ee555b754ecee36e", + "reference": "e29f9fcd8853a09bb89b0eb8ee555b754ecee36e", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "require-dev": { + "phan/phan": "^5.4", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "gullevek\\dotEnv\\": "src/", + "gullevek\\dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Clemens Schwaighofer", + "email": "gullevek@gullevek.org", + "homepage": "http://gullevek.org" + } + ], + "description": "Simple .env file processing and storing in _ENV array", + "homepage": "https://github.com/gullevek/dotEnv", + "keywords": [ + ".env", + "_ENV", + "dotenv", + "environment variables" + ], + "support": { + "issues": "https://github.com/gullevek/dotEnv/issues", + "source": "https://github.com/gullevek/dotEnv/tree/v2.0.8" + }, + "time": "2023-03-03T00:32:02+00:00" } ], "packages-dev": [], diff --git a/www/composer.phar b/www/composer.phar deleted file mode 100755 index 863dc9ad..00000000 Binary files a/www/composer.phar and /dev/null differ diff --git a/www/configs/config.master.php b/www/configs/config.master.php index 355ab937..551dbb75 100644 --- a/www/configs/config.master.php +++ b/www/configs/config.master.php @@ -100,27 +100,6 @@ define('DEFAULT_ACL_LEVEL', 80); /************* LOGOUT ********************/ // logout target define('LOGOUT_TARGET', ''); -// password change allowed -define('PASSWORD_CHANGE', false); -define('PASSWORD_FORGOT', false); -// min/max password length -define('PASSWORD_MIN_LENGTH', 9); -define('PASSWORD_MAX_LENGTH', 255); -// defines allowed special characters -define('PASSWORD_SPECIAL_RANGE', '@$!%*?&'); -// password must have upper case, lower case, number, special -// comment out for not mandatory -define('PASSWORD_LOWER', '(?=.*[a-z])'); -define('PASSWORD_UPPER', '(?=.*[A-Z])'); -define('PASSWORD_NUMBER', '(?=.*\d)'); -define('PASSWORD_SPECIAL', "(?=.*[" . PASSWORD_SPECIAL_RANGE . "])"); -// define full regex -define('PASSWORD_REGEX', "/^" - . (defined('PASSWORD_LOWER') ? PASSWORD_LOWER : '') - . (defined('PASSWORD_UPPER') ? PASSWORD_UPPER : '') - . (defined('PASSWORD_NUMBER') ? PASSWORD_NUMBER : '') - . (defined('PASSWORD_SPECIAL') ? PASSWORD_SPECIAL : '') - . "[A-Za-z\d" . PASSWORD_SPECIAL_RANGE . "]{" . PASSWORD_MIN_LENGTH . "," . PASSWORD_MAX_LENGTH . "}$/"); /************* AJAX / ACCESS *************/ // ajax request type @@ -264,6 +243,7 @@ $GLOBALS['DB_CONFIG_SET'] = DB_CONFIG; define('TARGET', $SITE_CONFIG[HOST_NAME]['location'] ?? 'test'); define('DEBUG', $SITE_CONFIG[HOST_NAME]['debug_flag'] ?? false); define('SITE_LOCALE', $SITE_CONFIG[HOST_NAME]['site_locale'] ?? DEFAULT_LOCALE); +define('SITE_DOMAIN', str_replace(DIRECTORY_SEPARATOR, '', CONTENT_PATH)); define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING); define('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled'] ?? false); define('AUTH', $SITE_CONFIG[HOST_NAME]['auth'] ?? false); diff --git a/www/configs/config.php b/www/configs/config.php index df7f3b95..93e07ea2 100644 --- a/www/configs/config.php +++ b/www/configs/config.php @@ -50,9 +50,22 @@ for ( is_file($__DIR__PATH . $CONFIG_PATH_PREFIX . CONFIG_PATH . 'config.master.php') ) { // load enviorment file if it exists - \CoreLibs\Get\DotEnv::readEnvFile( + \gullevek\dotEnv\DotEnv::readEnvFile( $__DIR__PATH . $CONFIG_PATH_PREFIX . CONFIG_PATH ); + // find trigger name "admin/" or "frontend/" in the getcwd() folder + $folder = ''; + foreach (['admin', 'frontend'] as $_folder) { + if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $_folder)) { + $folder = $_folder; + break; + } + } + // if content path is empty, fallback is default + if (empty($folder)) { + $folder = 'default'; + } + define('CONTENT_PATH', $folder . DIRECTORY_SEPARATOR); // load master config file that loads all other config files require $__DIR__PATH . $CONFIG_PATH_PREFIX . CONFIG_PATH . 'config.master.php'; break; @@ -62,17 +75,5 @@ for ( if (!defined('DIR')) { exit('Base config could not be loaded'); } -// find trigger name "admin/" or "frontend/" in the getcwd() folder -foreach (['admin', 'frontend'] as $folder) { - if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $folder)) { - break; - } -} -// if content path is empty, fallback is default -/** @phpstan-ignore-next-line can be empty */ -if (empty($folder)) { - $folder = 'default'; -} -define('CONTENT_PATH', $folder . DIRECTORY_SEPARATOR); // __END__ diff --git a/www/includes/admin_header.php b/www/includes/admin_header.php index c5ff0681..7ba8f52f 100644 --- a/www/includes/admin_header.php +++ b/www/includes/admin_header.php @@ -74,20 +74,35 @@ if ( // db config with logger $db = new \CoreLibs\DB\IO(DB_CONFIG, $log); // login & page access check -$login = new \CoreLibs\ACL\Login($db, $log, $session); +$login = new \CoreLibs\ACL\Login( + $db, + $log, + $session, + [ + 'auto_login' => true, + 'default_acl_level' => DEFAULT_ACL_LEVEL, + 'logout_target' => '', + 'site_locale' => SITE_LOCALE, + 'site_domain' => SITE_DOMAIN, + 'site_encoding' => SITE_ENCODING, + 'locale_path' => BASE . INCLUDES . LOCALE, + ] +); // lang, path, domain // pre auto detect language after login -$locale = \CoreLibs\Language\GetLocale::setLocale(); +$locale = $login->loginGetLocale(); // set lang and pass to smarty/backend $l10n = new \CoreLibs\Language\L10n( $locale['locale'], $locale['domain'], $locale['path'], + $locale['encoding'] ); + // create smarty object -$smarty = new \CoreLibs\Template\SmartyExtend($l10n, $locale); +$smarty = new \CoreLibs\Template\SmartyExtend($l10n, CACHE_ID, COMPILE_ID); // create new Backend class with db and loger attached -$cms = new \CoreLibs\Admin\Backend($db, $log, $session, $l10n, $locale); +$cms = new \CoreLibs\Admin\Backend($db, $log, $session, $l10n, DEFAULT_ACL_LEVEL); // the menu show flag (what menu to show) $cms->menu_show_flag = 'main'; // db info diff --git a/www/includes/edit_base.php b/www/includes/edit_base.php index 31f07e5c..3b22b2b8 100644 --- a/www/includes/edit_base.php +++ b/www/includes/edit_base.php @@ -43,24 +43,57 @@ $log = new CoreLibs\Debug\Logging([ // db connection $db = new CoreLibs\DB\IO(DB_CONFIG, $log); // login page -$login = new CoreLibs\ACL\Login($db, $log, $session); +$login = new CoreLibs\ACL\Login( + $db, + $log, + $session, + [ + 'auto_login' => true, + 'default_acl_level' => DEFAULT_ACL_LEVEL, + 'logout_target' => '', + 'site_locale' => SITE_LOCALE, + 'site_domain' => SITE_DOMAIN, + 'site_encoding' => SITE_ENCODING, + 'locale_path' => BASE . INCLUDES . LOCALE, + ] +); // space for setting special debug flags // $login->log->setLogLevelAll('debug', true); // lang, path, domain // pre auto detect language after login -$locale = \CoreLibs\Language\GetLocale::setLocale(); +$locale = $login->loginGetLocale(); // set lang and pass to smarty/backend $l10n = new \CoreLibs\Language\L10n( $locale['locale'], $locale['domain'], $locale['path'], + $locale['encoding'] ); // flush and start ob_end_flush(); // init smarty and form class -$edit_base = new CoreLibs\Admin\EditBase(DB_CONFIG, $log, $l10n, $locale); +$edit_base = new CoreLibs\Admin\EditBase( + DB_CONFIG, + $log, + $l10n, + $login, + [ + 'cache_id' => CACHE_ID, + 'compile_id' => COMPILE_ID + ] +); // creates edit pages and runs actions -$edit_base->editBaseRun(); +$edit_base->editBaseRun( + BASE . INCLUDES . TEMPLATES . CONTENT_PATH, + BASE . TEMPLATES_C, + BASE . CACHE, + ADMIN_STYLESHEET, + DEFAULT_ENCODING, + LAYOUT . CSS, + LAYOUT . JS, + ROOT, + CONTENT_PATH +); // __END__ diff --git a/www/includes/templates/admin/edit_body.tpl b/www/includes/templates/admin/edit_body.tpl index 880aa115..9d178ed4 100644 --- a/www/includes/templates/admin/edit_body.tpl +++ b/www/includes/templates/admin/edit_body.tpl @@ -39,7 +39,7 @@ function pop(theURL, winName, features) {
    - Hello {$USER_NAME|upper} [{$EUID}] from the group {$GROUP_NAME} with Access Level {$GROUP_LEVEL} + Hello {$USER_NAME|upper} [{$EUID}] from the group {$GROUP_NAME} with Access Level {$ACCESS_LEVEL} diff --git a/www/psalm.xml b/www/psalm.xml deleted file mode 100644 index ecdbeb6f..00000000 --- a/www/psalm.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/www/vendor/composer/autoload_psr4.php b/www/vendor/composer/autoload_psr4.php index 2a3b6884..8725ab48 100644 --- a/www/vendor/composer/autoload_psr4.php +++ b/www/vendor/composer/autoload_psr4.php @@ -6,5 +6,7 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + 'gullevek\\dotenv\\' => array($vendorDir . '/gullevek/dotenv/src'), + 'gullevek\\dotEnv\\' => array($vendorDir . '/gullevek/dotenv/src'), 'CoreLibs\\' => array($vendorDir . '/egrajp/corelibs-composer-all/src'), ); diff --git a/www/vendor/composer/autoload_static.php b/www/vendor/composer/autoload_static.php index 27cb01ac..0df92a44 100644 --- a/www/vendor/composer/autoload_static.php +++ b/www/vendor/composer/autoload_static.php @@ -7,6 +7,11 @@ namespace Composer\Autoload; class ComposerStaticInit1b7cd5bacf2590b458d7a94400b505d4 { public static $prefixLengthsPsr4 = array ( + 'g' => + array ( + 'gullevek\\dotenv\\' => 16, + 'gullevek\\dotEnv\\' => 16, + ), 'C' => array ( 'CoreLibs\\' => 9, @@ -14,6 +19,14 @@ class ComposerStaticInit1b7cd5bacf2590b458d7a94400b505d4 ); public static $prefixDirsPsr4 = array ( + 'gullevek\\dotenv\\' => + array ( + 0 => __DIR__ . '/..' . '/gullevek/dotenv/src', + ), + 'gullevek\\dotEnv\\' => + array ( + 0 => __DIR__ . '/..' . '/gullevek/dotenv/src', + ), 'CoreLibs\\' => array ( 0 => __DIR__ . '/..' . '/egrajp/corelibs-composer-all/src', diff --git a/www/vendor/composer/installed.json b/www/vendor/composer/installed.json index fc45ca15..a3b12dde 100644 --- a/www/vendor/composer/installed.json +++ b/www/vendor/composer/installed.json @@ -2,12 +2,12 @@ "packages": [ { "name": "egrajp/corelibs-composer-all", - "version": "dev-master", - "version_normalized": "dev-master", + "version": "dev-development", + "version_normalized": "dev-development", "dist": { "type": "path", "url": "/storage/var/www/html/developers/clemens/core_data/composer-packages/CoreLibs-Composer-All", - "reference": "d9b71a64b390b6fc048cb6de00bfcfc6d9a6344f" + "reference": "cf196d56ddcc38567112c7d933340349036ee3fa" }, "require": { "php": ">=8.1" @@ -72,6 +72,63 @@ "templating" ], "install-path": "../egrajp/smarty-extended" + }, + { + "name": "gullevek/dotenv", + "version": "v2.0.8", + "version_normalized": "2.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/gullevek/dotEnv.git", + "reference": "e29f9fcd8853a09bb89b0eb8ee555b754ecee36e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gullevek/dotEnv/zipball/e29f9fcd8853a09bb89b0eb8ee555b754ecee36e", + "reference": "e29f9fcd8853a09bb89b0eb8ee555b754ecee36e", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "require-dev": { + "phan/phan": "^5.4", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9" + }, + "time": "2023-03-03T00:32:02+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "gullevek\\dotEnv\\": "src/", + "gullevek\\dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Clemens Schwaighofer", + "email": "gullevek@gullevek.org", + "homepage": "http://gullevek.org" + } + ], + "description": "Simple .env file processing and storing in _ENV array", + "homepage": "https://github.com/gullevek/dotEnv", + "keywords": [ + ".env", + "_ENV", + "dotenv", + "environment variables" + ], + "support": { + "issues": "https://github.com/gullevek/dotEnv/issues", + "source": "https://github.com/gullevek/dotEnv/tree/v2.0.8" + }, + "install-path": "../gullevek/dotenv" } ], "dev": true, diff --git a/www/vendor/composer/installed.php b/www/vendor/composer/installed.php index ec149755..f63e7fe1 100644 --- a/www/vendor/composer/installed.php +++ b/www/vendor/composer/installed.php @@ -11,9 +11,9 @@ ), 'versions' => array( 'egrajp/corelibs-composer-all' => array( - 'pretty_version' => 'dev-master', - 'version' => 'dev-master', - 'reference' => 'd9b71a64b390b6fc048cb6de00bfcfc6d9a6344f', + 'pretty_version' => 'dev-development', + 'version' => 'dev-development', + 'reference' => 'cf196d56ddcc38567112c7d933340349036ee3fa', 'type' => 'library', 'install_path' => __DIR__ . '/../egrajp/corelibs-composer-all', 'aliases' => array(), @@ -37,5 +37,14 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'gullevek/dotenv' => array( + 'pretty_version' => 'v2.0.8', + 'version' => '2.0.8.0', + 'reference' => 'e29f9fcd8853a09bb89b0eb8ee555b754ecee36e', + 'type' => 'library', + 'install_path' => __DIR__ . '/../gullevek/dotenv', + 'aliases' => array(), + 'dev_requirement' => false, + ), ), ); diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/last.published b/www/vendor/egrajp/corelibs-composer-all/publish/last.published index 8b22a322..50c496d2 100644 --- a/www/vendor/egrajp/corelibs-composer-all/publish/last.published +++ b/www/vendor/egrajp/corelibs-composer-all/publish/last.published @@ -1 +1 @@ -8.0.2 +8.0.4 diff --git a/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php b/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php index b7e490e5..d41dd33c 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/ACL/Login.php @@ -196,7 +196,12 @@ class Login /** @var array options */ private $options = []; /** @var array locale options: locale, domain, encoding (opt), path */ - private $locale = []; + private $locale = [ + 'locale' => '', + 'domain' => '', + 'encoding' => '', + 'path' => '', + ]; /** @var \CoreLibs\Debug\Logging logger */ public $log; @@ -555,12 +560,12 @@ class Login ); // set path $options['locale_path'] = BASE . INCLUDES . LOCALE; - $_SESSION['LOCALE_PATH'] = $options['locale_path']; } + $_SESSION['LOCALE_PATH'] = $options['locale_path']; // LANG: LOCALE if (empty($options['site_locale'])) { trigger_error( - 'loginMainCall: SITE_LOCALE or DEFAULT_LOCALE should not be used', + 'loginMainCall: SITE_LOCALE should not be used', E_USER_DEPRECATED ); $options['site_locale'] = defined('SITE_LOCALE') && !empty(SITE_LOCALE) ? @@ -580,7 +585,6 @@ class Login ); // set domain $options['site_domain'] = SITE_DOMAIN; - $_SESSION['DEFAULT_DOMAIN'] = $options['site_domain']; } elseif ( defined('CONTENT_PATH') ) { @@ -592,6 +596,16 @@ class Login $options['set_domain'] = str_replace(DIRECTORY_SEPARATOR, '', CONTENT_PATH); } } + $_SESSION['DEFAULT_DOMAIN'] = $options['site_domain']; + // LANG: ENCODING + if (empty($options['site_encoding'])) { + trigger_error( + 'loginMainCall: SITE_ENCODING should not be used', + E_USER_DEPRECATED + ); + $options['site_encoding'] = defined('SITE_ENCODING') && !empty(SITE_ENCODING) ? + SITE_ENCODING : 'UTF-8'; + } // write array to options $this->options = $options; @@ -905,6 +919,7 @@ class Login // rgb: nnn.n for each // hsl: nnn.n for first, nnn.n% for 2nd, 3rd // Check\Colors::validateColor() + // LANGUAGE/LOCALE/ENCODING: $_SESSION['LANG'] = $res['locale'] ?? 'en'; $_SESSION['DEFAULT_CHARSET'] = $res['encoding'] ?? 'UTF-8'; $_SESSION['DEFAULT_LOCALE'] = $_SESSION['LANG'] @@ -1195,7 +1210,8 @@ class Login } /** - * set locale and load mo translator + * set locale + * if invalid, set to empty string * * @return void */ @@ -1204,22 +1220,52 @@ class Login // ** LANGUAGE SET AFTER LOGIN ** // set the locale if ( - !empty($_SESSION['DEFAULT_LOCALE']) + !empty($_SESSION['DEFAULT_LOCALE']) && + preg_match("/^[-A-Za-z0-9_.@]+$/", $_SESSION['DEFAULT_LOCALE']) ) { $locale = $_SESSION['DEFAULT_LOCALE']; - } else { + } elseif ( + !preg_match("/^[-A-Za-z0-9_.@]+$/", $this->options['site_locale']) + ) { $locale = $this->options['site_locale']; + } else { + $locale = ''; } + // set the charset + preg_match('/(?:\\.(?P[-A-Za-z0-9_]+))/', $locale, $matches); + $locale_encoding = $matches['charset'] ?? ''; + if (!empty($locale_encoding)) { + $encoding = strtoupper($locale_encoding); + } elseif ( + !empty($_SESSION['DEFAULT_CHARSET']) && + preg_match("/^[-A-Za-z0-9_]+$/", $_SESSION['DEFAULT_CHARSET']) + ) { + $encoding = $_SESSION['DEFAULT_CHARSET']; + } elseif ( + !preg_match("/^[-A-Za-z0-9_]+$/", $this->options['site_encoding']) + ) { + $encoding = $this->options['site_encoding']; + } else { + $encoding = ''; + } + // check domain + $domain = $this->options['site_domain']; + if ( + !preg_match("/^\w+$/", $this->options['site_domain']) + ) { + $domain = ''; + } + $path = $this->options['locale_path']; + if (!is_dir($path)) { + $path = ''; + } + // domain and path are a must set from class options $this->locale = [ 'locale' => $locale, - 'domain' => $this->options['site_domain'], - 'path' => $this->options['locale_path'], + 'domain' => $domain, + 'encoding' => $encoding, + 'path' => $path, ]; - $this->l = new \CoreLibs\Language\L10n( - $this->locale['locale'], - $this->locale['domain'], - $this->locale['path'] - ); } /** @@ -1824,6 +1870,12 @@ EOM; $this->loginLogoutUser(); // ** LANGUAGE SET AFTER LOGIN ** $this->loginSetLocale(); + // load translator + $this->l = new \CoreLibs\Language\L10n( + $this->locale['locale'], + $this->locale['domain'], + $this->locale['path'] + ); // if the password change flag is okay, run the password change method if ($this->password_change) { $this->loginPasswordChange(); @@ -2396,6 +2448,53 @@ EOM; ): bool|string { return $this->loginGetEditAccessData($edit_access_id, $data_key); } + + /** + * Return locale settings with + * locale + * domain + * encoding + * path + * + * empty string if not set + * + * @return array Locale settings + */ + public function loginGetLocale(): array + { + return $this->locale; + } + + /** + * return header color or null for not set + * + * @return string|null Header color in RGB hex with leading sharp + */ + public function loginGetHeaderColor(): ?string + { + return $_SESSION['HEADER_COLOR'] ?? null; + } + + /** + * Return the current loaded list of pages the user can access + * + * @return array + */ + public function loginGetPages(): array + { + + return $_SESSION['PAGES'] ?? []; + } + + /** + * Get the current set EUID (edit user id) + * + * @return string EUID as string + */ + public function loginGetEuid(): string + { + return $this->euid; + } } // __END__ diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Admin/Backend.php b/www/vendor/egrajp/corelibs-composer-all/src/Admin/Backend.php index 3f03a463..2ea48041 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Admin/Backend.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Admin/Backend.php @@ -121,14 +121,13 @@ class Backend * @param \CoreLibs\Debug\Logging $log Logging class * @param \CoreLibs\Create\Session $session Session interface class * @param \CoreLibs\Language\L10n $l10n l10n language class - * @param array $locale locale data read from setLocale + * @param int|null $set_default_acl_level Default ACL level */ public function __construct( \CoreLibs\DB\IO $db, \CoreLibs\Debug\Logging $log, \CoreLibs\Create\Session $session, \CoreLibs\Language\L10n $l10n, - array $locale, ?int $set_default_acl_level = null ) { // attach db class @@ -142,12 +141,12 @@ class Backend // get the language sub class & init it $this->l = $l10n; // parse and read, legacy stuff + $locale = $this->l->getLocaleAsArray(); $this->encoding = $locale['encoding']; $this->lang = $locale['lang']; - // get first part from lang - $this->lang_short = explode('_', $locale['lang'])[0]; - $this->domain = $this->l->getDomain(); - $this->lang_dir = $this->l->getBaseLocalePath(); + $this->lang_short = $locale['lang_short']; + $this->domain = $locale['domain']; + $this->lang_dir = $locale['path']; // set the page name $this->page_name = \CoreLibs\Get\System::getPageName(); diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Admin/EditBase.php b/www/vendor/egrajp/corelibs-composer-all/src/Admin/EditBase.php index 30f71c91..3933d535 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Admin/EditBase.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Admin/EditBase.php @@ -35,6 +35,8 @@ class EditBase private $form; /** @var \CoreLibs\Debug\Logging */ public $log; + /** @var \CoreLibs\ACL\Login */ + public $login; /** * construct form generator @@ -42,18 +44,24 @@ class EditBase * @param array $db_config db config array, mandatory * @param \CoreLibs\Debug\Logging $log Logging class, null auto set * @param \CoreLibs\Language\L10n $l10n l10n language class, null auto set - * @param array $locale locale array from ::setLocale, - * null auto set + * @param \CoreLibs\ACL\Login $login login class for ACL settings + * @param array $options Various settings options */ public function __construct( array $db_config, \CoreLibs\Debug\Logging $log, \CoreLibs\Language\L10n $l10n, - array $locale + \CoreLibs\ACL\Login $login, + array $options ) { $this->log = $log; + $this->login = $login; // smarty template engine (extended Translation version) - $this->smarty = new \CoreLibs\Template\SmartyExtend($l10n, $locale); + $this->smarty = new \CoreLibs\Template\SmartyExtend( + $l10n, + $options['cache_id'] ?? '', + $options['compile_id'] ?? '', + ); // turn off set log per class $log->setLogPer('class', false); @@ -62,7 +70,7 @@ class EditBase $db_config, $log, $l10n, - $locale + $this->login->loginGetAcl() ); if ($this->form->mobile_phone) { echo "I am sorry, but this page cannot be viewed by a mobile phone"; @@ -272,23 +280,16 @@ class EditBase // MENU START // request some session vars - if (empty($_SESSION['HEADER_COLOR'])) { - $this->DATA['HEADER_COLOR'] = '#E0E2FF'; - } else { - $this->DATA['HEADER_COLOR'] = $_SESSION['HEADER_COLOR']; - } - $this->DATA['USER_NAME'] = $_SESSION['USER_NAME']; - $this->DATA['EUID'] = $_SESSION['EUID']; - $this->DATA['GROUP_NAME'] = $_SESSION['GROUP_NAME']; - $this->DATA['GROUP_LEVEL'] = $_SESSION['GROUP_ACL_LEVEL']; - $PAGES = $_SESSION['PAGES']; + $this->DATA['HEADER_COLOR'] = $this->login->loginGetHeaderColor() ?? '#E0E2FF'; + $this->DATA['USER_NAME'] = $this->login->loginGetAcl()['user_name'] ?? ''; + $this->DATA['EUID'] = $this->login->loginGetEuid(); + $this->DATA['GROUP_NAME'] = $this->login->loginGetAcl()['group_name'] ?? ''; + $this->DATA['ACCESS_LEVEL'] = $this->login->loginGetAcl()['base'] ?? ''; + // below is old and to removed when edit_body.tpl is updates + $this->DATA['GROUP_LEVEL'] = $this->DATA['ACCESS_LEVEL']; + $PAGES = $this->login->loginGetPages(); //$this->form->log->debug('menu', $this->form->log->prAr($PAGES)); - - // build nav from $PAGES ... - if (!isset($PAGES) || !is_array($PAGES)) { - $PAGES = []; - } $menuarray = []; foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) { if ($PAGE_DATA['menu'] && $PAGE_DATA['online']) { @@ -574,7 +575,7 @@ class EditBase $set_admin_stylesheet = $set_admin_stylesheet ?? ADMIN_STYLESHEET; $set_default_encoding = $set_default_encoding ?? DEFAULT_ENCODING; $set_css = $set_css ?? LAYOUT . CSS; - $set_css = $set_js ?? LAYOUT . JS; + $set_js = $set_js ?? LAYOUT . JS; $set_root = $set_root ?? ROOT; $set_content_path = $set_content_path ?? CONTENT_PATH; diff --git a/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php b/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php index e593d227..9f878e96 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php @@ -405,9 +405,9 @@ class IO $db_debug_override ?? // from db config setting $db_config['db_debug'] ?? - // should be handled from outside + // [DEPRECATED] should be handled from outside $_SESSION['DB_DEBUG'] ?? - // globals should be deprecated + // [DEPRECATED] globals should be deprecated $GLOBALS['DB_DEBUG'] ?? false ); diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Debug/Logging.php b/www/vendor/egrajp/corelibs-composer-all/src/Debug/Logging.php index bae2136f..de4e710e 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Debug/Logging.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Debug/Logging.php @@ -251,22 +251,22 @@ class Logging 'debug', $this->options['debug_all'] ?? // for user login, should be handled outside like globals - $_SESSION['DEBUG_ALL'] ?? - $GLOBALS['DEBUG_ALL'] ?? + $_SESSION['DEBUG_ALL'] ?? // DEPRECATED + $GLOBALS['DEBUG_ALL'] ?? // DEPRECATED false ); $this->setLogLevelAll( 'print', $this->options['print_all'] ?? // for user login, should be handled outside like globals - $_SESSION['DEBUG_ALL'] ?? - $GLOBALS['PRINT_ALL'] ?? + $_SESSION['DEBUG_ALL'] ?? // DEPRECATED + $GLOBALS['PRINT_ALL'] ?? // DEPRECATED false ); $this->setLogLevelAll( 'echo', $this->options['echo_all'] ?? - $GLOBALS['ECHO_ALL'] ?? + $GLOBALS['ECHO_ALL'] ?? // DEPRECATED false ); @@ -274,32 +274,32 @@ class Logging // add file date is default on $this->setGetLogPrintFileDate( $this->options['print_file_date'] ?? - $GLOBALS['LOG_PRINT_FILE_DATE'] ?? + $GLOBALS['LOG_PRINT_FILE_DATE'] ?? // DEPRECATED true ); // all other logging file name flags are off $this->setLogPer( 'level', $this->options['per_level'] ?? - $GLOBALS['LOG_PER_LEVEL'] ?? + $GLOBALS['LOG_PER_LEVEL'] ?? // DEPRECATED false ); $this->setLogPer( 'class', $this->options['per_class'] ?? - $GLOBALS['LOG_PER_CLASS'] ?? + $GLOBALS['LOG_PER_CLASS'] ?? // DEPRECATED false ); $this->setLogPer( 'page', $this->options['per_page'] ?? - $GLOBALS['LOG_PER_PAGE'] ?? + $GLOBALS['LOG_PER_PAGE'] ?? // DEPRECATED false ); $this->setLogPer( 'run', $this->options['per_run'] ?? - $GLOBALS['LOG_PER_RUN'] ?? + $GLOBALS['LOG_PER_RUN'] ?? // DEPRECATED false ); // set log per date diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Language/GetLocale.php b/www/vendor/egrajp/corelibs-composer-all/src/Language/GetLocale.php index f10dc4d3..1f7842fc 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Language/GetLocale.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Language/GetLocale.php @@ -21,6 +21,7 @@ class GetLocale * @param string|null $encoding override encoding * @param string|null $path override path * @return array locale, domain, encoding, path + * @deprecated use GetLocale::setLocaleSession(...) instead */ public static function setLocale( ?string $locale = null, @@ -28,6 +29,10 @@ class GetLocale ?string $encoding = null, ?string $path = null ): array { + trigger_error( + 'Use \CoreLibs\Language\GetLocale::setLocaleSession(...) instead', + E_USER_DEPRECATED + ); // locale must match at least basic rules if ( empty($locale) || @@ -137,6 +142,113 @@ class GetLocale 'path' => $path, ]; } + + /** + * NOTE: For getting the login info via login class use ->loginGetLocale() + * + * Set locale from session or from override parameters + * This is the prefered version to setLocale + * It usese the following SESSION VARIABLES + * DEFAULT_LOCALE + * DEFAULT_DOMAIN + * DEFAULT_CHARSET (should be set from DEFAULT_LOCALE) + * LOCALE_PATH + * in the return array, null set invalid information + * + * @param string $locale override locale + * @param string $domain override domain + * @param string $encoding override encoding + * @param string $path override path + * @return array locale, domain, encoding, path + * @return array Return list of set locale information + * @deprecated This version will be removed in a future version use ACL\Login->loginGetLocale() instead + */ + public static function setLocaleFromSession( + string $locale, + string $domain, + string $encoding, + string $path + ): array { + // locale must match at least basic rules + if ( + !empty($_SESSION['DEFAULT_LOCALE']) && + preg_match("/^[-A-Za-z0-9_.@]+$/", $_SESSION['DEFAULT_LOCALE']) + ) { + // parse from session (logged in) + $locale = $_SESSION['DEFAULT_LOCALE']; + } elseif ( + empty($locale) || + !preg_match("/^[-A-Za-z0-9_.@]+$/", $locale) + ) { + $locale = null; + } + // if domain is set, must be alphanumeric, if not unset + if ( + !empty($_SESSION['DEFAULT_DOMAIN']) && + preg_match("/^\w+$/", $_SESSION['DEFAULT_DOMAIN']) + ) { + $domain = $_SESSION['DEFAULT_DOMAIN']; + } elseif ( + empty($domain) || + !preg_match("/^\w+$/", $domain) + ) { + $domain = null; + } + // check that override encoding matches locale encoding + // if locale encoding is set + preg_match('/(?:\\.(?P[-A-Za-z0-9_]+))/', $locale ?? '', $matches); + $locale_encoding = $matches['charset'] ?? null; + if (!empty($locale_encoding)) { + $encoding = strtoupper($locale_encoding); + } elseif ( + !empty($_SESSION['DEFAULT_CHARSET']) && + preg_match("/^[-A-Za-z0-9_]+$/", $_SESSION['DEFAULT_CHARSET']) + ) { + $encoding = $_SESSION['DEFAULT_CHARSET']; + } elseif ( + empty($encoding) || + // not valid encoding + !preg_match("/^[-A-Za-z0-9_]+$/", $encoding) + ) { + $encoding = null; + } + // path checks if set, if not valid path unset to default BASE path + if ( + !empty($_SESSION['LOCALE_PATH']) && + is_dir($_SESSION['LOCALE_PATH']) + ) { + $path = $_SESSION['LOCALE_PATH']; + } elseif ( + empty($path) || + !is_dir($path) + ) { + $path = null; + } + // extract lang & country from locale string, else set to en + if ( + preg_match( + // lang + '/^(?P[a-z]{2,3})' + // country code + . '(?:_(?P[A-Z]{2}))?/', + $locale ?? '', + $matches + ) + ) { + $lang = ($matches['lang'] ?? 'en') + // add country only if set + . (!empty($matches['country']) ? '_' . $matches['country'] : ''); + } else { + $lang = null; + } + return [ + 'locale' => $locale, + 'lang' => $lang, + 'domain' => $domain, + 'encoding' => $encoding, + 'path' => $path, + ]; + } } // __END__ diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php b/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php index 09c2cae5..75db228a 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Language/L10n.php @@ -32,12 +32,18 @@ use CoreLibs\Language\Core\GetTextReader; class L10n { + /** @var string the default fallback encoding if nothing is set */ + public const DEFAULT_CHARSET = 'UTF-8'; /** @var string the current locale */ private $locale = ''; /** @var string the SET locale as WHERE the domain file is */ private $locale_set = ''; /** @var string the default selected/active domain */ private $domain = ''; + /** @var string encoding, as from locale or set from outside */ + private $override_encoding = self::DEFAULT_CHARSET; + /** @var string encoding set during the parse Locale */ + private $encoding = ''; /** @var array> locale > domain = translator */ private $domains = []; /** @var array bound paths for domains */ @@ -71,15 +77,18 @@ class L10n * if locale is not empty will load translation * else getTranslator needs to be called * - * @param string $locale language name, default empty string - * will return self instance - * @param string $domain override CONTENT_PATH . $encoding name for mo file - * @param string $path path, if empty fallback on default internal path + * @param string $locale language name, default empty string + * will return self instance + * @param string $domain override CONTENT_PATH . $encoding name for mo file + * @param string $path path, if empty fallback on default internal path + * @param string $encoding Optional encoding, should be set if locale has + * no encoding, defaults to UTF-8 */ public function __construct( string $locale = '', string $domain = '', - string $path = '' + string $path = '', + string $encoding = '' ) { // auto load language only if at least locale and domain is set // New: path must be set too, or we fall through @@ -103,7 +112,7 @@ class L10n $path = $domain; $domain = $_domain; } - $this->getTranslator($locale, $domain, $path); + $this->getTranslator($locale, $domain, $path, $encoding); } } @@ -137,13 +146,15 @@ class L10n * * @param string $locale language name, if not set, try previous set * @param string $domain set name for mo file, if not set, try previous set - * @param string $path path, if not set try to get from paths array, else self + * @param string $path path, if not set try to get from paths array, else self + * @param string $override_encoding if locale does not env encoding set, use this one * @return GetTextReader the main gettext reader object */ public function getTranslator( string $locale = '', string $domain = '', - string $path = '' + string $path = '', + string $override_encoding = '', ): GetTextReader { // set local if not from parameter if (empty($locale)) { @@ -153,11 +164,16 @@ class L10n if (empty($domain)) { $domain = $this->domain; } + // override encoding for unset + if (!empty($override_encoding)) { + $this->override_encoding = $override_encoding; + } // store old settings $old_mofile = $this->mofile; $old_lang = $this->locale; $old_lang_set = $this->locale_set; $old_domain = $this->domain; + $old_encoding = $this->encoding; $old_base_locale_path = $this->base_locale_path; $old_base_content_path = $this->base_content_path; @@ -186,6 +202,7 @@ class L10n // now we loop over lang compositions to get the base path // then we check $locales = $this->listLocales($locale); + $encoding = $this->getEncodingFromLocale($locale); foreach ($locales as $_locale) { $this->base_content_path = $_locale . DIRECTORY_SEPARATOR . 'LC_MESSAGES' . DIRECTORY_SEPARATOR; @@ -202,6 +219,7 @@ class L10n if (is_readable($this->mofile)) { // locale and domain current wanted $this->locale = $locale; + $this->encoding = $encoding; $this->domain = $domain; // set empty domains path with current locale if (empty($this->domains[$locale])) { @@ -225,6 +243,7 @@ class L10n $this->mofile = $old_mofile; $this->locale = $old_lang; $this->locale_set = $old_lang_set; + $this->encoding = $old_encoding; $this->domain = $old_domain; $this->base_locale_path = $old_base_locale_path; $this->base_content_path = $old_base_content_path; @@ -258,21 +277,36 @@ class L10n return $this->l10n; } + /** + * Extract encoding from Locale, or fallback to override one if not set + * + * @param string $locale + * @return string + */ + private function getEncodingFromLocale(string $locale): string + { + // extract charset from $locale + // if not set get override encoding + preg_match('/(?:\\.(?P[-A-Za-z0-9_]+))/', $locale, $matches); + return $matches['charset'] ?? $this->override_encoding; + } + /** * Get the local as array same to the GetLocale::setLocale return * This does not set from outside, but only what is set in the l10n class * - * @return array{locale: string, lang: string|null, domain: string, encoding: string|null, path: string} + * @return array{locale: string, lang: string, lang_short: string, domain: string, encoding: string, path: string} */ public function getLocaleAsArray(): array { $locale = L10n::parseLocale($this->getLocale()); return [ 'locale' => $this->getLocale(), - 'lang' => $locale['lang'] + 'lang' => ($locale['lang'] ?? '') . (!empty($locale['country']) ? '_' . $locale['country'] : ''), + 'lang_short' => $locale['lang'] ?? '', 'domain' => $this->getDomain(), - 'encoding' => $locale['charset'], + 'encoding' => $this->getEncoding(), 'path' => $this->getBaseLocalePath(), ]; } @@ -515,6 +549,37 @@ class L10n return $this->locale_set; } + /** + * Set override encoding + * + * @param string $encoding + * @return void + */ + public function setOverrideEncoding(string $encoding): void + { + $this->override_encoding = $encoding; + } + + /** + * return current set override encoding + * + * @return string + */ + public function getOverrideEncoding(): string + { + return $this->override_encoding; + } + + /** + * Current set encoding + * + * @return string + */ + public function getEncoding(): string + { + return $this->encoding; + } + /** * get current set language * diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Output/Form/Generate.php b/www/vendor/egrajp/corelibs-composer-all/src/Output/Form/Generate.php index 9c33aa1d..65555bc3 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Output/Form/Generate.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Output/Form/Generate.php @@ -277,6 +277,8 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO private $acl_admin = 0; /** @var array */ public $security_level; + /** @var array Login ACL */ + public $login_acl = []; // layout publics /** @var int */ public $table_width; @@ -308,7 +310,8 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO * @param array $db_config db config array, mandatory * @param \CoreLibs\Debug\Logging $log Logging class * @param \CoreLibs\Language\L10n $l10n l10n language class - * @param array $locale locale array from ::setLocale + * @param array $login_acl Login ACL array, + * at least base/admin should be set * @param array|null $table_arrays Override table array data * instead of try to load from * include file @@ -318,7 +321,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO array $db_config, \CoreLibs\Debug\Logging $log, \CoreLibs\Language\L10n $l10n, - array $locale, + array $login_acl, ?array $table_arrays = null, ) { // init logger if not set @@ -327,19 +330,19 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO $this->log->setLogPer('class', false); // init the language class $this->l = $l10n; - // legacy lang vars set + // parse and read, legacy stuff + $locale = $this->l->getLocaleAsArray(); $this->encoding = $locale['encoding']; $this->lang = $locale['lang']; - // get first part from lang - $this->lang_short = explode('_', $locale['lang'])[0]; - $this->domain = $this->l->getDomain(); - $this->lang_dir = $this->l->getBaseLocalePath(); + $this->lang_short = $locale['lang_short']; + $this->domain = $locale['domain']; + $this->lang_dir = $locale['path']; // load config array // get table array definitions for current page name - + $this->login_acl = $login_acl; // security settings - $this->base_acl_level = (int)$_SESSION['BASE_ACL_LEVEL']; - $this->acl_admin = (int)$_SESSION['ADMIN']; + $this->base_acl_level = $this->login_acl['base'] ?? 0; + $this->acl_admin = $this->login_acl['admin'] ?? 0; // replace any non valid variable names and set my page name $this->my_page_name = str_replace( @@ -377,7 +380,6 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO $this->base_acl_level, $this->acl_admin ); - // $this->log->debug('SESSION FORM', 'sessin: ' . $this->log->prAr($_SESSION)); // here should be a check if the config_array is correct ... if (isset($config_array['show_fields']) && is_array($config_array['show_fields'])) { $this->field_array = $config_array['show_fields']; diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php b/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php index 6e87d9e3..a2a08010 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php @@ -160,13 +160,11 @@ class SmartyExtend extends \Smarty * also registers the getvar caller plugin * * @param \CoreLibs\Language\L10n $l10n l10n language class - * @param array $locale locale data read from setLocale * @param string|null $cache_id * @param string|null $compile_id */ public function __construct( \CoreLibs\Language\L10n $l10n, - array $locale, ?string $cache_id = null, ?string $compile_id = null ) { @@ -192,13 +190,12 @@ class SmartyExtend extends \Smarty // iinit lang $this->l10n = $l10n; // parse and read, legacy stuff + $locale = $this->l10n->getLocaleAsArray(); $this->encoding = $locale['encoding']; $this->lang = $locale['lang']; - // get first part from lang - $this->lang_short = explode('_', $locale['lang'])[0]; - $this->domain = $this->l10n->getDomain(); - $this->locale_set = $this->l10n->getLocaleSet(); - $this->lang_dir = $this->l10n->getBaseLocalePath(); + $this->lang_short = $locale['lang_short']; + $this->domain = $locale['domain']; + $this->lang_dir = $locale['path']; // opt load functions so we can use legacy init for smarty run perhaps \CoreLibs\Language\L10n::loadFunctions(); @@ -493,6 +490,7 @@ class SmartyExtend extends \Smarty null, null, null, + null, $set_stylesheet, $set_javascript ); @@ -511,6 +509,7 @@ class SmartyExtend extends \Smarty * @param string|null $set_admin_stylesheet ADMIN_STYLESHEET * @param string|null $set_admin_javascript ADMIN_JAVASCRIPT * @param string|null $set_page_width PAGE_WIDTH + * @param string|null $set_user_name _SESSION['USER_NAME'] * @param \CoreLibs\Admin\Backend|null $cms Optinal Admin Backend for * smarty variables merge * @return void @@ -526,6 +525,7 @@ class SmartyExtend extends \Smarty ?string $set_admin_stylesheet = null, ?string $set_admin_javascript = null, ?string $set_page_width = null, + ?string $set_user_name = null, ?\CoreLibs\Admin\Backend $cms = null ): void { $this->setSmartyVars( @@ -541,6 +541,7 @@ class SmartyExtend extends \Smarty $set_admin_stylesheet, $set_admin_javascript, $set_page_width, + $set_user_name, null, null ); @@ -566,6 +567,7 @@ class SmartyExtend extends \Smarty * @param string|null $set_page_width PAGE_WIDTH * @param string|null $set_stylesheet STYLESHEET * @param string|null $set_javascript JAVASCRIPT + * @param string|null $set_user_name _SESSION['USER_NAME'] * @return void */ private function setSmartyVars( @@ -581,8 +583,9 @@ class SmartyExtend extends \Smarty ?string $set_admin_stylesheet = null, ?string $set_admin_javascript = null, ?string $set_page_width = null, + ?string $set_user_name = null, ?string $set_stylesheet = null, - ?string $set_javascript = null + ?string $set_javascript = null, ): void { // trigger deprecation if ( @@ -597,7 +600,8 @@ class SmartyExtend extends \Smarty $admin_call === true && ( $set_admin_stylesheet === null || $set_admin_javascript === null || - $set_page_width === null + $set_page_width === null || + $set_user_name === null ) ) || ( @@ -626,6 +630,7 @@ class SmartyExtend extends \Smarty $set_page_width = $set_page_width ?? PAGE_WIDTH; $set_stylesheet = $set_stylesheet ?? STYLESHEET; $set_javascript = $set_javascript ?? JAVASCRIPT; + $set_user_name = $set_user_name ?? $_SESSION['USER_NAME'] ?? ''; // depreacte call globals cms on null 4mcs if ( $cms === null && @@ -734,7 +739,7 @@ class SmartyExtend extends \Smarty $this->DATA['JS_FLATPICKR'] = $this->JS_FLATPICKR; $this->DATA['JS_FILE_UPLOADER'] = $this->JS_FILE_UPLOADER; // user name - $this->DATA['USER_NAME'] = !empty($_SESSION['USER_NAME']) ? $_SESSION['USER_NAME'] : ''; + $this->DATA['USER_NAME'] = $set_user_name; // the template part to include into the body $this->DATA['TEMPLATE_NAME'] = $this->TEMPLATE_NAME; $this->DATA['CONTENT_INCLUDE'] = $this->CONTENT_INCLUDE; diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php index 361e8edb..bd55d223 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/ACL/CoreLibsACLLoginTest.php @@ -7,6 +7,14 @@ namespace tests; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\MockObject\MockObject; +/* +Not yet covered tests: +- loginGetLocale +- loginGetHeaderColor +- loginGetPages +- loginGetEuid +*/ + /** * Test class for ACL\Login * @coversDefaultClass \CoreLibs\ACL\Login @@ -1114,6 +1122,7 @@ final class CoreLibsACLLoginTest extends TestCase 'logout_target' => '', 'site_locale' => 'en_US.UTF-8', 'site_domain' => 'admin', + 'site_encoding' => 'UTF-8', 'locale_path' => __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, @@ -1796,6 +1805,7 @@ final class CoreLibsACLLoginTest extends TestCase 'logout_target' => '', 'site_locale' => 'en_US.UTF-8', 'site_domain' => 'admin', + 'site_encoding' => 'UTF-8', 'locale_path' => __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, @@ -1909,6 +1919,7 @@ final class CoreLibsACLLoginTest extends TestCase 'logout_target' => '', 'site_locale' => 'en_US.UTF-8', 'site_domain' => 'admin', + 'site_encoding' => 'UTF-8', 'locale_path' => __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, @@ -1996,6 +2007,7 @@ final class CoreLibsACLLoginTest extends TestCase 'logout_target' => '', 'site_locale' => 'en_US.UTF-8', 'site_domain' => 'admin', + 'site_encoding' => 'UTF-8', 'locale_path' => __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, @@ -2091,6 +2103,7 @@ final class CoreLibsACLLoginTest extends TestCase 'logout_target' => '', 'site_locale' => 'en_US.UTF-8', 'site_domain' => 'admin', + 'site_encoding' => 'UTF-8', 'locale_path' => __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageGetLocaleTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageGetLocaleTest.php index f8c9c454..fa053413 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageGetLocaleTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageGetLocaleTest.php @@ -14,6 +14,13 @@ use PHPUnit\Framework\TestCase; */ final class CoreLibsLanguageGetLocaleTest extends TestCase { + public const SITE_ENCODING = 'UTF-8'; + public const SITE_LOCALE = 'en_US.UTF-8'; + public const SITE_DOMAIN = 'admin'; + public const LOCALE_PATH = __DIR__ . DIRECTORY_SEPARATOR + . 'includes' . DIRECTORY_SEPARATOR + . 'locale' . DIRECTORY_SEPARATOR; + /** * set all constant variables that must be set before call * @@ -22,7 +29,7 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase public static function setUpBeforeClass(): void { // default web page encoding setting - if (!defined('DEFAULT_ENCODING')) { + /* if (!defined('DEFAULT_ENCODING')) { define('DEFAULT_ENCODING', 'UTF-8'); } if (!defined('DEFAULT_LOCALE')) { @@ -35,9 +42,9 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase } if (!defined('SITE_LOCALE')) { define('SITE_LOCALE', DEFAULT_LOCALE); - } + } */ // just set - if (!defined('BASE')) { + /* if (!defined('BASE')) { define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR); } if (!defined('INCLUDES')) { @@ -51,7 +58,7 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase } if (!defined('CONTENT_PATH')) { define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR); - } + } */ // array session $_SESSION = []; global $_SESSION; @@ -62,7 +69,7 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase * * @return array */ - public function setLocaleProvider(): array + /* public function setLocaleProvider(): array { return [ // 0: locale @@ -233,7 +240,7 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase // TODO invalid params (bad path) (no override) // TODO param calls, but with override set ]; - } + } */ /** * Undocumented function @@ -252,7 +259,7 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase * @param string|null $deprecation_message * @return void */ - public function testsetLocale( + /* public function testsetLocale( ?string $language, ?string $domain, ?string $encoding, @@ -347,6 +354,214 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase // unset all vars $_SESSION = []; unset($GLOBALS['OVERRIDE_LANG']); + } */ + + /** + * all the test data + * + * @return array + */ + public function setLocaleFromSessionProvider(): array + { + return [ + // 0: locale + // 1: domain + // 2: encoding + // 3: path + // 4: SESSION: DEFAULT_LOCALE + // 5: SESSION: DEFAULT_CHARSET + // 5: SESSION: DEFAULT_DOMAIN + // 6: SESSION: LOCALE_PATH + // 6: expected array + // 7: deprecation message + 'all session vars set' => [ + // lang, domain, encoding, path + self::SITE_LOCALE, self::SITE_DOMAIN, self::SITE_ENCODING, self::LOCALE_PATH, + // SESSION SETTINGS: locale, charset, domain, path + 'ja_JP.UTF-8', 'UTF-8', 'admin', __DIR__ . '/locale_other/', + // return array + [ + 'locale' => 'ja_JP.UTF-8', + 'lang' => 'ja_JP', + 'domain' => 'admin', + 'encoding' => 'UTF-8', + 'path' => "/^\/(.*\/)?locale_other\/$/", + ], + ], + // param lang and domain (no override) + 'no session set, only parameters' => [ + // lang, domain, encoding, path + self::SITE_LOCALE, self::SITE_DOMAIN, self::SITE_ENCODING, self::LOCALE_PATH, + // SESSION SETTINGS: locale, charset, domain, path + null, null, null, null, + // return array + [ + 'locale' => 'en_US.UTF-8', + 'lang' => 'en_US', + 'domain' => 'admin', + 'encoding' => 'UTF-8', + 'path' => "/^\/(.*\/)?includes\/locale\/$/", + ], + ], + // special parse session check for locales + 'all session vars set, short lang' => [ + // lang, domain, encoding, path + self::SITE_LOCALE, self::SITE_DOMAIN, self::SITE_ENCODING, self::LOCALE_PATH, + // SESSION SETTINGS: locale, charset, domain, path + 'ja', 'UTF-8', 'admin', __DIR__ . '/locale_other/', + // return array + [ + 'locale' => 'ja', + 'lang' => 'ja', + 'domain' => 'admin', + 'encoding' => 'UTF-8', + 'path' => "/^\/(.*\/)?locale_other\/$/", + ], + ], + // lang with modifier + // param lang and domain (no override) + 'long locale, domain, encoding params, no sessions' => [ + // lang, domain, encoding, path + self::SITE_LOCALE, self::SITE_DOMAIN, self::SITE_ENCODING, self::LOCALE_PATH, + // SESSION SETTINGS: locale, charset, domain, path + 'de_CH.UTF-8@euro', 'admin', 'UTF-8', __DIR__ . '/includes/locale/', + // return array + [ + 'locale' => 'de_CH.UTF-8@euro', + 'lang' => 'de_CH', + 'domain' => 'admin', + 'encoding' => 'UTF-8', + 'path' => "/^\/(.*\/)?includes\/locale\/$/", + ], + ], + // missing session values check + // special parse session check for locales + 'session missing encoding, set from parameters' => [ + // lang, domain, encoding, path + self::SITE_LOCALE, self::SITE_DOMAIN, self::SITE_ENCODING, self::LOCALE_PATH, + // SESSION SETTINGS: locale, charset, domain, path + 'ja', null, 'admin', __DIR__ . '/locale_other/', + // return array + [ + 'locale' => 'ja', + 'lang' => 'ja', + 'domain' => 'admin', + 'encoding' => 'UTF-8', + 'path' => "/^\/(.*\/)?locale_other\/$/", + ], + ], + // null return check for invalid entries + 'no session set, only parameters, all invalid' => [ + // lang, domain, encoding, path + '###', '&&&&', '$$$$', 'foo_bar_path', + // SESSION SETTINGS: locale, charset, domain, path + null, null, null, null, + // return array + [ + 'locale' => null, + 'lang' => null, + 'domain' => null, + 'encoding' => null, + 'path' => null, + ], + ], + // invalid session names, fall backup + 'all session vars are invalid, fallback' => [ + // lang, domain, encoding, path + self::SITE_LOCALE, self::SITE_DOMAIN, self::SITE_ENCODING, self::LOCALE_PATH, + // SESSION SETTINGS: locale, charset, domain, path + '###', '&&&&', '$$$$', 'foo_bar_path', + // return array + [ + 'locale' => 'en_US.UTF-8', + 'lang' => 'en_US', + 'domain' => 'admin', + 'encoding' => 'UTF-8', + 'path' => "/^\/(.*\/)?includes\/locale\/$/", + ], + ], + ]; + } + + /** + * Undocumented function + * + * @covers ::setLocale + * @dataProvider setLocaleFromSessionProvider + * @testdox lang settings lang $language, domain $domain, encoding $encoding, path $path; session lang: $SESSION_DEFAULT_LOCALE, session char: $SESSION_DEFAULT_CHARSET [$_dataName] + * + * @param string| $language + * @param string| $domain + * @param string| $encoding + * @param string| $path + * @param string|null $SESSION_DEFAULT_LOCALE + * @param string|null $SESSION_DEFAULT_CHARSET + * @param string|null $SESSION_DEFAULT_DOMAIN + * @param string|null $SESSION_LOCALE_PATH + * @param array $expected + * @return void + */ + public function testsetLocaleFromSession( + string $language, + string $domain, + string $encoding, + string $path, + ?string $SESSION_DEFAULT_LOCALE, + ?string $SESSION_DEFAULT_CHARSET, + ?string $SESSION_DEFAULT_DOMAIN, + ?string $SESSION_LOCALE_PATH, + array $expected, + ): void { + $return_lang_settings = []; + global $_SESSION; + // set override + if ($SESSION_DEFAULT_LOCALE !== null) { + $_SESSION['DEFAULT_LOCALE'] = $SESSION_DEFAULT_LOCALE; + } + if ($SESSION_DEFAULT_CHARSET !== null) { + $_SESSION['DEFAULT_CHARSET'] = $SESSION_DEFAULT_CHARSET; + } + if ($SESSION_DEFAULT_DOMAIN !== null) { + $_SESSION['DEFAULT_DOMAIN'] = $SESSION_DEFAULT_DOMAIN; + } + if ($SESSION_LOCALE_PATH !== null) { + $_SESSION['LOCALE_PATH'] = $SESSION_LOCALE_PATH; + } + $return_lang_settings = \CoreLibs\Language\GetLocale::setLocaleFromSession( + $language, + $domain, + $encoding, + $path + ); + // print "RETURN: " . print_r($return_lang_settings, true) . "\n"; + foreach ( + [ + 'locale', 'lang', 'domain', 'encoding', 'path' + ] as $key + ) { + $value = $expected[$key]; + if ( + !empty($value) && + strpos($value, "/") === 0 + ) { + // this is regex + $this->assertMatchesRegularExpression( + $value, + $return_lang_settings[$key] ?? '', + 'assert regex failed for ' . $key + ); + } else { + // assert equal + $this->assertEquals( + $value, + $return_lang_settings[$key], + 'assert equal failed for ' . $key + ); + } + } + // unset all vars + $_SESSION = []; + unset($GLOBALS['OVERRIDE_LANG']); } } diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageL10nTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageL10nTest.php index 453e188e..ca1e0888 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageL10nTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Language/CoreLibsLanguageL10nTest.php @@ -84,94 +84,141 @@ final class CoreLibsLanguageL10nTest extends TestCase { return [ // 0: locale - // 1: domain - // 2: encoding + // 1: encoding + // 2: domain // 3: path // 4: locale expected // 5: locale set expected // 6: lang expected - // 7: encoding expected - // 8: domain exepcted - // 9: context (null for none) - // 10: test string in - // 11: test translated - // 12: deprecation message (until removed) + // 7: lang short expected + // 8: encoding expected + // 9: domain exepcted + // 10: context (null for none) + // 11: test string in + // 12: test translated + // 13: deprecation message (until removed) // new style load 'gettext load en' => [ 'en_US.UTF-8', + 'UTF-8', 'frontend', __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, - // + // 4, 5, 6, 7, 8, 9 'en_US.UTF-8', 'en_US', 'en_US', + 'en', 'UTF-8', 'frontend', + // 10 null, + // 11, 12 'Original', 'Translated frontend en_US', + // 13 null, ], 'gettext load en' => [ 'en_US.UTF-8', + 'UTF-8', 'frontend', __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, // 'en_US.UTF-8', 'en_US', 'en_US', + 'en', 'UTF-8', 'frontend', + // 'context', + // 'Original', 'Original context frontend en_US', + // null, ], 'gettext load ja' => [ 'ja_JP.UTF-8', + 'UTF-8', 'admin', __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, // 'ja_JP.UTF-8', 'ja_JP', 'ja_JP', + 'ja', 'UTF-8', 'admin', + // null, + // 'Original', 'Translated admin ja_JP', + // + null, + ], + // load short locale with different encoding + 'gettext load short ja no encoding' => [ + 'ja', + 'SJIS', + 'admin', + __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, + // + 'ja', + 'ja', + 'ja', + 'ja', + 'SJIS', + 'admin', + // + null, + // + 'Original', + 'Translated admin ja_JP', + // null, ], // mixed path and domain [DEPRECATED] 'mixed path and domain [DEPRECATED]' => [ 'en_US.UTF-8', + 'UTF-8', __DIR__ . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR, 'frontend', // 'en_US.UTF-8', 'en_US', 'en_US', + 'en', 'UTF-8', 'frontend', + // 'context', + // 'Original', 'Original context frontend en_US', + // 'L10n constructor parameter switch is no longer supported. domain is 2nd, path is 3rd parameter' ], // unset path 'unset path with locale and domain [DEPRECATED]' => [ 'ja_JP.UTF-8', + 'UTF-8', 'admin', null, // 'ja_JP.UTF-8', 'ja_JP', 'ja_JP', + 'ja', 'UTF-8', 'admin', + // null, + // 'Original', 'Translated admin ja_JP', + // 'Empty path parameter is no longer allowed if locale and domain are set', ], // null set @@ -179,15 +226,20 @@ final class CoreLibsLanguageL10nTest extends TestCase '', '', '', + '', // '', '', '', '', + '', // unset on empty call '', + // null, + // 'Original', 'Original', + // null, ] ]; @@ -201,11 +253,13 @@ final class CoreLibsLanguageL10nTest extends TestCase * @testdox check l10n init with Locale $locale, Path $path, Domain $domain, Legacy: $legacy with $context [$_dataName] * * @param string|null $locale + * @param string|null $encoding * @param string|null $domain * @param string|null $path * @param string $locale_expected * @param string $locale_set_expected * @param string $lang_expected + * @param string $lang_short_expected * @param string $encoding_expected * @param string $domain_expected * @param string|null $context @@ -216,11 +270,13 @@ final class CoreLibsLanguageL10nTest extends TestCase */ public function testL10nObject( ?string $locale, + ?string $encoding, ?string $domain, ?string $path, string $locale_expected, string $locale_set_expected, string $lang_expected, + string $lang_short_expected, string $encoding_expected, string $domain_expected, ?string $context, @@ -241,16 +297,18 @@ final class CoreLibsLanguageL10nTest extends TestCase if ($locale === null) { $l10n = new \CoreLibs\Language\L10n(); } elseif ($domain === null) { - // same as if locale is null + // deprecated, locale + domain must be set, handled like empty calls $l10n = new \CoreLibs\Language\L10n($locale); } elseif ($path === null) { - // deprecated, path must be set + // deprecated, path must be set, will thow DEPRECATION error, handled like empty $l10n = new \CoreLibs\Language\L10n($locale, $domain); - } else { + } elseif ($encoding === null) { + // if encoding not found will be UTF-8 $l10n = new \CoreLibs\Language\L10n($locale, $domain, $path); + } else { + $l10n = new \CoreLibs\Language\L10n($locale, $domain, $path, $encoding); } restore_error_handler(); - // print "LOC: " . $locale . ", " . $l10n->getLocale() . ", " . $locale_expected . "\n"; // print "MO: " . $l10n->getMoFile() . "\n"; $this->assertEquals( $locale_expected, @@ -286,6 +344,7 @@ final class CoreLibsLanguageL10nTest extends TestCase [ 'locale' => $locale_expected, 'lang' => $lang_expected, + 'lang_short' => $lang_short_expected, 'domain' => $domain_expected, 'encoding' => $encoding_expected, 'path' => $path diff --git a/www/vendor/gullevek/dotenv/Readme.md b/www/vendor/gullevek/dotenv/Readme.md new file mode 100644 index 00000000..56a498f6 --- /dev/null +++ b/www/vendor/gullevek/dotenv/Readme.md @@ -0,0 +1,78 @@ +# dotenv: readEnvFile() + +A simple implementation of + +This is not a functional replacement, but a very simple implementation of the basic functions. + +It is recommended to create a `.env.example` example file that is checked into the +repository. The `.env` should *NEVER* be checked into anything + +## How to install + +`composer require gullevek/dotEnv` + +## Run it + +Create a `.env` file in the current folder. +Create a file like below + +```php +require '../vendor/autoload.php'; +gullevek\dotEnv\DotEnv::readEnvFile(__DIR__); +``` + +All data will be in the `$_ENV` array + +## How it works + +Put the function where it is needed or put it in a file and load it. + +if not parameter is given it will use `__DIR__` as base path. +Second parameter is file name override. Default is `.env` + +Data is loaded into _ENV only. + +If there is already an entry in _ENV then it will not be overwritten. + +## .env file example + +A valid entry has to start with an alphanumeric string, underscores are allowed and +then have an equal sign (=). After the equal sign the data block starts. Data can be +quoted with double quotes (") and if this is done can stretch over multiple lines. +The openeing double quote must be on the same lign as the requal sign (=). If double +quoted (") charcters are used it will read each line until another double quote (") +character is found. Everything after that is ignored. + +Any spaces before the variable or before and after the equal sign (=) are ignored. + +Line is read until `PHP_EOL`. So any trailing spaces are read too. + +Any line that is not valid is ignored. + +```ini +# this line is ignored +SOMETHING=A +OTHER="A B C" +MULTI_LINE="1 2 3 +4 5 6 +7 8 9" ; and this is ignored +ESCAPE="String \" inside \" other " +DOUBLE="I will be used" +DOUBLE="This will be ignored" +``` + +## Development + +### Phan + +`vendor/bin/phan --analyze-twice` + +### PHPstan + +`vendor/bin/phpstan` + +### PHPUnit + +Unit tests have to be run from base folder with + +`vendor/bin/phpunit test/phpUnitTests/` diff --git a/www/vendor/gullevek/dotenv/composer.json b/www/vendor/gullevek/dotenv/composer.json new file mode 100644 index 00000000..7d8298c4 --- /dev/null +++ b/www/vendor/gullevek/dotenv/composer.json @@ -0,0 +1,33 @@ +{ + "name": "gullevek/dotenv", + "description": "Simple .env file processing and storing in _ENV array", + "keywords": [".env", "dotenv", "_ENV", "environment variables"], + "type": "library", + "license": "MIT", + "autoload": { + "psr-4": { + "gullevek\\dotEnv\\": "src/", + "gullevek\\dotenv\\": "src/" + } + }, + "authors": [ + { + "name": "Clemens Schwaighofer", + "email": "gullevek@gullevek.org", + "homepage": "http://gullevek.org" + } + ], + "homepage": "https://github.com/gullevek/dotEnv", + "minimum-stability": "dev", + "require": { + "php": ">=7.4.0" + }, + "archive": { + "exclude": ["/test/", "/test/*", "/phpstan.neon", "/psalm.xml", "/.phan/", "/.vscode/", "/phpunit.xml"] + }, + "require-dev": { + "phpunit/phpunit": "^9", + "phpstan/phpstan": "^1.10", + "phan/phan": "^5.4" + } +} diff --git a/www/vendor/gullevek/dotenv/src/DotEnv.php b/www/vendor/gullevek/dotenv/src/DotEnv.php new file mode 100644 index 00000000..6dd878ca --- /dev/null +++ b/www/vendor/gullevek/dotenv/src/DotEnv.php @@ -0,0 +1,110 @@ + abort + if (!is_file($env_file_target)) { + $status = 3; + return $status; + } + // cannot open file -> abort + if (!is_readable($env_file_target)) { + $status = 2; + return $status; + } + // open file + if (($fp = fopen($env_file_target, 'r')) === false) { + $status = 2; + return $status; + } + // set to readable but not yet any data loaded + $status = 1; + $block = false; + $var = ''; + while ($line = fgets($fp)) { + // main match for variable = value part + if (preg_match("/^\s*([\w_.]+)\s*=\s*((\"?).*)/", $line, $matches)) { + $var = $matches[1]; + $value = $matches[2]; + $quotes = $matches[3]; + // write only if env is not set yet, and write only the first time + if (empty($_ENV[$var])) { + if (!empty($quotes)) { + // match greedy for first to last so we move any " if there are + if (preg_match('/^"(.*[^\\\])"/U', $value, $matches)) { + $value = $matches[1]; + } else { + // this is a multi line + $block = true; + // first " in string remove + // add removed new line back because this is a multi line + $value = ltrim($value, '"') . PHP_EOL; + } + } else { + // strip any quotes at end for unquoted single line + // an right hand spaces are removed too + $value = false !== ($pos = strpos($value, self::COMMENT_CHAR)) ? + rtrim(substr($value, 0, $pos)) : $value; + } + // if block is set, we strip line of slashes + $_ENV[$var] = $block === true ? stripslashes($value) : $value; + // set successful load + $status = 0; + } + } elseif ($block === true) { + // read line until there is a unescaped " + // this also strips everything after the last " + if (preg_match("/(.*[^\\\])\"/", $line, $matches)) { + $block = false; + // strip ending " and EVERYTHING that follows after that + $line = $matches[1]; + } + // just be sure it is init before we fill + if (!isset($_ENV[$var])) { + $_ENV[$var] = ''; + } + // strip line of slashes + $_ENV[$var] .= stripslashes($line); + } + } + fclose($fp); + return $status; + } +} + +// __END__