From 8b22f1d6633b14a1a2cdb0225899e3485b6007ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danyi=20D=C3=A1vid?= Date: Sat, 17 Mar 2018 18:39:30 +0100 Subject: [PATCH] * SZEP card poller implementation added * new tags for sms parsing --- composer.json | 1 + composer.lock | 988 ++++++++++-------- config/autoload/cli.global.php | 2 + config/autoload/local.php.dist | 3 + data/.gitignore | 1 + src/App/Command/PeriodicSZEPCommand.php | 36 + .../Command/PeriodicSZEPCommandFactory.php | 22 + src/App/ConfigProvider.php | 1 + src/App/Entity/SZEPCardEntry.php | 159 +++ src/App/Entity/Sms.php | 344 +++--- src/App/Entity/User.php | 249 ++--- src/App/Service/KoinService.php | 111 +- src/App/Service/SZEPManagerService.php | 255 +++++ src/App/Service/SZEPManagerServiceFactory.php | 33 + 14 files changed, 1429 insertions(+), 776 deletions(-) create mode 100644 src/App/Command/PeriodicSZEPCommand.php create mode 100644 src/App/Command/PeriodicSZEPCommandFactory.php create mode 100644 src/App/Entity/SZEPCardEntry.php create mode 100644 src/App/Service/SZEPManagerService.php create mode 100644 src/App/Service/SZEPManagerServiceFactory.php diff --git a/composer.json b/composer.json index 8a22812..da546e5 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "php": "^7.1", "dasprid/container-interop-doctrine": "^1.0", "guzzlehttp/guzzle": "^6.3", + "http-interop/http-middleware": "^0.4.1", "roave/security-advisories": "dev-master", "zendframework/zend-component-installer": "^1.0", "zendframework/zend-config-aggregator": "^1.0", diff --git a/composer.lock b/composer.lock index 1ddc3fe..8c08372 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "0822adb4f3d62dc32db289d0bdd9676f", + "content-hash": "a3208a6bbde4ad00c31e2c599c82f45b", "packages": [ { "name": "container-interop/container-interop", @@ -39,16 +39,16 @@ }, { "name": "dasprid/container-interop-doctrine", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/DASPRiD/container-interop-doctrine.git", - "reference": "a4833d25dcfa42165c4ddec0c7062528206eeadc" + "reference": "b9f3afc00ce997e469d7fdd6fed7b8d400763290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/container-interop-doctrine/zipball/a4833d25dcfa42165c4ddec0c7062528206eeadc", - "reference": "a4833d25dcfa42165c4ddec0c7062528206eeadc", + "url": "https://api.github.com/repos/DASPRiD/container-interop-doctrine/zipball/b9f3afc00ce997e469d7fdd6fed7b8d400763290", + "reference": "b9f3afc00ce997e469d7fdd6fed7b8d400763290", "shasum": "" }, "require": { @@ -74,20 +74,20 @@ ], "description": "Doctrine factories for container-interop", "homepage": "https://github.com/DASPRiD/container-interop-doctrine", - "time": "2017-06-30T14:14:39+00:00" + "time": "2018-01-24T23:25:49+00:00" }, { "name": "doctrine/annotations", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f" + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5beebb01b025c94e93686b7a0ed3edae81fe3e7f", - "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", "shasum": "" }, "require": { @@ -96,12 +96,12 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -142,7 +142,7 @@ "docblock", "parser" ], - "time": "2017-07-22T10:58:02+00:00" + "time": "2017-12-06T07:11:42+00:00" }, { "name": "doctrine/cache", @@ -360,16 +360,16 @@ }, { "name": "doctrine/dbal", - "version": "v2.6.2", + "version": "v2.6.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "1a4ee83a5a709555f2c6f9057a3aacf892451c7e" + "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/1a4ee83a5a709555f2c6f9057a3aacf892451c7e", - "reference": "1a4ee83a5a709555f2c6f9057a3aacf892451c7e", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/e3eed9b1facbb0ced3a0995244843a189e7d1b13", + "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13", "shasum": "" }, "require": { @@ -429,24 +429,24 @@ "persistence", "queryobject" ], - "time": "2017-08-28T11:02:56+00:00" + "time": "2017-11-19T13:38:54+00:00" }, { "name": "doctrine/inflector", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { "phpunit/phpunit": "^6.2" @@ -454,7 +454,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -496,36 +496,36 @@ "singularize", "string" ], - "time": "2017-07-22T12:18:28+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -550,7 +550,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2017-07-22T11:58:36+00:00" }, { "name": "doctrine/lexer", @@ -608,38 +608,40 @@ }, { "name": "doctrine/orm", - "version": "v2.5.10", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/doctrine/doctrine2.git", - "reference": "c78afd51721804f4f76ff30d9b6f6159eb046161" + "reference": "87ee409783a4a322b5597ebaae558661404055a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/c78afd51721804f4f76ff30d9b6f6159eb046161", - "reference": "c78afd51721804f4f76ff30d9b6f6159eb046161", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/87ee409783a4a322b5597ebaae558661404055a7", + "reference": "87ee409783a4a322b5597ebaae558661404055a7", "shasum": "" }, "require": { - "doctrine/cache": "~1.4", - "doctrine/collections": "~1.2", - "doctrine/common": ">=2.5-dev,<2.9-dev", - "doctrine/dbal": ">=2.5-dev,<2.7-dev", - "doctrine/instantiator": "~1.0.1", + "doctrine/annotations": "~1.5", + "doctrine/cache": "~1.6", + "doctrine/collections": "^1.4", + "doctrine/common": "^2.7.1", + "doctrine/dbal": "^2.6", + "doctrine/instantiator": "~1.1", "ext-pdo": "*", - "php": ">=5.4", - "symfony/console": "~2.5|~3.0" + "php": "^7.1", + "symfony/console": "~3.0|~4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0", - "symfony/yaml": "~2.3|~3.0" + "doctrine/coding-standard": "^1.0", + "phpunit/phpunit": "^6.5", + "squizlabs/php_codesniffer": "^3.2", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" }, "bin": [ - "bin/doctrine", - "bin/doctrine.php" + "bin/doctrine" ], "type": "library", "extra": { @@ -648,8 +650,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\ORM\\": "lib/" + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" } }, "notification-url": "https://packagist.org/downloads/", @@ -672,6 +674,10 @@ { "name": "Jonathan Wage", "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], "description": "Object-Relational-Mapper for PHP", @@ -680,7 +686,7 @@ "database", "orm" ], - "time": "2017-08-18T19:17:35+00:00" + "time": "2018-02-27T07:30:56+00:00" }, { "name": "fig/http-message-util", @@ -963,25 +969,29 @@ "request", "response" ], + "abandoned": "http-interop/http-server-middleware", "time": "2017-01-14T15:23:42+00:00" }, { "name": "nikic/fast-route", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nikic/FastRoute.git", - "reference": "b5f95749071c82a8e0f58586987627054400cdf6" + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6", - "reference": "b5f95749071c82a8e0f58586987627054400cdf6", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", "shasum": "" }, "require": { "php": ">=5.4.0" }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, "type": "library", "autoload": { "psr-4": { @@ -1006,7 +1016,7 @@ "router", "routing" ], - "time": "2017-01-19T11:35:12+00:00" + "time": "2018-02-13T20:26:39+00:00" }, { "name": "psr/container", @@ -1107,80 +1117,38 @@ ], "time": "2016-08-06T14:39:51+00:00" }, - { - "name": "psr/log", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2016-10-10T12:19:37+00:00" - }, { "name": "roave/security-advisories", "version": "dev-master", "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f40f874cb7139abb9309fa63a31fd37bb49ddd3e" + "reference": "1b2f1f59ff8fc933e4d61ee45214ff3228e20c75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f40f874cb7139abb9309fa63a31fd37bb49ddd3e", - "reference": "f40f874cb7139abb9309fa63a31fd37bb49ddd3e", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1b2f1f59ff8fc933e4d61ee45214ff3228e20c75", + "reference": "1b2f1f59ff8fc933e4d61ee45214ff3228e20c75", "shasum": "" }, "conflict": { + "3f/pygmentize": "<1.2", "adodb/adodb-php": "<5.20.6", - "amphp/artax": ">=2,<2.0.6|<1.0.6", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<1.0.1", + "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", "aws/aws-sdk-php": ">=3,<3.2.1", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", - "cakephp/cakephp": ">=3,<3.0.15|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=1.3,<1.3.18|>=2.7,<2.7.6|>=3.1,<3.1.4", + "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<2.1", + "cartalyst/sentry": "<=2.1.6", "codeigniter/framework": "<=3.0.6", "composer/composer": "<=1.0.0-alpha11", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/core": ">=2,<3.5.28", - "contao/core-bundle": ">=4,<4.4.1", + "contao/core": ">=2,<3.5.32", + "contao/core-bundle": ">=4,<4.4.8", + "contao/listing-bundle": ">=4,<4.4.8", + "contao/newsletter-bundle": ">=4,<4.1", "doctrine/annotations": ">=1,<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", @@ -1191,11 +1159,14 @@ "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=8,<8.3.7", - "drupal/drupal": ">=8,<8.3.7", + "drupal/core": ">=8,<8.4.5", + "drupal/drupal": ">=8,<8.4.5", + "erusev/parsedown": "<1.7", + "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.3|>=5.4,<5.4.11.3|>=2017.8,<2017.8.1.1|>=2017.12,<2017.12.2.1", "firebase/php-jwt": "<2", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "gree/jose": "<=2.2", "gregwar/rst": "<1.0.3", "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1", "illuminate/auth": ">=4,<4.0.99|>=4.1,<4.1.26", @@ -1211,46 +1182,57 @@ "onelogin/php-saml": "<2.10.4", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": ">=0,<3", + "paragonie/random_compat": "<2", "phpmailer/phpmailer": ">=5,<5.2.24", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpxmlrpc/extras": "<0.6.1", + "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", "pusher/pusher-php-server": "<2.2.1", "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "shopware/shopware": "<4.4|>=5,<5.2.16", - "silverstripe/cms": ">=3.1,<3.1.11|>=3,<=3.0.11", + "shopware/shopware": "<5.3.7", + "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", "silverstripe/framework": ">=3,<3.3", "silverstripe/userforms": "<3", - "simplesamlphp/saml2": "<1.8.1|>=1.9,<1.9.1|>=1.10,<1.10.3|>=2,<2.3.3", - "simplesamlphp/simplesamlphp": "<1.14.15", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/simplesamlphp": "<1.15.2", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "socalnick/scn-social-auth": "<1.15.2", "squizlabs/php_codesniffer": ">=1,<2.8.1", + "stormpath/sdk": ">=0,<9.9.99", "swiftmailer/swiftmailer": ">=4,<5.4.5", "symfony/dependency-injection": ">=2,<2.0.17", - "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.7", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2", "symfony/http-foundation": ">=2,<2.3.27|>=2.4,<2.5.11|>=2.6,<2.6.6", "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/routing": ">=2,<2.0.19", - "symfony/security": ">=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5|>=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9", - "symfony/security-core": ">=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5|>=2.8,<2.8.6|>=3,<3.0.6|>=2.4,<2.6.13|>=2.7,<2.7.9", - "symfony/security-http": ">=2.4,<2.7.13|>=2.3,<2.3.41|>=2.8,<2.8.6|>=3,<3.0.6", + "symfony/security": ">=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9|>=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.6|>=2.8.23,<2.8.25|>=3,<3.0.6|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5", + "symfony/security-csrf": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/serializer": ">=2,<2.0.11", - "symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.13|>=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5|>=2.8,<2.8.6|>=3,<3.0.6", + "symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/translation": ">=2,<2.0.17", "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2", + "titon/framework": ">=0,<9.9.99", "twig/twig": "<1.20", - "typo3/cms": ">=6.2,<6.2.30|>=8,<8.6.1|>=7,<7.6.16", - "typo3/flow": ">=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5|>=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.22|>=8,<8.7.5", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", "willdurand/js-translation-bundle": "<2.1.1", "yiisoft/yii": ">=1.1.14,<1.1.15", - "yiisoft/yii2": "<2.0.5", + "yiisoft/yii2": "<2.0.14", "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.14", "yiisoft/yii2-gii": "<2.0.4", "yiisoft/yii2-jui": "<2.0.4", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", @@ -1272,6 +1254,7 @@ "zendframework/zendframework1": "<1.12.20", "zendframework/zendopenid": ">=2,<2.0.2", "zendframework/zendxml": ">=1,<1.0.1", + "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2" @@ -1289,48 +1272,48 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2017-08-17T12:55:16+00:00" + "time": "2018-03-15T17:53:05+00:00" }, { "name": "symfony/console", - "version": "v3.3.8", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d6596cb5022b6a0bd940eae54a1de78646a5fda6" + "reference": "555c8dbe0ae9e561740451eabdbed2cc554b6a51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d6596cb5022b6a0bd940eae54a1de78646a5fda6", - "reference": "d6596cb5022b6a0bd940eae54a1de78646a5fda6", + "url": "https://api.github.com/repos/symfony/console/zipball/555c8dbe0ae9e561740451eabdbed2cc554b6a51", + "reference": "555c8dbe0ae9e561740451eabdbed2cc554b6a51", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0", + "php": "^7.1.3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3", - "symfony/dependency-injection": "~3.3", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/filesystem": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", - "symfony/filesystem": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1357,76 +1340,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-08-27T14:52:21+00:00" - }, - { - "name": "symfony/debug", - "version": "v3.3.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "084d804fe35808eb2ef596ec83d85d9768aa6c9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/084d804fe35808eb2ef596ec83d85d9768aa6c9d", - "reference": "084d804fe35808eb2ef596ec83d85d9768aa6c9d", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2017-08-27T14:52:21+00:00" + "time": "2018-02-26T15:55:47+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.5.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -1438,7 +1365,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -1472,20 +1399,113 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { - "name": "zendframework/zend-component-installer", - "version": "1.0.0", + "name": "webimpress/composer-extra-dependency", + "version": "0.2.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-component-installer.git", - "reference": "0ca44807dbcf356b75a869c61b533f917ccbc5ae" + "url": "https://github.com/webimpress/composer-extra-dependency.git", + "reference": "31fa56391d30f03b1180c87610cbe22254780ad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-component-installer/zipball/0ca44807dbcf356b75a869c61b533f917ccbc5ae", - "reference": "0ca44807dbcf356b75a869c61b533f917ccbc5ae", + "url": "https://api.github.com/repos/webimpress/composer-extra-dependency/zipball/31fa56391d30f03b1180c87610cbe22254780ad9", + "reference": "31fa56391d30f03b1180c87610cbe22254780ad9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "composer/composer": "^1.5.2", + "mikey179/vfsstream": "^1.6.5", + "phpunit/phpunit": "^5.7.22 || ^6.4.1", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Webimpress\\ComposerExtraDependency\\Plugin" + }, + "autoload": { + "psr-4": { + "Webimpress\\ComposerExtraDependency\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Composer plugin to require extra dependencies", + "homepage": "https://github.com/webimpress/composer-extra-dependency", + "keywords": [ + "composer", + "dependency", + "webimpress" + ], + "time": "2017-10-17T17:15:14+00:00" + }, + { + "name": "webimpress/http-middleware-compatibility", + "version": "0.1.4", + "source": { + "type": "git", + "url": "https://github.com/webimpress/http-middleware-compatibility.git", + "reference": "8ed1c2c7523dce0035b98bc4f3a73ca9cd1d3717" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webimpress/http-middleware-compatibility/zipball/8ed1c2c7523dce0035b98bc4f3a73ca9cd1d3717", + "reference": "8ed1c2c7523dce0035b98bc4f3a73ca9cd1d3717", + "shasum": "" + }, + "require": { + "http-interop/http-middleware": "^0.1.1 || ^0.2 || ^0.3 || ^0.4.1 || ^0.5", + "php": "^5.6 || ^7.0", + "webimpress/composer-extra-dependency": "^0.2.2" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3" + }, + "type": "library", + "extra": { + "dependency": [ + "http-interop/http-middleware" + ] + }, + "autoload": { + "files": [ + "autoload/http-middleware.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Compatibility library for Draft PSR-15 HTTP Middleware", + "homepage": "https://github.com/webimpress/http-middleware-compatibility", + "keywords": [ + "middleware", + "psr-15", + "webimpress" + ], + "abandoned": "psr/http-server-middleware", + "time": "2017-10-17T17:31:10+00:00" + }, + { + "name": "zendframework/zend-component-installer", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-component-installer.git", + "reference": "5e9beda3b81d29d4d080b110d67f8c8c44d93605" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-component-installer/zipball/5e9beda3b81d29d4d080b110d67f8c8c44d93605", + "reference": "5e9beda3b81d29d4d080b110d67f8c8c44d93605", "shasum": "" }, "require": { @@ -1493,16 +1513,17 @@ "php": "^5.6 || ^7.0" }, "require-dev": { - "composer/composer": "^1.3.2", - "malukenho/docheader": "^0.1.5", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^6.0.7 || ^5.7.14", + "composer/composer": "^1.5.2", + "malukenho/docheader": "^0.1.6", + "mikey179/vfsstream": "^1.6.5", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", "zendframework/zend-coding-standard": "~1.0.0" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.1-dev", + "dev-develop": "1.2-dev" }, "class": "Zend\\ComponentInstaller\\ComponentInstaller" }, @@ -1516,42 +1537,49 @@ "BSD-3-Clause" ], "description": "Composer plugin for automating component registration in zend-mvc and Expressive applications", - "time": "2017-04-25T16:43:54+00:00" + "keywords": [ + "ZendFramework", + "component installer", + "composer", + "plugin", + "zf" + ], + "time": "2018-01-11T15:03:06+00:00" }, { "name": "zendframework/zend-config-aggregator", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-config-aggregator.git", - "reference": "9494f491db02112c48777f1948a3b7ef71d674ab" + "reference": "46460b25c09fb572f807a00cf9dfe9c466792a76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-config-aggregator/zipball/9494f491db02112c48777f1948a3b7ef71d674ab", - "reference": "9494f491db02112c48777f1948a3b7ef71d674ab", + "url": "https://api.github.com/repos/zendframework/zend-config-aggregator/zipball/46460b25c09fb572f807a00cf9dfe9c466792a76", + "reference": "46460b25c09fb572f807a00cf9dfe9c466792a76", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1.0" }, "require-dev": { "malukenho/docheader": "^0.1.5", "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.7", + "phpunit/phpunit": "^5.7.21 || ^6.3", "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-config": "^2.6 || ^3.0", "zendframework/zend-servicemanager": "^2.7.7 || ^3.1.1" }, "suggest": { - "zendframework/zend-config": "Allows loading configuration from XML, INI, YAML, and JSON files", - "zendframework/zend-stdlib": "Allows removing configuration keys and globbing on Windows platform" + "zendframework/zend-config": "Allows loading configuration from XML, INI, YAML, and JSON files" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev", - "dev-develop": "1.1-dev" + "dev-master": "1.1.x-dev", + "dev-develop": "1.2.x-dev" } }, "autoload": { @@ -1561,29 +1589,28 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD 3-Clause" + "BSD-3-Clause" ], - "authors": [ - { - "name": "Mateusz Tymek", - "email": "mtymek@gmail.com" - } + "description": "Lightweight library for collecting and merging configuration from different sources", + "keywords": [ + "ZendFramework", + "config-aggregator", + "zf" ], - "description": "Lightweight library for merging and caching application config", - "time": "2017-04-24T21:19:47+00:00" + "time": "2018-02-26T16:46:30+00:00" }, { "name": "zendframework/zend-diactoros", - "version": "1.5.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "1d23172f9dc1687a97c195a777b0199f14f7b26e" + "reference": "bf26aff803a11c5cc8eb7c4878a702c403ec67f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/1d23172f9dc1687a97c195a777b0199f14f7b26e", - "reference": "1d23172f9dc1687a97c195a777b0199f14f7b26e", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/bf26aff803a11c5cc8eb7c4878a702c403ec67f1", + "reference": "bf26aff803a11c5cc8eb7c4878a702c403ec67f1", "shasum": "" }, "require": { @@ -1602,8 +1629,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev", - "dev-develop": "1.6-dev" + "dev-master": "1.7.x-dev", + "dev-develop": "1.8.x-dev" } }, "autoload": { @@ -1622,7 +1649,7 @@ "psr", "psr-7" ], - "time": "2017-08-22T20:38:56+00:00" + "time": "2018-02-26T15:44:50+00:00" }, { "name": "zendframework/zend-escaper", @@ -1724,27 +1751,28 @@ }, { "name": "zendframework/zend-expressive", - "version": "2.0.3", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-expressive.git", - "reference": "293145df73f288b16107d1388995282c4e8599fd" + "reference": "fdbb9028d11b361fbcaddf62e95ca45d25ea9ac6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-expressive/zipball/293145df73f288b16107d1388995282c4e8599fd", - "reference": "293145df73f288b16107d1388995282c4e8599fd", + "url": "https://api.github.com/repos/zendframework/zend-expressive/zipball/fdbb9028d11b361fbcaddf62e95ca45d25ea9ac6", + "reference": "fdbb9028d11b361fbcaddf62e95ca45d25ea9ac6", "shasum": "" }, "require": { "fig/http-message-util": "^1.1.2", + "http-interop/http-middleware": "^0.4.1", "php": "^5.6 || ^7.0", "psr/container": "^1.0", "psr/http-message": "^1.0.1", "zendframework/zend-diactoros": "^1.3.10", - "zendframework/zend-expressive-router": "^2.1", + "zendframework/zend-expressive-router": "^2.4.1", "zendframework/zend-expressive-template": "^1.0.4", - "zendframework/zend-stratigility": "^2.0.1" + "zendframework/zend-stratigility": "^2.2.0" }, "conflict": { "container-interop/container-interop": "<1.2.0" @@ -1752,12 +1780,12 @@ "require-dev": { "filp/whoops": "^2.1.6 || ^1.1.10", "malukenho/docheader": "^0.1.5", - "mockery/mockery": "^0.9.5", - "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-expressive-aurarouter": "^2.0", - "zendframework/zend-expressive-fastroute": "^2.0", - "zendframework/zend-expressive-zendrouter": "^2.0.1", + "zendframework/zend-expressive-aurarouter": "^2.2", + "zendframework/zend-expressive-fastroute": "^2.2", + "zendframework/zend-expressive-zendrouter": "^2.2", "zendframework/zend-servicemanager": "^3.3 || ^2.7.8" }, "suggest": { @@ -1774,8 +1802,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev", - "dev-develop": "2.1-dev" + "dev-master": "2.2.x-dev", + "dev-develop": "3.0.x-dev" + }, + "zf": { + "config-provider": "Zend\\Expressive\\ConfigProvider" } }, "autoload": { @@ -1789,25 +1820,29 @@ ], "description": "PSR-7 Middleware Microframework based on Stratigility", "keywords": [ + "PSR-11", + "ZendFramework", "http", "middleware", "psr", - "psr-7" + "psr-7", + "zend-expressive", + "zf" ], - "time": "2017-03-28T15:56:53+00:00" + "time": "2018-03-12T21:18:34+00:00" }, { "name": "zendframework/zend-expressive-fastroute", - "version": "2.1.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-expressive-fastroute.git", - "reference": "20767d9df6d0154190e344e2bd6ba1a4db74a959" + "reference": "7567d8e53e7f92b740c937e2215d393cdb65feb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-expressive-fastroute/zipball/20767d9df6d0154190e344e2bd6ba1a4db74a959", - "reference": "20767d9df6d0154190e344e2bd6ba1a4db74a959", + "url": "https://api.github.com/repos/zendframework/zend-expressive-fastroute/zipball/7567d8e53e7f92b740c937e2215d393cdb65feb6", + "reference": "7567d8e53e7f92b740c937e2215d393cdb65feb6", "shasum": "" }, "require": { @@ -1816,22 +1851,22 @@ "php": "^5.6 || ^7.0", "psr/container": "^1.0", "psr/http-message": "^1.0.1", - "zendframework/zend-expressive-router": "^2.0.1", - "zendframework/zend-stdlib": "^3.1" + "zendframework/zend-expressive-router": "^2.4", + "zendframework/zend-stdlib": "^3.1 || 2.*" }, "conflict": { "container-interop/container-interop": "<1.2.0" }, "require-dev": { "malukenho/docheader": "^0.1.5", - "phpunit/phpunit": "^6.0.7 || ^5.7.14", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", "zendframework/zend-coding-standard": "~1.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev", - "dev-develop": "2.2-dev" + "dev-master": "2.2.x-dev", + "dev-develop": "3.0.x-dev" } }, "autoload": { @@ -1846,39 +1881,42 @@ "description": "FastRoute integration for Expressive", "keywords": [ "FastRoute", + "ZendFramework", "expressive", "http", "middleware", "psr", - "psr-7" + "psr-7", + "zend-expressive", + "zf" ], - "time": "2017-08-11T18:46:49+00:00" + "time": "2018-03-09T17:36:27+00:00" }, { "name": "zendframework/zend-expressive-helpers", - "version": "4.0.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-expressive-helpers.git", - "reference": "c49acbb77b8c7d54d3b78e1474ed968b65c4d80c" + "reference": "137d863d4741210d05297b4bb1c30264f100ba8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-expressive-helpers/zipball/c49acbb77b8c7d54d3b78e1474ed968b65c4d80c", - "reference": "c49acbb77b8c7d54d3b78e1474ed968b65c4d80c", + "url": "https://api.github.com/repos/zendframework/zend-expressive-helpers/zipball/137d863d4741210d05297b4bb1c30264f100ba8f", + "reference": "137d863d4741210d05297b4bb1c30264f100ba8f", "shasum": "" }, "require": { - "http-interop/http-middleware": "^0.4.1", "php": "^5.6 || ^7.0", "psr/container": "^1.0", "psr/http-message": "^1.0.1", - "zendframework/zend-expressive-router": "^2.1" + "webimpress/http-middleware-compatibility": "^0.1.1", + "zendframework/zend-expressive-router": "^2.2" }, "require-dev": { "malukenho/docheader": "^0.1.5", - "mockery/mockery": "^0.9.5", - "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^5.7.22 || ^6.4.1", "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-diactoros": "^1.3.10" }, @@ -1890,8 +1928,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev", - "dev-develop": "4.1-dev" + "dev-master": "4.2-dev", + "dev-develop": "4.3-dev" } }, "autoload": { @@ -1911,31 +1949,33 @@ "psr", "psr-7" ], - "time": "2017-03-13T21:52:53+00:00" + "time": "2017-10-09T19:03:01+00:00" }, { "name": "zendframework/zend-expressive-router", - "version": "2.1.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-expressive-router.git", - "reference": "88d711aee740ac8fbd684472469e16b85435cc79" + "reference": "e1a00596aa20a29968bdc6ecdf0256c8bfd6e0b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-expressive-router/zipball/88d711aee740ac8fbd684472469e16b85435cc79", - "reference": "88d711aee740ac8fbd684472469e16b85435cc79", + "url": "https://api.github.com/repos/zendframework/zend-expressive-router/zipball/e1a00596aa20a29968bdc6ecdf0256c8bfd6e0b5", + "reference": "e1a00596aa20a29968bdc6ecdf0256c8bfd6e0b5", "shasum": "" }, "require": { - "fig/http-message-util": "^1.1", - "http-interop/http-middleware": "^0.4.1", + "fig/http-message-util": "^1.1.2", "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" + "psr/container": "^1.0", + "psr/http-message": "^1.0.1", + "webimpress/http-middleware-compatibility": "^0.1.1" }, "require-dev": { + "http-interop/http-middleware": "0.4.1", "malukenho/docheader": "^0.1.5", - "phpunit/phpunit": "^4.7 || ^5.6", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", "zendframework/zend-coding-standard": "~1.0.0" }, "suggest": { @@ -1946,8 +1986,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev", - "dev-develop": "2.2-dev" + "dev-master": "2.4.x-dev", + "dev-develop": "3.0.x-dev" + }, + "zf": { + "config-provider": "Zend\\Expressive\\Router\\ConfigProvider" } }, "autoload": { @@ -1961,13 +2004,16 @@ ], "description": "Router subcomponent for Expressive", "keywords": [ + "ZendFramework", "expressive", "http", "middleware", "psr", - "psr-7" + "psr-7", + "zend-expressive", + "zf" ], - "time": "2017-01-24T22:28:12+00:00" + "time": "2018-03-08T19:27:02+00:00" }, { "name": "zendframework/zend-expressive-template", @@ -2020,35 +2066,35 @@ }, { "name": "zendframework/zend-http", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-http.git", - "reference": "09f4d279f46d86be63171ff62ee0f79eca878678" + "reference": "78aa510c0ea64bfb2aa234f50c4f232c9531acfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/09f4d279f46d86be63171ff62ee0f79eca878678", - "reference": "09f4d279f46d86be63171ff62ee0f79eca878678", + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/78aa510c0ea64bfb2aa234f50c4f232c9531acfa", + "reference": "78aa510c0ea64bfb2aa234f50c4f232c9531acfa", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "zendframework/zend-loader": "^2.5", - "zendframework/zend-stdlib": "^2.5 || ^3.0", - "zendframework/zend-uri": "^2.5", - "zendframework/zend-validator": "^2.5" + "php": "^5.6 || ^7.0", + "zendframework/zend-loader": "^2.5.1", + "zendframework/zend-stdlib": "^3.1 || ^2.7.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-validator": "^2.10.1" }, "require-dev": { - "phpunit/phpunit": "^4.0", + "phpunit/phpunit": "^6.4.1 || ^5.7.15", "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-config": "^2.5" + "zendframework/zend-config": "^3.1 || ^2.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" } }, "autoload": { @@ -2063,32 +2109,35 @@ "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", "homepage": "https://github.com/zendframework/zend-http", "keywords": [ + "ZendFramework", "http", - "zf2" + "http client", + "zend", + "zf" ], - "time": "2017-01-31T14:41:02+00:00" + "time": "2017-10-13T12:06:24+00:00" }, { "name": "zendframework/zend-json", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-json.git", - "reference": "f42a1588e75c2a3e338cd94c37906231e616daab" + "reference": "4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-json/zipball/f42a1588e75c2a3e338cd94c37906231e616daab", - "reference": "f42a1588e75c2a3e338cd94c37906231e616daab", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c", + "reference": "4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "^2.3", - "zendframework/zend-stdlib": "^2.7 || ^3.0" + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, "suggest": { "zendframework/zend-json-server": "For implementing JSON-RPC servers", @@ -2097,8 +2146,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev", - "dev-develop": "3.1-dev" + "dev-master": "3.1.x-dev", + "dev-develop": "3.2.x-dev" } }, "autoload": { @@ -2111,12 +2160,12 @@ "BSD-3-Clause" ], "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", - "homepage": "https://github.com/zendframework/zend-json", "keywords": [ + "ZendFramework", "json", - "zf2" + "zf" ], - "time": "2016-04-01T02:34:00+00:00" + "time": "2018-01-04T17:51:34+00:00" }, { "name": "zendframework/zend-loader", @@ -2164,16 +2213,16 @@ }, { "name": "zendframework/zend-servicemanager", - "version": "3.3.0", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "c3036efb81f71bfa36cc9962ee5d4474f36581d0" + "reference": "9f35a104b8d4d3b32da5f4a3b6efc0dd62e5af42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/c3036efb81f71bfa36cc9962ee5d4474f36581d0", - "reference": "c3036efb81f71bfa36cc9962ee5d4474f36581d0", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/9f35a104b8d4d3b32da5f4a3b6efc0dd62e5af42", + "reference": "9f35a104b8d4d3b32da5f4a3b6efc0dd62e5af42", "shasum": "" }, "require": { @@ -2187,10 +2236,10 @@ "psr/container-implementation": "^1.0" }, "require-dev": { - "mikey179/vfsstream": "^1.6", + "mikey179/vfsstream": "^1.6.5", "ocramius/proxy-manager": "^1.0 || ^2.0", - "phpbench/phpbench": "^0.10.0", - "phpunit/phpunit": "^5.7 || ^6.0.6", + "phpbench/phpbench": "^0.13.0", + "phpunit/phpunit": "^5.7.25 || ^6.4.4", "zendframework/zend-coding-standard": "~1.0.0" }, "suggest": { @@ -2205,7 +2254,7 @@ "extra": { "branch-alias": { "dev-master": "3.3-dev", - "dev-develop": "3.4-dev" + "dev-develop": "4.0-dev" } }, "autoload": { @@ -2217,13 +2266,18 @@ "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-servicemanager", + "description": "Factory-Driven Dependency Injection Container", "keywords": [ + "PSR-11", + "ZendFramework", + "dependency-injection", + "di", + "dic", "service-manager", "servicemanager", "zf" ], - "time": "2017-03-01T22:08:02+00:00" + "time": "2018-01-29T16:48:37+00:00" }, { "name": "zendframework/zend-stdlib", @@ -2272,27 +2326,27 @@ }, { "name": "zendframework/zend-stratigility", - "version": "2.0.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-stratigility.git", - "reference": "229e7d94010d09d9e68096ff6f1d35f354d8dac9" + "reference": "e8c413fcba926ede63099936a5f86acf9b8156c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stratigility/zipball/229e7d94010d09d9e68096ff6f1d35f354d8dac9", - "reference": "229e7d94010d09d9e68096ff6f1d35f354d8dac9", + "url": "https://api.github.com/repos/zendframework/zend-stratigility/zipball/e8c413fcba926ede63099936a5f86acf9b8156c5", + "reference": "e8c413fcba926ede63099936a5f86acf9b8156c5", "shasum": "" }, "require": { - "http-interop/http-middleware": "^0.4.1", "php": "^5.6 || ^7.0", "psr/http-message": "^1.0", + "webimpress/http-middleware-compatibility": "^0.1.4", "zendframework/zend-escaper": "^2.3" }, "require-dev": { "malukenho/docheader": "^0.1.5", - "phpunit/phpunit": "^5.7", + "phpunit/phpunit": "^5.7.22 || ^6.4.1", "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-diactoros": "^1.0" }, @@ -2302,11 +2356,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.0-dev", - "dev-develop": "2.1.0-dev" + "dev-master": "2.2.x-dev", + "dev-develop": "3.0.x-dev" } }, "autoload": { + "files": [ + "src/functions/double-pass-middleware.php", + "src/functions/middleware.php", + "src/functions/path.php" + ], "psr-4": { "Zend\\Stratigility\\": "src/" } @@ -2318,11 +2377,13 @@ "description": "Middleware for PHP", "homepage": "https://github.com/zendframework/zend-stratigility", "keywords": [ + "ZendFramework", "http", "middleware", - "psr-7" + "psr-7", + "zf" ], - "time": "2017-01-25T19:16:16+00:00" + "time": "2018-03-12T21:04:19+00:00" }, { "name": "zendframework/zend-uri", @@ -2373,16 +2434,16 @@ }, { "name": "zendframework/zend-validator", - "version": "2.10.1", + "version": "2.10.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-validator.git", - "reference": "010084ddbd33299bf51ea6f0e07f8f4e8bd832a8" + "reference": "38109ed7d8e46cfa71bccbe7e6ca80cdd035f8c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/010084ddbd33299bf51ea6f0e07f8f4e8bd832a8", - "reference": "010084ddbd33299bf51ea6f0e07f8f4e8bd832a8", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/38109ed7d8e46cfa71bccbe7e6ca80cdd035f8c9", + "reference": "38109ed7d8e46cfa71bccbe7e6ca80cdd035f8c9", "shasum": "" }, "require": { @@ -2417,8 +2478,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10-dev", - "dev-develop": "2.11-dev" + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" }, "zf": { "component": "Zend\\Validator", @@ -2440,22 +2501,22 @@ "validator", "zf2" ], - "time": "2017-08-22T14:19:23+00:00" + "time": "2018-02-01T17:05:33+00:00" } ], "packages-dev": [ { "name": "filp/whoops", - "version": "2.1.10", + "version": "2.1.14", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec" + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", + "url": "https://api.github.com/repos/filp/whoops/zipball/c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", "shasum": "" }, "require": { @@ -2464,7 +2525,7 @@ }, "require-dev": { "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", + "phpunit/phpunit": "^4.8.35 || ^5.7", "symfony/var-dumper": "^2.6 || ^3.0" }, "suggest": { @@ -2500,44 +2561,47 @@ "exception", "handling", "library", - "whoops", - "zf2" + "throwable", + "whoops" ], - "time": "2017-08-03T18:23:40+00:00" + "time": "2017-11-23T18:22:44+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -2545,7 +2609,7 @@ "object", "object graph" ], - "time": "2017-04-12T18:52:22+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "phar-io/manifest", @@ -2651,16 +2715,16 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { @@ -2701,33 +2765,39 @@ "reflection", "static analysis" ], - "time": "2015-12-27T11:43:31+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.1.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2d3d238c433cf69caeb4842e97a3223a116f94b2", - "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -2746,7 +2816,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-30T18:51:59+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -2797,16 +2867,16 @@ }, { "name": "phpspec/prophecy", - "version": "v1.7.1", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "15ea9ac619e37009edcda64089e3fa4cc88aa659" + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/15ea9ac619e37009edcda64089e3fa4cc88aa659", - "reference": "15ea9ac619e37009edcda64089e3fa4cc88aa659", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", "shasum": "" }, "require": { @@ -2818,7 +2888,7 @@ }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { @@ -2856,20 +2926,20 @@ "spy", "stub" ], - "time": "2017-09-03T09:38:53+00:00" + "time": "2018-02-19T10:16:54+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b" + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8ed1902a57849e117b5651fc1a5c48110946c06b", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "shasum": "" }, "require": { @@ -2878,14 +2948,13 @@ "php": "^7.0", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^1.4.11 || ^2.0", + "phpunit/php-token-stream": "^2.0.1", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^3.0", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": "^2.5", "phpunit/phpunit": "^6.0" }, "suggest": { @@ -2894,7 +2963,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.2.x-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -2909,7 +2978,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2920,20 +2989,20 @@ "testing", "xunit" ], - "time": "2017-08-03T12:40:43+00:00" + "time": "2017-12-06T09:29:45+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.2", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -2967,7 +3036,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -3061,16 +3130,16 @@ }, { "name": "phpunit/php-token-stream", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9a02332089ac48e704c70f6cefed30c224e3c0b0", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { @@ -3106,20 +3175,20 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20T05:47:52+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", - "version": "6.3.0", + "version": "6.5.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9501bab711403a1ab5b8378a8adb4ec3db3debdb" + "reference": "6bd77b57707c236833d2b57b968e403df060c9d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9501bab711403a1ab5b8378a8adb4ec3db3debdb", - "reference": "9501bab711403a1ab5b8378a8adb4ec3db3debdb", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6bd77b57707c236833d2b57b968e403df060c9d9", + "reference": "6bd77b57707c236833d2b57b968e403df060c9d9", "shasum": "" }, "require": { @@ -3133,12 +3202,12 @@ "phar-io/version": "^1.0", "php": "^7.0", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.2.2", - "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^4.0.3", - "sebastian/comparator": "^2.0.2", + "phpunit/phpunit-mock-objects": "^5.0.5", + "sebastian/comparator": "^2.1", "sebastian/diff": "^2.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", @@ -3164,7 +3233,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3.x-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { @@ -3190,33 +3259,33 @@ "testing", "xunit" ], - "time": "2017-08-04T05:20:39+00:00" + "time": "2018-02-26T07:01:09+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "4.0.4", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0" + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/2f789b59ab89669015ad984afa350c4ec577ade0", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.5", "php": "^7.0", "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.0" + "sebastian/exporter": "^3.1" }, "conflict": { "phpunit/phpunit": "<6.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^6.5" }, "suggest": { "ext-soap": "*" @@ -3224,7 +3293,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { @@ -3239,7 +3308,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -3249,7 +3318,54 @@ "mock", "xunit" ], - "time": "2017-08-03T14:08:16+00:00" + "time": "2018-01-06T05:45:45+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -3298,30 +3414,30 @@ }, { "name": "sebastian/comparator", - "version": "2.0.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ae068fede81d06e7bb9bb46a367210a3d3e1fe6a" + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ae068fede81d06e7bb9bb46a367210a3d3e1fe6a", - "reference": "ae068fede81d06e7bb9bb46a367210a3d3e1fe6a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { "php": "^7.0", - "sebastian/diff": "^2.0", - "sebastian/exporter": "^3.0" + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -3352,13 +3468,13 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2017-08-03T07:14:59+00:00" + "time": "2018-02-01T13:46:46+00:00" }, { "name": "sebastian/diff", @@ -3930,16 +4046,16 @@ }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -3976,7 +4092,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" }, { "name": "zfcampus/zf-development-mode", diff --git a/config/autoload/cli.global.php b/config/autoload/cli.global.php index fd395c1..362457c 100644 --- a/config/autoload/cli.global.php +++ b/config/autoload/cli.global.php @@ -5,11 +5,13 @@ return [ 'invokables' => [], 'factories' => [ App\Command\KoinImportCommand::class => App\Command\KoinImportCommandFactory::class, + App\Command\PeriodicSZEPCommand::class => App\Command\PeriodicSZEPCommandFactory::class, ], ], 'console' => [ 'commands' => [ App\Command\KoinImportCommand::class, + App\Command\PeriodicSZEPCommand::class, ], ], ]; diff --git a/config/autoload/local.php.dist b/config/autoload/local.php.dist index 7a49ca8..c35482a 100644 --- a/config/autoload/local.php.dist +++ b/config/autoload/local.php.dist @@ -10,4 +10,7 @@ return [ 'koin.user' => '', 'koin.pass' => '', + + 'szep.card' => '', + 'szep.key' => '', ]; diff --git a/data/.gitignore b/data/.gitignore index d6b7ef3..ac9b195 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -1,2 +1,3 @@ * +!soap-xmls/* !.gitignore diff --git a/src/App/Command/PeriodicSZEPCommand.php b/src/App/Command/PeriodicSZEPCommand.php new file mode 100644 index 0000000..f977809 --- /dev/null +++ b/src/App/Command/PeriodicSZEPCommand.php @@ -0,0 +1,36 @@ +szepManager = $szepManager; + + parent::__construct(); + } + + protected function configure() + { + $this->setName('szep:cron') + ->setDescription('Parse SZEP card'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $result = $this->szepManager->pollRecent(); + $output->writeln($result); + } +} diff --git a/src/App/Command/PeriodicSZEPCommandFactory.php b/src/App/Command/PeriodicSZEPCommandFactory.php new file mode 100644 index 0000000..07406a3 --- /dev/null +++ b/src/App/Command/PeriodicSZEPCommandFactory.php @@ -0,0 +1,22 @@ +get(SZEPManagerService::class); + return new PeriodicSZEPCommand($szepManager); + } +} diff --git a/src/App/ConfigProvider.php b/src/App/ConfigProvider.php index d91fce5..5d18c6d 100644 --- a/src/App/ConfigProvider.php +++ b/src/App/ConfigProvider.php @@ -45,6 +45,7 @@ class ConfigProvider Service\SmsStoreService::class => Service\SmsStoreServiceFactory::class, Service\KoinService::class => Service\KoinServiceFactory::class, + Service\SZEPManagerService::class => Service\SZEPManagerServiceFactory::class, ], ]; } diff --git a/src/App/Entity/SZEPCardEntry.php b/src/App/Entity/SZEPCardEntry.php new file mode 100644 index 0000000..cceca31 --- /dev/null +++ b/src/App/Entity/SZEPCardEntry.php @@ -0,0 +1,159 @@ +hash; + } + + /** + * @param string $hash + * @return SZEPCardEntry + */ + public function setHash(string $hash): SZEPCardEntry + { + $this->hash = $hash; + return $this; + } + + /** + * @return int + */ + public function getAmount(): int + { + return $this->amount; + } + + /** + * @param int $amount + * @return SZEPCardEntry + */ + public function setAmount(int $amount): SZEPCardEntry + { + $this->amount = $amount; + return $this; + } + + /** + * @return string + */ + public function getMerchant(): string + { + return $this->merchant; + } + + /** + * @param string $merchant + * @return SZEPCardEntry + */ + public function setMerchant(string $merchant): SZEPCardEntry + { + $this->merchant = $merchant; + return $this; + } + + /** + * @return string + */ + public function getPocket(): string + { + return $this->pocket; + } + + /** + * @param string $pocket + * @return SZEPCardEntry + */ + public function setPocket(string $pocket): SZEPCardEntry + { + $this->pocket = $pocket; + return $this; + } + + /** + * @return \DateTimeImmutable + */ + public function getDate(): \DateTimeImmutable + { + return $this->date; + } + + /** + * @param \DateTimeImmutable $date + * @return SZEPCardEntry + */ + public function setDate(\DateTimeImmutable $date): SZEPCardEntry + { + $this->date = $date; + return $this; + } + + /** + * Specify data which should be serialized to JSON + * @link http://php.net/manual/en/jsonserializable.jsonserialize.php + * @return mixed data which can be serialized by json_encode, + * which is a value of any type other than a resource. + * @since 5.4.0 + */ + public function jsonSerialize() + { + return [ + 'hash' => $this->getHash(), + 'amount' => $this->getAmount(), + 'merchant' => $this->getMerchant(), + 'pocket' => $this->getPocket(), + 'date' => $this->getDate()->format("Y.m.d"), + ]; + } +} diff --git a/src/App/Entity/Sms.php b/src/App/Entity/Sms.php index a75c5a7..7e2a1eb 100644 --- a/src/App/Entity/Sms.php +++ b/src/App/Entity/Sms.php @@ -1,6 +1,5 @@ self::DIRECTION_SENT, + 'received' => self::DIRECTION_RECEIVED, + ]; - const MAP_DIRECTIONS = [ - 'sent' => self::DIRECTION_SENT, - 'received' => self::DIRECTION_RECEIVED, - ]; + /** + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="IDENTITY") + * @var int + */ + private $id; - /** - * @ORM\Id - * @ORM\Column(name="id", type="integer") - * @ORM\GeneratedValue(strategy="IDENTITY") - * @var int - */ - private $id; + /** + * @ORM\Column(name="contact_name", type="string", length=200, nullable=false) + * @var string + */ + private $contactName; - /** - * @ORM\Column(name="contact_name", type="string", length=200, nullable=false) - * @var string - */ - private $contactName; + /** + * @ORM\Column(name="contact_number", type="string", length=100, nullable=false) + * @var string + */ + private $contactNumber; - /** - * @ORM\Column(name="contact_number", type="string", length=100, nullable=false) - * @var string - */ - private $contactNumber; + /** + * @ORM\Column(name="text", type="text", length=4096, nullable=false) + * @var string + */ + private $text; - /** - * @ORM\Column(name="text", type="text", length=4096, nullable=false) - * @var string - */ - private $text; + /** + * @ORM\Column(name="occured_at", type="datetime", nullable=false) + * @var \DateTime + */ + private $occuredAt; - /** - * @ORM\Column(name="occured_at", type="datetime", nullable=false) - * @var \DateTime - */ - private $occuredAt; + /** + * @ORM\Column(name="direction", type="integer", length=255, nullable=false) + * @var int + */ + private $direction; - /** - * @ORM\Column(name="direction", type="integer", length=255, nullable=false) - * @var int - */ - private $direction; - - /** + /** * @ORM\JoinColumn(name="owner_id", nullable=false) * @ORM\ManyToOne(targetEntity="User", inversedBy="smsMessages") * @var User */ - private $owner; + private $owner; - /** - * @return int - */ - public function getId(): int - { - return $this->id; - } + /** + * @return int + */ + public function getId(): int + { + return $this->id; + } - /** - * @param int $id - * @return Sms - */ - public function setId(int $id): Sms - { - $this->id = $id; - return $this; - } + /** + * @param int $id + * @return Sms + */ + public function setId(int $id): Sms + { + $this->id = $id; + return $this; + } - /** - * @return string - */ - public function getContactName(): string - { - return $this->contactName; - } + /** + * @return string + */ + public function getContactName(): string + { + return $this->contactName; + } - /** - * @param string $contactName - * @return Sms - */ - public function setContactName(string $contactName): Sms - { - $this->contactName = $contactName; - return $this; - } + /** + * @param string $contactName + * @return Sms + */ + public function setContactName(string $contactName): Sms + { + $this->contactName = $contactName; + return $this; + } - /** - * @return string - */ - public function getContactNumber(): string - { - return $this->contactNumber; - } + /** + * @return string + */ + public function getContactNumber(): string + { + return $this->contactNumber; + } - /** - * @param string $contactNumber - * @return Sms - */ - public function setContactNumber(string $contactNumber): Sms - { - $this->contactNumber = $contactNumber; - return $this; - } + /** + * @param string $contactNumber + * @return Sms + */ + public function setContactNumber(string $contactNumber): Sms + { + $this->contactNumber = $contactNumber; + return $this; + } - /** - * @return string - */ - public function getText(): string - { - return $this->text; - } + /** + * @return string + */ + public function getText(): string + { + return $this->text; + } - /** - * @param string $text - * @return Sms - */ - public function setText(string $text): Sms - { - $this->text = $text; - return $this; - } + /** + * @param string $text + * @return Sms + */ + public function setText(string $text): Sms + { + $this->text = $text; + return $this; + } - /** - * @return \DateTime - */ - public function getOccuredAt(): \DateTime - { - return $this->occuredAt; - } + /** + * @return \DateTime + */ + public function getOccuredAt(): \DateTime + { + return $this->occuredAt; + } - /** - * @param \DateTime $occuredAt - * @return Sms - */ - public function setOccuredAt(\DateTime $occuredAt): Sms - { - $this->occuredAt = $occuredAt; - return $this; - } + /** + * @param \DateTime $occuredAt + * @return Sms + */ + public function setOccuredAt(\DateTime $occuredAt): Sms + { + $this->occuredAt = $occuredAt; + return $this; + } - /** - * @return int - */ - public function getDirection(): int - { - return $this->direction; - } + /** + * @return int + */ + public function getDirection(): int + { + return $this->direction; + } - /** - * @param int $direction - * @return Sms - */ - public function setDirection(int $direction): Sms - { - $this->direction = $direction; - return $this; - } + /** + * @param int $direction + * @return Sms + */ + public function setDirection(int $direction): Sms + { + $this->direction = $direction; + return $this; + } - /** - * @return User - */ - public function getOwner(): User - { - return $this->owner; - } + /** + * @return User + */ + public function getOwner(): User + { + return $this->owner; + } - /** - * @param User $owner - * @return Sms - */ - public function setOwner(User $owner): Sms - { - $this->owner = $owner; - return $this; - } + /** + * @param User $owner + * @return Sms + */ + public function setOwner(User $owner): Sms + { + $this->owner = $owner; + return $this; + } - /** - * Specify data which should be serialized to JSON - * @link http://php.net/manual/en/jsonserializable.jsonserialize.php - * @return mixed data which can be serialized by json_encode, - * which is a value of any type other than a resource. - * @since 5.4.0 - */ - public function jsonSerialize() - { - return [ - 'id' => $this->getId(), - 'contactName' => $this->getContactName(), - 'contactNumber' => $this->getContactNumber(), - 'text' => $this->getText(), - 'when' => $this->getOccuredAt(), - 'direction' => $this->getDirection(), - 'owner' => $this->getOwner(), - ]; - } + /** + * Specify data which should be serialized to JSON + * @link http://php.net/manual/en/jsonserializable.jsonserialize.php + * @return mixed data which can be serialized by json_encode, + * which is a value of any type other than a resource. + * @since 5.4.0 + */ + public function jsonSerialize() + { + return [ + 'id' => $this->getId(), + 'contactName' => $this->getContactName(), + 'contactNumber' => $this->getContactNumber(), + 'text' => $this->getText(), + 'when' => $this->getOccuredAt(), + 'direction' => $this->getDirection(), + 'owner' => $this->getOwner(), + ]; + } } diff --git a/src/App/Entity/User.php b/src/App/Entity/User.php index fcb8149..0b64999 100644 --- a/src/App/Entity/User.php +++ b/src/App/Entity/User.php @@ -17,137 +17,138 @@ use Doctrine\ORM\Mapping as ORM; */ class User implements \JsonSerializable { - /** - * @ORM\Id - * @ORM\Column(name="id", type="integer") - * @ORM\GeneratedValue(strategy="IDENTITY") - * @var int - */ - private $id; + /** + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="IDENTITY") + * @var int + */ + private $id; - /** - * @ORM\Column(name="name", type="string", length=200, nullable=false) - * @var string - */ - private $name; + /** + * @ORM\Column(name="name", type="string", length=200, nullable=false) + * @var string + */ + private $name; - /** - * @ORM\Column(name="hash_key", type="string", length=100, nullable=false) - * @var string - */ - private $hashKey; + /** + * @ORM\Column(name="hash_key", type="string", length=100, nullable=false) + * @var string + */ + private $hashKey; - /** - * @ORM\OneToMany(targetEntity="Sms", mappedBy="owner") - * @var Sms[]|ArrayCollection - */ - private $smsMessages; + /** + * @ORM\OneToMany(targetEntity="Sms", mappedBy="owner") + * @var Sms[]|ArrayCollection + */ + private $smsMessages; - public function __construct() - { - $this->smsMessages = new ArrayCollection(); - } - - /** - * @return int - */ - public function getId(): int - { - return $this->id; - } - - /** - * @param int $id - * @return User - */ - public function setId(int $id): User - { - $this->id = $id; - return $this; - } - - /** - * @return string - */ - public function getName(): string - { - return $this->name; - } - - /** - * @param string $name - * @return User - */ - public function setName(string $name): User - { - $this->name = $name; - return $this; - } - - /** - * @return string - */ - public function getHashKey(): string - { - return $this->hashKey; - } - - /** - * @param string $hashKey - * @return User - */ - public function setHashKey(string $hashKey): User - { - $this->hashKey = $hashKey; - return $this; - } - - /** - * @return Sms[]|ArrayCollection - */ - public function getSmsMessages(): ?ArrayCollection - { - return $this->smsMessages; - } - - /** - * @param Sms[]|ArrayCollection $smsMessages - * @return User - */ - public function setSmsMessages(?ArrayCollection $smsMessages): User - { - $this->smsMessages = $smsMessages; - return $this; - } - - public function addSmsMessage(Sms $sms): User - { - if(!$this->smsMessages->contains($sms)) { - $this->smsMessages->add($sms); + public function __construct() + { + $this->smsMessages = new ArrayCollection(); } - return $this; - } - public function removeSmsMessage(Sms $sms): User{ - if($this->smsMessages->contains($sms)) { - $this->smsMessages->removeElement($sms); + /** + * @return int + */ + public function getId(): int + { + return $this->id; } - return $this; - } - /** - * Specify data which should be serialized to JSON - * @link http://php.net/manual/en/jsonserializable.jsonserialize.php - * @return mixed data which can be serialized by json_encode, - * which is a value of any type other than a resource. - * @since 5.4.0 - */ - public function jsonSerialize() - { - return [ - 'id' => $this->getId(), - 'name' => $this->getName(), + /** + * @param int $id + * @return User + */ + public function setId(int $id): User + { + $this->id = $id; + return $this; + } + + /** + * @return string + */ + public function getName(): string + { + return $this->name; + } + + /** + * @param string $name + * @return User + */ + public function setName(string $name): User + { + $this->name = $name; + return $this; + } + + /** + * @return string + */ + public function getHashKey(): string + { + return $this->hashKey; + } + + /** + * @param string $hashKey + * @return User + */ + public function setHashKey(string $hashKey): User + { + $this->hashKey = $hashKey; + return $this; + } + + /** + * @return Sms[]|ArrayCollection + */ + public function getSmsMessages(): ?ArrayCollection + { + return $this->smsMessages; + } + + /** + * @param Sms[]|ArrayCollection $smsMessages + * @return User + */ + public function setSmsMessages(?ArrayCollection $smsMessages): User + { + $this->smsMessages = $smsMessages; + return $this; + } + + public function addSmsMessage(Sms $sms): User + { + if (!$this->smsMessages->contains($sms)) { + $this->smsMessages->add($sms); + } + return $this; + } + + public function removeSmsMessage(Sms $sms): User + { + if ($this->smsMessages->contains($sms)) { + $this->smsMessages->removeElement($sms); + } + return $this; + } + + /** + * Specify data which should be serialized to JSON + * @link http://php.net/manual/en/jsonserializable.jsonserialize.php + * @return mixed data which can be serialized by json_encode, + * which is a value of any type other than a resource. + * @since 5.4.0 + */ + public function jsonSerialize() + { + return [ + 'id' => $this->getId(), + 'name' => $this->getName(), // 'smsMessages' => $this->getSmsMessages()->getValues(), - ]; - } + ]; + } } diff --git a/src/App/Service/KoinService.php b/src/App/Service/KoinService.php index 47bd5ec..27a1eb3 100644 --- a/src/App/Service/KoinService.php +++ b/src/App/Service/KoinService.php @@ -15,6 +15,10 @@ class KoinService const BASE_URI = 'https://www.koin.hu'; const DEFAULT_EXPENSE = 'Egyéb kiadás'; + const CATEGORY_PAYMENT = 'Fizetés'; + const CATEGORY_FOOD = 'Étel'; + const CATEGORY_SPORT = ''; + /** * 1 - date * 2 - time @@ -92,6 +96,18 @@ class KoinService */ private function getExpenseCategory(string $posInfo): string { + if (false !== strpos($posInfo, "ERICSSON HàZ ÉTTEREM")) { + return 'Étel'; + } + + if (false !== strpos($posInfo, "ERICSSON HàZ BÜFÉ")) { + return 'Kávé'; + } + + if (false !== strpos($posInfo, "SCIENCE PARK ÉTTEREM")) { + return 'Étel'; + } + if (false !== strpos($posInfo, "STOCZEK ETTEREM")) { return 'Étel'; } @@ -104,7 +120,7 @@ class KoinService return 'Bevásárlás'; } - if (false !== strpos($posInfo, "SPAR MAGYARORSZAG")) { + if (false !== strpos($posInfo, "SPAR")) { return 'Étel'; } @@ -116,7 +132,11 @@ class KoinService return 'Étel'; } - if (false !== strpos($posInfo, "OSMANI DÖNER KEBAB")) { + if (false !== strpos($posInfo, "MCDONALDSETTE")) { + return 'Étel'; + } + + if (false !== strpos($posInfo, "DÖNER KEBAB")) { return 'Étel'; } @@ -144,6 +164,17 @@ class KoinService return 'Szórakozás'; } + if (false !== strpos($posInfo, "DECATHLON")) { + return 'Sport'; + } + + if (false !== strpos($posInfo, "MOL TÖLTÖàLL")) { + return 'Autó'; + } + + if (false !== strpos($posInfo, "AMAZON SERVICES-KINDLE")) { + return 'Szórakozás'; + } return self::DEFAULT_EXPENSE; } @@ -156,66 +187,60 @@ class KoinService { $tags = []; - if (false !== strpos($posInfo, "SCIENCE PARK ÉTTEREM")) { + if (false !== strpos($posInfo, "ERICSSON HàZ ÉTTEREM")) { + $tags[] = 'Ericsson Ház'; + $tags[] = 'Menza'; + } elseif (false !== strpos($posInfo, "ERICSSON HàZ BÜFÉ")) { + $tags[] = 'Ericsson Ház'; + $tags[] = 'Büfé'; + } elseif (false !== strpos($posInfo, "SCIENCE PARK ÉTTEREM")) { $tags[] = 'Science Park'; $tags[] = 'Menza'; - } - - if (false !== strpos($posInfo, "STOCZEK ETTEREM")) { + } elseif (false !== strpos($posInfo, "STOCZEK ETTEREM")) { $tags[] = "Stoczek"; $tags[] = "Menza"; - } - - if (false !== strpos($posInfo, "BKK AUTOMATA")) { + } elseif (false !== strpos($posInfo, "BKK AUTOMATA")) { $tags[] = "Bérlet"; $tags[] = "BKV"; - } - - if (false !== strpos($posInfo, "SPAR MAGYARORSZAG")) { + } elseif (false !== strpos($posInfo, "SPAR")) { $tags[] = 'Spar'; - } - - if (false !== strpos($posInfo, "TESCO")) { + } elseif (false !== strpos($posInfo, "TESCO")) { $tags[] = 'Tesco'; - } - - if (false !== strpos($posInfo, "SZLOVàK ABC")) { + } elseif (false !== strpos($posInfo, "SZLOVàK ABC")) { $tags[] = 'Szlovák ABC'; - } - - if (false !== strpos($posInfo, "MCDHU")) { + } elseif (false !== strpos($posInfo, "BURGER KING")) { + $tags[] = 'Burger King'; $tags[] = 'Junk food'; - } - - if (false !== strpos($posInfo, "OSMANI DÖNER KEBAB")) { + } elseif (false !== strpos($posInfo, "MCDHU")) { + $tags[] = 'McDonald\'s'; + $tags[] = 'Junk food'; + } elseif (false !== strpos($posInfo, "MCDONALDSETTE")) { + $tags[] = 'McDonald\'s'; + $tags[] = 'Junk food'; + } elseif (false !== strpos($posInfo, "DÖNER KEBAB")) { $tags[] = 'Kebab'; $tags[] = 'Junk food'; - } - - if (false !== strpos($posInfo, "Princess Bakery")) { - $tags[] = 'Pricess Bakery'; + } elseif (false !== strpos($posInfo, "Princess Bakery")) { + $tags[] = 'Princess Bakery'; $tags[] = 'Junk food'; - } - - if (false !== strpos($posInfo, "PIROG-DA")) { + } elseif (false !== strpos($posInfo, "PIROG-DA")) { $tags[] = 'Pirog-da'; $tags[] = 'Junk food'; - } - - if (false !== strpos($posInfo, "GYOGYSZER")) { + } elseif (false !== strpos($posInfo, "GYOGYSZER")) { $tags[] = 'Gyógyszer'; - } - - if (false !== strpos($posInfo, "GOOGLE *Google Music")) { + } elseif (false !== strpos($posInfo, "GOOGLE *Google Music")) { $tags[] = 'Google play'; - } - - if (false !== strpos($posInfo, "DIGI ")) { + } elseif (false !== strpos($posInfo, "DIGI ")) { $tags[] = 'Digi'; - } - - if (false !== strpos($posInfo, "Aqua Electromax")) { + } elseif (false !== strpos($posInfo, "Aqua Electromax")) { $tags[] = 'Aqua'; + } elseif (false !== strpos($posInfo, "DECATHLON")) { + $tags[] = 'Decathlon'; + } elseif (false !== strpos($posInfo, "MOL TÖLTÖàLL")) { + $tags[] = 'MOL'; + } elseif (false !== strpos($posInfo, "AMAZON SERVICES-KINDLE")) { + $tags[] = 'Kindle'; + $tags[] = 'Amazon'; } $tags[] = 'Auto'; diff --git a/src/App/Service/SZEPManagerService.php b/src/App/Service/SZEPManagerService.php new file mode 100644 index 0000000..a528bcc --- /dev/null +++ b/src/App/Service/SZEPManagerService.php @@ -0,0 +1,255 @@ +httpClient = $httpClient; + $this->config = $config; + $this->em = $em; + $this->koinService = $koinService; + } + + /** + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + * @throws \Doctrine\ORM\TransactionRequiredException + * @throws \Exception + */ + public function pollRecent() + { + $workflowResult = $this->startWorkflow(); + $pollResult = $this->pollResult($workflowResult); + $this->parseResult($pollResult); + } + + /** + * Init the soap workflow + * @return string + * @throws \Exception + */ + private function startWorkflow(): string + { + $certificate = $this->getCertificate(); + openssl_public_encrypt($this->config['szep.card'], $cryptCardId, $certificate, OPENSSL_PKCS1_PADDING); + openssl_public_encrypt($this->config['szep.key'], $cryptCardKey, $certificate, OPENSSL_PKCS1_PADDING); + + $endDate = new \DateTimeImmutable(); + $startDate = $endDate->sub(new \DateInterval('P4D')); + + $gueryTemplate = file_get_contents(self::TEMPLATE_QUERY_CARD); + $query = sprintf($gueryTemplate, + "X" . base64_encode($cryptCardId), + base64_encode($cryptCardKey), + $startDate->format("Y.m.d"), + $endDate->format("Y.m.d") + ); + + $soapXml = sprintf(file_get_contents(self::TEMPLATE_WORKFLOW_START), $query); + $soapResponseXml = $this->doSoapRequest($soapXml); + + $domDocument = new \DOMDocument(); + $domDocument->loadXML($soapResponseXml); + + $documentXpath = new \DOMXPath($domDocument); + /** @var \DOMElement $returnElement */ + $returnElement = $documentXpath->query('//return')->item(0); + return $returnElement->textContent; + } + + /** + * Poll until the result is ready + * @param string $workflowResult + * @return string + */ + private function pollResult(string $workflowResult): string + { + $soapXml = sprintf(file_get_contents(self::TEMPLATE_WORKFLOW_STATE), $workflowResult); + do { + sleep(1); + $soapResponseXml = $this->doSoapRequest($soapXml); + + $domDocument = new \DOMDocument(); + $domDocument->loadXML($soapResponseXml); + + $documentXpath = new \DOMXPath($domDocument); + /** @var \DOMElement $completedElement */ + $completedElement = $documentXpath->query('//completed')->item(0); + } while ($completedElement->textContent != "true"); + + /** @var \DOMElement $resultElement */ + $resultElement = $documentXpath->query('//result')->item(0); + return base64_decode($resultElement->textContent); + } + + /** + * Parse the decoded payload + * @param string $resultXml + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + * @throws \Doctrine\ORM\TransactionRequiredException + */ + private function parseResult(string $resultXml) + { + $domDocument = new \DOMDocument(); + $domDocument->loadXML($resultXml); + + $documentXpath = new \DOMXPath($domDocument); + /** @var \DOMElement[] $returnElements */ + $recordElements = $documentXpath->query('/answer/resultset/record'); + + $newRecords = []; + + /** @var \DOMElement $element */ + foreach ($recordElements as $element) { + $date = trim($documentXpath->query('./datum', $element)->item(0)->textContent); + $amount = trim($documentXpath->query('./osszeg', $element)->item(0)->textContent); + $merchant = trim($documentXpath->query('./ellenoldali_nev', $element)->item(0)->textContent); + $pocket = trim($documentXpath->query('./alszamla', $element)->item(0)->textContent); + + $hash = md5("$date#$amount#$merchant#$pocket"); + if (null != $this->em->find(SZEPCardEntry::class, $hash)) { + continue; + } + + $szepCardEntity = new SZEPCardEntry(); + $szepCardEntity->setHash($hash) + ->setAmount($amount) + ->setMerchant($merchant) + ->setPocket($pocket) + ->setDate(new \DateTimeImmutable(str_replace(".", "-", $date))); + $newRecords[] = $szepCardEntity; + } + + /** @var SZEPCardEntry $newRecord */ + foreach ($newRecords as $newRecord) { + $resultCode = $this->koinService->saveTransaction( + abs($newRecord->getAmount()), + 'HUF', + $newRecord->getDate()->format("Y-m-d"), + $this->getCategory($newRecord), + $this->getTags($newRecord) + ); + if ($resultCode > 199 && $resultCode < 300) { + $this->em->persist($newRecord); + } + } + $this->em->flush(); + } + + private function getCategory(SZEPCardEntry $SZEPCardEntry): string + { + return ($SZEPCardEntry->getAmount() > 0) + ? KoinService::CATEGORY_PAYMENT + : ( + $SZEPCardEntry->getPocket() == self::POCKET_FOOD + ? KoinService::CATEGORY_FOOD + : KoinService::DEFAULT_EXPENSE + ); + } + + private function getTags(SZEPCardEntry $SZEPCardEntry): array + { + $tags = []; + + if (false !== strpos($SZEPCardEntry->getMerchant(), "Sigma Technology")) { + $tags[] = 'Sigma'; + $tags[] = 'Cafeteria'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Ericsson Ház Étterem")) { + $tags[] = 'Ericsson Ház'; + $tags[] = 'Menza'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Planet Sushi Alle")) { + $tags[] = 'Planet Sushi'; + $tags[] = 'Sushi'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Stoczek utcai Étterem")) { + $tags[] = 'Stoczek'; + $tags[] = 'Street Food'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Stoczek")) { + $tags[] = 'Stoczek'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Science Park")) { + $tags[] = 'Science Park'; + $tags[] = 'Menza'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Cafe Park")) { + $tags[] = 'Cafe Park'; + $tags[] = 'Menza'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Wikinger Gyorsétterem")) { + $tags[] = 'Wikinger'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Wasabi Étterem")) { + $tags[] = 'Wasabi'; + $tags[] = 'Sushi'; + } elseif (false !== strpos($SZEPCardEntry->getMerchant(), "Szentmihályi Uszoda")) { + $tags[] = 'Tope'; + } + + switch ($SZEPCardEntry->getPocket()) { + case self::POCKET_FOOD: $tags[] = self::TAG_POCKET_FOOD; break; + case self::POCKET_SPORT: $tags[] = self::TAG_POCKET_SPORT; break; + } + + $tags[] = 'Auto'; + return $tags; + } + + /** + * @param string $soapXml + * @return string + */ + private function doSoapRequest(string $soapXml): string + { + $response = $this->httpClient->post(self::SOAP_ENDPOINT, [ + 'body' => $soapXml, + ]); + return $response->getBody()->getContents(); + } + + /** + * Returns the cached public certificate + * @return string + */ + private function getCertificate(): string + { + if (file_exists(self::CERTIFICATE_CACHED_PATH)) { + return file_get_contents(self::CERTIFICATE_CACHED_PATH); + } + + $cert = file_get_contents(self::CERTIFICATE_WEB_PATH); + file_put_contents(self::CERTIFICATE_CACHED_PATH, $cert); + return $cert; + } +} diff --git a/src/App/Service/SZEPManagerServiceFactory.php b/src/App/Service/SZEPManagerServiceFactory.php new file mode 100644 index 0000000..e779ed0 --- /dev/null +++ b/src/App/Service/SZEPManagerServiceFactory.php @@ -0,0 +1,33 @@ + true, + 'headers' => [ + 'Content-Type' => 'text/xml; charset=UTF-8', + ] + ]); + $config = $container->get('config'); + /** @var EntityManager $em */ + $em = $container->get('doctrine.entity_manager.orm_default'); + /** @var KoinService $koinService */ + $koinService = $container->get(KoinService::class); + return new SZEPManagerService($httpClient, $config, $em, $koinService); + } +}