From b402846d43f7ed2c01f1a217d6cf74f0df246023 Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 21 Jun 2018 02:17:31 +0900 Subject: [PATCH] =?UTF-8?q?PHP=207.2=20=EB=B2=84=EC=A0=84=EC=9A=A9?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=98=AC=EB=A6=BC!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +- composer.json | 2 +- composer.lock | 203 ++++------------ composer.phar | Bin 1861877 -> 1849094 bytes vendor/composer/autoload_classmap.php | 7 - vendor/composer/autoload_files.php | 2 - vendor/composer/autoload_namespaces.php | 1 - vendor/composer/autoload_psr4.php | 2 +- vendor/composer/autoload_static.php | 25 +- vendor/composer/installed.json | 215 +++++------------ vendor/guzzlehttp/guzzle/CHANGELOG.md | 5 + vendor/guzzlehttp/guzzle/composer.json | 2 +- vendor/guzzlehttp/guzzle/src/Client.php | 2 +- .../guzzlehttp/guzzle/src/ClientInterface.php | 2 +- .../guzzle/src/Cookie/SetCookie.php | 4 +- vendor/guzzlehttp/guzzle/src/Middleware.php | 2 +- vendor/leafo/scssphp/example/Server.php | 10 +- vendor/leafo/scssphp/src/Compiler.php | 21 +- vendor/leafo/scssphp/src/Parser.php | 15 ++ vendor/leafo/scssphp/src/Version.php | 2 +- vendor/paragonie/random_compat/LICENSE | 22 -- vendor/paragonie/random_compat/build-phar.sh | 5 - vendor/paragonie/random_compat/composer.json | 37 --- .../dist/random_compat.phar.pubkey | 5 - .../dist/random_compat.phar.pubkey.asc | 11 - .../random_compat/lib/byte_safe_strings.php | 181 -------------- .../random_compat/lib/cast_to_int.php | 75 ------ .../random_compat/lib/error_polyfill.php | 49 ---- vendor/paragonie/random_compat/lib/random.php | 225 ------------------ .../lib/random_bytes_com_dotnet.php | 88 ------- .../lib/random_bytes_dev_urandom.php | 167 ------------- .../lib/random_bytes_libsodium.php | 88 ------- .../lib/random_bytes_libsodium_legacy.php | 92 ------- .../random_compat/lib/random_bytes_mcrypt.php | 77 ------ .../random_compat/lib/random_int.php | 190 --------------- .../random_compat/other/build_phar.php | 57 ----- .../random_compat/psalm-autoload.php | 9 - vendor/paragonie/random_compat/psalm.xml | 18 -- vendor/php-extended/php-system/composer.json | 6 +- vendor/php-extended/php-tail/composer.json | 6 +- vendor/symfony/lock/Key.php | 32 +-- vendor/symfony/lock/Lock.php | 21 +- vendor/symfony/lock/LockInterface.php | 18 +- vendor/symfony/lock/Store/FlockStore.php | 8 +- vendor/symfony/lock/Store/MemcachedStore.php | 8 +- vendor/symfony/lock/Store/RedisStore.php | 14 +- .../symfony/lock/Store/RetryTillSaveStore.php | 2 +- vendor/symfony/lock/Store/SemaphoreStore.php | 26 +- vendor/symfony/lock/Tests/LockTest.php | 14 ++ .../Tests/Store/BlockingStoreTestTrait.php | 7 +- .../lock/Tests/Store/SemaphoreStoreTest.php | 4 - vendor/symfony/lock/composer.json | 5 +- vendor/symfony/polyfill-php70/LICENSE | 19 -- vendor/symfony/polyfill-php70/Php70.php | 74 ------ vendor/symfony/polyfill-php70/README.md | 28 --- .../Resources/stubs/ArithmeticError.php | 5 - .../Resources/stubs/AssertionError.php | 5 - .../Resources/stubs/DivisionByZeroError.php | 5 - .../polyfill-php70/Resources/stubs/Error.php | 5 - .../Resources/stubs/ParseError.php | 5 - ...SessionUpdateTimestampHandlerInterface.php | 23 -- .../Resources/stubs/TypeError.php | 5 - vendor/symfony/polyfill-php70/bootstrap.php | 27 --- vendor/symfony/polyfill-php70/composer.json | 33 --- vendor/vlucas/valitron/README.md | 14 ++ vendor/vlucas/valitron/composer.json | 16 +- vendor/vlucas/valitron/lang/lt.php | 33 +++ vendor/vlucas/valitron/lang/sv.php | 34 +++ vendor/vlucas/valitron/lang/zh-cn.php | 7 +- .../valitron/src/Valitron/Validator.php | 59 ++++- 70 files changed, 377 insertions(+), 2115 deletions(-) delete mode 100644 vendor/paragonie/random_compat/LICENSE delete mode 100644 vendor/paragonie/random_compat/build-phar.sh delete mode 100644 vendor/paragonie/random_compat/composer.json delete mode 100644 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey delete mode 100644 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc delete mode 100644 vendor/paragonie/random_compat/lib/byte_safe_strings.php delete mode 100644 vendor/paragonie/random_compat/lib/cast_to_int.php delete mode 100644 vendor/paragonie/random_compat/lib/error_polyfill.php delete mode 100644 vendor/paragonie/random_compat/lib/random.php delete mode 100644 vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php delete mode 100644 vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php delete mode 100644 vendor/paragonie/random_compat/lib/random_bytes_libsodium.php delete mode 100644 vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php delete mode 100644 vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php delete mode 100644 vendor/paragonie/random_compat/lib/random_int.php delete mode 100644 vendor/paragonie/random_compat/other/build_phar.php delete mode 100644 vendor/paragonie/random_compat/psalm-autoload.php delete mode 100644 vendor/paragonie/random_compat/psalm.xml delete mode 100644 vendor/symfony/polyfill-php70/LICENSE delete mode 100644 vendor/symfony/polyfill-php70/Php70.php delete mode 100644 vendor/symfony/polyfill-php70/README.md delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.php delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/Error.php delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/ParseError.php delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php delete mode 100644 vendor/symfony/polyfill-php70/Resources/stubs/TypeError.php delete mode 100644 vendor/symfony/polyfill-php70/bootstrap.php delete mode 100644 vendor/symfony/polyfill-php70/composer.json create mode 100644 vendor/vlucas/valitron/lang/lt.php create mode 100644 vendor/vlucas/valitron/lang/sv.php diff --git a/README.md b/README.md index a2107f3a..ebd7e77f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ * Apache2 * mpm_event 권장 -* PHP 7.0 이상 +* PHP 7.2 이상 * php-fpm 권장 * php에서 curl을 실행가능해야 합니다. * MySQL 5.6 이상, 또는 MariaDB 10.0 이상 @@ -32,13 +32,13 @@ sudo -u www-data git clone ssh://git@storage.hided.net:2525/devsam/core.git git clone ssh://git@storage.hided.net:2525/devsam/image.git ``` -> 이미지는 별도의 업데이트 기능을 제공하지 않습니다. 수동으로 git pull을 해야합니다. +> 이미지는 git hook을 이용한 업데이트 기능을 제공하지만 아직 범용성 있는 설계가 되어있진 않습니다. ### 설치 이후 해당 경로를 웹 브라우저를 통해 접근하여 설치를 진행할 수 있습니다. -Database 수는 로그인 관리 서버 1개, 내부 서버 5개로, 총 6개의 Database가 필요합니다. 내부 설정을 고쳐서 서버 수를 늘리거나 줄일 경우 그에 맞는 Database 수가 필요합니다. 또한 Database마다 관리할 별도의 계정을 만드는 것을 추천합니다. +Database 수는 로그인 관리 서버 1개, 내부 서버 7개로, 총 8개의 Database가 필요합니다. 내부 설정을 고쳐서 서버 수를 늘리거나 줄일 경우 그에 맞는 Database 수가 필요합니다. 또한 Database마다 관리할 별도의 계정을 만드는 것을 추천합니다. 설치 이후에는 서버관리 페이지에서 **업데이트** 명령을 통해 원 클릭 업데이트가 가능합니다. diff --git a/composer.json b/composer.json index ea4ebc53..9e01db8e 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "vlucas/valitron": "^1.4", "php-extended/php-tail": "^2.1", "pguardiario/phpuri": "^1.0", - "symfony/lock": "^3.4" + "symfony/lock": "^4.1" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 5ce4f436..aaf17568 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a329d39be5161c87438d41f9adf4417b", + "content-hash": "1414d4ab0c85125f75e200bf7231489d", "packages": [ { "name": "brandonwamboldt/utilphp", @@ -90,16 +90,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.2", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90" + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { @@ -109,7 +109,7 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", "psr/log": "^1.0" }, "suggest": { @@ -151,7 +151,7 @@ "rest", "web service" ], - "time": "2018-03-26T16:33:04+00:00" + "time": "2018-04-22T15:46:56+00:00" }, { "name": "guzzlehttp/promises", @@ -271,16 +271,16 @@ }, { "name": "leafo/scssphp", - "version": "v0.7.5", + "version": "v0.7.6", "source": { "type": "git", "url": "https://github.com/leafo/scssphp.git", - "reference": "8b538d828bbb75276974605c4a1a435e939da74e" + "reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/leafo/scssphp/zipball/8b538d828bbb75276974605c4a1a435e939da74e", - "reference": "8b538d828bbb75276974605c4a1a435e939da74e", + "url": "https://api.github.com/repos/leafo/scssphp/zipball/585f6ae84de62ffecf69c23805f25d78d7e4b794", + "reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794", "shasum": "" }, "require": { @@ -319,7 +319,7 @@ "scss", "stylesheet" ], - "time": "2018-02-09T02:04:21+00:00" + "time": "2018-05-24T02:18:53+00:00" }, { "name": "league/plates", @@ -454,54 +454,6 @@ ], "time": "2017-06-19T01:22:40+00:00" }, - { - "name": "paragonie/random_compat", - "version": "v2.0.12", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "pseudorandom", - "random" - ], - "time": "2018-04-04T21:24:14+00:00" - }, { "name": "pguardiario/phpuri", "version": "1.0", @@ -528,16 +480,16 @@ }, { "name": "php-extended/php-system", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/php-extended/php-system.git", - "reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c" + "url": "https://gitlab.com/php-extended/php-system.git", + "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-extended/php-system/zipball/66727d5dc0a665916bd7e08bcfb9820e7be1d20c", - "reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c", + "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0", + "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0", "shasum": "" }, "type": "library", @@ -553,31 +505,31 @@ "authors": [ { "name": "Anastaszor", - "role": "developer" + "role": "Developer" } ], "description": "A generic way to find informations about the running system", - "homepage": "https://github.com/php-extended/php-system", + "homepage": "https://gitlab.com/php-extended/php-system", "keywords": [ "operating system", "os", "php", "system" ], - "time": "2017-01-14T11:56:24+00:00" + "time": "2018-06-07T06:03:27+00:00" }, { "name": "php-extended/php-tail", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/php-extended/php-tail.git", - "reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7" + "url": "https://gitlab.com/php-extended/php-tail.git", + "reference": "19fbd3a79ccc071954f28296b2c44754335304a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-extended/php-tail/zipball/eabf7bee64f8c30fe9b9e1176562fdb903c54ae7", - "reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7", + "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0", + "reference": "19fbd3a79ccc071954f28296b2c44754335304a0", "shasum": "" }, "require": { @@ -596,11 +548,11 @@ "authors": [ { "name": "Anastaszor", - "role": "developer" + "role": "Developer" } ], "description": "A smart way to tail files depending of the environment", - "homepage": "https://github.com/php-extended/php-tail", + "homepage": "https://gitlab.com/php-extended/php-tail", "keywords": [ "cheat", "mighty", @@ -608,7 +560,7 @@ "php", "tail" ], - "time": "2017-07-25T13:52:42+00:00" + "time": "2018-06-07T06:04:58+00:00" }, { "name": "psr/http-message", @@ -752,22 +704,21 @@ }, { "name": "symfony/lock", - "version": "v3.4.9", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "3a707193326d31603824706e34a95af899a59788" + "reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/3a707193326d31603824706e34a95af899a59788", - "reference": "3a707193326d31603824706e34a95af899a59788", + "url": "https://api.github.com/repos/symfony/lock/zipball/a1df50492e927ad00ca271f29adb2949a14f2a5a", + "reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/polyfill-php70": "~1.0" + "php": "^7.1.3", + "psr/log": "~1.0" }, "require-dev": { "predis/predis": "~1.0" @@ -775,7 +726,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -810,96 +761,40 @@ "redlock", "semaphore" ], - "time": "2018-04-29T14:44:26+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" + "time": "2018-05-30T07:26:09+00:00" }, { "name": "vlucas/valitron", - "version": "v1.4.2", + "version": "v1.4.3", "source": { "type": "git", "url": "https://github.com/vlucas/valitron.git", - "reference": "87775d76268beda2afa085bdd6e44b17e98907c6" + "reference": "3c5463315bfa23b17f8949b100a960d035234e43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/valitron/zipball/87775d76268beda2afa085bdd6e44b17e98907c6", - "reference": "87775d76268beda2afa085bdd6e44b17e98907c6", + "url": "https://api.github.com/repos/vlucas/valitron/zipball/3c5463315bfa23b17f8949b100a960d035234e43", + "reference": "3c5463315bfa23b17f8949b100a960d035234e43", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5" + }, + "suggest": { + "ext-mbstring": "It can support the multiple bytes string length." }, "type": "library", "autoload": { - "psr-0": { - "Valitron": "src/" + "psr-4": { + "Valitron\\": "src/Valitron" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "authors": [ { @@ -915,7 +810,7 @@ "validation", "validator" ], - "time": "2017-10-30T23:15:06+00:00" + "time": "2018-05-06T10:45:26+00:00" } ], "packages-dev": [], diff --git a/composer.phar b/composer.phar index 041775a1274ffc0a74952eec9ceedfc062644408..4055d874a1a1f195c0a08966e4e0e9dbaaf0a5e0 100644 GIT binary patch delta 28746 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 delta 41359 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 eb!(lq1Zm^ftF;>7(6@Q;tDfFpAn#-`>K5h~ zGwig05TRM@_FL;_?`%R_Wm3fUAi{J=Fq7?D%>fE?EenHE-_y9i^c(NKk-q%pU;ffx zdHKoT`;$NYP5!H2`p $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php', - 'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php', 'DB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'DBHelper' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'DBTransaction' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', - 'DivisionByZeroError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php', - 'Error' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/Error.php', 'FB' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/fb.php', 'FirePHP' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php', 'MeekroDB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBEval' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBException' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', - 'ParseError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ParseError.php', - 'SessionUpdateTimestampHandlerInterface' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php', - 'TypeError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/TypeError.php', 'WhereClause' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'kakao\\KakaoKey' => $baseDir . '/d_setting/KakaoKey.php', 'sammo\\RootDB' => $baseDir . '/d_setting/RootDB.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 350100b3..325499f6 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -6,10 +6,8 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - '5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php', 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', - '023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', '5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php', '870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php', diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index fef8e6b2..bf34e7c9 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -7,5 +7,4 @@ $baseDir = dirname($vendorDir); return array( 'utilphp\\' => array($vendorDir . '/brandonwamboldt/utilphp/src'), - 'Valitron' => array($vendorDir . '/vlucas/valitron/src'), ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index c11d2d90..720e426f 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -8,7 +8,7 @@ $baseDir = dirname($vendorDir); return array( 'sammo\\' => array($baseDir . '/src/sammo'), 'kakao\\' => array($baseDir . '/src/kakao'), - 'Symfony\\Polyfill\\Php70\\' => array($vendorDir . '/symfony/polyfill-php70'), + 'Valitron\\' => array($vendorDir . '/vlucas/valitron/src/Valitron'), 'Symfony\\Component\\Lock\\' => array($vendorDir . '/symfony/lock'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 0811ecbf..29fea1b1 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -7,10 +7,8 @@ namespace Composer\Autoload; class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a { public static $files = array ( - '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php', 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', - '023d27dca8066ef29e6739335ea73bad' => __DIR__ . '/..' . '/symfony/polyfill-php70/bootstrap.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', '5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php', '870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php', @@ -25,9 +23,12 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a array ( 'kakao\\' => 6, ), + 'V' => + array ( + 'Valitron\\' => 9, + ), 'S' => array ( - 'Symfony\\Polyfill\\Php70\\' => 23, 'Symfony\\Component\\Lock\\' => 23, ), 'P' => @@ -63,9 +64,9 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a array ( 0 => __DIR__ . '/../..' . '/src/kakao', ), - 'Symfony\\Polyfill\\Php70\\' => + 'Valitron\\' => array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php70', + 0 => __DIR__ . '/..' . '/vlucas/valitron/src/Valitron', ), 'Symfony\\Component\\Lock\\' => array ( @@ -121,31 +122,17 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a 0 => __DIR__ . '/..' . '/brandonwamboldt/utilphp/src', ), ), - 'V' => - array ( - 'Valitron' => - array ( - 0 => __DIR__ . '/..' . '/vlucas/valitron/src', - ), - ), ); public static $classMap = array ( - 'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php', - 'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php', 'DB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'DBHelper' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'DBTransaction' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', - 'DivisionByZeroError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php', - 'Error' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/Error.php', 'FB' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/fb.php', 'FirePHP' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php', 'MeekroDB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBEval' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBException' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', - 'ParseError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ParseError.php', - 'SessionUpdateTimestampHandlerInterface' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php', - 'TypeError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/TypeError.php', 'WhereClause' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'kakao\\KakaoKey' => __DIR__ . '/../..' . '/d_setting/KakaoKey.php', 'sammo\\RootDB' => __DIR__ . '/../..' . '/d_setting/RootDB.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 5c44110b..b9f77723 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -87,17 +87,17 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.2", - "version_normalized": "6.3.2.0", + "version": "6.3.3", + "version_normalized": "6.3.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90" + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { @@ -107,13 +107,13 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", "psr/log": "^1.0" }, "suggest": { "psr/log": "Required for using the Log middleware" }, - "time": "2018-03-26T16:33:04+00:00", + "time": "2018-04-22T15:46:56+00:00", "type": "library", "extra": { "branch-alias": { @@ -274,17 +274,17 @@ }, { "name": "leafo/scssphp", - "version": "v0.7.5", - "version_normalized": "0.7.5.0", + "version": "v0.7.6", + "version_normalized": "0.7.6.0", "source": { "type": "git", "url": "https://github.com/leafo/scssphp.git", - "reference": "8b538d828bbb75276974605c4a1a435e939da74e" + "reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/leafo/scssphp/zipball/8b538d828bbb75276974605c4a1a435e939da74e", - "reference": "8b538d828bbb75276974605c4a1a435e939da74e", + "url": "https://api.github.com/repos/leafo/scssphp/zipball/585f6ae84de62ffecf69c23805f25d78d7e4b794", + "reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794", "shasum": "" }, "require": { @@ -294,7 +294,7 @@ "phpunit/phpunit": "~4.6", "squizlabs/php_codesniffer": "~2.5" }, - "time": "2018-02-09T02:04:21+00:00", + "time": "2018-05-24T02:18:53+00:00", "bin": [ "bin/pscss" ], @@ -463,56 +463,6 @@ "psr-3" ] }, - { - "name": "paragonie/random_compat", - "version": "v2.0.12", - "version_normalized": "2.0.12.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "time": "2018-04-04T21:24:14+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "lib/random.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "pseudorandom", - "random" - ] - }, { "name": "pguardiario/phpuri", "version": "1.0", @@ -541,20 +491,20 @@ }, { "name": "php-extended/php-system", - "version": "1.3.0", - "version_normalized": "1.3.0.0", + "version": "1.4.0", + "version_normalized": "1.4.0.0", "source": { "type": "git", - "url": "https://github.com/php-extended/php-system.git", - "reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c" + "url": "https://gitlab.com/php-extended/php-system.git", + "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-extended/php-system/zipball/66727d5dc0a665916bd7e08bcfb9820e7be1d20c", - "reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c", + "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0", + "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0", "shasum": "" }, - "time": "2017-01-14T11:56:24+00:00", + "time": "2018-06-07T06:03:27+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -569,11 +519,11 @@ "authors": [ { "name": "Anastaszor", - "role": "developer" + "role": "Developer" } ], "description": "A generic way to find informations about the running system", - "homepage": "https://github.com/php-extended/php-system", + "homepage": "https://gitlab.com/php-extended/php-system", "keywords": [ "operating system", "os", @@ -583,23 +533,23 @@ }, { "name": "php-extended/php-tail", - "version": "2.1.1", - "version_normalized": "2.1.1.0", + "version": "2.2.0", + "version_normalized": "2.2.0.0", "source": { "type": "git", - "url": "https://github.com/php-extended/php-tail.git", - "reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7" + "url": "https://gitlab.com/php-extended/php-tail.git", + "reference": "19fbd3a79ccc071954f28296b2c44754335304a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-extended/php-tail/zipball/eabf7bee64f8c30fe9b9e1176562fdb903c54ae7", - "reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7", + "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0", + "reference": "19fbd3a79ccc071954f28296b2c44754335304a0", "shasum": "" }, "require": { "php-extended/php-system": "^1.2" }, - "time": "2017-07-25T13:52:42+00:00", + "time": "2018-06-07T06:04:58+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -614,11 +564,11 @@ "authors": [ { "name": "Anastaszor", - "role": "developer" + "role": "Developer" } ], "description": "A smart way to tail files depending of the environment", - "homepage": "https://github.com/php-extended/php-tail", + "homepage": "https://gitlab.com/php-extended/php-tail", "keywords": [ "cheat", "mighty", @@ -775,32 +725,31 @@ }, { "name": "symfony/lock", - "version": "v3.4.9", - "version_normalized": "3.4.9.0", + "version": "v4.1.0", + "version_normalized": "4.1.0.0", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "3a707193326d31603824706e34a95af899a59788" + "reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/3a707193326d31603824706e34a95af899a59788", - "reference": "3a707193326d31603824706e34a95af899a59788", + "url": "https://api.github.com/repos/symfony/lock/zipball/a1df50492e927ad00ca271f29adb2949a14f2a5a", + "reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/polyfill-php70": "~1.0" + "php": "^7.1.3", + "psr/log": "~1.0" }, "require-dev": { "predis/predis": "~1.0" }, - "time": "2018-04-29T14:44:26+00:00", + "time": "2018-05-30T07:26:09+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "installation-source": "dist", @@ -837,99 +786,41 @@ "semaphore" ] }, - { - "name": "symfony/polyfill-php70", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0", - "php": ">=5.3.3" - }, - "time": "2018-04-26T10:06:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, { "name": "vlucas/valitron", - "version": "v1.4.2", - "version_normalized": "1.4.2.0", + "version": "v1.4.3", + "version_normalized": "1.4.3.0", "source": { "type": "git", "url": "https://github.com/vlucas/valitron.git", - "reference": "87775d76268beda2afa085bdd6e44b17e98907c6" + "reference": "3c5463315bfa23b17f8949b100a960d035234e43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/valitron/zipball/87775d76268beda2afa085bdd6e44b17e98907c6", - "reference": "87775d76268beda2afa085bdd6e44b17e98907c6", + "url": "https://api.github.com/repos/vlucas/valitron/zipball/3c5463315bfa23b17f8949b100a960d035234e43", + "reference": "3c5463315bfa23b17f8949b100a960d035234e43", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5" }, - "time": "2017-10-30T23:15:06+00:00", + "suggest": { + "ext-mbstring": "It can support the multiple bytes string length." + }, + "time": "2018-05-06T10:45:26+00:00", "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "Valitron": "src/" + "psr-4": { + "Valitron\\": "src/Valitron" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "authors": [ { diff --git a/vendor/guzzlehttp/guzzle/CHANGELOG.md b/vendor/guzzlehttp/guzzle/CHANGELOG.md index 25fcbb3e..17badd75 100644 --- a/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 6.3.3 - 2018-04-22 + +* Fix: Default headers when decode_content is specified + + ## 6.3.2 - 2018-03-26 * Fix: Release process diff --git a/vendor/guzzlehttp/guzzle/composer.json b/vendor/guzzlehttp/guzzle/composer.json index 0ebf81e0..1f328e30 100644 --- a/vendor/guzzlehttp/guzzle/composer.json +++ b/vendor/guzzlehttp/guzzle/composer.json @@ -19,7 +19,7 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", "psr/log": "^1.0" }, "autoload": { diff --git a/vendor/guzzlehttp/guzzle/src/Client.php b/vendor/guzzlehttp/guzzle/src/Client.php index 6b35d892..80417918 100644 --- a/vendor/guzzlehttp/guzzle/src/Client.php +++ b/vendor/guzzlehttp/guzzle/src/Client.php @@ -331,7 +331,7 @@ class Client implements ClientInterface && $options['decode_content'] !== true ) { // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $modify['set_headers']); + $options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $options['_conditional']); $modify['set_headers']['Accept-Encoding'] = $options['decode_content']; } diff --git a/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 8de39166..2dbcffa4 100644 --- a/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -12,7 +12,7 @@ use Psr\Http\Message\UriInterface; */ interface ClientInterface { - const VERSION = '6.3.2'; + const VERSION = '6.3.3'; /** * Send an HTTP request. diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php index 4c404077..f6993943 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -377,8 +377,8 @@ class SetCookie // Check if any of the invalid characters are present in the cookie name if (preg_match( '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/', - $name) - ) { + $name + )) { return 'Cookie name must not contain invalid characters: ASCII ' . 'Control characters (0-31;127), space, tab and the ' . 'following characters: ()<>@,;:\"/?={}'; diff --git a/vendor/guzzlehttp/guzzle/src/Middleware.php b/vendor/guzzlehttp/guzzle/src/Middleware.php index 6c33eec4..d4ad75c9 100644 --- a/vendor/guzzlehttp/guzzle/src/Middleware.php +++ b/vendor/guzzlehttp/guzzle/src/Middleware.php @@ -73,7 +73,7 @@ final class Middleware /** * Middleware that pushes history data to an ArrayAccess container. * - * @param array $container Container to hold the history (by reference). + * @param array|\ArrayAccess $container Container to hold the history (by reference). * * @return callable Returns a function that accepts the next handler. * @throws \InvalidArgumentException if container is not an array or ArrayAccess. diff --git a/vendor/leafo/scssphp/example/Server.php b/vendor/leafo/scssphp/example/Server.php index a8dc0457..6ea97018 100644 --- a/vendor/leafo/scssphp/example/Server.php +++ b/vendor/leafo/scssphp/example/Server.php @@ -207,7 +207,7 @@ class Server $elapsed = round((microtime(true) - $start), 4); $v = Version::VERSION; - $t = date('r'); + $t = gmdate('r'); $css = "/* compiled by scssphp $v on $t (${elapsed}s) */\n\n" . $css; $etag = md5($css); @@ -329,7 +329,7 @@ class Server try { list($css, $etag) = $this->compile($input, $output); - $lastModified = gmdate('D, d M Y H:i:s', filemtime($output)) . ' GMT'; + $lastModified = gmdate('r', filemtime($output)); header('Last-Modified: ' . $lastModified); header('Content-type: text/css'); @@ -371,7 +371,7 @@ class Server return; } - $lastModified = gmdate('D, d M Y H:i:s', $mtime) . ' GMT'; + $lastModified = gmdate('r', $mtime); header('Last-Modified: ' . $lastModified); echo file_get_contents($output); @@ -510,8 +510,6 @@ class Server $this->scss = $scss; $this->showErrorsAsCSS = false; - if (! ini_get('date.timezone')) { - throw new ServerException('Default date.timezone not set'); - } + date_default_timezone_set('UTC'); } } diff --git a/vendor/leafo/scssphp/src/Compiler.php b/vendor/leafo/scssphp/src/Compiler.php index 292e960e..72df991e 100644 --- a/vendor/leafo/scssphp/src/Compiler.php +++ b/vendor/leafo/scssphp/src/Compiler.php @@ -316,9 +316,16 @@ class Compiler $out->parent = $this->scope; $out->selectors = $selectors; $out->depth = $this->env->depth; - $out->sourceName = $this->env->block->sourceName; - $out->sourceLine = $this->env->block->sourceLine; - $out->sourceColumn = $this->env->block->sourceColumn; + + if ($this->env->block instanceof Block) { + $out->sourceName = $this->env->block->sourceName; + $out->sourceLine = $this->env->block->sourceLine; + $out->sourceColumn = $this->env->block->sourceColumn; + } else { + $out->sourceName = null; + $out->sourceLine = null; + $out->sourceColumn = null; + } return $out; } @@ -2694,7 +2701,9 @@ class Compiler $b = round($b); if (count($value) === 5 && $value[4] !== 1) { // rgba - return 'rgba(' . $r . ', ' . $g . ', ' . $b . ', ' . $value[4] . ')'; + $a = new Node\Number($value[4], ''); + + return 'rgba(' . $r . ', ' . $g . ', ' . $b . ', ' . $a . ')'; } $h = sprintf('#%02x%02x%02x', $r, $g, $b); @@ -4331,7 +4340,7 @@ class Compiler protected function libRgba($args) { if ($color = $this->coerceColor($args[0])) { - $num = ! isset($args[1]) ? $args[3] : $args[1]; + $num = isset($args[3]) ? $args[3] : $args[1]; $alpha = $this->assertNumber($num); $color[4] = $alpha; @@ -4526,7 +4535,7 @@ class Compiler ]; if ($firstAlpha != 1.0 || $secondAlpha != 1.0) { - $new[] = $firstAlpha * $weight + $secondAlpha * ($weight - 1); + $new[] = $firstAlpha * $weight + $secondAlpha * (1 - $weight); } return $this->fixColor($new); diff --git a/vendor/leafo/scssphp/src/Parser.php b/vendor/leafo/scssphp/src/Parser.php index 6fdea3e2..de86f094 100644 --- a/vendor/leafo/scssphp/src/Parser.php +++ b/vendor/leafo/scssphp/src/Parser.php @@ -1302,6 +1302,21 @@ class Parser { $s = $this->seek(); + if ($this->literal('url(') && $this->match('data:([a-z]+)\/([a-z0-9.+-]+);base64,', $m, false)) { + $len = strspn($this->buffer, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyxz0123456789+/=', $this->count); + + $this->count += $len; + + if ($this->literal(')')) { + $content = substr($this->buffer, $s, $this->count - $s); + $out = [Type::T_KEYWORD, $content]; + + return true; + } + } + + $this->seek($s); + if ($this->literal('not', false) && $this->whitespace() && $this->value($inner)) { $out = [Type::T_UNARY, 'not', $inner, $this->inParens]; diff --git a/vendor/leafo/scssphp/src/Version.php b/vendor/leafo/scssphp/src/Version.php index 3b8dcd00..c8a56a5b 100644 --- a/vendor/leafo/scssphp/src/Version.php +++ b/vendor/leafo/scssphp/src/Version.php @@ -18,5 +18,5 @@ namespace Leafo\ScssPhp; */ class Version { - const VERSION = 'v0.7.5'; + const VERSION = 'v0.7.6'; } diff --git a/vendor/paragonie/random_compat/LICENSE b/vendor/paragonie/random_compat/LICENSE deleted file mode 100644 index 45c7017d..00000000 --- a/vendor/paragonie/random_compat/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Paragon Initiative Enterprises - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/vendor/paragonie/random_compat/build-phar.sh b/vendor/paragonie/random_compat/build-phar.sh deleted file mode 100644 index b4a5ba31..00000000 --- a/vendor/paragonie/random_compat/build-phar.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) ) - -php -dphar.readonly=0 "$basedir/other/build_phar.php" $* \ No newline at end of file diff --git a/vendor/paragonie/random_compat/composer.json b/vendor/paragonie/random_compat/composer.json deleted file mode 100644 index 1c5978c6..00000000 --- a/vendor/paragonie/random_compat/composer.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "paragonie/random_compat", - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "random", - "pseudorandom" - ], - "license": "MIT", - "type": "library", - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "support": { - "issues": "https://github.com/paragonie/random_compat/issues", - "email": "info@paragonie.com", - "source": "https://github.com/paragonie/random_compat" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "autoload": { - "files": [ - "lib/random.php" - ] - } -} diff --git a/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey b/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey deleted file mode 100644 index eb50ebfc..00000000 --- a/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PUBLIC KEY----- -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm -pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p -+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc ------END PUBLIC KEY----- diff --git a/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc b/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc deleted file mode 100644 index 6a1d7f30..00000000 --- a/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.22 (MingW32) - -iQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip -QwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg -1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW -NDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA -NNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV -JHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74= -=B6+8 ------END PGP SIGNATURE----- diff --git a/vendor/paragonie/random_compat/lib/byte_safe_strings.php b/vendor/paragonie/random_compat/lib/byte_safe_strings.php deleted file mode 100644 index 3de86b22..00000000 --- a/vendor/paragonie/random_compat/lib/byte_safe_strings.php +++ /dev/null @@ -1,181 +0,0 @@ - RandomCompat_strlen($binary_string)) { - return ''; - } - - return (string) mb_substr($binary_string, $start, $length, '8bit'); - } - - } else { - - /** - * substr() implementation that isn't brittle to mbstring.func_overload - * - * This version just uses the default substr() - * - * @param string $binary_string - * @param int $start - * @param int $length (optional) - * - * @throws TypeError - * - * @return string - */ - function RandomCompat_substr($binary_string, $start, $length = null) - { - if (!is_string($binary_string)) { - throw new TypeError( - 'RandomCompat_substr(): First argument should be a string' - ); - } - - if (!is_int($start)) { - throw new TypeError( - 'RandomCompat_substr(): Second argument should be an integer' - ); - } - - if ($length !== null) { - if (!is_int($length)) { - throw new TypeError( - 'RandomCompat_substr(): Third argument should be an integer, or omitted' - ); - } - - return (string) substr($binary_string, $start, $length); - } - - return (string) substr($binary_string, $start); - } - } -} diff --git a/vendor/paragonie/random_compat/lib/cast_to_int.php b/vendor/paragonie/random_compat/lib/cast_to_int.php deleted file mode 100644 index 9a4fab99..00000000 --- a/vendor/paragonie/random_compat/lib/cast_to_int.php +++ /dev/null @@ -1,75 +0,0 @@ - operators might accidentally let a float - * through. - * - * @param int|float $number The number we want to convert to an int - * @param bool $fail_open Set to true to not throw an exception - * - * @return float|int - * @psalm-suppress InvalidReturnType - * - * @throws TypeError - */ - function RandomCompat_intval($number, $fail_open = false) - { - if (is_int($number) || is_float($number)) { - $number += 0; - } elseif (is_numeric($number)) { - $number += 0; - } - - if ( - is_float($number) - && - $number > ~PHP_INT_MAX - && - $number < PHP_INT_MAX - ) { - $number = (int) $number; - } - - if (is_int($number)) { - return (int) $number; - } elseif (!$fail_open) { - throw new TypeError( - 'Expected an integer.' - ); - } - return $number; - } -} diff --git a/vendor/paragonie/random_compat/lib/error_polyfill.php b/vendor/paragonie/random_compat/lib/error_polyfill.php deleted file mode 100644 index 6a91990c..00000000 --- a/vendor/paragonie/random_compat/lib/error_polyfill.php +++ /dev/null @@ -1,49 +0,0 @@ -= 70000) { - return; -} - -if (!defined('RANDOM_COMPAT_READ_BUFFER')) { - define('RANDOM_COMPAT_READ_BUFFER', 8); -} - -$RandomCompatDIR = dirname(__FILE__); - -require_once $RandomCompatDIR . '/byte_safe_strings.php'; -require_once $RandomCompatDIR . '/cast_to_int.php'; -require_once $RandomCompatDIR . '/error_polyfill.php'; - -if (!is_callable('random_bytes')) { - /** - * PHP 5.2.0 - 5.6.x way to implement random_bytes() - * - * We use conditional statements here to define the function in accordance - * to the operating environment. It's a micro-optimization. - * - * In order of preference: - * 1. Use libsodium if available. - * 2. fread() /dev/urandom if available (never on Windows) - * 3. mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM) - * 4. COM('CAPICOM.Utilities.1')->GetRandom() - * - * See RATIONALE.md for our reasoning behind this particular order - */ - if (extension_loaded('libsodium')) { - // See random_bytes_libsodium.php - if (PHP_VERSION_ID >= 50300 && is_callable('\\Sodium\\randombytes_buf')) { - require_once $RandomCompatDIR . '/random_bytes_libsodium.php'; - } elseif (method_exists('Sodium', 'randombytes_buf')) { - require_once $RandomCompatDIR . '/random_bytes_libsodium_legacy.php'; - } - } - - /** - * Reading directly from /dev/urandom: - */ - if (DIRECTORY_SEPARATOR === '/') { - // DIRECTORY_SEPARATOR === '/' on Unix-like OSes -- this is a fast - // way to exclude Windows. - $RandomCompatUrandom = true; - $RandomCompat_basedir = ini_get('open_basedir'); - - if (!empty($RandomCompat_basedir)) { - $RandomCompat_open_basedir = explode( - PATH_SEPARATOR, - strtolower($RandomCompat_basedir) - ); - $RandomCompatUrandom = (array() !== array_intersect( - array('/dev', '/dev/', '/dev/urandom'), - $RandomCompat_open_basedir - )); - $RandomCompat_open_basedir = null; - } - - if ( - !is_callable('random_bytes') - && - $RandomCompatUrandom - && - @is_readable('/dev/urandom') - ) { - // Error suppression on is_readable() in case of an open_basedir - // or safe_mode failure. All we care about is whether or not we - // can read it at this point. If the PHP environment is going to - // panic over trying to see if the file can be read in the first - // place, that is not helpful to us here. - - // See random_bytes_dev_urandom.php - require_once $RandomCompatDIR . '/random_bytes_dev_urandom.php'; - } - // Unset variables after use - $RandomCompat_basedir = null; - } else { - $RandomCompatUrandom = false; - } - - /** - * mcrypt_create_iv() - * - * We only want to use mcypt_create_iv() if: - * - * - random_bytes() hasn't already been defined - * - the mcrypt extensions is loaded - * - One of these two conditions is true: - * - We're on Windows (DIRECTORY_SEPARATOR !== '/') - * - We're not on Windows and /dev/urandom is readabale - * (i.e. we're not in a chroot jail) - * - Special case: - * - If we're not on Windows, but the PHP version is between - * 5.6.10 and 5.6.12, we don't want to use mcrypt. It will - * hang indefinitely. This is bad. - * - If we're on Windows, we want to use PHP >= 5.3.7 or else - * we get insufficient entropy errors. - */ - if ( - !is_callable('random_bytes') - && - // Windows on PHP < 5.3.7 is broken, but non-Windows is not known to be. - (DIRECTORY_SEPARATOR === '/' || PHP_VERSION_ID >= 50307) - && - // Prevent this code from hanging indefinitely on non-Windows; - // see https://bugs.php.net/bug.php?id=69833 - ( - DIRECTORY_SEPARATOR !== '/' || - (PHP_VERSION_ID <= 50609 || PHP_VERSION_ID >= 50613) - ) - && - extension_loaded('mcrypt') - ) { - // See random_bytes_mcrypt.php - require_once $RandomCompatDIR . '/random_bytes_mcrypt.php'; - } - $RandomCompatUrandom = null; - - /** - * This is a Windows-specific fallback, for when the mcrypt extension - * isn't loaded. - */ - if ( - !is_callable('random_bytes') - && - extension_loaded('com_dotnet') - && - class_exists('COM') - ) { - $RandomCompat_disabled_classes = preg_split( - '#\s*,\s*#', - strtolower(ini_get('disable_classes')) - ); - - if (!in_array('com', $RandomCompat_disabled_classes)) { - try { - $RandomCompatCOMtest = new COM('CAPICOM.Utilities.1'); - if (method_exists($RandomCompatCOMtest, 'GetRandom')) { - // See random_bytes_com_dotnet.php - require_once $RandomCompatDIR . '/random_bytes_com_dotnet.php'; - } - } catch (com_exception $e) { - // Don't try to use it. - } - } - $RandomCompat_disabled_classes = null; - $RandomCompatCOMtest = null; - } - - /** - * throw new Exception - */ - if (!is_callable('random_bytes')) { - /** - * We don't have any more options, so let's throw an exception right now - * and hope the developer won't let it fail silently. - * - * @param mixed $length - * @psalm-suppress MissingReturnType - * @throws Exception - * @return string - */ - function random_bytes($length) - { - unset($length); // Suppress "variable not used" warnings. - throw new Exception( - 'There is no suitable CSPRNG installed on your system' - ); - return ''; - } - } -} - -if (!is_callable('random_int')) { - require_once $RandomCompatDIR . '/random_int.php'; -} - -$RandomCompatDIR = null; diff --git a/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php b/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php deleted file mode 100644 index fc1926e5..00000000 --- a/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php +++ /dev/null @@ -1,88 +0,0 @@ -GetRandom($bytes, 0)); - if (RandomCompat_strlen($buf) >= $bytes) { - /** - * Return our random entropy buffer here: - */ - return RandomCompat_substr($buf, 0, $bytes); - } - ++$execCount; - } while ($execCount < $bytes); - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Could not gather sufficient random data' - ); - } -} \ No newline at end of file diff --git a/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php b/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php deleted file mode 100644 index df5b9152..00000000 --- a/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php +++ /dev/null @@ -1,167 +0,0 @@ - 0); - - /** - * Is our result valid? - */ - if (is_string($buf)) { - if (RandomCompat_strlen($buf) === $bytes) { - /** - * Return our random entropy buffer here: - */ - return $buf; - } - } - } - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Error reading from source device' - ); - } -} diff --git a/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php b/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php deleted file mode 100644 index 4af1a242..00000000 --- a/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php +++ /dev/null @@ -1,88 +0,0 @@ - 2147483647) { - $buf = ''; - for ($i = 0; $i < $bytes; $i += 1073741824) { - $n = ($bytes - $i) > 1073741824 - ? 1073741824 - : $bytes - $i; - $buf .= \Sodium\randombytes_buf($n); - } - } else { - $buf = \Sodium\randombytes_buf($bytes); - } - - if ($buf !== false) { - if (RandomCompat_strlen($buf) === $bytes) { - return $buf; - } - } - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Could not gather sufficient random data' - ); - } -} diff --git a/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php b/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php deleted file mode 100644 index 705af526..00000000 --- a/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php +++ /dev/null @@ -1,92 +0,0 @@ - 2147483647) { - for ($i = 0; $i < $bytes; $i += 1073741824) { - $n = ($bytes - $i) > 1073741824 - ? 1073741824 - : $bytes - $i; - $buf .= Sodium::randombytes_buf((int) $n); - } - } else { - $buf .= Sodium::randombytes_buf((int) $bytes); - } - - if (is_string($buf)) { - if (RandomCompat_strlen($buf) === $bytes) { - return $buf; - } - } - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Could not gather sufficient random data' - ); - } -} diff --git a/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php b/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php deleted file mode 100644 index aac9c013..00000000 --- a/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php +++ /dev/null @@ -1,77 +0,0 @@ - operators might accidentally let a float - * through. - */ - - try { - $min = RandomCompat_intval($min); - } catch (TypeError $ex) { - throw new TypeError( - 'random_int(): $min must be an integer' - ); - } - - try { - $max = RandomCompat_intval($max); - } catch (TypeError $ex) { - throw new TypeError( - 'random_int(): $max must be an integer' - ); - } - - /** - * Now that we've verified our weak typing system has given us an integer, - * let's validate the logic then we can move forward with generating random - * integers along a given range. - */ - if ($min > $max) { - throw new Error( - 'Minimum value must be less than or equal to the maximum value' - ); - } - - if ($max === $min) { - return (int) $min; - } - - /** - * Initialize variables to 0 - * - * We want to store: - * $bytes => the number of random bytes we need - * $mask => an integer bitmask (for use with the &) operator - * so we can minimize the number of discards - */ - $attempts = $bits = $bytes = $mask = $valueShift = 0; - - /** - * At this point, $range is a positive number greater than 0. It might - * overflow, however, if $max - $min > PHP_INT_MAX. PHP will cast it to - * a float and we will lose some precision. - */ - $range = $max - $min; - - /** - * Test for integer overflow: - */ - if (!is_int($range)) { - - /** - * Still safely calculate wider ranges. - * Provided by @CodesInChaos, @oittaa - * - * @ref https://gist.github.com/CodesInChaos/03f9ea0b58e8b2b8d435 - * - * We use ~0 as a mask in this case because it generates all 1s - * - * @ref https://eval.in/400356 (32-bit) - * @ref http://3v4l.org/XX9r5 (64-bit) - */ - $bytes = PHP_INT_SIZE; - $mask = ~0; - - } else { - - /** - * $bits is effectively ceil(log($range, 2)) without dealing with - * type juggling - */ - while ($range > 0) { - if ($bits % 8 === 0) { - ++$bytes; - } - ++$bits; - $range >>= 1; - $mask = $mask << 1 | 1; - } - $valueShift = $min; - } - - $val = 0; - /** - * Now that we have our parameters set up, let's begin generating - * random integers until one falls between $min and $max - */ - do { - /** - * The rejection probability is at most 0.5, so this corresponds - * to a failure probability of 2^-128 for a working RNG - */ - if ($attempts > 128) { - throw new Exception( - 'random_int: RNG is broken - too many rejections' - ); - } - - /** - * Let's grab the necessary number of random bytes - */ - $randomByteString = random_bytes($bytes); - - /** - * Let's turn $randomByteString into an integer - * - * This uses bitwise operators (<< and |) to build an integer - * out of the values extracted from ord() - * - * Example: [9F] | [6D] | [32] | [0C] => - * 159 + 27904 + 3276800 + 201326592 => - * 204631455 - */ - $val &= 0; - for ($i = 0; $i < $bytes; ++$i) { - $val |= ord($randomByteString[$i]) << ($i * 8); - } - - /** - * Apply mask - */ - $val &= $mask; - $val += $valueShift; - - ++$attempts; - /** - * If $val overflows to a floating point number, - * ... or is larger than $max, - * ... or smaller than $min, - * then try again. - */ - } while (!is_int($val) || $val > $max || $val < $min); - - return (int) $val; - } -} diff --git a/vendor/paragonie/random_compat/other/build_phar.php b/vendor/paragonie/random_compat/other/build_phar.php deleted file mode 100644 index 70ef4b2e..00000000 --- a/vendor/paragonie/random_compat/other/build_phar.php +++ /dev/null @@ -1,57 +0,0 @@ -buildFromDirectory(dirname(__DIR__).'/lib'); -rename( - dirname(__DIR__).'/lib/index.php', - dirname(__DIR__).'/lib/random.php' -); - -/** - * If we pass an (optional) path to a private key as a second argument, we will - * sign the Phar with OpenSSL. - * - * If you leave this out, it will produce an unsigned .phar! - */ -if ($argc > 1) { - if (!@is_readable($argv[1])) { - echo 'Could not read the private key file:', $argv[1], "\n"; - exit(255); - } - $pkeyFile = file_get_contents($argv[1]); - - $private = openssl_get_privatekey($pkeyFile); - if ($private !== false) { - $pkey = ''; - openssl_pkey_export($private, $pkey); - $phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey); - - /** - * Save the corresponding public key to the file - */ - if (!@is_readable($dist.'/random_compat.phar.pubkey')) { - $details = openssl_pkey_get_details($private); - file_put_contents( - $dist.'/random_compat.phar.pubkey', - $details['key'] - ); - } - } else { - echo 'An error occurred reading the private key from OpenSSL.', "\n"; - exit(255); - } -} diff --git a/vendor/paragonie/random_compat/psalm-autoload.php b/vendor/paragonie/random_compat/psalm-autoload.php deleted file mode 100644 index d71d1b81..00000000 --- a/vendor/paragonie/random_compat/psalm-autoload.php +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - - - - - - diff --git a/vendor/php-extended/php-system/composer.json b/vendor/php-extended/php-system/composer.json index 3b068bb4..ba279f80 100644 --- a/vendor/php-extended/php-system/composer.json +++ b/vendor/php-extended/php-system/composer.json @@ -2,7 +2,7 @@ "name" : "php-extended/php-system", "description" : "A generic way to find informations about the running system", "type" : "library", - "homepage" : "https://github.com/php-extended/php-system", + "homepage" : "https://gitlab.com/php-extended/php-system", "license" : "MIT", "authors" : [{ "name" : "Anastaszor", @@ -10,8 +10,8 @@ } ], "support" : { - "issues" : "https://github.com/php-extended/php-system/issues", - "source" : "https://github.com/php-extended/php-system" + "issues" : "https://gitlab.com/php-extended/php-system/issues", + "source" : "https://gitlab.com/php-extended/php-system" }, "autoload" : { "psr-4" : { diff --git a/vendor/php-extended/php-tail/composer.json b/vendor/php-extended/php-tail/composer.json index 4f8568c5..1e9a29b1 100644 --- a/vendor/php-extended/php-tail/composer.json +++ b/vendor/php-extended/php-tail/composer.json @@ -9,8 +9,8 @@ } ], "support" : { - "issues" : "https://github.com/php-extended/php-tail/issues", - "source" : "https://github.com/php-extended/php-tail" + "issues" : "https://gitlab.com/php-extended/php-tail/issues", + "source" : "https://gitlab.com/php-extended/php-tail" }, "keywords" : [ "php", @@ -24,7 +24,7 @@ "PhpExtended\\Tail\\" : "src/" } }, - "homepage" : "https://github.com/php-extended/php-tail", + "homepage" : "https://gitlab.com/php-extended/php-tail", "require" : { "php-extended/php-system" : "^1.2" } diff --git a/vendor/symfony/lock/Key.php b/vendor/symfony/lock/Key.php index 8be4f3a2..7fddafe9 100644 --- a/vendor/symfony/lock/Key.php +++ b/vendor/symfony/lock/Key.php @@ -22,12 +22,9 @@ final class Key private $expiringTime; private $state = array(); - /** - * @param string $resource - */ - public function __construct($resource) + public function __construct(string $resource) { - $this->resource = (string) $resource; + $this->resource = $resource; } public function __toString() @@ -35,39 +32,22 @@ final class Key return $this->resource; } - /** - * @param string $stateKey - * - * @return bool - */ - public function hasState($stateKey) + public function hasState(string $stateKey): bool { return isset($this->state[$stateKey]); } - /** - * @param string $stateKey - * @param mixed $state - */ - public function setState($stateKey, $state) + public function setState(string $stateKey, $state): void { $this->state[$stateKey] = $state; } - /** - * @param string $stateKey - */ - public function removeState($stateKey) + public function removeState(string $stateKey): void { unset($this->state[$stateKey]); } - /** - * @param $stateKey - * - * @return mixed - */ - public function getState($stateKey) + public function getState(string $stateKey) { return $this->state[$stateKey]; } diff --git a/vendor/symfony/lock/Lock.php b/vendor/symfony/lock/Lock.php index 77fd032b..f32ad351 100644 --- a/vendor/symfony/lock/Lock.php +++ b/vendor/symfony/lock/Lock.php @@ -41,12 +41,12 @@ final class Lock implements LockInterface, LoggerAwareInterface * @param float|null $ttl Maximum expected lock duration in seconds * @param bool $autoRelease Whether to automatically release the lock or not when the lock instance is destroyed */ - public function __construct(Key $key, StoreInterface $store, $ttl = null, $autoRelease = true) + public function __construct(Key $key, StoreInterface $store, float $ttl = null, bool $autoRelease = true) { $this->store = $store; $this->key = $key; $this->ttl = $ttl; - $this->autoRelease = (bool) $autoRelease; + $this->autoRelease = $autoRelease; $this->logger = new NullLogger(); } @@ -105,22 +105,25 @@ final class Lock implements LockInterface, LoggerAwareInterface /** * {@inheritdoc} */ - public function refresh() + public function refresh($ttl = null) { - if (!$this->ttl) { + if (null === $ttl) { + $ttl = $this->ttl; + } + if (!$ttl) { throw new InvalidArgumentException('You have to define an expiration duration.'); } try { $this->key->resetLifetime(); - $this->store->putOffExpiration($this->key, $this->ttl); + $this->store->putOffExpiration($this->key, $ttl); $this->dirty = true; if ($this->key->isExpired()) { throw new LockExpiredException(sprintf('Failed to put off the expiration of the "%s" lock within the specified time.', $this->key)); } - $this->logger->info('Expiration defined for "{resource}" lock for "{ttl}" seconds.', array('resource' => $this->key, 'ttl' => $this->ttl)); + $this->logger->info('Expiration defined for "{resource}" lock for "{ttl}" seconds.', array('resource' => $this->key, 'ttl' => $ttl)); } catch (LockConflictedException $e) { $this->dirty = false; $this->logger->notice('Failed to define an expiration for the "{resource}" lock, someone else acquired the lock.', array('resource' => $this->key)); @@ -154,7 +157,7 @@ final class Lock implements LockInterface, LoggerAwareInterface } /** - * @return bool + * {@inheritdoc} */ public function isExpired() { @@ -162,9 +165,7 @@ final class Lock implements LockInterface, LoggerAwareInterface } /** - * Returns the remaining lifetime. - * - * @return float|null Remaining lifetime in seconds. Null when the lock won't expire. + * {@inheritdoc} */ public function getRemainingLifetime() { diff --git a/vendor/symfony/lock/LockInterface.php b/vendor/symfony/lock/LockInterface.php index 437a4cc2..0d1c02ec 100644 --- a/vendor/symfony/lock/LockInterface.php +++ b/vendor/symfony/lock/LockInterface.php @@ -24,7 +24,7 @@ interface LockInterface { /** * Acquires the lock. If the lock is acquired by someone else, the parameter `blocking` determines whether or not - * the the call should block until the release of the lock. + * the call should block until the release of the lock. * * @param bool $blocking Whether or not the Lock should wait for the release of someone else * @@ -38,10 +38,12 @@ interface LockInterface /** * Increase the duration of an acquired lock. * + * @param float|null $ttl Maximum expected lock duration in seconds + * * @throws LockConflictedException If the lock is acquired by someone else * @throws LockAcquiringException If the lock can not be refreshed */ - public function refresh(); + public function refresh(/* $ttl = null */); /** * Returns whether or not the lock is acquired. @@ -56,4 +58,16 @@ interface LockInterface * @throws LockReleasingException If the lock can not be released */ public function release(); + + /** + * @return bool + */ + public function isExpired(); + + /** + * Returns the remaining lifetime. + * + * @return float|null Remaining lifetime in seconds. Null when the lock won't expire. + */ + public function getRemainingLifetime(); } diff --git a/vendor/symfony/lock/Store/FlockStore.php b/vendor/symfony/lock/Store/FlockStore.php index 287d6fb5..bf72eaef 100644 --- a/vendor/symfony/lock/Store/FlockStore.php +++ b/vendor/symfony/lock/Store/FlockStore.php @@ -36,7 +36,7 @@ class FlockStore implements StoreInterface * * @throws LockStorageException If the lock directory doesn’t exist or is not writable */ - public function __construct($lockPath = null) + public function __construct(string $lockPath = null) { if (null === $lockPath) { $lockPath = sys_get_temp_dir(); @@ -78,8 +78,7 @@ class FlockStore implements StoreInterface ); // Silence error reporting - set_error_handler(function () { - }); + set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); if (!$handle = fopen($fileName, 'r')) { if ($handle = fopen($fileName, 'x')) { chmod($fileName, 0444); @@ -91,8 +90,7 @@ class FlockStore implements StoreInterface restore_error_handler(); if (!$handle) { - $error = error_get_last(); - throw new LockStorageException($error['message'], 0, null); + throw new LockStorageException($error, 0, null); } // On Windows, even if PHP doc says the contrary, LOCK_NB works, see diff --git a/vendor/symfony/lock/Store/MemcachedStore.php b/vendor/symfony/lock/Store/MemcachedStore.php index 8e9db10c..f1c5c112 100644 --- a/vendor/symfony/lock/Store/MemcachedStore.php +++ b/vendor/symfony/lock/Store/MemcachedStore.php @@ -38,7 +38,7 @@ class MemcachedStore implements StoreInterface * @param \Memcached $memcached * @param int $initialTtl the expiration delay of locks in seconds */ - public function __construct(\Memcached $memcached, $initialTtl = 300) + public function __construct(\Memcached $memcached, int $initialTtl = 300) { if (!static::isSupported()) { throw new InvalidArgumentException('Memcached extension is required'); @@ -149,12 +149,8 @@ class MemcachedStore implements StoreInterface /** * Retrieve an unique token for the given key. - * - * @param Key $key - * - * @return string */ - private function getToken(Key $key) + private function getToken(Key $key): string { if (!$key->hasState(__CLASS__)) { $token = base64_encode(random_bytes(32)); diff --git a/vendor/symfony/lock/Store/RedisStore.php b/vendor/symfony/lock/Store/RedisStore.php index 4d057337..291e0f52 100644 --- a/vendor/symfony/lock/Store/RedisStore.php +++ b/vendor/symfony/lock/Store/RedisStore.php @@ -32,7 +32,7 @@ class RedisStore implements StoreInterface * @param \Redis|\RedisArray|\RedisCluster|\Predis\Client $redisClient * @param float $initialTtl the expiration delay of locks in seconds */ - public function __construct($redisClient, $initialTtl = 300.0) + public function __construct($redisClient, float $initialTtl = 300.0) { if (!$redisClient instanceof \Redis && !$redisClient instanceof \RedisArray && !$redisClient instanceof \RedisCluster && !$redisClient instanceof \Predis\Client && !$redisClient instanceof RedisProxy) { throw new InvalidArgumentException(sprintf('%s() expects parameter 1 to be Redis, RedisArray, RedisCluster or Predis\Client, %s given', __METHOD__, is_object($redisClient) ? get_class($redisClient) : gettype($redisClient))); @@ -124,13 +124,9 @@ class RedisStore implements StoreInterface /** * Evaluates a script in the corresponding redis client. * - * @param string $script - * @param string $resource - * @param array $args - * * @return mixed */ - private function evaluate($script, $resource, array $args) + private function evaluate(string $script, string $resource, array $args) { if ($this->redis instanceof \Redis || $this->redis instanceof \RedisCluster || $this->redis instanceof RedisProxy) { return $this->redis->eval($script, array_merge(array($resource), $args), 1); @@ -149,12 +145,8 @@ class RedisStore implements StoreInterface /** * Retrieves an unique token for the given key. - * - * @param Key $key - * - * @return string */ - private function getToken(Key $key) + private function getToken(Key $key): string { if (!$key->hasState(__CLASS__)) { $token = base64_encode(random_bytes(32)); diff --git a/vendor/symfony/lock/Store/RetryTillSaveStore.php b/vendor/symfony/lock/Store/RetryTillSaveStore.php index dfc3b266..bf69a75f 100644 --- a/vendor/symfony/lock/Store/RetryTillSaveStore.php +++ b/vendor/symfony/lock/Store/RetryTillSaveStore.php @@ -37,7 +37,7 @@ class RetryTillSaveStore implements StoreInterface, LoggerAwareInterface * @param int $retrySleep Duration in ms between 2 retry * @param int $retryCount Maximum amount of retry */ - public function __construct(StoreInterface $decorated, $retrySleep = 100, $retryCount = PHP_INT_MAX) + public function __construct(StoreInterface $decorated, int $retrySleep = 100, int $retryCount = PHP_INT_MAX) { $this->decorated = $decorated; $this->retrySleep = $retrySleep; diff --git a/vendor/symfony/lock/Store/SemaphoreStore.php b/vendor/symfony/lock/Store/SemaphoreStore.php index a6cc9ea8..8913e391 100644 --- a/vendor/symfony/lock/Store/SemaphoreStore.php +++ b/vendor/symfony/lock/Store/SemaphoreStore.php @@ -13,7 +13,6 @@ namespace Symfony\Component\Lock\Store; use Symfony\Component\Lock\Exception\InvalidArgumentException; use Symfony\Component\Lock\Exception\LockConflictedException; -use Symfony\Component\Lock\Exception\NotSupportedException; use Symfony\Component\Lock\Key; use Symfony\Component\Lock\StoreInterface; @@ -27,23 +26,13 @@ class SemaphoreStore implements StoreInterface /** * Returns whether or not the store is supported. * - * @param bool|null $blocking when not null, checked again the blocking mode - * * @return bool * * @internal */ - public static function isSupported($blocking = null) + public static function isSupported() { - if (!extension_loaded('sysvsem')) { - return false; - } - - if (false === $blocking && \PHP_VERSION_ID < 50601) { - return false; - } - - return true; + return extension_loaded('sysvsem'); } public function __construct() @@ -76,16 +65,7 @@ class SemaphoreStore implements StoreInterface } $resource = sem_get(crc32($key)); - - if (\PHP_VERSION_ID < 50601) { - if (!$blocking) { - throw new NotSupportedException(sprintf('The store "%s" does not supports non blocking locks.', get_class($this))); - } - - $acquired = sem_acquire($resource); - } else { - $acquired = sem_acquire($resource, !$blocking); - } + $acquired = sem_acquire($resource, !$blocking); if (!$acquired) { throw new LockConflictedException(); diff --git a/vendor/symfony/lock/Tests/LockTest.php b/vendor/symfony/lock/Tests/LockTest.php index 7913644b..654d58d5 100644 --- a/vendor/symfony/lock/Tests/LockTest.php +++ b/vendor/symfony/lock/Tests/LockTest.php @@ -97,6 +97,20 @@ class LockTest extends TestCase $lock->refresh(); } + public function testRefreshCustom() + { + $key = new Key(uniqid(__METHOD__, true)); + $store = $this->getMockBuilder(StoreInterface::class)->getMock(); + $lock = new Lock($key, $store, 10); + + $store + ->expects($this->once()) + ->method('putOffExpiration') + ->with($key, 20); + + $lock->refresh(20); + } + public function testIsAquired() { $key = new Key(uniqid(__METHOD__, true)); diff --git a/vendor/symfony/lock/Tests/Store/BlockingStoreTestTrait.php b/vendor/symfony/lock/Tests/Store/BlockingStoreTestTrait.php index 93e5a547..1e3436eb 100644 --- a/vendor/symfony/lock/Tests/Store/BlockingStoreTestTrait.php +++ b/vendor/symfony/lock/Tests/Store/BlockingStoreTestTrait.php @@ -31,6 +31,7 @@ trait BlockingStoreTestTrait * This test is time sensible: the $clockDelay could be adjust. * * @requires extension pcntl + * @requires extension posix * @requires function pcntl_sigwaitinfo */ public function testBlockingLocks() @@ -38,12 +39,6 @@ trait BlockingStoreTestTrait // Amount a microsecond used to order async actions $clockDelay = 50000; - if (\PHP_VERSION_ID < 50600 || defined('HHVM_VERSION_ID')) { - $this->markTestSkipped('The PHP engine does not keep resource in child forks'); - - return; - } - /** @var StoreInterface $store */ $store = $this->getStore(); $key = new Key(uniqid(__METHOD__, true)); diff --git a/vendor/symfony/lock/Tests/Store/SemaphoreStoreTest.php b/vendor/symfony/lock/Tests/Store/SemaphoreStoreTest.php index bb37ec1f..eeb95d58 100644 --- a/vendor/symfony/lock/Tests/Store/SemaphoreStoreTest.php +++ b/vendor/symfony/lock/Tests/Store/SemaphoreStoreTest.php @@ -27,10 +27,6 @@ class SemaphoreStoreTest extends AbstractStoreTest */ protected function getStore() { - if (\PHP_VERSION_ID < 50601) { - $this->markTestSkipped('Non blocking semaphore are supported by PHP version greater or equals than 5.6.1'); - } - return new SemaphoreStore(); } } diff --git a/vendor/symfony/lock/composer.json b/vendor/symfony/lock/composer.json index 9a6e7687..1ca9a4da 100644 --- a/vendor/symfony/lock/composer.json +++ b/vendor/symfony/lock/composer.json @@ -16,8 +16,7 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-php70": "~1.0", + "php": "^7.1.3", "psr/log": "~1.0" }, "require-dev": { @@ -32,7 +31,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } } } diff --git a/vendor/symfony/polyfill-php70/LICENSE b/vendor/symfony/polyfill-php70/LICENSE deleted file mode 100644 index 24fa32c2..00000000 --- a/vendor/symfony/polyfill-php70/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2018 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 -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/symfony/polyfill-php70/Php70.php b/vendor/symfony/polyfill-php70/Php70.php deleted file mode 100644 index 39e66450..00000000 --- a/vendor/symfony/polyfill-php70/Php70.php +++ /dev/null @@ -1,74 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php70; - -/** - * @author Nicolas Grekas - * - * @internal - */ -final class Php70 -{ - public static function intdiv($dividend, $divisor) - { - $dividend = self::intArg($dividend, __FUNCTION__, 1); - $divisor = self::intArg($divisor, __FUNCTION__, 2); - - if (0 === $divisor) { - throw new \DivisionByZeroError('Division by zero'); - } - if (-1 === $divisor && ~PHP_INT_MAX === $dividend) { - throw new \ArithmeticError('Division of PHP_INT_MIN by -1 is not an integer'); - } - - return ($dividend - ($dividend % $divisor)) / $divisor; - } - - public static function preg_replace_callback_array(array $patterns, $subject, $limit = -1, &$count = 0) - { - $count = 0; - $result = (string) $subject; - if (0 === $limit = self::intArg($limit, __FUNCTION__, 3)) { - return $result; - } - - foreach ($patterns as $pattern => $callback) { - $result = preg_replace_callback($pattern, $callback, $result, $limit, $c); - $count += $c; - } - - return $result; - } - - public static function error_clear_last() - { - static $handler; - if (!$handler) { - $handler = function() { return false; }; - } - set_error_handler($handler); - @trigger_error(''); - restore_error_handler(); - } - - private static function intArg($value, $caller, $pos) - { - if (\is_int($value)) { - return $value; - } - if (!\is_numeric($value) || PHP_INT_MAX <= ($value += 0) || ~PHP_INT_MAX >= $value) { - throw new \TypeError(sprintf('%s() expects parameter %d to be integer, %s given', $caller, $pos, gettype($value))); - } - - return (int) $value; - } -} diff --git a/vendor/symfony/polyfill-php70/README.md b/vendor/symfony/polyfill-php70/README.md deleted file mode 100644 index 04988c6f..00000000 --- a/vendor/symfony/polyfill-php70/README.md +++ /dev/null @@ -1,28 +0,0 @@ -Symfony Polyfill / Php70 -======================== - -This component provides features unavailable in releases prior to PHP 7.0: - -- [`intdiv`](http://php.net/intdiv) -- [`preg_replace_callback_array`](http://php.net/preg_replace_callback_array) -- [`error_clear_last`](http://php.net/error_clear_last) -- `random_bytes` and `random_int` (from [paragonie/random_compat](https://github.com/paragonie/random_compat)) -- [`*Error` throwable classes](http://php.net/Error) -- [`PHP_INT_MIN`](http://php.net/manual/en/reserved.constants.php#constant.php-int-min) -- `SessionUpdateTimestampHandlerInterface` - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -Compatibility notes -=================== - -To write portable code between PHP5 and PHP7, some care must be taken: -- `\*Error` exceptions must be caught before `\Exception`; -- after calling `error_clear_last()`, the result of `$e = error_get_last()` must be - verified using `isset($e['message'][0])` instead of `null !== $e`. - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php b/vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php deleted file mode 100644 index 68191244..00000000 --- a/vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php +++ /dev/null @@ -1,5 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php70 as p; - -if (PHP_VERSION_ID < 70000) { - if (!defined('PHP_INT_MIN')) { - define('PHP_INT_MIN', ~PHP_INT_MAX); - } - if (!function_exists('intdiv')) { - function intdiv($dividend, $divisor) { return p\Php70::intdiv($dividend, $divisor); } - } - if (!function_exists('preg_replace_callback_array')) { - function preg_replace_callback_array(array $patterns, $subject, $limit = -1, &$count = 0) { return p\Php70::preg_replace_callback_array($patterns, $subject, $limit, $count); } - } - if (!function_exists('error_clear_last')) { - function error_clear_last() { return p\Php70::error_clear_last(); } - } -} diff --git a/vendor/symfony/polyfill-php70/composer.json b/vendor/symfony/polyfill-php70/composer.json deleted file mode 100644 index 871045d2..00000000 --- a/vendor/symfony/polyfill-php70/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "symfony/polyfill-php70", - "type": "library", - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3", - "paragonie/random_compat": "~1.0|~2.0" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php70\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - } -} diff --git a/vendor/vlucas/valitron/README.md b/vendor/vlucas/valitron/README.md index 0d520fd2..4da73cbc 100644 --- a/vendor/vlucas/valitron/README.md +++ b/vendor/vlucas/valitron/README.md @@ -86,6 +86,19 @@ if($v->validate()) { } ``` +Or use dot syntax to validate all members of a numeric array: + +```php +$v = new Valitron\Validator(array('values' => array(50, 90))); +$v->rule('max', 'values.*', 100); +if($v->validate()) { + echo "Yay! We're all good!"; +} else { + // Errors + print_r($v->errors()); +} +``` + Setting language and language dir globally: ```php @@ -121,6 +134,7 @@ V::lang('ar'); * `notIn` - Negation of `in` rule (not in array of values) * `ip` - Valid IP address * `email` - Valid email address + * `emailDNS` - Valid email address with active DNS record * `url` - Valid URL * `urlActive` - Valid URL with active DNS record * `alpha` - Alphabetic characters only diff --git a/vendor/vlucas/valitron/composer.json b/vendor/vlucas/valitron/composer.json index e3faef91..30e5c962 100644 --- a/vendor/vlucas/valitron/composer.json +++ b/vendor/vlucas/valitron/composer.json @@ -4,7 +4,7 @@ "description": "Simple, elegant, stand-alone validation library with NO dependencies", "keywords": ["validation", "validator", "valid"], "homepage": "http://github.com/vlucas/valitron", - "license" : "BSD", + "license" : "BSD-3-Clause", "authors" : [ { "name": "Vance Lucas", @@ -16,11 +16,19 @@ "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5" + }, + "suggest": { + "ext-mbstring": "It can support the multiple bytes string length." }, "autoload": { - "psr-0": { - "Valitron": "src/" + "psr-4": { + "Valitron\\": "src/Valitron" + } + }, + "autoload-dev": { + "psr-4": { + "Valitron\\": "tests/Valitron" } }, "scripts": { diff --git a/vendor/vlucas/valitron/lang/lt.php b/vendor/vlucas/valitron/lang/lt.php new file mode 100644 index 00000000..cace602d --- /dev/null +++ b/vendor/vlucas/valitron/lang/lt.php @@ -0,0 +1,33 @@ + "yra privalomas", + 'equals' => "reikšmė turi būti tokia pati, kaip „%s“", + 'different' => "turi būti kitokia, nei „%s“", + 'accepted' => "turi būti priimta", + 'numeric' => "turi būti sveikasis skaičius", + 'integer' => "turi būti skaičius", + 'length' => "turi būti %d ženklų ilgio", + 'min' => "turi būti bent %s", + 'max' => "turi būti ne daugiau kaip %s", + 'in' => "turi neteisingą vertę", + 'notIn' => "turi neteisingą vertę", + 'ip' => "nėra teisingas IP adresas", + 'email' => "nėra teisingas el. pašto adresas", + 'url' => "nėra teisingas URL", + 'urlActive' => "turi būti aktyvus domenas", + 'alpha' => "turi turėti tik raides a-ž", + 'alphaNum' => "turi turėti tik raides a-ž ir/ar skaičius 0-9", + 'slug' => "turi turėti tik raides a-ž, skaičius 0-9, brukšnelius ir apatinius brukšnelius", + 'regex' => "yra neteisingų ženklų", + 'date' => "nėra teisinga data", + 'dateFormat' => "turi būti „%s“ formato data", + 'dateBefore' => "turi būti data, ankstesnė nei „%s“", + 'dateAfter' => "turi būti data, vėlesnė nei „%s“", + 'contains' => "turi turėti %s", + 'boolean' => "turi būti būlio (taip/ne) tipo", + 'lengthBetween' => "turi būti nuo %d iki %d ilgio", + 'creditCard' => "turi būti teisingas kreditinės kortelės numeris", + 'lengthMin' => "turi būti bent %d ženklų ilgio", + 'lengthMax' => "turi būti ne ilgesnis nei %d ženklų", + 'instanceOf' => "turi būti „%s“ atvejis" +); diff --git a/vendor/vlucas/valitron/lang/sv.php b/vendor/vlucas/valitron/lang/sv.php new file mode 100644 index 00000000..94884cfc --- /dev/null +++ b/vendor/vlucas/valitron/lang/sv.php @@ -0,0 +1,34 @@ + "är obligatorisk", + 'equals' => "måste vara samma som '%s'", + 'different' => "får inte vara samma som '%s'", + 'accepted' => "måste accepteras", + 'numeric' => "måste vara numerisk", + 'integer' => "måste vara ett heltal", + 'length' => "måste vara %d tecken långt", + 'min' => "måste vara minst %s", + 'max' => "får inte vara mer än %s", + 'in' => "innehåller ogiltigt värde", + 'notIn' => "innehåller ogiltigt värde", + 'ip' => "är inte en giltlig IP-adress", + 'email' => "är inte en giltlig e-postadress", + 'url' => "är inte en giltlig URL", + 'urlActive' => "måste vara ett aktivt domännamn", + 'alpha' => "får bara inehålla bokstäver a-z", + 'alphaNum' => "får bara inehålla bokstäver a-z och/eller siffror 0-9", + 'slug' => "får bara inehålla bokstäver a-z och/eller siffror 0-9, bindesträck og understräck", + 'regex' => "inehåller ogiltliga tecken", + 'date' => "är inte ett giltligt datum", + 'dateFormat' => "måste vara ett datum med formatet '%s'", + 'dateBefore' => "måste vara ett datum före '%s'", + 'dateAfter' => "måste vara ett datum efter '%s'", + 'contains' => "måste innehålla %s", + 'boolean' => "måste vara ett booleskt värde", + 'lengthBetween' => "måste vara mellan %d och %d tecken långt", + 'creditCard' => "måste vara et gyldig kredittkortnummer", + 'lengthMin' => "måste vara minst %d tecken långt", + 'lengthMax' => "får itne överstiga %d tecken", + 'instanceOf' => "måste vara en instans av '%s'" +); diff --git a/vendor/vlucas/valitron/lang/zh-cn.php b/vendor/vlucas/valitron/lang/zh-cn.php index d1548150..97835b4f 100644 --- a/vendor/vlucas/valitron/lang/zh-cn.php +++ b/vendor/vlucas/valitron/lang/zh-cn.php @@ -24,5 +24,10 @@ return array( 'dateFormat' => "日期的格式应该为 '%s'", 'dateBefore' => "日期必须在 '%s' 之前", 'dateAfter' => "日期必须在 '%s' 之后", - 'contains' => "必须包含 %s" + 'contains' => "必须包含 %s", + 'boolean' => "必须是真或假", + 'lengthBetween' => "长度只能介于 %d 和 %d 之间", + 'creditCard' => "信用卡号码不正确", + 'lengthMin' => "长度必须大于 %d", + 'lengthMax' => "长度必须小于 %d" ); diff --git a/vendor/vlucas/valitron/src/Valitron/Validator.php b/vendor/vlucas/valitron/src/Valitron/Validator.php index c629ca4f..0f70856a 100644 --- a/vendor/vlucas/valitron/src/Valitron/Validator.php +++ b/vendor/vlucas/valitron/src/Valitron/Validator.php @@ -77,6 +77,11 @@ class Validator */ protected $validUrlPrefixes = array('http://', 'https://', 'ftp://'); + /** + * @var bool + */ + protected $stop_on_first_fail = false; + /** * Setup validation * @@ -173,9 +178,9 @@ class Validator */ protected function validateEquals($field, $value, array $params) { - $field2 = $params[0]; - - return isset($this->_fields[$field2]) && $value == $this->_fields[$field2]; + // extract the second field value, this accounts for nested array values + list($field2Value, $multiple) = $this->getPart($this->_fields, explode('.', $params[0])); + return isset($field2Value) && $value == $field2Value; } /** @@ -189,9 +194,9 @@ class Validator */ protected function validateDifferent($field, $value, array $params) { - $field2 = $params[0]; - - return isset($this->_fields[$field2]) && $value != $this->_fields[$field2]; + // extract the second field value, this accounts for nested array values + list($field2Value, $multiple) = $this->getPart($this->_fields, explode('.', $params[0])); + return isset($field2Value) && $value != $field2Value; } /** @@ -246,7 +251,7 @@ class Validator { if (isset($params[0]) && (bool) $params[0]){ //strict mode - return preg_match('/^-?([0-9])+$/i', $value); + return preg_match('/^([0-9]|-[1-9]|-?[1-9][0-9]*)$/i', $value); } return filter_var($value, \FILTER_VALIDATE_INT) !== false; @@ -500,6 +505,26 @@ class Validator return filter_var($value, \FILTER_VALIDATE_EMAIL) !== false; } + /** + * Validate that a field is a valid e-mail address and the domain name is active + * + * @param string $field + * @param mixed $value + * @return bool + */ + protected function validateEmailDNS($field, $value) + { + if ($this->validateEmail($field, $value)) { + $domain = ltrim(stristr($value, '@'), '@') . '.'; + if (function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46')) { + $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46); + } + return checkdnsrr($domain, 'ANY'); + } + + return false; + } + /** * Validate that a field is a valid URL by syntax * @@ -945,6 +970,7 @@ class Validator */ public function validate() { + $set_to_break = false; foreach ($this->_validations as $v) { foreach ($v['fields'] as $field) { list($values, $multiple) = $this->getPart($this->_fields, explode('.', $field)); @@ -979,13 +1005,26 @@ class Validator if (!$result) { $this->error($field, $v['message'], $v['params']); + if($this->stop_on_first_fail) { + $set_to_break = true; + break; + } } } + if($set_to_break) break; } return count($this->errors()) === 0; } + /** + * Should the validation stop a rule is failed + * @param bool $stop + */ + public function stopOnFirstFail($stop = true) { + $this->stop_on_first_fail = (bool) $stop; + } + /** * Returns all rule callbacks, the static and instance ones. * @@ -1092,7 +1131,7 @@ class Validator } /** - * Returns true if either a valdiator with the given name has been + * Returns true if either a validator with the given name has been * registered or there is a default validator by that name. * * @param string $name @@ -1160,6 +1199,8 @@ class Validator } /** + * Add label to rule + * * @param string $value * @internal param array $labels * @return $this @@ -1173,6 +1214,8 @@ class Validator } /** + * Add labels to rules + * * @param array $labels * @return $this */